Skip to content
Snippets Groups Projects
Commit 05838918 authored by Luke Bennett's avatar Luke Bennett
Browse files

Changed deployments to environments and pull the deployment time if available....

Changed deployments to environments and pull the deployment time if available. Also added perm check.


Former-commit-id: 0021cc2d
parent ffb88187
No related branches found
No related tags found
No related merge requests found
((global) => {
var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
 
const DEPLOYMENT_TEMPLATE = `<div class="mr-widget-heading" id="<%- environment_id %>">
const DEPLOYMENT_TEMPLATE = `<div class="mr-widget-heading" id="<%- id %>">
<div class="ci_widget ci-success">
<%= ci_success_icon %>
<span>
Deployed to
<a href="<%- environment_url %>" target="_blank" class="environment">
<%- environment_name %>
<a href="<%- url %>" target="_blank" class="environment">
<%- name %>
</a>
<span data-toggle="tooltip" data-placement="top" data-title="<%- created_at_formatted %>">
<%- created_at %>.
<span class="js-environment-timeago" data-toggle="tooltip" data-placement="top" data-title="<%- deployed_at_formatted %>">
<%- deployed_at %>
</span>
<div class="js-deployment-link">
<a href="<%- external_url %>" target="_blank">
<i class="fa fa-external-link"></i>
View on <%- external_url_formatted %>
</a>
</div>
<a class="js-environment-link" href="<%- external_url %>" target="_blank">
<i class="fa fa-external-link"></i>
View on <%- external_url_formatted %>
</a>
</span>
</div>
</div>`;
Loading
Loading
@@ -147,7 +145,7 @@
if (data.status === '') {
return;
}
if (data.deployments && data.deployments.length) _this.renderDeployments(data.deployments);
if (data.environments && data.environments.length) _this.renderEnvironments(data.environments);
if (_this.firstCICheck || data.status !== _this.opts.ci_status && (data.status != null)) {
_this.opts.ci_status = data.status;
_this.showCIStatus(data.status);
Loading
Loading
@@ -180,16 +178,21 @@
})(this));
};
 
MergeRequestWidget.prototype.renderDeployments = function(deployments) {
for (let i = 0; i < deployments.length; i++) {
const deployment = deployments[i];
if ($(`.mr-state-widget #${ deployment.environment_id }`).length) return;
MergeRequestWidget.prototype.renderEnvironments = function(environments) {
for (let i = 0; i < environments.length; i++) {
const environment = environments[i];
if ($(`.mr-state-widget #${ environment.id }`).length) return;
const $template = $(DEPLOYMENT_TEMPLATE);
if (!deployment.external_url) $('.js-deployment-link', $template).remove();
deployment.created_at = $.timeago(deployment.created_at);
deployment.ci_success_icon = this.$ciSuccessIcon;
if (!environment.external_url) $('.js-environment-link', $template).remove();
if (environment.deployed_at) {
environment.deployed_at = $.timeago(environment.deployed_at) + '.';
} else {
$('.js-environment-timeago', $template).remove();
environment.name += '.';
}
environment.ci_success_icon = this.$ciSuccessIcon;
const templateString = _.unescape($template[0].outerHTML);
const template = _.template(templateString)(deployment)
const template = _.template(templateString)(environment)
this.$widgetBody.before(template);
}
};
Loading
Loading
Loading
Loading
@@ -374,26 +374,31 @@ class Projects::MergeRequestsController < Projects::ApplicationController
end
end
 
environments = @merge_request.environments
deployments = @merge_request.deployments
 
if deployments
deployments = deployments.map do |deployment|
project = deployment.project
deployment = {
environment_name: deployment.environment.name,
environment_id: deployment.environment.id,
environment_url: namespace_project_environment_path(project.namespace, project, deployment.environment),
external_url: deployment.environment.external_url,
created_at: deployment.created_at,
created_at_formatted: deployment.created_at.to_time.in_time_zone.to_s(:medium)
if environments
environments = environments.select { |e| can?(current_user, :read_environment, e) }.map do |environment|
project = environment.project
deployment = deployments.find { |d| d.environment == environment }
environment = {
name: environment.name,
id: environment.id,
url: namespace_project_environment_path(project.namespace, project, environment),
external_url: environment.external_url,
deployed_at: deployment ? deployment.created_at : nil
}
 
if deployment[:external_url]
deployment[:external_url_formatted] = deployment[:external_url].gsub(/\A.*?:\/\//, '')
if environment[:external_url]
environment[:external_url_formatted] = environment[:external_url].gsub(/\A.*?:\/\//, '')
end
 
deployment
if environment[:deployed_at]
environment[:deployed_at_formatted] = environment[:deployed_at].to_time.in_time_zone.to_s(:medium)
end
environment
end
end
 
Loading
Loading
@@ -402,7 +407,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
sha: merge_request.diff_head_commit.short_id,
status: status,
coverage: coverage,
deployments: deployments
environments: environments
}
 
render json: response
Loading
Loading
Loading
Loading
@@ -69,20 +69,20 @@
this["class"].getCIStatus(true);
return expect(spy).not.toHaveBeenCalled();
});
it('should call renderDeployments when the deployments property is set', function() {
this.ciStatusData.deployments = [{
it('should call renderEnvironments when the environments property is set', function() {
this.ciStatusData.environments = [{
created_at: '2016-09-12T13:38:30.636Z',
environment_id: 1,
environment_name: 'env1',
external_url: 'https://test-url.com',
external_url_formatted: 'test-url.com'
}];
var spy = spyOn(this['class'], 'renderDeployments').and.stub();
var spy = spyOn(this['class'], 'renderEnvironments').and.stub();
this['class'].getCIStatus(false);
expect(spy).toHaveBeenCalledWith(this.ciStatusData.deployments);
expect(spy).toHaveBeenCalledWith(this.ciStatusData.environments);
});
it('should not call renderDeployments when the deployments property is not set', function() {
var spy = spyOn(this['class'], 'renderDeployments').and.stub();
it('should not call renderEnvironments when the environments property is not set', function() {
var spy = spyOn(this['class'], 'renderEnvironments').and.stub();
this['class'].getCIStatus(false);
expect(spy).not.toHaveBeenCalled();
});
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment