UNPKG

@spotinst/spinnaker-deck

Version:

Spinnaker-Deck service, forked with support to Spotinst

205 lines (202 loc) 9.1 kB
<div class="pipeline-configurer" ng-if="!viewState.loading"> <div class="pipeline-config-heading"> <div class="config-heading-row"> <h3> <a class="btn btn-configure" ui-sref="^.executions" uib-tooltip="Back to Executions"> <span class="glyphicon glyphicon glyphicon-circle-arrow-left"></span> </a> <a href class="nav-popover" ng-click="navMenuState.showMenu = !navMenuState.showMenu" ng-blur="pipelineConfigurerCtrl.hideNavigationMenu()" > {{ pipeline.name }} <span ng-if="pipeline.disabled">(disabled)</span> </a> </h3> <div class="config-heading-actions"> <div class="permalink"> <a target="_blank" analytics-on="click" analytics-category="Pipeline Config" analytics-event="Permalink clicked" ng-href="{{ pipelineConfigurerCtrl.getUrl() }}" >Permalink</a > <copy-to-clipboard text="pipelineConfigurerCtrl.getUrl()" tool-tip="'Copy permalink to clipboard'" ></copy-to-clipboard> </div> <div class="create-action"> <create-pipeline application="application"></create-pipeline> </div> <div class="pipeline-actions text-right"> <Pipeline-Config-Actions pipeline="pipeline" rename-pipeline="pipelineConfigurerCtrl.renamePipeline" delete-pipeline="pipelineConfigurerCtrl.deletePipeline" enable-pipeline="pipelineConfigurerCtrl.enablePipeline" disable-pipeline="pipelineConfigurerCtrl.disablePipeline" lock-pipeline="pipelineConfigurerCtrl.lockPipeline" unlock-pipeline="pipelineConfigurerCtrl.unlockPipeline" edit-pipeline-json="pipelineConfigurerCtrl.editPipelineJson" show-history="pipelineConfigurerCtrl.showHistory" export-pipeline-template="pipelineConfigurerCtrl.exportPipelineTemplate" ></Pipeline-Config-Actions> </div> </div> </div> <div class="band band-info" ng-if="pipeline.locked"> <span class="glyphicon glyphicon small glyphicon-lock"></span> {{ pipeline.locked.description || 'This pipeline is locked and does not allow modification' }} </div> <div class="band band-info" ng-if="isTemplatedPipeline && !pipeline.locked"> <span class="glyphicon glyphicon small glyphicon-lock"></span> Manual edits are not allowed on templated pipelines </div> <div class="band band-info" ng-if="hasDynamicSource && pipelineExecutions.length"> <span class="glyphicon glyphicon small glyphicon-wrench"></span> This template has a dynamic source. The configuration is currently rendered using <span ng-if="pipelineExecutions.length > 1" class="dropdown" uib-dropdown> &nbsp;&nbsp;<button type="button" class="btn btn-xs btn-default dropdown-toggle" uib-dropdown-toggle> <execution-build-title execution="currentExecution" default-to-timestamp="true"></execution-build-title> <span class="caret"></span> </button> <ul class="dropdown-menu" role="menu" uib-dropdown-menu> <li ng-repeat="p in pipelineExecutions" ng-class="{disabled: p.id == currentExecution.id}"> <a title="{{ p.startTime | timestamp }}" ui-sref="{ executionId: p.id }" ><execution-build-title execution="p" default-to-timestamp="true"></execution-build-title> <span class="text-muted small">({{ p.startTime | relativeTime }})</span> <span class="glyphicon small glyphicon-ok" ng-if="p.id == currentExecution.id"></span> </a> </li> </ul> </span> <span ng-if="pipelineExecutions.length === 1" ><execution-build-title execution="currentExecution" default-to-timestamp="true"></execution-build-title ></span> </div> <div class="band band-warning" ng-if="pipelineExecutions && !pipelineExecutions.length"> <span class="glyphicon glyphicon small glyphicon-alert"></span> This template has a dynamic source. The configuration cannot be rendered before the pipeline has executed at least once. </div> <div class="band band-warning" ng-if="templateError && pipelineExecutions.length && isTemplatedPipeline"> <span class="glyphicon glyphicon small glyphicon-alert"></span> Could not render the pipeline configuration because of an error: {{ templateError.data.message }} {{ templateError.data.error }} </div> <div class="config-heading-body"> <div class="pipeline-graph-container pipeline-config-graph"> <pipeline-graph view-state="viewState" pipeline="renderablePipeline" should-validate="true" on-node-click="(pipelineConfigurerCtrl.graphNodeClicked)" ></pipeline-graph> </div> <div class="row"> <div class="col-md-8"> <button class="btn btn-block btn-sm add-new" analytics-on="click" analytics-category="Pipeline Config" analytics-event="Add stage button clicked" ng-click="pipelineConfigurerCtrl.addStage()" > <span class="glyphicon glyphicon-plus-sign"></span> Add stage </button> </div> <div class="col-md-4"> <button class="btn btn-block btn-sm add-new" analytics-on="click" analytics-category="Pipeline Config" analytics-event="Copy existing stage button clicked" ng-click="pipelineConfigurerCtrl.copyExistingStage()" > <span class="glyphicon glyphicon-duplicate"></span> Copy an existing stage </button> </div> </div> </div> </div> <div class="pipeline-contents"> <pipeline-config-view application="application" is-v2-templated-pipeline="isV2TemplatedPipeline" pipeline="renderablePipeline" pipeline-config="pipeline" stage-field-updated="pipelineConfigurerCtrl.stageFieldUpdated" update-pipeline-config="pipelineConfigurerCtrl.updatePipelineConfig" view-state="viewState" ></pipeline-config-view> <div class="row main-footer fixed-footer horizontal"> <div class="fixed-footer-button"> <button data-test-id="Pipeline.revertChanges" is-visible="!pipeline.locked && viewState.isDirty && !viewState.saving" class="btn btn-default" analytics-on="click" analytics-category="Pipeline Config" analytics-event="Revert changes clicked" ng-click="pipelineConfigurerCtrl.revertPipelineChanges()" > <span class="glyphicon glyphicon-flash"></span> Revert </button> </div> <div class="text-right"> <button class="btn btn-link" ng-if="pipelineConfigurerCtrl.validations.hasWarnings" uib-popover-template="pipelineConfigurerCtrl.warningsPopover" popover-placement="left-bottom" popover-trigger="'mouseenter'" > <i class="fa fa-exclamation-triangle" style="font-size: 125%"></i> </button> <span ng-if="viewState.saveError" class="alert alert-danger"> {{ viewState.saveErrorMessage }} <a class="alert-dismiss" href analytics-on="click" analytics-category="Pipeline Config" analytics-event="Error saving changes dismissed" ng-click="viewState.saveError = false; viewState.saveErrorMessage = null" >[dismiss]</a > </span> <button class="btn btn-default" ng-if="isTemplatedPipeline" ng-click="pipelineConfigurerCtrl.configureTemplate()" > <span class="fa fa-wrench"></span> Configure Template </button> <button ng-if="!pipeline.locked && viewState.isDirty" ng-disabled="!pipelineConfigurerCtrl.isValid()" class="btn btn-primary" analytics-on="click" analytics-category="Pipeline Config" analytics-event="Save pipeline clicked" ng-click="pipelineConfigurerCtrl.savePipeline()" > <span ng-if="!viewState.saving"> <span class="far fa-check-circle"></span> Save Changes </span> <span ng-if="viewState.saving" class="pulsing"> <span class="fa fa-cog fa-spin"></span> Saving&hellip; </span> </button> <span ng-if="!pipeline.locked && !viewState.isDirty" class="btn btn-link disabled" ><span class="far fa-check-circle"></span> In sync with server</span > <span ng-if="pipeline.locked" class="btn btn-link disabled" uib-tooltip="{{ pipeline.locked.description || 'This pipeline is locked and does not allow modification' }}" > <span class="glyphicon glyphicon-lock"></span> Pipeline is locked </span> </div> </div> </div> </div>