Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/jobs/components/job/environments_block.vue')
-rw-r--r--app/assets/javascripts/jobs/components/job/environments_block.vue214
1 files changed, 214 insertions, 0 deletions
diff --git a/app/assets/javascripts/jobs/components/job/environments_block.vue b/app/assets/javascripts/jobs/components/job/environments_block.vue
new file mode 100644
index 00000000000..4046e1ade82
--- /dev/null
+++ b/app/assets/javascripts/jobs/components/job/environments_block.vue
@@ -0,0 +1,214 @@
+<script>
+import { GlSprintf, GlLink } from '@gitlab/ui';
+import { isEmpty } from 'lodash';
+import CiIcon from '~/vue_shared/components/ci_icon.vue';
+import { __ } from '~/locale';
+
+export default {
+ creatingEnvironment: 'creating',
+ components: {
+ CiIcon,
+ GlSprintf,
+ GlLink,
+ },
+ props: {
+ deploymentStatus: {
+ type: Object,
+ required: true,
+ },
+ deploymentCluster: {
+ type: Object,
+ required: false,
+ default: null,
+ },
+ iconStatus: {
+ type: Object,
+ required: true,
+ },
+ },
+ computed: {
+ environment() {
+ switch (this.deploymentStatus.status) {
+ case 'last':
+ return this.lastEnvironmentMessage();
+ case 'out_of_date':
+ return this.outOfDateEnvironmentMessage();
+ case 'failed':
+ return this.failedEnvironmentMessage();
+ case this.$options.creatingEnvironment:
+ return this.creatingEnvironmentMessage();
+ default:
+ return '';
+ }
+ },
+ environmentLink() {
+ if (this.hasEnvironment) {
+ return {
+ link: this.deploymentStatus.environment.environment_path,
+ name: this.deploymentStatus.environment.name,
+ };
+ }
+ return {};
+ },
+ hasLastDeployment() {
+ return this.hasEnvironment && this.deploymentStatus.environment.last_deployment;
+ },
+ lastDeployment() {
+ return this.hasLastDeployment ? this.deploymentStatus.environment.last_deployment : {};
+ },
+ hasEnvironment() {
+ return !isEmpty(this.deploymentStatus.environment);
+ },
+ lastDeploymentPath() {
+ return !isEmpty(this.lastDeployment.deployable)
+ ? this.lastDeployment.deployable.build_path
+ : '';
+ },
+ hasCluster() {
+ return Boolean(this.deploymentCluster) && Boolean(this.deploymentCluster.name);
+ },
+ clusterNameOrLink() {
+ if (!this.hasCluster) {
+ return '';
+ }
+
+ const { name, path } = this.deploymentCluster;
+
+ return {
+ path,
+ name,
+ };
+ },
+ kubernetesNamespace() {
+ return this.hasCluster ? this.deploymentCluster.kubernetes_namespace : null;
+ },
+ deploymentLink() {
+ return {
+ path: this.lastDeploymentPath,
+ name:
+ this.deploymentStatus.status === this.$options.creatingEnvironment
+ ? __('latest deployment')
+ : __('most recent deployment'),
+ };
+ },
+ },
+ methods: {
+ failedEnvironmentMessage() {
+ return __('The deployment of this job to %{environmentLink} did not succeed.');
+ },
+ lastEnvironmentMessage() {
+ if (this.hasCluster) {
+ if (this.kubernetesNamespace) {
+ return __(
+ 'This job is deployed to %{environmentLink} using cluster %{clusterNameOrLink} and namespace %{kubernetesNamespace}.',
+ );
+ }
+ // we know the cluster but not the namespace
+ return __('This job is deployed to %{environmentLink} using cluster %{clusterNameOrLink}.');
+ }
+ // not a cluster deployment
+ return __('This job is deployed to %{environmentLink}.');
+ },
+ outOfDateEnvironmentMessage() {
+ if (this.hasLastDeployment) {
+ if (this.hasCluster) {
+ if (this.kubernetesNamespace) {
+ return __(
+ 'This job is an out-of-date deployment to %{environmentLink} using cluster %{clusterNameOrLink} and namespace %{kubernetesNamespace}. View the %{deploymentLink}.',
+ );
+ }
+ // we know the cluster but not the namespace
+ return __(
+ 'This job is an out-of-date deployment to %{environmentLink} using cluster %{clusterNameOrLink}. View the %{deploymentLink}.',
+ );
+ }
+ // not a cluster deployment
+ return __(
+ 'This job is an out-of-date deployment to %{environmentLink}. View the %{deploymentLink}.',
+ );
+ }
+ // no last deployment, i.e. this is the first deployment
+ if (this.hasCluster) {
+ if (this.kubernetesNamespace) {
+ return __(
+ 'This job is an out-of-date deployment to %{environmentLink} using cluster %{clusterNameOrLink} and namespace %{kubernetesNamespace}.',
+ );
+ }
+ // we know the cluster but not the namespace
+ return __(
+ 'This job is an out-of-date deployment to %{environmentLink} using cluster %{clusterNameOrLink}.',
+ );
+ }
+ // not a cluster deployment
+ return __('This job is an out-of-date deployment to %{environmentLink}.');
+ },
+ creatingEnvironmentMessage() {
+ if (this.hasLastDeployment) {
+ if (this.hasCluster) {
+ if (this.kubernetesNamespace) {
+ return __(
+ 'This job is creating a deployment to %{environmentLink} using cluster %{clusterNameOrLink} and namespace %{kubernetesNamespace}. This will overwrite the %{deploymentLink}.',
+ );
+ }
+ // we know the cluster but not the namespace
+ return __(
+ 'This job is creating a deployment to %{environmentLink} using cluster %{clusterNameOrLink}. This will overwrite the %{deploymentLink}.',
+ );
+ }
+ // not a cluster deployment
+ return __(
+ 'This job is creating a deployment to %{environmentLink}. This will overwrite the %{deploymentLink}.',
+ );
+ }
+ // no last deployment, i.e. this is the first deployment
+ if (this.hasCluster) {
+ if (this.kubernetesNamespace) {
+ return __(
+ 'This job is creating a deployment to %{environmentLink} using cluster %{clusterNameOrLink} and namespace %{kubernetesNamespace}.',
+ );
+ }
+ // we know the cluster but not the namespace
+ return __(
+ 'This job is creating a deployment to %{environmentLink} using cluster %{clusterNameOrLink}.',
+ );
+ }
+ // not a cluster deployment
+ return __('This job is creating a deployment to %{environmentLink}.');
+ },
+ },
+};
+</script>
+<template>
+ <div class="gl-mt-3 gl-mb-3 js-environment-container">
+ <div class="environment-information">
+ <ci-icon :status="iconStatus" />
+ <p class="inline gl-mb-0">
+ <gl-sprintf :message="environment">
+ <template #environmentLink>
+ <gl-link
+ v-if="hasEnvironment"
+ :href="environmentLink.link"
+ data-testid="job-environment-link"
+ >{{ environmentLink.name }}</gl-link
+ >
+ </template>
+ <template #clusterNameOrLink>
+ <gl-link
+ v-if="clusterNameOrLink.path"
+ :href="clusterNameOrLink.path"
+ data-testid="job-cluster-link"
+ >{{ clusterNameOrLink.name }}</gl-link
+ >
+ <template v-else>{{ clusterNameOrLink.name }}</template>
+ </template>
+ <template #kubernetesNamespace>{{ kubernetesNamespace }}</template>
+ <template #deploymentLink>
+ <gl-link :href="deploymentLink.path" data-testid="job-deployment-link">{{
+ deploymentLink.name
+ }}</gl-link>
+ </template>
+ </gl-sprintf>
+ </p>
+ </div>
+ </div>
+</template>