Socket
Socket
Sign inDemoInstall

@spinnaker/docker

Package Overview
Dependencies
Maintainers
13
Versions
134
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@spinnaker/docker - npm Package Compare versions

Comparing version 0.0.25 to 0.0.26

.cache-loader/13433c880a90bf5eb435383ab254b9fb.json

2

lib/image/DockerImageAndTagSelector.d.ts

@@ -36,2 +36,3 @@ import * as React from 'react';

repositoryOptions: Array<Option<string>>;
defineManually: boolean;
tagOptions: Array<Option<string>>;

@@ -70,3 +71,4 @@ lookupType: IDockerLookupType;

private lookupTypeChanged;
private showManualInput;
render(): JSX.Element;
}

123

lib/image/DockerImageAndTagSelector.js

@@ -9,2 +9,4 @@ "use strict";

const DockerImageUtils_1 = require("./DockerImageUtils");
const imageFields = ['organization', 'repository', 'tag', 'digest'];
const defineOptions = [{ label: 'Manually', value: true }, { label: 'Select from list', value: false }];
class DockerImageAndTagSelector extends React.Component {

@@ -29,2 +31,9 @@ constructor(props) {

};
this.showManualInput = (defineManually) => {
if (!defineManually) {
const newFields = DockerImageUtils_1.DockerImageUtils.splitImageId(this.props.imageId || '');
this.props.onChange(newFields);
}
this.setState({ defineManually });
};
const accountOptions = props.account ? [{ label: props.account, value: props.account }] : [];

@@ -34,2 +43,3 @@ const organizationOptions = props.organization && props.organization.length ? [{ label: props.organization, value: props.organization }] : [];

const tagOptions = props.tag && props.tag.length ? [{ label: props.tag, value: props.tag }] : [];
const defineManually = props.imageId && props.imageId.includes('${');
this.state = {

@@ -42,2 +52,3 @@ accountOptions,

repositoryOptions,
defineManually,
tagOptions,

@@ -116,2 +127,5 @@ lookupType: props.digest ? 'digest' : 'tag',

}
if (nextProps.imageId && nextProps.imageId.includes('${')) {
this.setState({ defineManually: true });
}
}

@@ -147,3 +161,3 @@ synchronizeChanges(values, registry) {

updateThings(props) {
let { organization, registry, repository } = props;
let { imageId, organization, registry, repository } = props;
const { account, showRegistry } = props;

@@ -160,3 +174,5 @@ organization =

const { tag, tags } = this.getTags(props.tag, this.repositoryMap, repository);
this.synchronizeChanges({ organization, repository, tag, digest: this.props.digest }, registry);
if (!imageId || !imageId.includes('${')) {
this.synchronizeChanges({ organization, repository, tag, digest: this.props.digest }, registry);
}
this.setState({

@@ -229,3 +245,3 @@ accountOptions: this.newAccounts.sort().map(a => ({ label: a, value: a })),

const changes = { [name]: value };
if (['organization', 'repository', 'tag', 'digest'].some(n => n === name)) {
if (imageFields.some(n => n === name)) {
// values are parts of the image

@@ -241,31 +257,62 @@ const { organization, repository, tag, digest } = this.props;

const { account, digest, fieldClass, imageId, labelClass, organization, repository, showDigest, showRegistry, specifyTagByRegex, tag, } = this.props;
const { accountOptions, imagesLoading, imagesRefreshing, lookupType, organizationOptions, repositoryOptions, tagOptions, } = this.state;
if (imageId && imageId.includes('${')) {
return (React.createElement("div", { className: "form-group" },
React.createElement("div", { className: `sm-label-right ${labelClass}` }, "Image ID"),
React.createElement("div", { className: fieldClass },
React.createElement("input", { className: "form-control input-sm", value: imageId, onChange: e => this.valueChanged('imageId', e.target.value) }))));
const { accountOptions, imagesLoading, imagesRefreshing, lookupType, organizationOptions, repositoryOptions, defineManually, tagOptions, } = this.state;
const manualInputToggle = (React.createElement("div", { className: "sp-formItem groupHeader" },
React.createElement("div", { className: "sp-formItem__left" },
React.createElement("div", { className: "sp-formLabel" }, "Define Image ID"),
React.createElement("div", { className: "sp-formActions sp-formActions--mobile" },
React.createElement("span", { className: "action" }))),
React.createElement("div", { className: "sp-formItem__right" },
React.createElement("div", { className: "sp-form" },
React.createElement("span", { className: "field" },
React.createElement(react_select_1.default, { value: defineManually, disabled: imagesRefreshing, onChange: (o) => this.showManualInput(o.value), options: defineOptions, clearable: false }))))));
if (defineManually) {
return (React.createElement("div", { className: "sp-formGroup" },
manualInputToggle,
React.createElement("div", { className: "sp-formItem" },
React.createElement("div", { className: "sp-formItem__left" },
React.createElement("div", { className: "sp-formLabel" }, "Image ID"),
React.createElement("div", { className: "sp-formActions sp-formActions--mobile" },
React.createElement("span", { className: "action" }))),
React.createElement("div", { className: "sp-formItem__right" },
React.createElement("div", { className: "sp-form" },
React.createElement("span", { className: "field" },
React.createElement("input", { className: "form-control input-sm", value: imageId || '', onChange: e => this.valueChanged('imageId', e.target.value) })))))));
}
const Registry = showRegistry ? (React.createElement("div", { className: "form-group" },
React.createElement("div", { className: `sm-label-right ${labelClass}` }, "Registry Name"),
React.createElement("div", { className: fieldClass },
React.createElement(react_select_1.default, { value: account, disabled: imagesRefreshing, onChange: (o) => this.valueChanged('account', o ? o.value : ''), options: accountOptions, isLoading: imagesRefreshing })),
React.createElement("div", { className: "col-md-1 text-center" },
React.createElement(core_1.Tooltip, { value: imagesRefreshing ? 'Images refreshing' : 'Refresh images list' },
React.createElement("a", { className: "clickable", onClick: this.handleRefreshImages },
React.createElement("span", { className: `fa fa-sync-alt ${imagesRefreshing ? 'fa-spin' : ''}` })))))) : null;
const Organization = (React.createElement("div", { className: "form-group" },
React.createElement("div", { className: `sm-label-right ${labelClass}` }, "Organization"),
React.createElement("div", { className: fieldClass }, organization.includes('${') ? (React.createElement("input", { disabled: imagesRefreshing, className: "form-control input-sm", value: organization, onChange: e => this.valueChanged('organization', e.target.value) })) : (React.createElement(react_select_1.default, { value: organization, disabled: imagesRefreshing, onChange: (o) => this.valueChanged('organization', (o && o.value) || ''), placeholder: "No organization", options: organizationOptions, isLoading: imagesRefreshing })))));
const Image = (React.createElement("div", { className: "form-group" },
React.createElement("div", { className: `sm-label-right ${labelClass}` }, "Image"),
React.createElement("div", { className: fieldClass }, repository.includes('${') ? (React.createElement("input", { className: "form-control input-sm", disabled: imagesRefreshing, value: repository, onChange: e => this.valueChanged('repository', e.target.value) })) : (React.createElement(react_select_1.default, { value: repository, disabled: imagesRefreshing, onChange: (o) => this.valueChanged('repository', (o && o.value) || ''), options: repositoryOptions, required: true, isLoading: imagesRefreshing })))));
const Tag = lookupType === 'tag' ? (specifyTagByRegex ? (React.createElement("div", { className: "form-group" },
React.createElement("div", { className: `sm-label-right ${labelClass}` },
"Tag ",
React.createElement(core_1.HelpField, { id: "pipeline.config.docker.trigger.tag" })),
React.createElement("div", { className: fieldClass },
React.createElement("input", { type: "text", className: "form-control input-sm", value: tag || '', disabled: imagesRefreshing || !repository, onChange: e => this.valueChanged('tag', e.target.value) })))) : (React.createElement("div", { className: "form-group" },
React.createElement("div", { className: `sm-label-right ${labelClass}` }, "Tag"),
React.createElement("div", { className: fieldClass }, tag && tag.includes('${') ? (React.createElement("input", { className: "form-control input-sm", disabled: imagesRefreshing, value: tag || '', onChange: e => this.valueChanged('tag', e.target.value), required: true })) : (React.createElement(react_select_1.default, { value: tag || '', disabled: imagesRefreshing || !repository, isLoading: imagesLoading, onChange: (o) => this.valueChanged('tag', o ? o.value : undefined), options: tagOptions, placeholder: "No tag", required: true })))))) : null;
const Registry = showRegistry ? (React.createElement("div", { className: "sp-formItem" },
React.createElement("div", { className: "sp-formItem__left" },
React.createElement("div", { className: "sp-formLabel" }, "Registry Name")),
React.createElement("div", { className: "sp-formItem__right" },
React.createElement("div", { className: "sp-form" },
React.createElement("span", { className: "field" },
React.createElement(react_select_1.default, { value: account, disabled: imagesRefreshing, onChange: (o) => this.valueChanged('account', o ? o.value : ''), options: accountOptions, isLoading: imagesRefreshing })),
React.createElement("span", { className: "sp-formActions sp-formActions--web" },
React.createElement("span", { className: "action" },
React.createElement(core_1.Tooltip, { value: imagesRefreshing ? 'Images refreshing' : 'Refresh images list' },
React.createElement("i", { className: `fa icon-button-refresh-arrows ${imagesRefreshing ? 'fa-spin' : ''}`, onClick: this.handleRefreshImages })))))))) : null;
const Organization = (React.createElement("div", { className: "sp-formItem" },
React.createElement("div", { className: "sp-formItem__left" },
React.createElement("div", { className: "sp-formLabel" }, "Organization")),
React.createElement("div", { className: "sp-formItem__right" },
React.createElement("div", { className: "sp-form" },
React.createElement("span", { className: "field" }, organization.includes('${') ? (React.createElement("input", { disabled: imagesRefreshing, className: "form-control input-sm", value: organization || '', onChange: e => this.valueChanged('organization', e.target.value) })) : (React.createElement(react_select_1.default, { value: organization || '', disabled: imagesRefreshing, onChange: (o) => this.valueChanged('organization', (o && o.value) || ''), placeholder: "No organization", options: organizationOptions, isLoading: imagesRefreshing })))))));
const Image = (React.createElement("div", { className: "sp-formItem" },
React.createElement("div", { className: "sp-formItem__left" },
React.createElement("div", { className: "sp-formLabel" }, "Image")),
React.createElement("div", { className: "sp-formItem__right" },
React.createElement("div", { className: "sp-form" },
React.createElement("span", { className: "field" }, repository.includes('${') ? (React.createElement("input", { className: "form-control input-sm", disabled: imagesRefreshing, value: repository || '', onChange: e => this.valueChanged('repository', e.target.value) })) : (React.createElement(react_select_1.default, { value: repository || '', disabled: imagesRefreshing, onChange: (o) => this.valueChanged('repository', (o && o.value) || ''), options: repositoryOptions, required: true, isLoading: imagesRefreshing })))))));
const Tag = lookupType === 'tag' ? (specifyTagByRegex ? (React.createElement("div", { className: "sp-formItem" },
React.createElement("div", { className: "sp-formItem__left" },
React.createElement("div", { className: "sp-formLabel" },
"Tag ",
React.createElement(core_1.HelpField, { id: "pipeline.config.docker.trigger.tag" }))),
React.createElement("div", { className: "sp-formItem__right" },
React.createElement("div", { className: "sp-form" },
React.createElement("span", { className: "field" },
React.createElement("input", { type: "text", className: "form-control input-sm", value: tag || '', disabled: imagesRefreshing || !repository, onChange: e => this.valueChanged('tag', e.target.value) })))))) : (React.createElement("div", { className: "sp-formItem" },
React.createElement("div", { className: "sp-formItem__left" },
React.createElement("div", { className: "sp-formLabel" }, "Tag")),
React.createElement("div", { className: "sp-formItem__right" },
React.createElement("div", { className: "sp-form" },
React.createElement("span", { className: "field" }, tag && tag.includes('${') ? (React.createElement("input", { className: "form-control input-sm", disabled: imagesRefreshing, value: tag || '', onChange: e => this.valueChanged('tag', e.target.value), required: true })) : (React.createElement(react_select_1.default, { value: tag || '', disabled: imagesRefreshing || !repository, isLoading: imagesLoading, onChange: (o) => this.valueChanged('tag', o ? o.value : undefined), options: tagOptions, placeholder: "No tag", required: true })))))))) : null;
const Digest = lookupType === 'digest' ? (React.createElement("div", { className: "form-group" },

@@ -277,7 +324,11 @@ React.createElement("div", { className: `sm-label-right ${labelClass}` },

React.createElement("input", { className: "form-control input-sm", placeholder: "sha256:abc123", value: digest || '', onChange: e => this.valueChanged('digest', e.target.value), required: true })))) : null;
const LookupTypeSelector = showDigest ? (React.createElement("div", { className: "form-group" },
React.createElement("div", { className: `sm-label-right ${labelClass}` }, "Type"),
React.createElement("div", { className: "col-md-3" },
React.createElement(react_select_1.default, { clearable: false, value: lookupType, options: [{ value: 'digest', label: 'Digest' }, { value: 'tag', label: 'Tag' }], onChange: this.lookupTypeChanged })))) : null;
return (React.createElement(React.Fragment, null,
const LookupTypeSelector = showDigest ? (React.createElement("div", { className: "sp-formItem" },
React.createElement("div", { className: "sp-formItem__left" },
React.createElement("div", { className: "sp-formLabel" }, "Type")),
React.createElement("div", { className: "sp-formItem__right" },
React.createElement("div", { className: "sp-form" },
React.createElement("span", { className: "field" },
React.createElement(react_select_1.default, { clearable: false, value: lookupType, options: [{ value: 'digest', label: 'Digest' }, { value: 'tag', label: 'Tag' }], onChange: this.lookupTypeChanged })))))) : null;
return (React.createElement("div", { className: "sp-formGroup" },
manualInputToggle,
Registry,

@@ -284,0 +335,0 @@ Organization,

@@ -1,2 +0,2 @@

!function(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory(require("@spinnaker/core")):"function"==typeof define&&define.amd?define("@spinnaker/docker",["@spinnaker/core"],factory):"object"==typeof exports?exports["@spinnaker/docker"]=factory(require("@spinnaker/core")):root["@spinnaker/docker"]=factory(root["@spinnaker/core"])}(window,function(__WEBPACK_EXTERNAL_MODULE__0__){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{configurable:!1,enumerable:!0,get:getter})},__webpack_require__.r=function(exports){Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=21)}([function(module,exports){module.exports=__WEBPACK_EXTERNAL_MODULE__0__},function(module,exports){module.exports=require("angular")},function(module,exports){module.exports=require("react")},function(module,exports){var path="docker/src/pipeline/stages/bake/bakeStage.html";window.angular.module("ng").run(["$templateCache",function(c){c.put(path,'<div ng-controller="dockerBakeStageCtrl as bakeStageCtrl">\n <stage-config-field label="Package" help-key="pipeline.config.bake.package">\n <input type="text" class="form-control input-sm"\n ng-model="stage.package"/>\n </stage-config-field>\n <stage-config-field label="Organization" help-key="pipeline.config.docker.bake.organization">\n <input type="text" class="form-control input-sm"\n ng-model="stage.organization"/>\n </stage-config-field>\n <stage-config-field label="Image Name" help-key="pipeline.config.docker.bake.targetImage">\n <input type="text" class="form-control input-sm"\n ng-model="stage.ami_name"/>\n </stage-config-field>\n <stage-config-field label="Image tag" help-key="pipeline.config.docker.bake.targetImageTag">\n <input type="text" class="form-control input-sm"\n ng-model="stage.extendedAttributes[\'docker_target_image_tag\']"/>\n </stage-config-field>\n <stage-config-field label="Base OS">\n <bake-stage-choose-os model="stage.baseOs" base-os-options="baseOsOptions"></bake-stage-choose-os>\n </stage-config-field>\n\n <stage-config-field label="Base Label">\n <label class="radio-inline" ng-repeat="baseLabel in baseLabelOptions">\n <input type="radio"\n ng-model="stage.baseLabel"\n ng-value="baseLabel"/>\n {{baseLabel}}\n </label>\n </stage-config-field>\n <stage-config-field label="Rebake">\n <div class="checkbox" style="margin-bottom: 0">\n <label>\n <input type="checkbox"\n ng-model="stage.rebake">\n </input>\n Rebake image without regard to the status of any existing bake\n </label>\n </div>\n </stage-config-field>\n</div>\n')}]),module.exports=path},function(module,exports){var path="docker/src/pipeline/stages/bake/bakeExecutionDetails.html";window.angular.module("ng").run(["$templateCache",function(c){c.put(path,'<div ng-controller="dockerBakeExecutionDetailsCtrl">\n <execution-details-section-nav sections="configSections"></execution-details-section-nav>\n <div class="step-section-details" ng-if="detailsSection === \'bakeConfig\'">\n <div class="row">\n <div class="col-md-6">\n <dl class="dl-narrow dl-horizontal">\n <dt if-multiple-providers>Provider</dt>\n <dd if-multiple-providers>Docker</dd>\n <dt>Organization</dt>\n <dd>{{stage.context.organization}}</dd>\n <dt>Image Name</dt>\n <dd>{{stage.context.ami_name}}</dd>\n <dt>Image Tag</dt>\n <dd>{{stage.context.extendedAttributes[\'docker_target_image_tag\']}}</dd>\n <dt>Image</dt>\n <dd>{{stage.context.ami}}</dd>\n </dl>\n </div>\n <div class="col-md-6">\n <dl class="dl-narrow dl-horizontal">\n <dt>Base OS</dt>\n <dd>{{stage.context.baseOs}}</dd>\n <dt>Region</dt>\n <dd>{{stage.context.region}}</dd>\n <dt>Package</dt>\n <dd>{{stage.context.package}}</dd>\n <dt>Label</dt>\n <dd>{{stage.context.baseLabel}}</dd>\n </dl>\n </div>\n </div>\n <stage-failure-message stage="stage" message="stage.failureMessage"></stage-failure-message>\n\n <div class="row" ng-if="stage.context.region && stage.context.status.resourceId">\n <div class="col-md-12">\n <div class="alert alert-{{stage.isFailed ? \'danger\' : \'info\'}}">\n <a target="_blank" href="{{ bakeryDetailUrl(stage) }}">\n View Bakery Details\n </a>\n </div>\n </div>\n </div>\n\n </div>\n <div class="step-section-details" ng-if="detailsSection === \'taskStatus\'">\n <div class="row">\n <execution-step-details item="stage"></execution-step-details>\n </div>\n </div>\n</div>\n')}]),module.exports=path},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.DockerImageUtils=class{static splitImageId(imageId){const parts=imageId.split("/"),organization=parts.length>1?parts.shift():"",rest=parts.shift().split(":"),repository=organization.length>0?`${organization}/${rest.shift()}`:rest.shift(),lookup=rest.shift();let tag,digest;return lookup&&(lookup.startsWith("sha256:")?digest=lookup:tag=lookup),{organization:organization,repository:repository,digest:digest,tag:tag}}static generateImageId(parts){if(parts.repository&&(parts.digest||parts.tag))return`${parts.repository}:${parts.digest?parts.digest:parts.tag}`}}},function(module,exports){module.exports=require("lodash")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const React=__webpack_require__(2),react_select_1=__webpack_require__(20),lodash_1=__webpack_require__(6),core_1=__webpack_require__(0),DockerImageReader_1=__webpack_require__(8),DockerImageUtils_1=__webpack_require__(5);class DockerImageAndTagSelector extends React.Component{constructor(props){super(props),this.cachedValues={},this.handleRefreshImages=(()=>{this.refreshImages(this.props)}),this.lookupTypeChanged=(o=>{const newType=o.value,oldType=this.state.lookupType,oldValue=this.props[oldType],cachedValue=this.cachedValues[newType];this.valueChanged(oldType,void 0),this.cachedValues[newType]&&this.valueChanged(newType,cachedValue),this.setState({lookupType:newType}),this.cachedValues[oldType]=oldValue});const accountOptions=props.account?[{label:props.account,value:props.account}]:[],organizationOptions=props.organization&&props.organization.length?[{label:props.organization,value:props.organization}]:[],repositoryOptions=props.repository&&props.repository.length?[{label:props.repository,value:props.repository}]:[],tagOptions=props.tag&&props.tag.length?[{label:props.tag,value:props.tag}]:[];this.state={accountOptions:accountOptions,imagesLoaded:!1,imagesLoading:!1,imagesRefreshing:!1,organizationOptions:organizationOptions,repositoryOptions:repositoryOptions,tagOptions:tagOptions,lookupType:props.digest?"digest":"tag"}}getAccountMap(images){const groupedImages=lodash_1.groupBy(images.filter(image=>image.account),"account");return lodash_1.reduce(groupedImages,(acc,image,key)=>(acc[key]=lodash_1.uniq(image.map(i=>`${i.repository.split("/").slice(0,-1).join("/")}`)),acc),{})}getRegistryMap(images){return images.reduce((m,image)=>(m[image.account]=image.registry,m),{})}getOrganizationMap(images){const groupedImages=lodash_1.groupBy(images.filter(image=>image.repository),image=>`${image.account}/${image.repository.split("/").slice(0,-1).join("/")}`);return lodash_1.reduce(groupedImages,(acc,image,key)=>(acc[key]=lodash_1.uniq(image.map(i=>i.repository)),acc),{})}getRepositoryMap(images){const groupedImages=lodash_1.groupBy(images.filter(image=>image.account),"repository");return lodash_1.reduce(groupedImages,(acc,image,key)=>(acc[key]=lodash_1.uniq(image.map(i=>i.tag)),acc),{})}getOrganizationsList(accountMap){return accountMap&&accountMap[this.props.showRegistry?this.props.account:this.props.registry]||[]}getRepositoryList(organizationMap,organization,registry){if(organizationMap){return organizationMap[`${this.props.showRegistry?this.props.account:registry}/${organization||""}`]||[]}return[]}getTags(tag,repositoryMap,repository){let tags=[];return this.props.specifyTagByRegex?tag&&""===lodash_1.trim(tag)&&(tag=void 0):repositoryMap&&((tags=repositoryMap[repository]||[]).includes(tag)||!tag||tag.includes("${")||(tag=void 0)),{tag:tag,tags:tags}}componentWillReceiveProps(nextProps){!this.images||["account","showRegistry"].some(key=>this.props[key]!==nextProps[key])?this.refreshImages(nextProps):["organization","registry","repository"].some(key=>this.props[key]!==nextProps[key])&&this.updateThings(nextProps)}synchronizeChanges(values,registry){const{organization:organization,repository:repository,tag:tag,digest:digest}=values;if(this.props.onChange){const imageId=DockerImageUtils_1.DockerImageUtils.generateImageId({organization:organization,repository:repository,tag:tag,digest:digest}),changes={};tag!==this.props.tag&&(changes.tag=tag),imageId!==this.props.imageId&&(changes.imageId=imageId),organization!==this.props.organization&&(changes.organization=organization),registry!==this.props.registry&&(changes.registry=registry),repository!==this.props.repository&&(changes.repository=repository),digest!==this.props.digest&&(changes.digest=digest),Object.keys(changes).length>0&&this.props.onChange(changes)}}updateThings(props){let{organization:organization,registry:registry,repository:repository}=props;const{account:account,showRegistry:showRegistry}=props;organization=this.organizations.includes(organization)||!organization||organization.includes("${")?organization:"",showRegistry&&(registry=this.registryMap[account]);const repositories=this.getRepositoryList(this.organizationMap,organization,registry);repositories.includes(repository)||!repository||repository.includes("${")||(repository="");const{tag:tag,tags:tags}=this.getTags(props.tag,this.repositoryMap,repository);this.synchronizeChanges({organization:organization,repository:repository,tag:tag,digest:this.props.digest},registry),this.setState({accountOptions:this.newAccounts.sort().map(a=>({label:a,value:a})),organizationOptions:this.organizations.filter(o=>o).sort().map(o=>({label:o,value:o})),imagesLoaded:!0,repositoryOptions:repositories.sort().map(r=>({label:r,value:r})),tagOptions:tags.sort().map(t=>({label:t,value:t}))})}initializeImages(props,refresh){if(this.state.imagesLoading)return;const{showRegistry:showRegistry,account:account,registry:registry}=props,imageConfig={provider:"dockerRegistry",account:showRegistry?account:registry};this.setState({imagesLoading:!0,imagesRefreshing:!!refresh}),DockerImageReader_1.DockerImageReader.findImages(imageConfig).then(images=>{this.images=images,this.registryMap=this.getRegistryMap(this.images),this.accountMap=this.getAccountMap(this.images),this.newAccounts=this.accounts||Object.keys(this.accountMap),this.organizationMap=this.getOrganizationMap(this.images),this.repositoryMap=this.getRepositoryMap(this.images),this.organizations=this.getOrganizationsList(this.accountMap),this.updateThings(props)}).finally(()=>{this.setState({imagesLoading:!1,imagesRefreshing:!1})})}refreshImages(props){this.initializeImages(props,!0)}initializeAccounts(props){let{account:account}=props;core_1.AccountService.listAccounts("dockerRegistry").then(allAccounts=>{const accounts=allAccounts.map(a=>a.name);this.props.showRegistry&&!account&&(account=accounts[0]),this.accounts=accounts,this.refreshImages(Object.assign({},props,{account:account}))})}isNew(){const{account:account,organization:organization,registry:registry,repository:repository,tag:tag}=this.props;return!(account||organization||registry||repository||tag)}componentDidMount(){this.props.deferInitialization||!this.props.registry&&!this.isNew()||this.initializeAccounts(this.props)}valueChanged(name,value){const changes={[name]:value};if(["organization","repository","tag","digest"].some(n=>n===name)){const{organization:organization,repository:repository,tag:tag,digest:digest}=this.props,imageParts=Object.assign({organization:organization,repository:repository,tag:tag,digest:digest},changes),imageId=DockerImageUtils_1.DockerImageUtils.generateImageId(imageParts);changes.imageId=imageId}this.props.onChange&&this.props.onChange(changes)}render(){const{account:account,digest:digest,fieldClass:fieldClass,imageId:imageId,labelClass:labelClass,organization:organization,repository:repository,showDigest:showDigest,showRegistry:showRegistry,specifyTagByRegex:specifyTagByRegex,tag:tag}=this.props,{accountOptions:accountOptions,imagesLoading:imagesLoading,imagesRefreshing:imagesRefreshing,lookupType:lookupType,organizationOptions:organizationOptions,repositoryOptions:repositoryOptions,tagOptions:tagOptions}=this.state;if(imageId&&imageId.includes("${"))return React.createElement("div",{className:"form-group"},React.createElement("div",{className:`sm-label-right ${labelClass}`},"Image ID"),React.createElement("div",{className:fieldClass},React.createElement("input",{className:"form-control input-sm",value:imageId,onChange:e=>this.valueChanged("imageId",e.target.value)})));const Registry=showRegistry?React.createElement("div",{className:"form-group"},React.createElement("div",{className:`sm-label-right ${labelClass}`},"Registry Name"),React.createElement("div",{className:fieldClass},React.createElement(react_select_1.default,{value:account,disabled:imagesRefreshing,onChange:o=>this.valueChanged("account",o?o.value:""),options:accountOptions,isLoading:imagesRefreshing})),React.createElement("div",{className:"col-md-1 text-center"},React.createElement(core_1.Tooltip,{value:imagesRefreshing?"Images refreshing":"Refresh images list"},React.createElement("a",{className:"clickable",onClick:this.handleRefreshImages},React.createElement("span",{className:`fa fa-sync-alt ${imagesRefreshing?"fa-spin":""}`}))))):null,Organization=React.createElement("div",{className:"form-group"},React.createElement("div",{className:`sm-label-right ${labelClass}`},"Organization"),React.createElement("div",{className:fieldClass},organization.includes("${")?React.createElement("input",{disabled:imagesRefreshing,className:"form-control input-sm",value:organization,onChange:e=>this.valueChanged("organization",e.target.value)}):React.createElement(react_select_1.default,{value:organization,disabled:imagesRefreshing,onChange:o=>this.valueChanged("organization",o&&o.value||""),placeholder:"No organization",options:organizationOptions,isLoading:imagesRefreshing}))),Image=React.createElement("div",{className:"form-group"},React.createElement("div",{className:`sm-label-right ${labelClass}`},"Image"),React.createElement("div",{className:fieldClass},repository.includes("${")?React.createElement("input",{className:"form-control input-sm",disabled:imagesRefreshing,value:repository,onChange:e=>this.valueChanged("repository",e.target.value)}):React.createElement(react_select_1.default,{value:repository,disabled:imagesRefreshing,onChange:o=>this.valueChanged("repository",o&&o.value||""),options:repositoryOptions,required:!0,isLoading:imagesRefreshing}))),Tag="tag"===lookupType?specifyTagByRegex?React.createElement("div",{className:"form-group"},React.createElement("div",{className:`sm-label-right ${labelClass}`},"Tag ",React.createElement(core_1.HelpField,{id:"pipeline.config.docker.trigger.tag"})),React.createElement("div",{className:fieldClass},React.createElement("input",{type:"text",className:"form-control input-sm",value:tag||"",disabled:imagesRefreshing||!repository,onChange:e=>this.valueChanged("tag",e.target.value)}))):React.createElement("div",{className:"form-group"},React.createElement("div",{className:`sm-label-right ${labelClass}`},"Tag"),React.createElement("div",{className:fieldClass},tag&&tag.includes("${")?React.createElement("input",{className:"form-control input-sm",disabled:imagesRefreshing,value:tag||"",onChange:e=>this.valueChanged("tag",e.target.value),required:!0}):React.createElement(react_select_1.default,{value:tag||"",disabled:imagesRefreshing||!repository,isLoading:imagesLoading,onChange:o=>this.valueChanged("tag",o?o.value:void 0),options:tagOptions,placeholder:"No tag",required:!0}))):null,Digest="digest"===lookupType?React.createElement("div",{className:"form-group"},React.createElement("div",{className:`sm-label-right ${labelClass}`},"Digest ",React.createElement(core_1.HelpField,{id:"pipeline.config.docker.trigger.digest"})),React.createElement("div",{className:fieldClass},React.createElement("input",{className:"form-control input-sm",placeholder:"sha256:abc123",value:digest||"",onChange:e=>this.valueChanged("digest",e.target.value),required:!0}))):null,LookupTypeSelector=showDigest?React.createElement("div",{className:"form-group"},React.createElement("div",{className:`sm-label-right ${labelClass}`},"Type"),React.createElement("div",{className:"col-md-3"},React.createElement(react_select_1.default,{clearable:!1,value:lookupType,options:[{value:"digest",label:"Digest"},{value:"tag",label:"Tag"}],onChange:this.lookupTypeChanged}))):null;return React.createElement(React.Fragment,null,Registry,Organization,Image,LookupTypeSelector,Digest,Tag)}}DockerImageAndTagSelector.defaultProps={fieldClass:"col-md-8",labelClass:"col-md-3",organization:"",registry:"",repository:"",showDigest:!0},exports.DockerImageAndTagSelector=DockerImageAndTagSelector},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const core_1=__webpack_require__(0);exports.DockerImageReader=class{static getImage(imageName,region,credentials){return core_1.API.all("images").one(credentials).one(region).one(imageName).withParams({provider:"docker"}).get().then(results=>results&&results.length?results[0]:null).catch(()=>null)}static findImages(params){return core_1.RetryService.buildRetrySequence(()=>core_1.API.all("images/find").getList(params),results=>results.length>0,10,1e3).then(results=>results).catch(()=>[])}static findTags(params){return core_1.RetryService.buildRetrySequence(()=>core_1.API.all("images/tags").getList(params),results=>results.length>0,10,1e3).then(results=>results).catch(()=>[])}}},function(module,exports,__webpack_require__){"use strict";function __export(m){for(var p in m)exports.hasOwnProperty(p)||(exports[p]=m[p])}Object.defineProperty(exports,"__esModule",{value:!0}),__export(__webpack_require__(8)),__export(__webpack_require__(7)),__export(__webpack_require__(5))},function(module,exports){module.exports=require("@uirouter/angularjs")},function(module,exports,__webpack_require__){"use strict";var _core=__webpack_require__(0);const angular=__webpack_require__(1);module.exports=angular.module("spinnaker.docker.pipeline.stage.bake.executionDetails.controller",[__webpack_require__(10).default]).controller("dockerBakeExecutionDetailsCtrl",["$scope","$stateParams","executionDetailsSectionService","$interpolate",function($scope,$stateParams,executionDetailsSectionService,$interpolate){$scope.configSections=["bakeConfig","taskStatus"];let initialized=()=>{$scope.detailsSection=$stateParams.details,$scope.provider=$scope.stage.context.cloudProviderType||"docker",$scope.bakeryDetailUrl=$interpolate(_core.SETTINGS.bakeryDetailUrl)},initialize=()=>executionDetailsSectionService.synchronizeSection($scope.configSections,initialized);initialize(),$scope.$on("$stateChangeSuccess",initialize)}])},function(module,exports,__webpack_require__){"use strict";var obj,_lodash=__webpack_require__(6),_lodash2=(obj=_lodash)&&obj.__esModule?obj:{default:obj},_core=__webpack_require__(0);const angular=__webpack_require__(1);module.exports=angular.module("spinnaker.docker.pipeline.stage.bakeStage",[__webpack_require__(11).name]).config(function(){_core.Registry.pipeline.registerStage({provides:"bake",cloudProvider:"docker",label:"Bake",description:"Bakes an image",templateUrl:__webpack_require__(3),executionDetailsUrl:__webpack_require__(4),executionLabelComponent:_core.BakeExecutionLabel,extraLabelLines:stage=>stage.masterStage.context.allPreviouslyBaked||stage.masterStage.context.somePreviouslyBaked?1:0,defaultTimeoutMs:36e5,validators:[{type:"requiredField",fieldName:"package"}],restartable:!0})}).controller("dockerBakeStageCtrl",["$scope","$q",function($scope,$q){$scope.stage.region="global",$scope.stage.user||($scope.stage.user=_core.AuthenticationService.getAuthenticatedUser().name),$scope.viewState={loading:!0},$scope.$watch("stage",function(){_lodash2.default.forOwn($scope.stage,function(val,key){""===val&&delete $scope.stage[key]})},!0),$scope.viewState.providerSelected=!0,$q.all({baseOsOptions:_core.BakeryReader.getBaseOsOptions("docker"),baseLabelOptions:_core.BakeryReader.getBaseLabelOptions()}).then(function(results){$scope.baseOsOptions=results.baseOsOptions.baseImages,$scope.baseLabelOptions=results.baseLabelOptions,!$scope.stage.baseOs&&$scope.baseOsOptions&&$scope.baseOsOptions.length&&($scope.stage.baseOs=$scope.baseOsOptions[0].id),!$scope.stage.baseLabel&&$scope.baseLabelOptions&&$scope.baseLabelOptions.length&&($scope.stage.baseLabel=$scope.baseLabelOptions[0]),$scope.viewState.loading=!1})}])},function(module,exports,__webpack_require__){var map={"./pipeline/stages/bake/bakeExecutionDetails.html":4,"./pipeline/stages/bake/bakeStage.html":3};function webpackContext(req){var id=webpackContextResolve(req);return __webpack_require__(id)}function webpackContextResolve(req){var id=map[req];if(!(id+1)){var e=new Error('Cannot find module "'+req+'".');throw e.code="MODULE_NOT_FOUND",e}return id}webpackContext.keys=function(){return Object.keys(map)},webpackContext.resolve=webpackContextResolve,module.exports=webpackContext,webpackContext.id=13},function(module,exports,__webpack_require__){"use strict";var __rest=this&&this.__rest||function(s,e){var t={};for(var p in s)Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0&&(t[p]=s[p]);if(null!=s&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(p=Object.getOwnPropertySymbols(s);i<p.length;i++)e.indexOf(p[i])<0&&(t[p[i]]=s[p[i]])}return t};Object.defineProperty(exports,"__esModule",{value:!0});const React=__webpack_require__(2),core_1=__webpack_require__(0),DockerImageAndTagSelector_1=__webpack_require__(7);exports.DockerTriggerConfig=class extends React.Component{constructor(){super(...arguments),this.state={fiatEnabled:core_1.SETTINGS.feature.fiatEnabled,serviceAccounts:[]},this.dockerChanged=(changes=>{const{imageId:imageId}=changes,rest=__rest(changes,["imageId"]);Object.assign(this.props.trigger,rest),this.props.fieldUpdated(),this.setState({})}),this.runAsUserChanged=(user=>{this.props.trigger.runAsUser=""!==user?user:null,this.props.fieldUpdated(),this.setState({})})}componentDidMount(){core_1.ServiceAccountReader.getServiceAccounts().then(serviceAccounts=>{this.setState({serviceAccounts:serviceAccounts})})}render(){const{trigger:trigger}=this.props,{fiatEnabled:fiatEnabled,serviceAccounts:serviceAccounts}=this.state;return React.createElement("div",{className:"form-horizontal"},React.createElement(DockerImageAndTagSelector_1.DockerImageAndTagSelector,{specifyTagByRegex:!0,account:trigger.account,organization:trigger.organization,registry:trigger.registry,repository:trigger.repository,tag:trigger.tag,showRegistry:!0,onChange:this.dockerChanged,showDigest:!1}),fiatEnabled&&React.createElement("div",{className:"form-group"},React.createElement(core_1.RunAsUser,{serviceAccounts:serviceAccounts,value:trigger.runAsUser,onChange:this.runAsUserChanged,selectClasses:"",selectColumns:8})))}}},function(module,exports){module.exports=require("rxjs")},function(module,exports){module.exports=require("ngimport")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const React=__webpack_require__(2),ngimport_1=__webpack_require__(16),rxjs_1=__webpack_require__(15),core_1=__webpack_require__(0),image_1=__webpack_require__(9),lookupTypeOptions=[{value:"digest",label:"Digest"},{value:"tag",label:"Tag"}];exports.DockerTriggerTemplate=class extends React.Component{constructor(props){super(props),this.queryStream=new rxjs_1.Subject,this.handleQuery=(()=>{const trigger=this.props.command.trigger;return rxjs_1.Observable.fromPromise(image_1.DockerImageReader.findTags({provider:"dockerRegistry",account:trigger.account,repository:trigger.repository}))}),this.lookupTypeChanged=(o=>{const newType=o.value;this.props.command.extraFields.tag="tag"===newType?this.state.selectedTag:this.state.digest,this.setState({lookupType:newType})}),this.updateSelectedTag=(tag=>{this.updateArtifact(this.props.command,tag),this.setState({selectedTag:tag})}),this.updateDigest=(digest=>{this.updateArtifact(this.props.command,digest),this.setState({digest:digest})}),this.tagLoadSuccess=(tags=>{const{command:command}=this.props,trigger=command.trigger,newState={};if(newState.tags=tags,newState.tags.length){const defaultSelection=newState.tags.find(t=>t===trigger.tag)||newState.tags[0];newState.selectedTag=defaultSelection,this.updateSelectedTag(defaultSelection)}newState.tagsLoading=!1,this.setState(newState)}),this.tagLoadFailure=(()=>{this.setState({tagsLoading:!1,loadError:!0})}),this.initialize=(()=>{const{command:command}=this.props;this.subscription=this.queryStream.debounceTime(250).switchMap(this.handleQuery).subscribe(this.tagLoadSuccess,this.tagLoadFailure),command.extraFields={},"docker"===command.trigger.type?this.searchTags():this.subscription.unsubscribe()}),this.searchTags=((query="")=>{this.setState({tags:[`<span>Finding tags${query&&` matching ${query}`}...</span>`]}),this.queryStream.next()}),this.state={digest:"",tags:[],tagsLoading:!0,loadError:!1,lookupType:"tag",selectedTag:""}}static formatLabel(trigger){return ngimport_1.$q.when(`(Docker Registry) ${trigger.account?trigger.account+":":""} ${trigger.repository||""}`)}updateArtifact(command,tag){command.extraFields.tag=tag;const trigger=command.trigger;if(trigger&&trigger.repository){let imageName="";trigger.registry&&(imageName+=trigger.registry+"/"),imageName+=trigger.repository,command.extraFields.artifacts=[{type:"docker/image",name:imageName,version:tag,reference:imageName+":"+tag}]}}componentWillReceiveProps(nextProps){nextProps.command!==this.props.command&&this.initialize()}componentDidMount(){this.initialize()}render(){const{digest:digest,tags:tags,tagsLoading:tagsLoading,loadError:loadError,selectedTag:selectedTag,lookupType:lookupType}=this.state,options=tags.map(tag=>({value:tag}));return React.createElement(React.Fragment,null,React.createElement("div",{className:"form-group"},React.createElement("div",{className:"sm-label-right col-md-4"},"Type"),React.createElement("div",{className:"col-md-3"},React.createElement(core_1.TetheredSelect,{clearable:!1,value:lookupType,options:lookupTypeOptions,onChange:this.lookupTypeChanged}))),"tag"===lookupType&&React.createElement("div",{className:"form-group"},React.createElement("label",{className:"col-md-4 sm-label-right"},"Tag"),tagsLoading&&React.createElement("div",{className:"col-md-6"},React.createElement("div",{className:"form-control-static text-center"},React.createElement(core_1.Spinner,{size:"small"}))),React.createElement("input",{type:"hidden",required:tagsLoading,value:selectedTag}),loadError&&React.createElement("div",{className:"col-md-6"},"Error loading tags!"),!tagsLoading&&React.createElement("div",{className:"col-md-6"},0===tags.length&&React.createElement("div",null,React.createElement("p",{className:"form-control-static"},"No tags found")),tags.length>0&&React.createElement(core_1.TetheredSelect,{options:options,optionRenderer:o=>React.createElement("span",null,o.value),clearable:!1,value:selectedTag,valueRenderer:o=>React.createElement("span",null,React.createElement("strong",null,o.value)),onChange:o=>this.updateSelectedTag(o.value)}))),"digest"===lookupType&&React.createElement("div",{className:"form-group"},React.createElement("label",{className:"col-md-4 sm-label-right"},"Digest ",React.createElement(core_1.HelpField,{id:"pipeline.config.docker.trigger.digest"})),React.createElement("div",{className:"col-md-6"},React.createElement("input",{value:digest,onChange:e=>this.updateDigest(e.target.value),className:"form-control input-sm",required:!0}))))}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const core_1=__webpack_require__(0),DockerTriggerTemplate_1=__webpack_require__(17),DockerTriggerConfig_1=__webpack_require__(14);core_1.Registry.pipeline.registerTrigger({label:"Docker Registry",description:"Executes the pipeline on an image update",key:"docker",component:DockerTriggerConfig_1.DockerTriggerConfig,manualExecutionComponent:DockerTriggerTemplate_1.DockerTriggerTemplate,validators:[{type:"requiredField",fieldName:"account",message:"<strong>Registry</strong> is a required field for Docker Registry triggers."},{type:"requiredField",fieldName:"repository",message:"<strong>Image</strong> is a required field for Docker Registry triggers."},{type:"serviceAccountAccess",preventSave:!0,message:"You do not have access to the service account configured in this pipeline's Docker Registry trigger.\n You will not be able to save your edits to this pipeline."}]})},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const angular_1=__webpack_require__(1);__webpack_require__(18);const templates=__webpack_require__(13);templates.keys().forEach(function(key){templates(key)}),exports.DOCKER_MODULE="spinnaker.docker",angular_1.module(exports.DOCKER_MODULE,[__webpack_require__(12).name])},function(module,exports){module.exports=require("react-select")},function(module,exports,__webpack_require__){"use strict";function __export(m){for(var p in m)exports.hasOwnProperty(p)||(exports[p]=m[p])}Object.defineProperty(exports,"__esModule",{value:!0}),__export(__webpack_require__(9)),__export(__webpack_require__(19))}])});
!function(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory(require("@spinnaker/core")):"function"==typeof define&&define.amd?define("@spinnaker/docker",["@spinnaker/core"],factory):"object"==typeof exports?exports["@spinnaker/docker"]=factory(require("@spinnaker/core")):root["@spinnaker/docker"]=factory(root["@spinnaker/core"])}(window,function(__WEBPACK_EXTERNAL_MODULE__0__){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{configurable:!1,enumerable:!0,get:getter})},__webpack_require__.r=function(exports){Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=21)}([function(module,exports){module.exports=__WEBPACK_EXTERNAL_MODULE__0__},function(module,exports){module.exports=require("angular")},function(module,exports){module.exports=require("react")},function(module,exports){var path="docker/src/pipeline/stages/bake/bakeStage.html";window.angular.module("ng").run(["$templateCache",function(c){c.put(path,'<div ng-controller="dockerBakeStageCtrl as bakeStageCtrl">\n <stage-config-field label="Package" help-key="pipeline.config.bake.package">\n <input type="text" class="form-control input-sm"\n ng-model="stage.package"/>\n </stage-config-field>\n <stage-config-field label="Organization" help-key="pipeline.config.docker.bake.organization">\n <input type="text" class="form-control input-sm"\n ng-model="stage.organization"/>\n </stage-config-field>\n <stage-config-field label="Image Name" help-key="pipeline.config.docker.bake.targetImage">\n <input type="text" class="form-control input-sm"\n ng-model="stage.ami_name"/>\n </stage-config-field>\n <stage-config-field label="Image tag" help-key="pipeline.config.docker.bake.targetImageTag">\n <input type="text" class="form-control input-sm"\n ng-model="stage.extendedAttributes[\'docker_target_image_tag\']"/>\n </stage-config-field>\n <stage-config-field label="Base OS">\n <bake-stage-choose-os model="stage.baseOs" base-os-options="baseOsOptions"></bake-stage-choose-os>\n </stage-config-field>\n\n <stage-config-field label="Base Label">\n <label class="radio-inline" ng-repeat="baseLabel in baseLabelOptions">\n <input type="radio"\n ng-model="stage.baseLabel"\n ng-value="baseLabel"/>\n {{baseLabel}}\n </label>\n </stage-config-field>\n <stage-config-field label="Rebake">\n <div class="checkbox" style="margin-bottom: 0">\n <label>\n <input type="checkbox"\n ng-model="stage.rebake">\n </input>\n Rebake image without regard to the status of any existing bake\n </label>\n </div>\n </stage-config-field>\n</div>\n')}]),module.exports=path},function(module,exports){var path="docker/src/pipeline/stages/bake/bakeExecutionDetails.html";window.angular.module("ng").run(["$templateCache",function(c){c.put(path,'<div ng-controller="dockerBakeExecutionDetailsCtrl">\n <execution-details-section-nav sections="configSections"></execution-details-section-nav>\n <div class="step-section-details" ng-if="detailsSection === \'bakeConfig\'">\n <div class="row">\n <div class="col-md-6">\n <dl class="dl-narrow dl-horizontal">\n <dt if-multiple-providers>Provider</dt>\n <dd if-multiple-providers>Docker</dd>\n <dt>Organization</dt>\n <dd>{{stage.context.organization}}</dd>\n <dt>Image Name</dt>\n <dd>{{stage.context.ami_name}}</dd>\n <dt>Image Tag</dt>\n <dd>{{stage.context.extendedAttributes[\'docker_target_image_tag\']}}</dd>\n <dt>Image</dt>\n <dd>{{stage.context.ami}}</dd>\n </dl>\n </div>\n <div class="col-md-6">\n <dl class="dl-narrow dl-horizontal">\n <dt>Base OS</dt>\n <dd>{{stage.context.baseOs}}</dd>\n <dt>Region</dt>\n <dd>{{stage.context.region}}</dd>\n <dt>Package</dt>\n <dd>{{stage.context.package}}</dd>\n <dt>Label</dt>\n <dd>{{stage.context.baseLabel}}</dd>\n </dl>\n </div>\n </div>\n <stage-failure-message stage="stage" message="stage.failureMessage"></stage-failure-message>\n\n <div class="row" ng-if="stage.context.region && stage.context.status.resourceId">\n <div class="col-md-12">\n <div class="alert alert-{{stage.isFailed ? \'danger\' : \'info\'}}">\n <a target="_blank" href="{{ bakeryDetailUrl(stage) }}">\n View Bakery Details\n </a>\n </div>\n </div>\n </div>\n\n </div>\n <div class="step-section-details" ng-if="detailsSection === \'taskStatus\'">\n <div class="row">\n <execution-step-details item="stage"></execution-step-details>\n </div>\n </div>\n</div>\n')}]),module.exports=path},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.DockerImageUtils=class{static splitImageId(imageId){const parts=imageId.split("/"),organization=parts.length>1?parts.shift():"",rest=parts.shift().split(":"),repository=organization.length>0?`${organization}/${rest.shift()}`:rest.shift(),lookup=rest.shift();let tag,digest;return lookup&&(lookup.startsWith("sha256:")?digest=lookup:tag=lookup),{organization:organization,repository:repository,digest:digest,tag:tag}}static generateImageId(parts){if(parts.repository&&(parts.digest||parts.tag))return`${parts.repository}:${parts.digest?parts.digest:parts.tag}`}}},function(module,exports){module.exports=require("lodash")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const React=__webpack_require__(2),react_select_1=__webpack_require__(20),lodash_1=__webpack_require__(6),core_1=__webpack_require__(0),DockerImageReader_1=__webpack_require__(8),DockerImageUtils_1=__webpack_require__(5),imageFields=["organization","repository","tag","digest"],defineOptions=[{label:"Manually",value:!0},{label:"Select from list",value:!1}];class DockerImageAndTagSelector extends React.Component{constructor(props){super(props),this.cachedValues={},this.handleRefreshImages=(()=>{this.refreshImages(this.props)}),this.lookupTypeChanged=(o=>{const newType=o.value,oldType=this.state.lookupType,oldValue=this.props[oldType],cachedValue=this.cachedValues[newType];this.valueChanged(oldType,void 0),this.cachedValues[newType]&&this.valueChanged(newType,cachedValue),this.setState({lookupType:newType}),this.cachedValues[oldType]=oldValue}),this.showManualInput=(defineManually=>{if(!defineManually){const newFields=DockerImageUtils_1.DockerImageUtils.splitImageId(this.props.imageId||"");this.props.onChange(newFields)}this.setState({defineManually:defineManually})});const accountOptions=props.account?[{label:props.account,value:props.account}]:[],organizationOptions=props.organization&&props.organization.length?[{label:props.organization,value:props.organization}]:[],repositoryOptions=props.repository&&props.repository.length?[{label:props.repository,value:props.repository}]:[],tagOptions=props.tag&&props.tag.length?[{label:props.tag,value:props.tag}]:[],defineManually=props.imageId&&props.imageId.includes("${");this.state={accountOptions:accountOptions,imagesLoaded:!1,imagesLoading:!1,imagesRefreshing:!1,organizationOptions:organizationOptions,repositoryOptions:repositoryOptions,defineManually:defineManually,tagOptions:tagOptions,lookupType:props.digest?"digest":"tag"}}getAccountMap(images){const groupedImages=lodash_1.groupBy(images.filter(image=>image.account),"account");return lodash_1.reduce(groupedImages,(acc,image,key)=>(acc[key]=lodash_1.uniq(image.map(i=>`${i.repository.split("/").slice(0,-1).join("/")}`)),acc),{})}getRegistryMap(images){return images.reduce((m,image)=>(m[image.account]=image.registry,m),{})}getOrganizationMap(images){const groupedImages=lodash_1.groupBy(images.filter(image=>image.repository),image=>`${image.account}/${image.repository.split("/").slice(0,-1).join("/")}`);return lodash_1.reduce(groupedImages,(acc,image,key)=>(acc[key]=lodash_1.uniq(image.map(i=>i.repository)),acc),{})}getRepositoryMap(images){const groupedImages=lodash_1.groupBy(images.filter(image=>image.account),"repository");return lodash_1.reduce(groupedImages,(acc,image,key)=>(acc[key]=lodash_1.uniq(image.map(i=>i.tag)),acc),{})}getOrganizationsList(accountMap){return accountMap&&accountMap[this.props.showRegistry?this.props.account:this.props.registry]||[]}getRepositoryList(organizationMap,organization,registry){if(organizationMap){return organizationMap[`${this.props.showRegistry?this.props.account:registry}/${organization||""}`]||[]}return[]}getTags(tag,repositoryMap,repository){let tags=[];return this.props.specifyTagByRegex?tag&&""===lodash_1.trim(tag)&&(tag=void 0):repositoryMap&&((tags=repositoryMap[repository]||[]).includes(tag)||!tag||tag.includes("${")||(tag=void 0)),{tag:tag,tags:tags}}componentWillReceiveProps(nextProps){!this.images||["account","showRegistry"].some(key=>this.props[key]!==nextProps[key])?this.refreshImages(nextProps):["organization","registry","repository"].some(key=>this.props[key]!==nextProps[key])&&this.updateThings(nextProps),nextProps.imageId&&nextProps.imageId.includes("${")&&this.setState({defineManually:!0})}synchronizeChanges(values,registry){const{organization:organization,repository:repository,tag:tag,digest:digest}=values;if(this.props.onChange){const imageId=DockerImageUtils_1.DockerImageUtils.generateImageId({organization:organization,repository:repository,tag:tag,digest:digest}),changes={};tag!==this.props.tag&&(changes.tag=tag),imageId!==this.props.imageId&&(changes.imageId=imageId),organization!==this.props.organization&&(changes.organization=organization),registry!==this.props.registry&&(changes.registry=registry),repository!==this.props.repository&&(changes.repository=repository),digest!==this.props.digest&&(changes.digest=digest),Object.keys(changes).length>0&&this.props.onChange(changes)}}updateThings(props){let{imageId:imageId,organization:organization,registry:registry,repository:repository}=props;const{account:account,showRegistry:showRegistry}=props;organization=this.organizations.includes(organization)||!organization||organization.includes("${")?organization:"",showRegistry&&(registry=this.registryMap[account]);const repositories=this.getRepositoryList(this.organizationMap,organization,registry);repositories.includes(repository)||!repository||repository.includes("${")||(repository="");const{tag:tag,tags:tags}=this.getTags(props.tag,this.repositoryMap,repository);imageId&&imageId.includes("${")||this.synchronizeChanges({organization:organization,repository:repository,tag:tag,digest:this.props.digest},registry),this.setState({accountOptions:this.newAccounts.sort().map(a=>({label:a,value:a})),organizationOptions:this.organizations.filter(o=>o).sort().map(o=>({label:o,value:o})),imagesLoaded:!0,repositoryOptions:repositories.sort().map(r=>({label:r,value:r})),tagOptions:tags.sort().map(t=>({label:t,value:t}))})}initializeImages(props,refresh){if(this.state.imagesLoading)return;const{showRegistry:showRegistry,account:account,registry:registry}=props,imageConfig={provider:"dockerRegistry",account:showRegistry?account:registry};this.setState({imagesLoading:!0,imagesRefreshing:!!refresh}),DockerImageReader_1.DockerImageReader.findImages(imageConfig).then(images=>{this.images=images,this.registryMap=this.getRegistryMap(this.images),this.accountMap=this.getAccountMap(this.images),this.newAccounts=this.accounts||Object.keys(this.accountMap),this.organizationMap=this.getOrganizationMap(this.images),this.repositoryMap=this.getRepositoryMap(this.images),this.organizations=this.getOrganizationsList(this.accountMap),this.updateThings(props)}).finally(()=>{this.setState({imagesLoading:!1,imagesRefreshing:!1})})}refreshImages(props){this.initializeImages(props,!0)}initializeAccounts(props){let{account:account}=props;core_1.AccountService.listAccounts("dockerRegistry").then(allAccounts=>{const accounts=allAccounts.map(a=>a.name);this.props.showRegistry&&!account&&(account=accounts[0]),this.accounts=accounts,this.refreshImages(Object.assign({},props,{account:account}))})}isNew(){const{account:account,organization:organization,registry:registry,repository:repository,tag:tag}=this.props;return!(account||organization||registry||repository||tag)}componentDidMount(){this.props.deferInitialization||!this.props.registry&&!this.isNew()||this.initializeAccounts(this.props)}valueChanged(name,value){const changes={[name]:value};if(imageFields.some(n=>n===name)){const{organization:organization,repository:repository,tag:tag,digest:digest}=this.props,imageParts=Object.assign({organization:organization,repository:repository,tag:tag,digest:digest},changes),imageId=DockerImageUtils_1.DockerImageUtils.generateImageId(imageParts);changes.imageId=imageId}this.props.onChange&&this.props.onChange(changes)}render(){const{account:account,digest:digest,fieldClass:fieldClass,imageId:imageId,labelClass:labelClass,organization:organization,repository:repository,showDigest:showDigest,showRegistry:showRegistry,specifyTagByRegex:specifyTagByRegex,tag:tag}=this.props,{accountOptions:accountOptions,imagesLoading:imagesLoading,imagesRefreshing:imagesRefreshing,lookupType:lookupType,organizationOptions:organizationOptions,repositoryOptions:repositoryOptions,defineManually:defineManually,tagOptions:tagOptions}=this.state,manualInputToggle=React.createElement("div",{className:"sp-formItem groupHeader"},React.createElement("div",{className:"sp-formItem__left"},React.createElement("div",{className:"sp-formLabel"},"Define Image ID"),React.createElement("div",{className:"sp-formActions sp-formActions--mobile"},React.createElement("span",{className:"action"}))),React.createElement("div",{className:"sp-formItem__right"},React.createElement("div",{className:"sp-form"},React.createElement("span",{className:"field"},React.createElement(react_select_1.default,{value:defineManually,disabled:imagesRefreshing,onChange:o=>this.showManualInput(o.value),options:defineOptions,clearable:!1})))));if(defineManually)return React.createElement("div",{className:"sp-formGroup"},manualInputToggle,React.createElement("div",{className:"sp-formItem"},React.createElement("div",{className:"sp-formItem__left"},React.createElement("div",{className:"sp-formLabel"},"Image ID"),React.createElement("div",{className:"sp-formActions sp-formActions--mobile"},React.createElement("span",{className:"action"}))),React.createElement("div",{className:"sp-formItem__right"},React.createElement("div",{className:"sp-form"},React.createElement("span",{className:"field"},React.createElement("input",{className:"form-control input-sm",value:imageId||"",onChange:e=>this.valueChanged("imageId",e.target.value)}))))));const Registry=showRegistry?React.createElement("div",{className:"sp-formItem"},React.createElement("div",{className:"sp-formItem__left"},React.createElement("div",{className:"sp-formLabel"},"Registry Name")),React.createElement("div",{className:"sp-formItem__right"},React.createElement("div",{className:"sp-form"},React.createElement("span",{className:"field"},React.createElement(react_select_1.default,{value:account,disabled:imagesRefreshing,onChange:o=>this.valueChanged("account",o?o.value:""),options:accountOptions,isLoading:imagesRefreshing})),React.createElement("span",{className:"sp-formActions sp-formActions--web"},React.createElement("span",{className:"action"},React.createElement(core_1.Tooltip,{value:imagesRefreshing?"Images refreshing":"Refresh images list"},React.createElement("i",{className:`fa icon-button-refresh-arrows ${imagesRefreshing?"fa-spin":""}`,onClick:this.handleRefreshImages}))))))):null,Organization=React.createElement("div",{className:"sp-formItem"},React.createElement("div",{className:"sp-formItem__left"},React.createElement("div",{className:"sp-formLabel"},"Organization")),React.createElement("div",{className:"sp-formItem__right"},React.createElement("div",{className:"sp-form"},React.createElement("span",{className:"field"},organization.includes("${")?React.createElement("input",{disabled:imagesRefreshing,className:"form-control input-sm",value:organization||"",onChange:e=>this.valueChanged("organization",e.target.value)}):React.createElement(react_select_1.default,{value:organization||"",disabled:imagesRefreshing,onChange:o=>this.valueChanged("organization",o&&o.value||""),placeholder:"No organization",options:organizationOptions,isLoading:imagesRefreshing}))))),Image=React.createElement("div",{className:"sp-formItem"},React.createElement("div",{className:"sp-formItem__left"},React.createElement("div",{className:"sp-formLabel"},"Image")),React.createElement("div",{className:"sp-formItem__right"},React.createElement("div",{className:"sp-form"},React.createElement("span",{className:"field"},repository.includes("${")?React.createElement("input",{className:"form-control input-sm",disabled:imagesRefreshing,value:repository||"",onChange:e=>this.valueChanged("repository",e.target.value)}):React.createElement(react_select_1.default,{value:repository||"",disabled:imagesRefreshing,onChange:o=>this.valueChanged("repository",o&&o.value||""),options:repositoryOptions,required:!0,isLoading:imagesRefreshing}))))),Tag="tag"===lookupType?specifyTagByRegex?React.createElement("div",{className:"sp-formItem"},React.createElement("div",{className:"sp-formItem__left"},React.createElement("div",{className:"sp-formLabel"},"Tag ",React.createElement(core_1.HelpField,{id:"pipeline.config.docker.trigger.tag"}))),React.createElement("div",{className:"sp-formItem__right"},React.createElement("div",{className:"sp-form"},React.createElement("span",{className:"field"},React.createElement("input",{type:"text",className:"form-control input-sm",value:tag||"",disabled:imagesRefreshing||!repository,onChange:e=>this.valueChanged("tag",e.target.value)}))))):React.createElement("div",{className:"sp-formItem"},React.createElement("div",{className:"sp-formItem__left"},React.createElement("div",{className:"sp-formLabel"},"Tag")),React.createElement("div",{className:"sp-formItem__right"},React.createElement("div",{className:"sp-form"},React.createElement("span",{className:"field"},tag&&tag.includes("${")?React.createElement("input",{className:"form-control input-sm",disabled:imagesRefreshing,value:tag||"",onChange:e=>this.valueChanged("tag",e.target.value),required:!0}):React.createElement(react_select_1.default,{value:tag||"",disabled:imagesRefreshing||!repository,isLoading:imagesLoading,onChange:o=>this.valueChanged("tag",o?o.value:void 0),options:tagOptions,placeholder:"No tag",required:!0}))))):null,Digest="digest"===lookupType?React.createElement("div",{className:"form-group"},React.createElement("div",{className:`sm-label-right ${labelClass}`},"Digest ",React.createElement(core_1.HelpField,{id:"pipeline.config.docker.trigger.digest"})),React.createElement("div",{className:fieldClass},React.createElement("input",{className:"form-control input-sm",placeholder:"sha256:abc123",value:digest||"",onChange:e=>this.valueChanged("digest",e.target.value),required:!0}))):null,LookupTypeSelector=showDigest?React.createElement("div",{className:"sp-formItem"},React.createElement("div",{className:"sp-formItem__left"},React.createElement("div",{className:"sp-formLabel"},"Type")),React.createElement("div",{className:"sp-formItem__right"},React.createElement("div",{className:"sp-form"},React.createElement("span",{className:"field"},React.createElement(react_select_1.default,{clearable:!1,value:lookupType,options:[{value:"digest",label:"Digest"},{value:"tag",label:"Tag"}],onChange:this.lookupTypeChanged}))))):null;return React.createElement("div",{className:"sp-formGroup"},manualInputToggle,Registry,Organization,Image,LookupTypeSelector,Digest,Tag)}}DockerImageAndTagSelector.defaultProps={fieldClass:"col-md-8",labelClass:"col-md-3",organization:"",registry:"",repository:"",showDigest:!0},exports.DockerImageAndTagSelector=DockerImageAndTagSelector},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const core_1=__webpack_require__(0);exports.DockerImageReader=class{static getImage(imageName,region,credentials){return core_1.API.all("images").one(credentials).one(region).one(imageName).withParams({provider:"docker"}).get().then(results=>results&&results.length?results[0]:null).catch(()=>null)}static findImages(params){return core_1.RetryService.buildRetrySequence(()=>core_1.API.all("images/find").getList(params),results=>results.length>0,10,1e3).then(results=>results).catch(()=>[])}static findTags(params){return core_1.RetryService.buildRetrySequence(()=>core_1.API.all("images/tags").getList(params),results=>results.length>0,10,1e3).then(results=>results).catch(()=>[])}}},function(module,exports,__webpack_require__){"use strict";function __export(m){for(var p in m)exports.hasOwnProperty(p)||(exports[p]=m[p])}Object.defineProperty(exports,"__esModule",{value:!0}),__export(__webpack_require__(8)),__export(__webpack_require__(7)),__export(__webpack_require__(5))},function(module,exports){module.exports=require("@uirouter/angularjs")},function(module,exports,__webpack_require__){"use strict";var _core=__webpack_require__(0);const angular=__webpack_require__(1);module.exports=angular.module("spinnaker.docker.pipeline.stage.bake.executionDetails.controller",[__webpack_require__(10).default]).controller("dockerBakeExecutionDetailsCtrl",["$scope","$stateParams","executionDetailsSectionService","$interpolate",function($scope,$stateParams,executionDetailsSectionService,$interpolate){$scope.configSections=["bakeConfig","taskStatus"];let initialized=()=>{$scope.detailsSection=$stateParams.details,$scope.provider=$scope.stage.context.cloudProviderType||"docker",$scope.bakeryDetailUrl=$interpolate(_core.SETTINGS.bakeryDetailUrl)},initialize=()=>executionDetailsSectionService.synchronizeSection($scope.configSections,initialized);initialize(),$scope.$on("$stateChangeSuccess",initialize)}])},function(module,exports,__webpack_require__){"use strict";var obj,_lodash=__webpack_require__(6),_lodash2=(obj=_lodash)&&obj.__esModule?obj:{default:obj},_core=__webpack_require__(0);const angular=__webpack_require__(1);module.exports=angular.module("spinnaker.docker.pipeline.stage.bakeStage",[__webpack_require__(11).name]).config(function(){_core.Registry.pipeline.registerStage({provides:"bake",cloudProvider:"docker",label:"Bake",description:"Bakes an image",templateUrl:__webpack_require__(3),executionDetailsUrl:__webpack_require__(4),executionLabelComponent:_core.BakeExecutionLabel,extraLabelLines:stage=>stage.masterStage.context.allPreviouslyBaked||stage.masterStage.context.somePreviouslyBaked?1:0,defaultTimeoutMs:36e5,validators:[{type:"requiredField",fieldName:"package"}],restartable:!0})}).controller("dockerBakeStageCtrl",["$scope","$q",function($scope,$q){$scope.stage.region="global",$scope.stage.user||($scope.stage.user=_core.AuthenticationService.getAuthenticatedUser().name),$scope.viewState={loading:!0},$scope.$watch("stage",function(){_lodash2.default.forOwn($scope.stage,function(val,key){""===val&&delete $scope.stage[key]})},!0),$scope.viewState.providerSelected=!0,$q.all({baseOsOptions:_core.BakeryReader.getBaseOsOptions("docker"),baseLabelOptions:_core.BakeryReader.getBaseLabelOptions()}).then(function(results){$scope.baseOsOptions=results.baseOsOptions.baseImages,$scope.baseLabelOptions=results.baseLabelOptions,!$scope.stage.baseOs&&$scope.baseOsOptions&&$scope.baseOsOptions.length&&($scope.stage.baseOs=$scope.baseOsOptions[0].id),!$scope.stage.baseLabel&&$scope.baseLabelOptions&&$scope.baseLabelOptions.length&&($scope.stage.baseLabel=$scope.baseLabelOptions[0]),$scope.viewState.loading=!1})}])},function(module,exports,__webpack_require__){var map={"./pipeline/stages/bake/bakeExecutionDetails.html":4,"./pipeline/stages/bake/bakeStage.html":3};function webpackContext(req){var id=webpackContextResolve(req);return __webpack_require__(id)}function webpackContextResolve(req){var id=map[req];if(!(id+1)){var e=new Error('Cannot find module "'+req+'".');throw e.code="MODULE_NOT_FOUND",e}return id}webpackContext.keys=function(){return Object.keys(map)},webpackContext.resolve=webpackContextResolve,module.exports=webpackContext,webpackContext.id=13},function(module,exports,__webpack_require__){"use strict";var __rest=this&&this.__rest||function(s,e){var t={};for(var p in s)Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0&&(t[p]=s[p]);if(null!=s&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(p=Object.getOwnPropertySymbols(s);i<p.length;i++)e.indexOf(p[i])<0&&(t[p[i]]=s[p[i]])}return t};Object.defineProperty(exports,"__esModule",{value:!0});const React=__webpack_require__(2),core_1=__webpack_require__(0),DockerImageAndTagSelector_1=__webpack_require__(7);exports.DockerTriggerConfig=class extends React.Component{constructor(){super(...arguments),this.state={fiatEnabled:core_1.SETTINGS.feature.fiatEnabled,serviceAccounts:[]},this.dockerChanged=(changes=>{const{imageId:imageId}=changes,rest=__rest(changes,["imageId"]);Object.assign(this.props.trigger,rest),this.props.fieldUpdated(),this.setState({})}),this.runAsUserChanged=(user=>{this.props.trigger.runAsUser=""!==user?user:null,this.props.fieldUpdated(),this.setState({})})}componentDidMount(){core_1.ServiceAccountReader.getServiceAccounts().then(serviceAccounts=>{this.setState({serviceAccounts:serviceAccounts})})}render(){const{trigger:trigger}=this.props,{fiatEnabled:fiatEnabled,serviceAccounts:serviceAccounts}=this.state;return React.createElement("div",{className:"form-horizontal"},React.createElement(DockerImageAndTagSelector_1.DockerImageAndTagSelector,{specifyTagByRegex:!0,account:trigger.account,organization:trigger.organization,registry:trigger.registry,repository:trigger.repository,tag:trigger.tag,showRegistry:!0,onChange:this.dockerChanged,showDigest:!1}),fiatEnabled&&React.createElement("div",{className:"form-group"},React.createElement(core_1.RunAsUser,{serviceAccounts:serviceAccounts,value:trigger.runAsUser,onChange:this.runAsUserChanged,selectClasses:"",selectColumns:8})))}}},function(module,exports){module.exports=require("rxjs")},function(module,exports){module.exports=require("ngimport")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const React=__webpack_require__(2),ngimport_1=__webpack_require__(16),rxjs_1=__webpack_require__(15),core_1=__webpack_require__(0),image_1=__webpack_require__(9),lookupTypeOptions=[{value:"digest",label:"Digest"},{value:"tag",label:"Tag"}];exports.DockerTriggerTemplate=class extends React.Component{constructor(props){super(props),this.queryStream=new rxjs_1.Subject,this.handleQuery=(()=>{const trigger=this.props.command.trigger;return rxjs_1.Observable.fromPromise(image_1.DockerImageReader.findTags({provider:"dockerRegistry",account:trigger.account,repository:trigger.repository}))}),this.lookupTypeChanged=(o=>{const newType=o.value;this.props.command.extraFields.tag="tag"===newType?this.state.selectedTag:this.state.digest,this.setState({lookupType:newType})}),this.updateSelectedTag=(tag=>{this.updateArtifact(this.props.command,tag),this.setState({selectedTag:tag})}),this.updateDigest=(digest=>{this.updateArtifact(this.props.command,digest),this.setState({digest:digest})}),this.tagLoadSuccess=(tags=>{const{command:command}=this.props,trigger=command.trigger,newState={};if(newState.tags=tags,newState.tags.length){const defaultSelection=newState.tags.find(t=>t===trigger.tag)||newState.tags[0];newState.selectedTag=defaultSelection,this.updateSelectedTag(defaultSelection)}newState.tagsLoading=!1,this.setState(newState)}),this.tagLoadFailure=(()=>{this.setState({tagsLoading:!1,loadError:!0})}),this.initialize=(()=>{const{command:command}=this.props;this.subscription=this.queryStream.debounceTime(250).switchMap(this.handleQuery).subscribe(this.tagLoadSuccess,this.tagLoadFailure),command.extraFields={},"docker"===command.trigger.type?this.searchTags():this.subscription.unsubscribe()}),this.searchTags=((query="")=>{this.setState({tags:[`<span>Finding tags${query&&` matching ${query}`}...</span>`]}),this.queryStream.next()}),this.state={digest:"",tags:[],tagsLoading:!0,loadError:!1,lookupType:"tag",selectedTag:""}}static formatLabel(trigger){return ngimport_1.$q.when(`(Docker Registry) ${trigger.account?trigger.account+":":""} ${trigger.repository||""}`)}updateArtifact(command,tag){command.extraFields.tag=tag;const trigger=command.trigger;if(trigger&&trigger.repository){let imageName="";trigger.registry&&(imageName+=trigger.registry+"/"),imageName+=trigger.repository,command.extraFields.artifacts=[{type:"docker/image",name:imageName,version:tag,reference:imageName+":"+tag}]}}componentWillReceiveProps(nextProps){nextProps.command!==this.props.command&&this.initialize()}componentDidMount(){this.initialize()}render(){const{digest:digest,tags:tags,tagsLoading:tagsLoading,loadError:loadError,selectedTag:selectedTag,lookupType:lookupType}=this.state,options=tags.map(tag=>({value:tag}));return React.createElement(React.Fragment,null,React.createElement("div",{className:"form-group"},React.createElement("div",{className:"sm-label-right col-md-4"},"Type"),React.createElement("div",{className:"col-md-3"},React.createElement(core_1.TetheredSelect,{clearable:!1,value:lookupType,options:lookupTypeOptions,onChange:this.lookupTypeChanged}))),"tag"===lookupType&&React.createElement("div",{className:"form-group"},React.createElement("label",{className:"col-md-4 sm-label-right"},"Tag"),tagsLoading&&React.createElement("div",{className:"col-md-6"},React.createElement("div",{className:"form-control-static text-center"},React.createElement(core_1.Spinner,{size:"small"}))),React.createElement("input",{type:"hidden",required:tagsLoading,value:selectedTag}),loadError&&React.createElement("div",{className:"col-md-6"},"Error loading tags!"),!tagsLoading&&React.createElement("div",{className:"col-md-6"},0===tags.length&&React.createElement("div",null,React.createElement("p",{className:"form-control-static"},"No tags found")),tags.length>0&&React.createElement(core_1.TetheredSelect,{options:options,optionRenderer:o=>React.createElement("span",null,o.value),clearable:!1,value:selectedTag,valueRenderer:o=>React.createElement("span",null,React.createElement("strong",null,o.value)),onChange:o=>this.updateSelectedTag(o.value)}))),"digest"===lookupType&&React.createElement("div",{className:"form-group"},React.createElement("label",{className:"col-md-4 sm-label-right"},"Digest ",React.createElement(core_1.HelpField,{id:"pipeline.config.docker.trigger.digest"})),React.createElement("div",{className:"col-md-6"},React.createElement("input",{value:digest,onChange:e=>this.updateDigest(e.target.value),className:"form-control input-sm",required:!0}))))}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const core_1=__webpack_require__(0),DockerTriggerTemplate_1=__webpack_require__(17),DockerTriggerConfig_1=__webpack_require__(14);core_1.Registry.pipeline.registerTrigger({label:"Docker Registry",description:"Executes the pipeline on an image update",key:"docker",component:DockerTriggerConfig_1.DockerTriggerConfig,manualExecutionComponent:DockerTriggerTemplate_1.DockerTriggerTemplate,validators:[{type:"requiredField",fieldName:"account",message:"<strong>Registry</strong> is a required field for Docker Registry triggers."},{type:"requiredField",fieldName:"repository",message:"<strong>Image</strong> is a required field for Docker Registry triggers."},{type:"serviceAccountAccess",preventSave:!0,message:"You do not have access to the service account configured in this pipeline's Docker Registry trigger.\n You will not be able to save your edits to this pipeline."}]})},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const angular_1=__webpack_require__(1);__webpack_require__(18);const templates=__webpack_require__(13);templates.keys().forEach(function(key){templates(key)}),exports.DOCKER_MODULE="spinnaker.docker",angular_1.module(exports.DOCKER_MODULE,[__webpack_require__(12).name])},function(module,exports){module.exports=require("react-select")},function(module,exports,__webpack_require__){"use strict";function __export(m){for(var p in m)exports.hasOwnProperty(p)||(exports[p]=m[p])}Object.defineProperty(exports,"__esModule",{value:!0}),__export(__webpack_require__(9)),__export(__webpack_require__(19))}])});
//# sourceMappingURL=lib.js.map
{
"name": "@spinnaker/docker",
"version": "0.0.25",
"version": "0.0.26",
"main": "lib/lib.js",

@@ -5,0 +5,0 @@ "typings": "lib/index.d.ts",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc