@spinnaker/docker 2025.2.3 → 2025.4.0-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1569
- package/dist/index.js.map +1 -1
- package/package.json +6 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/image/DockerImageReader.ts","../src/image/DockerImageUtils.ts","../src/image/DockerImageAndTagSelector.tsx","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/pipeline/stages/bake/dockerBakeStage.js","../src/image/DockerChartAndTagSelector.tsx","../src/pipeline/trigger/DockerHelmOciTriggerConfig.tsx","../src/pipeline/trigger/DockerTriggerConfig.tsx","../src/pipeline/trigger/DockerTriggerTemplate.tsx","../src/pipeline/trigger/DockerTrigger.tsx","../src/docker.module.ts"],"sourcesContent":["import type { IFindImageParams, IFindTagsParams, IImage } from '@spinnaker/core';\nimport { REST, RetryService } from '@spinnaker/core';\n\nexport interface IDockerImage extends IImage {\n account: string;\n registry: string;\n repository: string;\n tag: string;\n}\n\nexport class DockerImageReader {\n public static getImage(imageName: string, region: string, credentials: string): PromiseLike<IDockerImage> {\n return REST('/images')\n .path(credentials, region, imageName)\n .query({ provider: 'docker' })\n .get()\n .then((results: IDockerImage[]) => (results && results.length ? results[0] : null))\n .catch((): IDockerImage => null);\n }\n\n public static findImages(params: IFindImageParams): PromiseLike<IDockerImage[]> {\n return RetryService.buildRetrySequence<IDockerImage[]>(\n () => REST('/images/find').query(params).get(),\n (results: IDockerImage[]) => results.length > 0,\n 10,\n 1000,\n )\n .then((results: IDockerImage[]) => results)\n .catch((): IDockerImage[] => []);\n }\n\n public static findTags(params: IFindTagsParams): PromiseLike<string[]> {\n return RetryService.buildRetrySequence<string[]>(\n () => REST('/images/tags').query(params).get(),\n (results: string[]) => results.length > 0,\n 10,\n 1000,\n )\n .then((results: string[]) => results)\n .catch((): string[] => []);\n }\n}\n\nexport class DockerChartImageReader {\n public static getImage(imageName: string, region: string, credentials: string): PromiseLike<IDockerImage> {\n return REST('/charts')\n .path(credentials, region, imageName)\n .query({ provider: 'docker' })\n .get()\n .then((results: IDockerImage[]) => (results && results.length ? results[0] : null))\n .catch((): IDockerImage => null);\n }\n\n public static findImages(params: IFindImageParams): PromiseLike<IDockerImage[]> {\n return RetryService.buildRetrySequence<IDockerImage[]>(\n () => REST('/charts/find').query(params).get(),\n (results: IDockerImage[]) => results.length > 0,\n 10,\n 1000,\n )\n .then((results: IDockerImage[]) => results)\n .catch((): IDockerImage[] => []);\n }\n\n public static findTags(params: IFindTagsParams): PromiseLike<string[]> {\n return RetryService.buildRetrySequence<string[]>(\n () => REST('/charts/tags').query(params).get(),\n (results: string[]) => results.length > 0,\n 10,\n 1000,\n )\n .then((results: string[]) => results)\n .catch((): string[] => []);\n }\n}\n","export interface IDockerImageParts {\n organization: string;\n repository: string;\n tag?: string;\n digest?: string;\n}\n\nexport class DockerImageUtils {\n // Split the image id up into the selectable parts to feed the UI\n public static splitImageId(imageId = ''): IDockerImageParts {\n let imageParts: string[];\n if (imageId.includes('@')) {\n imageParts = imageId.split('@');\n } else {\n imageParts = imageId.split(':');\n }\n const repository = imageParts[0];\n const repositoryParts = repository.split('/');\n // Everything before the last slash is considered the organization\n const organization = repositoryParts.slice(0, -1).join('/');\n\n const lookup = imageParts.length > 1 ? imageParts.slice(1).join(':') : '';\n\n let tag: string;\n let digest: string;\n if (lookup) {\n if (lookup.startsWith('sha256:')) {\n digest = lookup;\n } else {\n tag = lookup;\n }\n }\n\n return { organization, repository, digest, tag };\n }\n\n public static generateImageId(parts: IDockerImageParts): string {\n if (!parts.repository || !(parts.digest || parts.tag)) {\n return undefined;\n }\n\n let imageId: string;\n\n if (parts.digest) {\n imageId = `${parts.repository}@${parts.digest}`;\n } else {\n imageId = `${parts.repository}:${parts.tag}`;\n }\n\n return imageId;\n }\n}\n","import { groupBy, reduce, trim, uniq } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport type { IAccount, IFindImageParams } from '@spinnaker/core';\nimport { AccountService, HelpField, Tooltip, ValidationMessage } from '@spinnaker/core';\n\nimport type { IDockerImage } from './DockerImageReader';\nimport { DockerImageReader } from './DockerImageReader';\nimport type { IDockerImageParts } from './DockerImageUtils';\nimport { DockerImageUtils } from './DockerImageUtils';\n\nexport type IDockerLookupType = 'tag' | 'digest';\n\nexport interface IDockerImageAndTagChanges {\n account?: string;\n organization?: string;\n registry?: string;\n repository?: string;\n tag?: string;\n digest?: string;\n imageId?: string;\n}\n\nexport interface IDockerImageAndTagSelectorProps {\n specifyTagByRegex: boolean;\n imageId: string;\n organization: string;\n registry: string;\n repository: string;\n tag: string;\n digest: string;\n account: string;\n showRegistry?: boolean;\n onChange: (changes: IDockerImageAndTagChanges) => void;\n deferInitialization?: boolean;\n showDigest?: boolean;\n allowManualDefinition?: boolean;\n}\n\nexport interface IDockerImageAndTagSelectorState {\n accountOptions: Array<Option<string>>;\n switchedManualWarning: string;\n missingFields?: string[];\n imagesLoaded: boolean;\n imagesLoading: boolean;\n organizationOptions: Array<Option<string>>;\n repositoryOptions: Array<Option<string>>;\n defineManually: boolean;\n tagOptions: Array<Option<string>>;\n lookupType: IDockerLookupType;\n}\n\nconst imageFields = ['organization', 'repository', 'tag', 'digest'];\nconst defineOptions = [\n { label: 'Manually', value: true },\n { label: 'Select from list', value: false },\n];\n\nexport class DockerImageAndTagSelector extends React.Component<\n IDockerImageAndTagSelectorProps,\n IDockerImageAndTagSelectorState\n> {\n public static defaultProps: Partial<IDockerImageAndTagSelectorProps> = {\n organization: '',\n registry: '',\n repository: '',\n showDigest: true,\n allowManualDefinition: true,\n };\n\n private unmounted = false;\n private images: IDockerImage[];\n private accounts: string[];\n\n private registryMap: { [key: string]: string };\n private accountMap: { [key: string]: string[] };\n private newAccounts: string[];\n private organizationMap: { [key: string]: string[] };\n private repositoryMap: { [key: string]: string[] };\n private organizations: string[];\n private cachedValues: { [key: string]: string } = {};\n\n public constructor(props: IDockerImageAndTagSelectorProps) {\n super(props);\n\n const accountOptions = props.account ? [{ label: props.account, value: props.account }] : [];\n const organizationOptions =\n props.organization && props.organization.length ? [{ label: props.organization, value: props.organization }] : [];\n const repositoryOptions =\n props.repository && props.repository.length ? [{ label: props.repository, value: props.repository }] : [];\n const tagOptions = props.tag && props.tag.length ? [{ label: props.tag, value: props.tag }] : [];\n const parsedImageId = DockerImageUtils.splitImageId(props.imageId);\n const defineManually = props.allowManualDefinition && Boolean(props.imageId && props.imageId.includes('${'));\n\n this.state = {\n accountOptions,\n switchedManualWarning: undefined,\n imagesLoaded: false,\n imagesLoading: false,\n organizationOptions,\n repositoryOptions,\n defineManually,\n tagOptions,\n lookupType: props.digest || parsedImageId.digest ? 'digest' : 'tag',\n };\n }\n\n private getAccountMap(images: IDockerImage[]): { [key: string]: string[] } {\n const groupedImages = groupBy(\n images.filter((image) => image.account),\n 'account',\n );\n return reduce<IDockerImage[], { [key: string]: string[] }>(\n groupedImages,\n (acc, image, key) => {\n acc[key] = uniq(image.map((i) => `${i.repository.split('/').slice(0, -1).join('/')}`));\n return acc;\n },\n {},\n );\n }\n\n private getRegistryMap(images: IDockerImage[]) {\n return images.reduce((m: { [key: string]: string }, image: IDockerImage) => {\n m[image.account] = image.registry;\n return m;\n }, {} as { [key: string]: string });\n }\n\n private getOrganizationMap(images: IDockerImage[]): { [key: string]: string[] } {\n const extractGroupByKey = (image: IDockerImage) =>\n `${image.account}/${image.repository.split('/').slice(0, -1).join('/')}`;\n const groupedImages = groupBy(\n images.filter((image) => image.repository),\n extractGroupByKey,\n );\n return reduce<IDockerImage[], { [key: string]: string[] }>(\n groupedImages,\n (acc, image, key) => {\n acc[key] = uniq(image.map((i) => i.repository));\n return acc;\n },\n {},\n );\n }\n\n private getRepositoryMap(images: IDockerImage[]) {\n const groupedImages = groupBy(\n images.filter((image) => image.account),\n 'repository',\n );\n return reduce<IDockerImage[], { [key: string]: string[] }>(\n groupedImages,\n (acc, image, key) => {\n acc[key] = uniq(image.map((i) => i.tag));\n return acc;\n },\n {},\n );\n }\n\n private getOrganizationsList(accountMap: { [key: string]: string[] }) {\n return accountMap ? accountMap[this.props.showRegistry ? this.props.account : this.props.registry] || [] : [];\n }\n\n private getRepositoryList(organizationMap: { [key: string]: string[] }, organization: string, registry: string) {\n if (organizationMap) {\n const key = `${this.props.showRegistry ? this.props.account : registry}/${organization || ''}`;\n return organizationMap[key] || [];\n }\n return [];\n }\n\n private getTags(tag: string, repositoryMap: { [key: string]: string[] }, repository: string) {\n let tags: string[] = [];\n if (this.props.specifyTagByRegex) {\n if (tag && trim(tag) === '') {\n tag = undefined;\n }\n } else {\n if (repositoryMap) {\n tags = repositoryMap[repository] || [];\n if (!tags.includes(tag) && tag && !tag.includes('${')) {\n tag = undefined;\n }\n }\n }\n\n return { tag, tags };\n }\n\n public componentWillReceiveProps(nextProps: IDockerImageAndTagSelectorProps) {\n if (\n !this.images ||\n ['account', 'showRegistry'].some(\n (key: keyof IDockerImageAndTagSelectorProps) => this.props[key] !== nextProps[key],\n )\n ) {\n this.refreshImages(nextProps);\n } else if (\n ['organization', 'registry', 'repository'].some(\n (key: keyof IDockerImageAndTagSelectorProps) => this.props[key] !== nextProps[key],\n )\n ) {\n this.updateThings(nextProps);\n }\n\n if (nextProps.imageId && nextProps.imageId.includes('${')) {\n this.setState({ defineManually: true });\n }\n }\n\n componentWillUnmount() {\n this.unmounted = true;\n }\n\n private synchronizeChanges(values: IDockerImageParts, registry: string) {\n const { organization, repository, tag, digest } = values;\n if (this.props.onChange) {\n const imageId = DockerImageUtils.generateImageId({ organization, repository, tag, digest });\n const changes: IDockerImageAndTagChanges = {};\n if (tag !== this.props.tag) {\n changes.tag = tag;\n }\n if (imageId !== this.props.imageId) {\n changes.imageId = imageId;\n }\n if (organization !== this.props.organization) {\n changes.organization = organization;\n }\n if (registry !== this.props.registry) {\n changes.registry = registry;\n }\n if (repository !== this.props.repository) {\n changes.repository = repository;\n }\n if (digest !== this.props.digest) {\n changes.digest = digest;\n }\n if (Object.keys(changes).length > 0) {\n this.props.onChange(changes);\n }\n }\n }\n\n private updateThings(props: IDockerImageAndTagSelectorProps, allowAutoSwitchToManualEntry = false) {\n if (!this.repositoryMap || this.unmounted) {\n return;\n }\n\n const { imageId, specifyTagByRegex } = props;\n let { organization, registry, repository } = props;\n\n if (props.showRegistry) {\n registry = this.registryMap[props.account];\n }\n\n const organizationFound = !organization || this.organizations.includes(organization) || organization.includes('${');\n if (!organizationFound) {\n organization = '';\n }\n\n const repositories = this.getRepositoryList(this.organizationMap, organization, registry);\n const repositoryFound = !repository || repository.includes('${') || repositories.includes(repository);\n\n if (!repositoryFound) {\n repository = '';\n }\n\n const { tag, tags } = this.getTags(props.tag, this.repositoryMap, repository);\n const tagFound = tag === props.tag || specifyTagByRegex;\n\n const newState = {\n accountOptions: this.newAccounts.sort().map((a) => ({ label: a, value: a })),\n organizationOptions: this.organizations\n .filter((o) => o)\n .sort()\n .map((o) => ({ label: o, value: o })),\n imagesLoaded: true,\n repositoryOptions: repositories.sort().map((r) => ({ label: r, value: r })),\n tagOptions: tags.sort().map((t) => ({ label: t, value: t })),\n } as IDockerImageAndTagSelectorState;\n\n if (\n imageId &&\n (!this.state.imagesLoaded || allowAutoSwitchToManualEntry) &&\n (!organizationFound || !repositoryFound || !tagFound)\n ) {\n newState.defineManually = true;\n\n const missingFields: string[] = [];\n if (!organizationFound) {\n missingFields.push('organization');\n }\n if (!repositoryFound) {\n missingFields.push('image');\n }\n if (!tagFound) {\n missingFields.push('tag');\n }\n newState.missingFields = missingFields;\n newState.switchedManualWarning = `Could not find ${missingFields.join(' or ')}, switched to manual entry`;\n } else if (!imageId || !imageId.includes('${')) {\n this.synchronizeChanges(\n this.state.defineManually\n ? DockerImageUtils.splitImageId(imageId)\n : { organization, repository, tag, digest: this.props.digest },\n registry,\n );\n }\n\n this.setState(newState);\n }\n\n private initializeImages(props: IDockerImageAndTagSelectorProps) {\n if (this.state.imagesLoading) {\n return;\n }\n\n const { showRegistry, account, registry } = props;\n\n const imageConfig: IFindImageParams = {\n provider: 'dockerRegistry',\n account: showRegistry ? account : registry,\n };\n\n this.setState({ imagesLoading: true });\n DockerImageReader.findImages(imageConfig)\n .then((images: IDockerImage[]) => {\n this.images = images;\n this.registryMap = this.getRegistryMap(this.images);\n this.accountMap = this.getAccountMap(this.images);\n this.newAccounts = this.accounts || Object.keys(this.accountMap);\n\n this.organizationMap = this.getOrganizationMap(this.images);\n this.repositoryMap = this.getRepositoryMap(this.images);\n this.organizations = this.getOrganizationsList(this.accountMap);\n this.updateThings(props, true);\n })\n .finally(() => {\n if (!this.unmounted) {\n this.setState({ imagesLoading: false });\n }\n });\n }\n\n public handleRefreshImages = (): void => {\n this.refreshImages(this.props);\n };\n\n public refreshImages(props: IDockerImageAndTagSelectorProps): void {\n this.initializeImages(props);\n }\n\n private initializeAccounts(props: IDockerImageAndTagSelectorProps) {\n let { account } = props;\n AccountService.listAccounts('dockerRegistry').then((allAccounts: IAccount[]) => {\n const accounts = allAccounts.map((a: IAccount) => a.name);\n if (this.props.showRegistry && !account) {\n account = accounts[0];\n }\n this.accounts = accounts;\n this.refreshImages({ ...props, ...{ account } });\n });\n }\n\n private isNew(): boolean {\n const { account, organization, registry, repository, tag } = this.props;\n return !account && !organization && !registry && !repository && !tag;\n }\n\n public componentDidMount() {\n if (!this.props.deferInitialization && (this.props.registry || this.isNew())) {\n this.initializeAccounts(this.props);\n }\n }\n\n private valueChanged(name: string, value: string) {\n const changes = { [name]: value };\n if (imageFields.some((n) => n === name)) {\n // values are parts of the image\n const { organization, repository, tag, digest } = this.props;\n const imageParts = { ...{ organization, repository, tag, digest }, ...changes };\n const imageId = DockerImageUtils.generateImageId(imageParts);\n changes.imageId = imageId;\n }\n this.props.onChange && this.props.onChange(changes);\n }\n\n private lookupTypeChanged = (o: Option<IDockerLookupType>) => {\n const newType = o.value;\n const oldType = this.state.lookupType;\n const oldValue = this.props[oldType];\n const cachedValue = this.cachedValues[newType];\n\n this.valueChanged(oldType, undefined);\n if (this.cachedValues[newType]) {\n this.valueChanged(newType, cachedValue);\n }\n this.setState({ lookupType: newType });\n this.cachedValues[oldType] = oldValue;\n };\n\n private showManualInput = (defineManually: boolean) => {\n if (!defineManually) {\n const newFields = DockerImageUtils.splitImageId(this.props.imageId || '');\n this.props.onChange(newFields);\n if (this.state.switchedManualWarning) {\n this.setState({ switchedManualWarning: undefined, missingFields: undefined });\n }\n }\n this.setState({ defineManually });\n };\n\n public render() {\n const {\n account,\n allowManualDefinition,\n digest,\n imageId,\n organization,\n repository,\n showDigest,\n showRegistry,\n specifyTagByRegex,\n tag,\n } = this.props;\n const {\n accountOptions,\n switchedManualWarning,\n missingFields,\n imagesLoading,\n lookupType,\n organizationOptions,\n repositoryOptions,\n defineManually,\n tagOptions,\n } = this.state;\n\n const parsedImageId = DockerImageUtils.splitImageId(imageId);\n\n const manualInputToggle = (\n <div className=\"sp-formItem groupHeader\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Define Image ID</div>\n\n <div className=\"sp-formActions sp-formActions--mobile\">\n <span className=\"action\" />\n </div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <Select\n value={defineManually}\n disabled={imagesLoading || !allowManualDefinition}\n onChange={(o: Option<boolean>) => this.showManualInput(o.value)}\n options={defineOptions}\n clearable={false}\n />\n </span>\n </div>\n </div>\n </div>\n );\n\n const warning = switchedManualWarning ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\" />\n <div className=\"sp-formItem__right\">\n <ValidationMessage\n type=\"warning\"\n message={\n <>\n {switchedManualWarning}\n {(missingFields || []).map((f) => (\n <div key={f}>\n <HelpField expand={true} id={`pipeline.config.docker.trigger.missing.${f}`} />\n </div>\n ))}\n </>\n }\n />\n </div>\n </div>\n ) : null;\n\n if (defineManually) {\n return (\n <div className=\"sp-formGroup\">\n {manualInputToggle}\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Image ID</div>\n <div className=\"sp-formActions sp-formActions--mobile\">\n <span className=\"action\" />\n </div>\n </div>\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <input\n className=\"form-control input-sm\"\n value={imageId || ''}\n onChange={(e) => this.valueChanged('imageId', e.target.value)}\n />\n </span>\n </div>\n </div>\n </div>\n {warning}\n </div>\n );\n }\n\n const Registry = showRegistry ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Registry Name</div>\n </div>\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <Select\n value={account}\n disabled={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('account', o ? o.value : '')}\n options={accountOptions}\n isLoading={imagesLoading}\n />\n </span>\n <span className=\"sp-formActions sp-formActions--web\">\n <span className=\"action\">\n <Tooltip value={imagesLoading ? 'Images refreshing' : 'Refresh images list'}>\n <i\n className={`fa icon-button-refresh-arrows ${imagesLoading ? 'fa-spin' : ''}`}\n onClick={this.handleRefreshImages}\n />\n </Tooltip>\n </span>\n </span>\n </div>\n </div>\n </div>\n ) : null;\n\n const Organization = (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Organization</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n {organization.includes('${') ? (\n <input\n disabled={imagesLoading}\n className=\"form-control input-sm\"\n value={organization || ''}\n onChange={(e) => this.valueChanged('organization', e.target.value)}\n />\n ) : (\n <Select\n value={organization || ''}\n disabled={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('organization', (o && o.value) || '')}\n placeholder=\"No organization\"\n options={organizationOptions}\n isLoading={imagesLoading}\n />\n )}\n </span>\n </div>\n </div>\n </div>\n );\n\n const Image = (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Image</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n {repository.includes('${') ? (\n <input\n className=\"form-control input-sm\"\n disabled={imagesLoading}\n value={repository || ''}\n onChange={(e) => this.valueChanged('repository', e.target.value)}\n />\n ) : (\n <Select\n value={repository || ''}\n disabled={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('repository', (o && o.value) || '')}\n options={repositoryOptions}\n required={true}\n isLoading={imagesLoading}\n />\n )}\n </span>\n </div>\n </div>\n </div>\n );\n\n const Tag =\n lookupType === 'tag' ? (\n specifyTagByRegex ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Tag</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <input\n type=\"text\"\n className=\"form-control input-sm\"\n value={tag || ''}\n disabled={imagesLoading || !repository}\n onChange={(e) => this.valueChanged('tag', e.target.value)}\n />\n </span>\n </div>\n <HelpField id=\"pipeline.config.docker.trigger.tag\" expand={true} />\n </div>\n </div>\n ) : (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Tag</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n {tag && tag.includes('${') ? (\n <input\n className=\"form-control input-sm\"\n disabled={imagesLoading}\n value={tag || ''}\n onChange={(e) => this.valueChanged('tag', e.target.value)}\n required={true}\n />\n ) : (\n <>\n <Select\n value={tag || ''}\n disabled={imagesLoading || !repository}\n isLoading={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('tag', o ? o.value : undefined)}\n options={tagOptions}\n placeholder=\"No tag\"\n required={true}\n />\n <HelpField id=\"pipeline.config.docker.trigger.tag.additionalInfo\" expand={true} />\n </>\n )}\n </span>\n </div>\n </div>\n </div>\n )\n ) : null;\n\n const Digest =\n lookupType === 'digest' ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">\n Digest <HelpField id=\"pipeline.config.docker.trigger.digest\" />\n </div>\n </div>\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <input\n className=\"form-control input-sm\"\n placeholder=\"sha256:abc123\"\n value={digest || parsedImageId.digest || ''}\n onChange={(e) => this.valueChanged('digest', e.target.value)}\n required={true}\n />\n </span>\n </div>\n </div>\n </div>\n ) : null;\n\n const LookupTypeSelector = showDigest ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Type</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <Select\n clearable={false}\n value={lookupType}\n options={[\n { value: 'digest', label: 'Digest' },\n { value: 'tag', label: 'Tag' },\n ]}\n onChange={this.lookupTypeChanged}\n />\n </span>\n </div>\n </div>\n </div>\n ) : null;\n\n return (\n <div className=\"sp-formGroup\">\n {manualInputToggle}\n {Registry}\n {Organization}\n {Image}\n {LookupTypeSelector}\n {Digest}\n {Tag}\n </div>\n );\n }\n}\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nexport const DOCKER_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.docker.pipeline.stage.bake.executionDetails.controller';\nexport const name = DOCKER_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(DOCKER_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'dockerBakeExecutionDetailsCtrl',\n [\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($scope, $stateParams, executionDetailsSectionService, $interpolate) {\n $scope.configSections = ['bakeConfig', 'taskStatus'];\n\n const initialized = () => {\n $scope.detailsSection = $stateParams.details;\n $scope.provider = $scope.stage.context.cloudProviderType || 'docker';\n $scope.bakeryDetailUrl = $interpolate(\n $scope.roscoMode && SETTINGS.roscoDetailUrl ? SETTINGS.roscoDetailUrl : SETTINGS.bakeryDetailUrl,\n );\n };\n\n const initialize = () => executionDetailsSectionService.synchronizeSection($scope.configSections, initialized);\n\n initialize();\n\n $scope.$on('$stateChangeSuccess', initialize);\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AuthenticationService, BakeExecutionLabel, BakeryReader, Registry } from '@spinnaker/core';\nimport { DOCKER_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\n\n/*\n This stage is just here so that we can experiment with baking Docker containers within pipelines.\n Without this stage, programmatically-created pipelines with Docker bake stages would not render\n execution details.\n */\nexport const DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE = 'spinnaker.docker.pipeline.stage.bakeStage';\nexport const name = DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE; // for backwards compatibility\nmodule(DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE, [DOCKER_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'docker',\n label: 'Bake',\n description: 'Bakes an image',\n templateUrl: require('./bakeStage.html'),\n executionDetailsUrl: require('./bakeExecutionDetails.html'),\n executionLabelComponent: BakeExecutionLabel,\n extraLabelLines: (stage) => {\n return stage.masterStage.context.allPreviouslyBaked || stage.masterStage.context.somePreviouslyBaked ? 1 : 0;\n },\n supportsCustomTimeout: true,\n validators: [{ type: 'requiredField', fieldName: 'package' }],\n restartable: true,\n });\n })\n .controller('dockerBakeStageCtrl', [\n '$scope',\n '$q',\n function ($scope, $q) {\n const stage = $scope.stage;\n\n stage.region = 'global';\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n $scope.viewState = {\n loading: true,\n };\n\n function initialize() {\n $scope.viewState.providerSelected = true;\n $q.all([BakeryReader.getBaseOsOptions('docker'), BakeryReader.getBaseLabelOptions()]).then(function ([\n baseOsOptions,\n baseLabelOptions,\n ]) {\n $scope.baseOsOptions = baseOsOptions.baseImages;\n $scope.baseLabelOptions = baseLabelOptions;\n\n if (!$scope.stage.baseOs && $scope.baseOsOptions && $scope.baseOsOptions.length) {\n $scope.stage.baseOs = $scope.baseOsOptions[0].id;\n }\n if (!$scope.stage.baseLabel && $scope.baseLabelOptions && $scope.baseLabelOptions.length) {\n $scope.stage.baseLabel = $scope.baseLabelOptions[0];\n }\n $scope.viewState.loading = false;\n });\n }\n\n function deleteEmptyProperties() {\n _.forOwn($scope.stage, function (val, key) {\n if (val === '') {\n delete $scope.stage[key];\n }\n });\n }\n\n $scope.$watch('stage', deleteEmptyProperties, true);\n\n initialize();\n },\n ]);\n","import { groupBy, reduce, trim, uniq } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport type { IAccount, IFindImageParams } from '@spinnaker/core';\nimport { AccountService, HelpField, Tooltip, ValidationMessage } from '@spinnaker/core';\n\nimport type { IDockerImage } from './DockerImageReader';\nimport { DockerChartImageReader } from './DockerImageReader';\nimport type { IDockerImageParts } from './DockerImageUtils';\nimport { DockerImageUtils } from './DockerImageUtils';\n\nexport type IDockerLookupType = 'tag' | 'digest';\n\nexport interface IDockerChartAndTagChanges {\n account?: string;\n organization?: string;\n registry?: string;\n repository?: string;\n tag?: string;\n digest?: string;\n imageId?: string;\n}\n\nexport interface IDockerChartAndTagSelectorProps {\n specifyTagByRegex: boolean;\n imageId: string;\n organization: string;\n registry: string;\n repository: string;\n tag: string;\n digest: string;\n account: string;\n showRegistry?: boolean;\n onChange: (changes: IDockerChartAndTagChanges) => void;\n deferInitialization?: boolean;\n showDigest?: boolean;\n allowManualDefinition?: boolean;\n}\n\nexport interface IDockerChartAndTagSelectorState {\n accountOptions: Array<Option<string>>;\n switchedManualWarning: string;\n missingFields?: string[];\n imagesLoaded: boolean;\n imagesLoading: boolean;\n organizationOptions: Array<Option<string>>;\n repositoryOptions: Array<Option<string>>;\n defineManually: boolean;\n tagOptions: Array<Option<string>>;\n lookupType: IDockerLookupType;\n}\n\nconst imageFields = ['organization', 'repository', 'tag', 'digest'];\nconst defineOptions = [\n { label: 'Manually', value: true },\n { label: 'Select from list', value: false },\n];\n\nexport class DockerChartAndTagSelector extends React.Component<\n IDockerChartAndTagSelectorProps,\n IDockerChartAndTagSelectorState\n> {\n public static defaultProps: Partial<IDockerChartAndTagSelectorProps> = {\n organization: '',\n registry: '',\n repository: '',\n showDigest: true,\n allowManualDefinition: true,\n };\n\n private unmounted = false;\n private images: IDockerImage[];\n private accounts: string[];\n\n private registryMap: { [key: string]: string };\n private accountMap: { [key: string]: string[] };\n private newAccounts: string[];\n private organizationMap: { [key: string]: string[] };\n private repositoryMap: { [key: string]: string[] };\n private organizations: string[];\n private cachedValues: { [key: string]: string } = {};\n\n public constructor(props: IDockerChartAndTagSelectorProps) {\n super(props);\n\n const accountOptions = props.account ? [{ label: props.account, value: props.account }] : [];\n const organizationOptions =\n props.organization && props.organization.length ? [{ label: props.organization, value: props.organization }] : [];\n const repositoryOptions =\n props.repository && props.repository.length ? [{ label: props.repository, value: props.repository }] : [];\n const tagOptions = props.tag && props.tag.length ? [{ label: props.tag, value: props.tag }] : [];\n const parsedImageId = DockerImageUtils.splitImageId(props.imageId);\n const defineManually = props.allowManualDefinition && Boolean(props.imageId && props.imageId.includes('${'));\n\n this.state = {\n accountOptions,\n switchedManualWarning: undefined,\n imagesLoaded: false,\n imagesLoading: false,\n organizationOptions,\n repositoryOptions,\n defineManually,\n tagOptions,\n lookupType: props.digest || parsedImageId.digest ? 'digest' : 'tag',\n };\n }\n\n private getAccountMap(images: IDockerImage[]): { [key: string]: string[] } {\n const groupedImages = groupBy(\n images.filter((image) => image.account),\n 'account',\n );\n return reduce<IDockerImage[], { [key: string]: string[] }>(\n groupedImages,\n (acc, image, key) => {\n acc[key] = uniq(image.map((i) => `${i.repository.split('/').slice(0, -1).join('/')}`));\n return acc;\n },\n {},\n );\n }\n\n private getRegistryMap(images: IDockerImage[]) {\n return images.reduce((m: { [key: string]: string }, image: IDockerImage) => {\n m[image.account] = image.registry;\n return m;\n }, {} as { [key: string]: string });\n }\n\n private getOrganizationMap(images: IDockerImage[]): { [key: string]: string[] } {\n const extractGroupByKey = (image: IDockerImage) =>\n `${image.account}/${image.repository.split('/').slice(0, -1).join('/')}`;\n const groupedImages = groupBy(\n images.filter((image) => image.repository),\n extractGroupByKey,\n );\n return reduce<IDockerImage[], { [key: string]: string[] }>(\n groupedImages,\n (acc, image, key) => {\n acc[key] = uniq(image.map((i) => i.repository));\n return acc;\n },\n {},\n );\n }\n\n private getRepositoryMap(images: IDockerImage[]) {\n const groupedImages = groupBy(\n images.filter((image) => image.account),\n 'repository',\n );\n return reduce<IDockerImage[], { [key: string]: string[] }>(\n groupedImages,\n (acc, image, key) => {\n acc[key] = uniq(image.map((i) => i.tag));\n return acc;\n },\n {},\n );\n }\n\n private getOrganizationsList(accountMap: { [key: string]: string[] }) {\n return accountMap ? accountMap[this.props.showRegistry ? this.props.account : this.props.registry] || [] : [];\n }\n\n private getRepositoryList(organizationMap: { [key: string]: string[] }, organization: string, registry: string) {\n if (organizationMap) {\n const key = `${this.props.showRegistry ? this.props.account : registry}/${organization || ''}`;\n return organizationMap[key] || [];\n }\n return [];\n }\n\n private getTags(tag: string, repositoryMap: { [key: string]: string[] }, repository: string) {\n let tags: string[] = [];\n if (this.props.specifyTagByRegex) {\n if (tag && trim(tag) === '') {\n tag = undefined;\n }\n } else {\n if (repositoryMap) {\n tags = repositoryMap[repository] || [];\n if (!tags.includes(tag) && tag && !tag.includes('${')) {\n tag = undefined;\n }\n }\n }\n\n return { tag, tags };\n }\n\n public componentWillReceiveProps(nextProps: IDockerChartAndTagSelectorProps) {\n if (\n !this.images ||\n ['account', 'showRegistry'].some(\n (key: keyof IDockerChartAndTagSelectorProps) => this.props[key] !== nextProps[key],\n )\n ) {\n this.refreshImages(nextProps);\n } else if (\n ['organization', 'registry', 'repository'].some(\n (key: keyof IDockerChartAndTagSelectorProps) => this.props[key] !== nextProps[key],\n )\n ) {\n this.updateThings(nextProps);\n }\n\n if (nextProps.imageId && nextProps.imageId.includes('${')) {\n this.setState({ defineManually: true });\n }\n }\n\n componentWillUnmount() {\n this.unmounted = true;\n }\n\n private synchronizeChanges(values: IDockerImageParts, registry: string) {\n const { organization, repository, tag, digest } = values;\n if (this.props.onChange) {\n const imageId = DockerImageUtils.generateImageId({ organization, repository, tag, digest });\n const changes: IDockerChartAndTagChanges = {};\n if (tag !== this.props.tag) {\n changes.tag = tag;\n }\n if (imageId !== this.props.imageId) {\n changes.imageId = imageId;\n }\n if (organization !== this.props.organization) {\n changes.organization = organization;\n }\n if (registry !== this.props.registry) {\n changes.registry = registry;\n }\n if (repository !== this.props.repository) {\n changes.repository = repository;\n }\n if (digest !== this.props.digest) {\n changes.digest = digest;\n }\n if (Object.keys(changes).length > 0) {\n this.props.onChange(changes);\n }\n }\n }\n\n private updateThings(props: IDockerChartAndTagSelectorProps, allowAutoSwitchToManualEntry = false) {\n if (!this.repositoryMap || this.unmounted) {\n return;\n }\n\n const { imageId, specifyTagByRegex } = props;\n let { organization, registry, repository } = props;\n\n if (props.showRegistry) {\n registry = this.registryMap[props.account];\n }\n\n const organizationFound = !organization || this.organizations.includes(organization) || organization.includes('${');\n if (!organizationFound) {\n organization = '';\n }\n\n const repositories = this.getRepositoryList(this.organizationMap, organization, registry);\n const repositoryFound = !repository || repository.includes('${') || repositories.includes(repository);\n\n if (!repositoryFound) {\n repository = '';\n }\n\n const { tag, tags } = this.getTags(props.tag, this.repositoryMap, repository);\n const tagFound = tag === props.tag || specifyTagByRegex;\n\n const newState = {\n accountOptions: this.newAccounts.sort().map((a) => ({ label: a, value: a })),\n organizationOptions: this.organizations\n .filter((o) => o)\n .sort()\n .map((o) => ({ label: o, value: o })),\n imagesLoaded: true,\n repositoryOptions: repositories.sort().map((r) => ({ label: r, value: r })),\n tagOptions: tags.sort().map((t) => ({ label: t, value: t })),\n } as IDockerChartAndTagSelectorState;\n\n if (\n imageId &&\n (!this.state.imagesLoaded || allowAutoSwitchToManualEntry) &&\n (!organizationFound || !repositoryFound || !tagFound)\n ) {\n newState.defineManually = true;\n\n const missingFields: string[] = [];\n if (!organizationFound) {\n missingFields.push('organization');\n }\n if (!repositoryFound) {\n missingFields.push('image');\n }\n if (!tagFound) {\n missingFields.push('tag');\n }\n newState.missingFields = missingFields;\n newState.switchedManualWarning = `Could not find ${missingFields.join(' or ')}, switched to manual entry`;\n } else if (!imageId || !imageId.includes('${')) {\n this.synchronizeChanges(\n this.state.defineManually\n ? DockerImageUtils.splitImageId(imageId)\n : { organization, repository, tag, digest: this.props.digest },\n registry,\n );\n }\n\n this.setState(newState);\n }\n\n private initializeImages(props: IDockerChartAndTagSelectorProps) {\n if (this.state.imagesLoading) {\n return;\n }\n\n const { showRegistry, account, registry } = props;\n\n const imageConfig: IFindImageParams = {\n provider: 'dockerRegistry',\n account: showRegistry ? account : registry,\n };\n\n this.setState({ imagesLoading: true });\n DockerChartImageReader.findImages(imageConfig)\n .then((images: IDockerImage[]) => {\n this.images = images;\n this.registryMap = this.getRegistryMap(this.images);\n this.accountMap = this.getAccountMap(this.images);\n this.newAccounts = this.accounts || Object.keys(this.accountMap);\n\n this.organizationMap = this.getOrganizationMap(this.images);\n this.repositoryMap = this.getRepositoryMap(this.images);\n this.organizations = this.getOrganizationsList(this.accountMap);\n this.updateThings(props, true);\n })\n .finally(() => {\n if (!this.unmounted) {\n this.setState({ imagesLoading: false });\n }\n });\n }\n\n public handleRefreshImages = (): void => {\n this.refreshImages(this.props);\n };\n\n public refreshImages(props: IDockerChartAndTagSelectorProps): void {\n this.initializeImages(props);\n }\n\n private initializeAccounts(props: IDockerChartAndTagSelectorProps) {\n let { account } = props;\n AccountService.listAccounts('dockerRegistry').then((allAccounts: IAccount[]) => {\n const accounts = allAccounts.map((a: IAccount) => a.name);\n if (this.props.showRegistry && !account) {\n account = accounts[0];\n }\n this.accounts = accounts;\n this.refreshImages({ ...props, ...{ account } });\n });\n }\n\n private isNew(): boolean {\n const { account, organization, registry, repository, tag } = this.props;\n return !account && !organization && !registry && !repository && !tag;\n }\n\n public componentDidMount() {\n if (!this.props.deferInitialization && (this.props.registry || this.isNew())) {\n this.initializeAccounts(this.props);\n }\n }\n\n private valueChanged(name: string, value: string) {\n const changes = { [name]: value };\n if (imageFields.some((n) => n === name)) {\n // values are parts of the image\n const { organization, repository, tag, digest } = this.props;\n const imageParts = { ...{ organization, repository, tag, digest }, ...changes };\n const imageId = DockerImageUtils.generateImageId(imageParts);\n changes.imageId = imageId;\n }\n this.props.onChange && this.props.onChange(changes);\n }\n\n private lookupTypeChanged = (o: Option<IDockerLookupType>) => {\n const newType = o.value;\n const oldType = this.state.lookupType;\n const oldValue = this.props[oldType];\n const cachedValue = this.cachedValues[newType];\n\n this.valueChanged(oldType, undefined);\n if (this.cachedValues[newType]) {\n this.valueChanged(newType, cachedValue);\n }\n this.setState({ lookupType: newType });\n this.cachedValues[oldType] = oldValue;\n };\n\n private showManualInput = (defineManually: boolean) => {\n if (!defineManually) {\n const newFields = DockerImageUtils.splitImageId(this.props.imageId || '');\n this.props.onChange(newFields);\n if (this.state.switchedManualWarning) {\n this.setState({ switchedManualWarning: undefined, missingFields: undefined });\n }\n }\n this.setState({ defineManually });\n };\n\n public render() {\n const {\n account,\n allowManualDefinition,\n digest,\n imageId,\n organization,\n repository,\n showDigest,\n showRegistry,\n specifyTagByRegex,\n tag,\n } = this.props;\n const {\n accountOptions,\n switchedManualWarning,\n missingFields,\n imagesLoading,\n lookupType,\n organizationOptions,\n repositoryOptions,\n defineManually,\n tagOptions,\n } = this.state;\n\n const parsedImageId = DockerImageUtils.splitImageId(imageId);\n\n const manualInputToggle = (\n <div className=\"sp-formItem groupHeader\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Define Image ID</div>\n\n <div className=\"sp-formActions sp-formActions--mobile\">\n <span className=\"action\" />\n </div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <Select\n value={defineManually}\n disabled={imagesLoading || !allowManualDefinition}\n onChange={(o: Option<boolean>) => this.showManualInput(o.value)}\n options={defineOptions}\n clearable={false}\n />\n </span>\n </div>\n </div>\n </div>\n );\n\n const warning = switchedManualWarning ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\" />\n <div className=\"sp-formItem__right\">\n <ValidationMessage\n type=\"warning\"\n message={\n <>\n {switchedManualWarning}\n {(missingFields || []).map((f) => (\n <div key={f}>\n <HelpField expand={true} id={`pipeline.config.docker.trigger.missing.${f}`} />\n </div>\n ))}\n </>\n }\n />\n </div>\n </div>\n ) : null;\n\n if (defineManually) {\n return (\n <div className=\"sp-formGroup\">\n {manualInputToggle}\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Image ID</div>\n <div className=\"sp-formActions sp-formActions--mobile\">\n <span className=\"action\" />\n </div>\n </div>\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <input\n className=\"form-control input-sm\"\n value={imageId || ''}\n onChange={(e) => this.valueChanged('imageId', e.target.value)}\n />\n </span>\n </div>\n </div>\n </div>\n {warning}\n </div>\n );\n }\n\n const Registry = showRegistry ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Registry Name</div>\n </div>\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <Select\n value={account}\n disabled={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('account', o ? o.value : '')}\n options={accountOptions}\n isLoading={imagesLoading}\n />\n </span>\n <span className=\"sp-formActions sp-formActions--web\">\n <span className=\"action\">\n <Tooltip value={imagesLoading ? 'Images refreshing' : 'Refresh images list'}>\n <i\n className={`fa icon-button-refresh-arrows ${imagesLoading ? 'fa-spin' : ''}`}\n onClick={this.handleRefreshImages}\n />\n </Tooltip>\n </span>\n </span>\n </div>\n </div>\n </div>\n ) : null;\n\n const Organization = (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Organization</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n {organization.includes('${') ? (\n <input\n disabled={imagesLoading}\n className=\"form-control input-sm\"\n value={organization || ''}\n onChange={(e) => this.valueChanged('organization', e.target.value)}\n />\n ) : (\n <Select\n value={organization || ''}\n disabled={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('organization', (o && o.value) || '')}\n placeholder=\"No organization\"\n options={organizationOptions}\n isLoading={imagesLoading}\n />\n )}\n </span>\n </div>\n </div>\n </div>\n );\n\n const Image = (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Image</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n {repository.includes('${') ? (\n <input\n className=\"form-control input-sm\"\n disabled={imagesLoading}\n value={repository || ''}\n onChange={(e) => this.valueChanged('repository', e.target.value)}\n />\n ) : (\n <Select\n value={repository || ''}\n disabled={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('repository', (o && o.value) || '')}\n options={repositoryOptions}\n required={true}\n isLoading={imagesLoading}\n />\n )}\n </span>\n </div>\n </div>\n </div>\n );\n\n const Tag =\n lookupType === 'tag' ? (\n specifyTagByRegex ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Tag</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <input\n type=\"text\"\n className=\"form-control input-sm\"\n value={tag || ''}\n disabled={imagesLoading || !repository}\n onChange={(e) => this.valueChanged('tag', e.target.value)}\n />\n </span>\n </div>\n <HelpField id=\"pipeline.config.docker.trigger.tag\" expand={true} />\n </div>\n </div>\n ) : (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Tag</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n {tag && tag.includes('${') ? (\n <input\n className=\"form-control input-sm\"\n disabled={imagesLoading}\n value={tag || ''}\n onChange={(e) => this.valueChanged('tag', e.target.value)}\n required={true}\n />\n ) : (\n <>\n <Select\n value={tag || ''}\n disabled={imagesLoading || !repository}\n isLoading={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('tag', o ? o.value : undefined)}\n options={tagOptions}\n placeholder=\"No tag\"\n required={true}\n />\n <HelpField id=\"pipeline.config.docker.trigger.tag.additionalInfo\" expand={true} />\n </>\n )}\n </span>\n </div>\n </div>\n </div>\n )\n ) : null;\n\n const Digest =\n lookupType === 'digest' ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">\n Digest <HelpField id=\"pipeline.config.docker.trigger.digest\" />\n </div>\n </div>\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <input\n className=\"form-control input-sm\"\n placeholder=\"sha256:abc123\"\n value={digest || parsedImageId.digest || ''}\n onChange={(e) => this.valueChanged('digest', e.target.value)}\n required={true}\n />\n </span>\n </div>\n </div>\n </div>\n ) : null;\n\n const LookupTypeSelector = showDigest ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Type</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <Select\n clearable={false}\n value={lookupType}\n options={[\n { value: 'digest', label: 'Digest' },\n { value: 'tag', label: 'Tag' },\n ]}\n onChange={this.lookupTypeChanged}\n />\n </span>\n </div>\n </div>\n </div>\n ) : null;\n\n return (\n <div className=\"sp-formGroup\">\n {manualInputToggle}\n {Registry}\n {Organization}\n {Image}\n {LookupTypeSelector}\n {Digest}\n {Tag}\n </div>\n );\n }\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IDockerTrigger } from '@spinnaker/core';\nimport type { IDockerChartAndTagChanges } from '../../image/DockerChartAndTagSelector';\nimport { DockerChartAndTagSelector } from '../../image/DockerChartAndTagSelector';\n\nexport interface IDockerTriggerConfigProps {\n formik: FormikProps<IDockerTrigger>;\n triggerUpdated: (trigger: IDockerTrigger) => void;\n}\n\nexport function DockerHelmOciTriggerConfig(props: IDockerTriggerConfigProps) {\n const { formik } = props;\n const trigger = formik.values;\n\n const dockerChanged = (changes: IDockerChartAndTagChanges) => {\n // Trigger doesn't use imageId.\n const { imageId, ...rest } = changes;\n props.triggerUpdated(rest as IDockerTrigger);\n };\n\n return (\n <div className=\"form-horizontal\">\n <DockerChartAndTagSelector\n allowManualDefinition={false}\n specifyTagByRegex={true}\n account={trigger.account}\n organization={trigger.organization}\n registry={trigger.registry}\n repository={trigger.repository}\n tag={trigger.tag}\n showRegistry={true}\n onChange={dockerChanged}\n showDigest={false}\n />\n </div>\n );\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IDockerTrigger } from '@spinnaker/core';\n\nimport type { IDockerImageAndTagChanges } from '../../image';\nimport { DockerImageAndTagSelector } from '../../image';\n\nexport interface IDockerTriggerConfigProps {\n formik: FormikProps<IDockerTrigger>;\n triggerUpdated: (trigger: IDockerTrigger) => void;\n}\n\nexport function DockerTriggerConfig(props: IDockerTriggerConfigProps) {\n const { formik } = props;\n const trigger = formik.values;\n\n const dockerChanged = (changes: IDockerImageAndTagChanges) => {\n // Trigger doesn't use imageId.\n const { imageId, ...rest } = changes;\n props.triggerUpdated(rest as IDockerTrigger);\n };\n\n return (\n <div className=\"form-horizontal\">\n <DockerImageAndTagSelector\n allowManualDefinition={false}\n specifyTagByRegex={true}\n account={trigger.account}\n organization={trigger.organization}\n registry={trigger.registry}\n repository={trigger.repository}\n tag={trigger.tag}\n showRegistry={true}\n onChange={dockerChanged}\n showDigest={false}\n />\n </div>\n );\n}\n","import { get } from 'lodash';\nimport { $q } from 'ngimport';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport type { Subscription } from 'rxjs';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { debounceTime, switchMap } from 'rxjs/operators';\n\nimport type { IDockerTrigger, IPipelineCommand, ITriggerTemplateComponentProps } from '@spinnaker/core';\nimport { HelpField, Spinner, TetheredSelect } from '@spinnaker/core';\n\nimport type { IDockerLookupType } from '../../image';\nimport { DockerChartImageReader } from '../../image';\nimport { DockerImageReader } from '../../image';\n\nconst lookupTypeOptions = [\n { value: 'digest', label: 'Digest' },\n { value: 'tag', label: 'Tag' },\n];\n\nexport interface IDockerTriggerTemplateState {\n digest: string;\n tags: string[];\n tagsLoading: boolean;\n loadError: boolean;\n lookupType: string;\n selectedTag: string;\n}\n\nexport class DockerTriggerTemplate extends React.Component<\n ITriggerTemplateComponentProps,\n IDockerTriggerTemplateState\n> {\n private queryStream = new Subject();\n private subscription: Subscription;\n\n public static formatLabel(trigger: IDockerTrigger): PromiseLike<string> {\n return $q.when(`(Docker Registry) ${trigger.account ? trigger.account + ':' : ''} ${trigger.repository || ''}`);\n }\n\n public constructor(props: ITriggerTemplateComponentProps) {\n super(props);\n this.state = {\n digest: '',\n tags: [],\n tagsLoading: true,\n loadError: false,\n lookupType: 'tag',\n selectedTag: '',\n };\n }\n\n private handleQuery = () => {\n const trigger = this.props.command.trigger as IDockerTrigger;\n if (trigger.type === 'helm/oci') {\n return observableFrom(\n DockerChartImageReader.findTags({\n provider: 'dockerRegistry', // Use helmOci provider for Helm OCI triggers\n account: trigger.account,\n repository: trigger.repository,\n }),\n );\n } else {\n return observableFrom(\n DockerImageReader.findTags({\n provider: 'dockerRegistry',\n account: trigger.account,\n repository: trigger.repository,\n }),\n );\n }\n };\n\n private lookupTypeChanged = (o: Option<IDockerLookupType>) => {\n const newType = o.value;\n this.updateArtifact(this.props.command, newType === 'tag' ? this.state.selectedTag : this.state.digest);\n this.setState({ lookupType: newType });\n };\n\n private updateArtifact(command: IPipelineCommand, tagOrDigest: string) {\n this.props.updateCommand('extraFields.tag', tagOrDigest);\n const trigger = command.trigger as IDockerTrigger;\n if (trigger && trigger.repository) {\n let imageName = '';\n if (trigger.registry) {\n imageName += trigger.registry + '/';\n }\n imageName += trigger.repository;\n\n let imageReference = '';\n if (this.state.lookupType === 'digest') {\n imageReference = `${imageName}@${tagOrDigest}`;\n } else {\n imageReference = `${imageName}:${tagOrDigest}`;\n }\n // Use 'helm/image' artifact type for helm/oci triggers, otherwise use 'docker/image'\n const artifactType = trigger.type === 'docker' ? 'docker/image' : 'helm/image';\n\n this.props.updateCommand('extraFields.artifacts', [\n {\n type: artifactType,\n name: imageName,\n version: tagOrDigest,\n reference: imageReference,\n },\n ]);\n }\n }\n\n private updateSelectedTag = (tag: string) => {\n this.updateArtifact(this.props.command, tag);\n this.setState({ selectedTag: tag });\n this.props.command.triggerInvalid = false;\n };\n\n private updateDigest = (digest: string) => {\n this.updateArtifact(this.props.command, digest);\n this.setState({ digest });\n };\n\n private tagLoadSuccess = (tags: string[]) => {\n const { command } = this.props;\n const trigger = command.trigger as IDockerTrigger;\n const newState = {} as IDockerTriggerTemplateState;\n newState.tags = tags || [];\n // default to what is supplied by the trigger if possible\n const defaultSelection = newState.tags.find((t) => t === trigger.tag);\n if (defaultSelection) {\n newState.selectedTag = defaultSelection;\n this.updateSelectedTag(defaultSelection);\n }\n newState.tagsLoading = false;\n this.setState(newState);\n };\n\n private tagLoadFailure = () => {\n this.setState({\n tagsLoading: false,\n loadError: true,\n });\n };\n\n private initialize = () => {\n const { command } = this.props;\n this.props.updateCommand('triggerInvalid', true);\n\n // These fields will be added to the trigger when the form is submitted\n this.props.updateCommand('extraFields', {\n tag: get(command, 'extraFields.tag', ''),\n artifacts: get(command, 'extraFields.artifacts', ''),\n });\n\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n\n // cancel search stream if trigger has changed to some other type\n if (command.trigger.type !== 'docker' && command.trigger.type !== 'helm/oci') {\n return;\n }\n\n this.subscription = this.queryStream\n .pipe(debounceTime(250), switchMap(this.handleQuery))\n .subscribe(this.tagLoadSuccess, this.tagLoadFailure);\n\n this.searchTags();\n };\n\n public componentDidMount() {\n this.initialize();\n }\n\n public componentWillUnmount() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private searchTags = (query = '') => {\n this.setState({ tags: [`<span>Finding tags${query && ` matching ${query}`}...</span>`] });\n this.queryStream.next();\n };\n\n public render() {\n const { digest, tags, tagsLoading, loadError, selectedTag, lookupType } = this.state;\n\n const options = tags.map((tag) => {\n return { value: tag } as Option<string>;\n });\n\n return (\n <>\n <div className=\"form-group\">\n <div className=\"sm-label-right col-md-4\">Type</div>\n <div className=\"col-md-3\">\n <TetheredSelect\n clearable={false}\n value={lookupType}\n options={lookupTypeOptions}\n onChange={this.lookupTypeChanged}\n />\n </div>\n </div>\n {lookupType === 'tag' && (\n <div className=\"form-group\">\n <label className=\"col-md-4 sm-label-right\">Tag</label>\n {tagsLoading && (\n <div className=\"col-md-6\">\n <div className=\"form-control-static text-center\">\n <Spinner size=\"small\" />\n </div>\n </div>\n )}\n {loadError && <div className=\"col-md-6\">Error loading tags!</div>}\n {!tagsLoading && (\n <div className=\"col-md-6\">\n {tags.length === 0 && (\n <div>\n <p className=\"form-control-static\">No tags found</p>\n </div>\n )}\n {tags.length > 0 && (\n <TetheredSelect\n options={options}\n optionRenderer={(o) => <span>{o.value}</span>}\n clearable={false}\n value={selectedTag}\n valueRenderer={(o) => (\n <span>\n <strong>{o.value}</strong>\n </span>\n )}\n onChange={(o: Option<string>) => this.updateSelectedTag(o.value)}\n placeholder=\"Search tags...\"\n />\n )}\n </div>\n )}\n </div>\n )}\n {lookupType === 'digest' && (\n <div className=\"form-group\">\n <label className=\"col-md-4 sm-label-right\">\n Digest <HelpField id=\"pipeline.config.docker.trigger.digest\" />\n </label>\n <div className=\"col-md-6\">\n <input\n value={digest}\n onChange={(e) => this.updateDigest(e.target.value)}\n className=\"form-control input-sm\"\n required={true}\n />\n </div>\n </div>\n )}\n </>\n );\n }\n}\n","import React from 'react';\n\nimport type { IDockerTrigger, IExecutionTriggerStatusComponentProps } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\n\nimport { DockerHelmOciTriggerConfig } from './DockerHelmOciTriggerConfig';\nimport { DockerTriggerConfig } from './DockerTriggerConfig';\nimport { DockerTriggerTemplate } from './DockerTriggerTemplate';\n\nconst DockerTriggerExecutionStatus = (props: IExecutionTriggerStatusComponentProps) => {\n const trigger = props.trigger as IDockerTrigger;\n return (\n <li>\n {trigger.repository}:{trigger.tag}\n </li>\n );\n};\n\nRegistry.pipeline.registerTrigger({\n label: 'Docker Registry',\n description: 'Executes the pipeline on an image update',\n key: 'docker',\n component: DockerTriggerConfig,\n manualExecutionComponent: DockerTriggerTemplate,\n executionStatusComponent: DockerTriggerExecutionStatus,\n executionTriggerLabel: () => 'Docker Registry',\n validators: [\n {\n type: 'requiredField',\n fieldName: 'account',\n message: '<strong>Registry</strong> is a required field for Docker Registry triggers.',\n },\n {\n type: 'requiredField',\n fieldName: 'repository',\n message: '<strong>Image</strong> is a required field for Docker Registry triggers.',\n },\n {\n type: 'serviceAccountAccess',\n preventSave: true,\n 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.`,\n },\n ],\n});\n\nRegistry.pipeline.registerTrigger({\n label: 'Helm Docker Registry',\n description: 'Executes the pipeline on an helm/image update',\n key: 'helm/oci',\n component: DockerHelmOciTriggerConfig,\n manualExecutionComponent: DockerTriggerTemplate,\n executionStatusComponent: DockerTriggerExecutionStatus,\n executionTriggerLabel: () => 'Helm Docker Registry',\n validators: [\n {\n type: 'requiredField',\n fieldName: 'account',\n message: '<strong>Registry</strong> is a required field for Docker Registry triggers.',\n },\n {\n type: 'requiredField',\n fieldName: 'repository',\n message: '<strong>Image</strong> is a required field for Docker Registry triggers.',\n },\n {\n type: 'serviceAccountAccess',\n preventSave: true,\n 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.`,\n },\n ],\n});\n","import { module } from 'angular';\n\nimport { DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE } from './pipeline/stages/bake/dockerBakeStage';\nimport './pipeline/trigger/DockerTrigger';\n\nexport const DOCKER_MODULE = 'spinnaker.docker';\nmodule(DOCKER_MODULE, [DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE]);\n"],"names":["imageFields","defineOptions","observableFrom"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/image/DockerImageReader.ts","../src/image/DockerImageUtils.ts","../src/image/DockerImageAndTagSelector.tsx","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/pipeline/stages/bake/dockerBakeStage.js","../src/image/DockerChartAndTagSelector.tsx","../src/pipeline/trigger/DockerTriggerTemplate.tsx","../src/pipeline/trigger/DockerTrigger.tsx","../src/pipeline/trigger/DockerTriggerConfig.tsx","../src/pipeline/trigger/DockerHelmOciTriggerConfig.tsx","../src/docker.module.ts"],"sourcesContent":["import type { IFindImageParams, IFindTagsParams, IImage } from '@spinnaker/core';\nimport { REST, RetryService } from '@spinnaker/core';\n\nexport interface IDockerImage extends IImage {\n account: string;\n registry: string;\n repository: string;\n tag: string;\n}\n\nexport class DockerImageReader {\n public static getImage(imageName: string, region: string, credentials: string): PromiseLike<IDockerImage> {\n return REST('/images')\n .path(credentials, region, imageName)\n .query({ provider: 'docker' })\n .get()\n .then((results: IDockerImage[]) => (results && results.length ? results[0] : null))\n .catch((): IDockerImage => null);\n }\n\n public static findImages(params: IFindImageParams): PromiseLike<IDockerImage[]> {\n return RetryService.buildRetrySequence<IDockerImage[]>(\n () => REST('/images/find').query(params).get(),\n (results: IDockerImage[]) => results.length > 0,\n 10,\n 1000,\n )\n .then((results: IDockerImage[]) => results)\n .catch((): IDockerImage[] => []);\n }\n\n public static findTags(params: IFindTagsParams): PromiseLike<string[]> {\n return RetryService.buildRetrySequence<string[]>(\n () => REST('/images/tags').query(params).get(),\n (results: string[]) => results.length > 0,\n 10,\n 1000,\n )\n .then((results: string[]) => results)\n .catch((): string[] => []);\n }\n}\n\nexport class DockerChartImageReader {\n public static getImage(imageName: string, region: string, credentials: string): PromiseLike<IDockerImage> {\n return REST('/charts')\n .path(credentials, region, imageName)\n .query({ provider: 'docker' })\n .get()\n .then((results: IDockerImage[]) => (results && results.length ? results[0] : null))\n .catch((): IDockerImage => null);\n }\n\n public static findImages(params: IFindImageParams): PromiseLike<IDockerImage[]> {\n return RetryService.buildRetrySequence<IDockerImage[]>(\n () => REST('/charts/find').query(params).get(),\n (results: IDockerImage[]) => results.length > 0,\n 10,\n 1000,\n )\n .then((results: IDockerImage[]) => results)\n .catch((): IDockerImage[] => []);\n }\n\n public static findTags(params: IFindTagsParams): PromiseLike<string[]> {\n return RetryService.buildRetrySequence<string[]>(\n () => REST('/charts/tags').query(params).get(),\n (results: string[]) => results.length > 0,\n 10,\n 1000,\n )\n .then((results: string[]) => results)\n .catch((): string[] => []);\n }\n}\n","export interface IDockerImageParts {\n organization: string;\n repository: string;\n tag?: string;\n digest?: string;\n}\n\nexport class DockerImageUtils {\n // Split the image id up into the selectable parts to feed the UI\n public static splitImageId(imageId = ''): IDockerImageParts {\n let imageParts: string[];\n if (imageId.includes('@')) {\n imageParts = imageId.split('@');\n } else {\n imageParts = imageId.split(':');\n }\n const repository = imageParts[0];\n const repositoryParts = repository.split('/');\n // Everything before the last slash is considered the organization\n const organization = repositoryParts.slice(0, -1).join('/');\n\n const lookup = imageParts.length > 1 ? imageParts.slice(1).join(':') : '';\n\n let tag: string;\n let digest: string;\n if (lookup) {\n if (lookup.startsWith('sha256:')) {\n digest = lookup;\n } else {\n tag = lookup;\n }\n }\n\n return { organization, repository, digest, tag };\n }\n\n public static generateImageId(parts: IDockerImageParts): string {\n if (!parts.repository || !(parts.digest || parts.tag)) {\n return undefined;\n }\n\n let imageId: string;\n\n if (parts.digest) {\n imageId = `${parts.repository}@${parts.digest}`;\n } else {\n imageId = `${parts.repository}:${parts.tag}`;\n }\n\n return imageId;\n }\n}\n","import { groupBy, reduce, trim, uniq } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport type { IAccount, IFindImageParams } from '@spinnaker/core';\nimport { AccountService, HelpField, Tooltip, ValidationMessage } from '@spinnaker/core';\n\nimport type { IDockerImage } from './DockerImageReader';\nimport { DockerImageReader } from './DockerImageReader';\nimport type { IDockerImageParts } from './DockerImageUtils';\nimport { DockerImageUtils } from './DockerImageUtils';\n\nexport type IDockerLookupType = 'tag' | 'digest';\n\nexport interface IDockerImageAndTagChanges {\n account?: string;\n organization?: string;\n registry?: string;\n repository?: string;\n tag?: string;\n digest?: string;\n imageId?: string;\n}\n\nexport interface IDockerImageAndTagSelectorProps {\n specifyTagByRegex: boolean;\n imageId: string;\n organization: string;\n registry: string;\n repository: string;\n tag: string;\n digest: string;\n account: string;\n showRegistry?: boolean;\n onChange: (changes: IDockerImageAndTagChanges) => void;\n deferInitialization?: boolean;\n showDigest?: boolean;\n allowManualDefinition?: boolean;\n}\n\nexport interface IDockerImageAndTagSelectorState {\n accountOptions: Array<Option<string>>;\n switchedManualWarning: string;\n missingFields?: string[];\n imagesLoaded: boolean;\n imagesLoading: boolean;\n organizationOptions: Array<Option<string>>;\n repositoryOptions: Array<Option<string>>;\n defineManually: boolean;\n tagOptions: Array<Option<string>>;\n lookupType: IDockerLookupType;\n}\n\nconst imageFields = ['organization', 'repository', 'tag', 'digest'];\nconst defineOptions = [\n { label: 'Manually', value: true },\n { label: 'Select from list', value: false },\n];\n\nexport class DockerImageAndTagSelector extends React.Component<\n IDockerImageAndTagSelectorProps,\n IDockerImageAndTagSelectorState\n> {\n public static defaultProps: Partial<IDockerImageAndTagSelectorProps> = {\n organization: '',\n registry: '',\n repository: '',\n showDigest: true,\n allowManualDefinition: true,\n };\n\n private unmounted = false;\n private images: IDockerImage[];\n private accounts: string[];\n\n private registryMap: { [key: string]: string };\n private accountMap: { [key: string]: string[] };\n private newAccounts: string[];\n private organizationMap: { [key: string]: string[] };\n private repositoryMap: { [key: string]: string[] };\n private organizations: string[];\n private cachedValues: { [key: string]: string } = {};\n\n public constructor(props: IDockerImageAndTagSelectorProps) {\n super(props);\n\n const accountOptions = props.account ? [{ label: props.account, value: props.account }] : [];\n const organizationOptions =\n props.organization && props.organization.length ? [{ label: props.organization, value: props.organization }] : [];\n const repositoryOptions =\n props.repository && props.repository.length ? [{ label: props.repository, value: props.repository }] : [];\n const tagOptions = props.tag && props.tag.length ? [{ label: props.tag, value: props.tag }] : [];\n const parsedImageId = DockerImageUtils.splitImageId(props.imageId);\n const defineManually = props.allowManualDefinition && Boolean(props.imageId && props.imageId.includes('${'));\n\n this.state = {\n accountOptions,\n switchedManualWarning: undefined,\n imagesLoaded: false,\n imagesLoading: false,\n organizationOptions,\n repositoryOptions,\n defineManually,\n tagOptions,\n lookupType: props.digest || parsedImageId.digest ? 'digest' : 'tag',\n };\n }\n\n private getAccountMap(images: IDockerImage[]): { [key: string]: string[] } {\n const groupedImages = groupBy(\n images.filter((image) => image.account),\n 'account',\n );\n return reduce<IDockerImage[], { [key: string]: string[] }>(\n groupedImages,\n (acc, image, key) => {\n acc[key] = uniq(image.map((i) => `${i.repository.split('/').slice(0, -1).join('/')}`));\n return acc;\n },\n {},\n );\n }\n\n private getRegistryMap(images: IDockerImage[]) {\n return images.reduce((m: { [key: string]: string }, image: IDockerImage) => {\n m[image.account] = image.registry;\n return m;\n }, {} as { [key: string]: string });\n }\n\n private getOrganizationMap(images: IDockerImage[]): { [key: string]: string[] } {\n const extractGroupByKey = (image: IDockerImage) =>\n `${image.account}/${image.repository.split('/').slice(0, -1).join('/')}`;\n const groupedImages = groupBy(\n images.filter((image) => image.repository),\n extractGroupByKey,\n );\n return reduce<IDockerImage[], { [key: string]: string[] }>(\n groupedImages,\n (acc, image, key) => {\n acc[key] = uniq(image.map((i) => i.repository));\n return acc;\n },\n {},\n );\n }\n\n private getRepositoryMap(images: IDockerImage[]) {\n const groupedImages = groupBy(\n images.filter((image) => image.account),\n 'repository',\n );\n return reduce<IDockerImage[], { [key: string]: string[] }>(\n groupedImages,\n (acc, image, key) => {\n acc[key] = uniq(image.map((i) => i.tag));\n return acc;\n },\n {},\n );\n }\n\n private getOrganizationsList(accountMap: { [key: string]: string[] }) {\n return accountMap ? accountMap[this.props.showRegistry ? this.props.account : this.props.registry] || [] : [];\n }\n\n private getRepositoryList(organizationMap: { [key: string]: string[] }, organization: string, registry: string) {\n if (organizationMap) {\n const key = `${this.props.showRegistry ? this.props.account : registry}/${organization || ''}`;\n return organizationMap[key] || [];\n }\n return [];\n }\n\n private getTags(tag: string, repositoryMap: { [key: string]: string[] }, repository: string) {\n let tags: string[] = [];\n if (this.props.specifyTagByRegex) {\n if (tag && trim(tag) === '') {\n tag = undefined;\n }\n } else {\n if (repositoryMap) {\n tags = repositoryMap[repository] || [];\n if (!tags.includes(tag) && tag && !tag.includes('${')) {\n tag = undefined;\n }\n }\n }\n\n return { tag, tags };\n }\n\n public componentWillReceiveProps(nextProps: IDockerImageAndTagSelectorProps) {\n if (\n !this.images ||\n ['account', 'showRegistry'].some(\n (key: keyof IDockerImageAndTagSelectorProps) => this.props[key] !== nextProps[key],\n )\n ) {\n this.refreshImages(nextProps);\n } else if (\n ['organization', 'registry', 'repository'].some(\n (key: keyof IDockerImageAndTagSelectorProps) => this.props[key] !== nextProps[key],\n )\n ) {\n this.updateThings(nextProps);\n }\n\n if (nextProps.imageId && nextProps.imageId.includes('${')) {\n this.setState({ defineManually: true });\n }\n }\n\n componentWillUnmount() {\n this.unmounted = true;\n }\n\n private synchronizeChanges(values: IDockerImageParts, registry: string) {\n const { organization, repository, tag, digest } = values;\n if (this.props.onChange) {\n const imageId = DockerImageUtils.generateImageId({ organization, repository, tag, digest });\n const changes: IDockerImageAndTagChanges = {};\n if (tag !== this.props.tag) {\n changes.tag = tag;\n }\n if (imageId !== this.props.imageId) {\n changes.imageId = imageId;\n }\n if (organization !== this.props.organization) {\n changes.organization = organization;\n }\n if (registry !== this.props.registry) {\n changes.registry = registry;\n }\n if (repository !== this.props.repository) {\n changes.repository = repository;\n }\n if (digest !== this.props.digest) {\n changes.digest = digest;\n }\n if (Object.keys(changes).length > 0) {\n this.props.onChange(changes);\n }\n }\n }\n\n private updateThings(props: IDockerImageAndTagSelectorProps, allowAutoSwitchToManualEntry = false) {\n if (!this.repositoryMap || this.unmounted) {\n return;\n }\n\n const { imageId, specifyTagByRegex } = props;\n let { organization, registry, repository } = props;\n\n if (props.showRegistry) {\n registry = this.registryMap[props.account];\n }\n\n const organizationFound = !organization || this.organizations.includes(organization) || organization.includes('${');\n if (!organizationFound) {\n organization = '';\n }\n\n const repositories = this.getRepositoryList(this.organizationMap, organization, registry);\n const repositoryFound = !repository || repository.includes('${') || repositories.includes(repository);\n\n if (!repositoryFound) {\n repository = '';\n }\n\n const { tag, tags } = this.getTags(props.tag, this.repositoryMap, repository);\n const tagFound = tag === props.tag || specifyTagByRegex;\n\n const newState = {\n accountOptions: this.newAccounts.sort().map((a) => ({ label: a, value: a })),\n organizationOptions: this.organizations\n .filter((o) => o)\n .sort()\n .map((o) => ({ label: o, value: o })),\n imagesLoaded: true,\n repositoryOptions: repositories.sort().map((r) => ({ label: r, value: r })),\n tagOptions: tags.sort().map((t) => ({ label: t, value: t })),\n } as IDockerImageAndTagSelectorState;\n\n if (\n imageId &&\n (!this.state.imagesLoaded || allowAutoSwitchToManualEntry) &&\n (!organizationFound || !repositoryFound || !tagFound)\n ) {\n newState.defineManually = true;\n\n const missingFields: string[] = [];\n if (!organizationFound) {\n missingFields.push('organization');\n }\n if (!repositoryFound) {\n missingFields.push('image');\n }\n if (!tagFound) {\n missingFields.push('tag');\n }\n newState.missingFields = missingFields;\n newState.switchedManualWarning = `Could not find ${missingFields.join(' or ')}, switched to manual entry`;\n } else if (!imageId || !imageId.includes('${')) {\n this.synchronizeChanges(\n this.state.defineManually\n ? DockerImageUtils.splitImageId(imageId)\n : { organization, repository, tag, digest: this.props.digest },\n registry,\n );\n }\n\n this.setState(newState);\n }\n\n private initializeImages(props: IDockerImageAndTagSelectorProps) {\n if (this.state.imagesLoading) {\n return;\n }\n\n const { showRegistry, account, registry } = props;\n\n const imageConfig: IFindImageParams = {\n provider: 'dockerRegistry',\n account: showRegistry ? account : registry,\n };\n\n this.setState({ imagesLoading: true });\n DockerImageReader.findImages(imageConfig)\n .then((images: IDockerImage[]) => {\n this.images = images;\n this.registryMap = this.getRegistryMap(this.images);\n this.accountMap = this.getAccountMap(this.images);\n this.newAccounts = this.accounts || Object.keys(this.accountMap);\n\n this.organizationMap = this.getOrganizationMap(this.images);\n this.repositoryMap = this.getRepositoryMap(this.images);\n this.organizations = this.getOrganizationsList(this.accountMap);\n this.updateThings(props, true);\n })\n .finally(() => {\n if (!this.unmounted) {\n this.setState({ imagesLoading: false });\n }\n });\n }\n\n public handleRefreshImages = (): void => {\n this.refreshImages(this.props);\n };\n\n public refreshImages(props: IDockerImageAndTagSelectorProps): void {\n this.initializeImages(props);\n }\n\n private initializeAccounts(props: IDockerImageAndTagSelectorProps) {\n let { account } = props;\n AccountService.listAccounts('dockerRegistry').then((allAccounts: IAccount[]) => {\n const accounts = allAccounts.map((a: IAccount) => a.name);\n if (this.props.showRegistry && !account) {\n account = accounts[0];\n }\n this.accounts = accounts;\n this.refreshImages({ ...props, ...{ account } });\n });\n }\n\n private isNew(): boolean {\n const { account, organization, registry, repository, tag } = this.props;\n return !account && !organization && !registry && !repository && !tag;\n }\n\n public componentDidMount() {\n if (!this.props.deferInitialization && (this.props.registry || this.isNew())) {\n this.initializeAccounts(this.props);\n }\n }\n\n private valueChanged(name: string, value: string) {\n const changes = { [name]: value };\n if (imageFields.some((n) => n === name)) {\n // values are parts of the image\n const { organization, repository, tag, digest } = this.props;\n const imageParts = { ...{ organization, repository, tag, digest }, ...changes };\n const imageId = DockerImageUtils.generateImageId(imageParts);\n changes.imageId = imageId;\n }\n this.props.onChange && this.props.onChange(changes);\n }\n\n private lookupTypeChanged = (o: Option<IDockerLookupType>) => {\n const newType = o.value;\n const oldType = this.state.lookupType;\n const oldValue = this.props[oldType];\n const cachedValue = this.cachedValues[newType];\n\n this.valueChanged(oldType, undefined);\n if (this.cachedValues[newType]) {\n this.valueChanged(newType, cachedValue);\n }\n this.setState({ lookupType: newType });\n this.cachedValues[oldType] = oldValue;\n };\n\n private showManualInput = (defineManually: boolean) => {\n if (!defineManually) {\n const newFields = DockerImageUtils.splitImageId(this.props.imageId || '');\n this.props.onChange(newFields);\n if (this.state.switchedManualWarning) {\n this.setState({ switchedManualWarning: undefined, missingFields: undefined });\n }\n }\n this.setState({ defineManually });\n };\n\n public render() {\n const {\n account,\n allowManualDefinition,\n digest,\n imageId,\n organization,\n repository,\n showDigest,\n showRegistry,\n specifyTagByRegex,\n tag,\n } = this.props;\n const {\n accountOptions,\n switchedManualWarning,\n missingFields,\n imagesLoading,\n lookupType,\n organizationOptions,\n repositoryOptions,\n defineManually,\n tagOptions,\n } = this.state;\n\n const parsedImageId = DockerImageUtils.splitImageId(imageId);\n\n const manualInputToggle = (\n <div className=\"sp-formItem groupHeader\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Define Image ID</div>\n\n <div className=\"sp-formActions sp-formActions--mobile\">\n <span className=\"action\" />\n </div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <Select\n value={defineManually}\n disabled={imagesLoading || !allowManualDefinition}\n onChange={(o: Option<boolean>) => this.showManualInput(o.value)}\n options={defineOptions}\n clearable={false}\n />\n </span>\n </div>\n </div>\n </div>\n );\n\n const warning = switchedManualWarning ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\" />\n <div className=\"sp-formItem__right\">\n <ValidationMessage\n type=\"warning\"\n message={\n <>\n {switchedManualWarning}\n {(missingFields || []).map((f) => (\n <div key={f}>\n <HelpField expand={true} id={`pipeline.config.docker.trigger.missing.${f}`} />\n </div>\n ))}\n </>\n }\n />\n </div>\n </div>\n ) : null;\n\n if (defineManually) {\n return (\n <div className=\"sp-formGroup\">\n {manualInputToggle}\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Image ID</div>\n <div className=\"sp-formActions sp-formActions--mobile\">\n <span className=\"action\" />\n </div>\n </div>\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <input\n className=\"form-control input-sm\"\n value={imageId || ''}\n onChange={(e) => this.valueChanged('imageId', e.target.value)}\n />\n </span>\n </div>\n </div>\n </div>\n {warning}\n </div>\n );\n }\n\n const Registry = showRegistry ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Registry Name</div>\n </div>\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <Select\n value={account}\n disabled={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('account', o ? o.value : '')}\n options={accountOptions}\n isLoading={imagesLoading}\n />\n </span>\n <span className=\"sp-formActions sp-formActions--web\">\n <span className=\"action\">\n <Tooltip value={imagesLoading ? 'Images refreshing' : 'Refresh images list'}>\n <i\n className={`fa icon-button-refresh-arrows ${imagesLoading ? 'fa-spin' : ''}`}\n onClick={this.handleRefreshImages}\n />\n </Tooltip>\n </span>\n </span>\n </div>\n </div>\n </div>\n ) : null;\n\n const Organization = (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Organization</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n {organization.includes('${') ? (\n <input\n disabled={imagesLoading}\n className=\"form-control input-sm\"\n value={organization || ''}\n onChange={(e) => this.valueChanged('organization', e.target.value)}\n />\n ) : (\n <Select\n value={organization || ''}\n disabled={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('organization', (o && o.value) || '')}\n placeholder=\"No organization\"\n options={organizationOptions}\n isLoading={imagesLoading}\n />\n )}\n </span>\n </div>\n </div>\n </div>\n );\n\n const Image = (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Image</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n {repository.includes('${') ? (\n <input\n className=\"form-control input-sm\"\n disabled={imagesLoading}\n value={repository || ''}\n onChange={(e) => this.valueChanged('repository', e.target.value)}\n />\n ) : (\n <Select\n value={repository || ''}\n disabled={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('repository', (o && o.value) || '')}\n options={repositoryOptions}\n required={true}\n isLoading={imagesLoading}\n />\n )}\n </span>\n </div>\n </div>\n </div>\n );\n\n const Tag =\n lookupType === 'tag' ? (\n specifyTagByRegex ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Tag</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <input\n type=\"text\"\n className=\"form-control input-sm\"\n value={tag || ''}\n disabled={imagesLoading || !repository}\n onChange={(e) => this.valueChanged('tag', e.target.value)}\n />\n </span>\n </div>\n <HelpField id=\"pipeline.config.docker.trigger.tag\" expand={true} />\n </div>\n </div>\n ) : (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Tag</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n {tag && tag.includes('${') ? (\n <input\n className=\"form-control input-sm\"\n disabled={imagesLoading}\n value={tag || ''}\n onChange={(e) => this.valueChanged('tag', e.target.value)}\n required={true}\n />\n ) : (\n <>\n <Select\n value={tag || ''}\n disabled={imagesLoading || !repository}\n isLoading={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('tag', o ? o.value : undefined)}\n options={tagOptions}\n placeholder=\"No tag\"\n required={true}\n />\n <HelpField id=\"pipeline.config.docker.trigger.tag.additionalInfo\" expand={true} />\n </>\n )}\n </span>\n </div>\n </div>\n </div>\n )\n ) : null;\n\n const Digest =\n lookupType === 'digest' ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">\n Digest <HelpField id=\"pipeline.config.docker.trigger.digest\" />\n </div>\n </div>\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <input\n className=\"form-control input-sm\"\n placeholder=\"sha256:abc123\"\n value={digest || parsedImageId.digest || ''}\n onChange={(e) => this.valueChanged('digest', e.target.value)}\n required={true}\n />\n </span>\n </div>\n </div>\n </div>\n ) : null;\n\n const LookupTypeSelector = showDigest ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Type</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <Select\n clearable={false}\n value={lookupType}\n options={[\n { value: 'digest', label: 'Digest' },\n { value: 'tag', label: 'Tag' },\n ]}\n onChange={this.lookupTypeChanged}\n />\n </span>\n </div>\n </div>\n </div>\n ) : null;\n\n return (\n <div className=\"sp-formGroup\">\n {manualInputToggle}\n {Registry}\n {Organization}\n {Image}\n {LookupTypeSelector}\n {Digest}\n {Tag}\n </div>\n );\n }\n}\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nexport const DOCKER_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.docker.pipeline.stage.bake.executionDetails.controller';\nexport const name = DOCKER_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(DOCKER_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'dockerBakeExecutionDetailsCtrl',\n [\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($scope, $stateParams, executionDetailsSectionService, $interpolate) {\n $scope.configSections = ['bakeConfig', 'taskStatus'];\n\n const initialized = () => {\n $scope.detailsSection = $stateParams.details;\n $scope.provider = $scope.stage.context.cloudProviderType || 'docker';\n $scope.bakeryDetailUrl = $interpolate(\n $scope.roscoMode && SETTINGS.roscoDetailUrl ? SETTINGS.roscoDetailUrl : SETTINGS.bakeryDetailUrl,\n );\n };\n\n const initialize = () => executionDetailsSectionService.synchronizeSection($scope.configSections, initialized);\n\n initialize();\n\n $scope.$on('$stateChangeSuccess', initialize);\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AuthenticationService, BakeExecutionLabel, BakeryReader, Registry } from '@spinnaker/core';\nimport { DOCKER_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\n\n/*\n This stage is just here so that we can experiment with baking Docker containers within pipelines.\n Without this stage, programmatically-created pipelines with Docker bake stages would not render\n execution details.\n */\nexport const DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE = 'spinnaker.docker.pipeline.stage.bakeStage';\nexport const name = DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE; // for backwards compatibility\nmodule(DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE, [DOCKER_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'docker',\n label: 'Bake',\n description: 'Bakes an image',\n templateUrl: require('./bakeStage.html'),\n executionDetailsUrl: require('./bakeExecutionDetails.html'),\n executionLabelComponent: BakeExecutionLabel,\n extraLabelLines: (stage) => {\n return stage.masterStage.context.allPreviouslyBaked || stage.masterStage.context.somePreviouslyBaked ? 1 : 0;\n },\n supportsCustomTimeout: true,\n validators: [{ type: 'requiredField', fieldName: 'package' }],\n restartable: true,\n });\n })\n .controller('dockerBakeStageCtrl', [\n '$scope',\n '$q',\n function ($scope, $q) {\n const stage = $scope.stage;\n\n stage.region = 'global';\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n $scope.viewState = {\n loading: true,\n };\n\n function initialize() {\n $scope.viewState.providerSelected = true;\n $q.all([BakeryReader.getBaseOsOptions('docker'), BakeryReader.getBaseLabelOptions()]).then(function ([\n baseOsOptions,\n baseLabelOptions,\n ]) {\n $scope.baseOsOptions = baseOsOptions.baseImages;\n $scope.baseLabelOptions = baseLabelOptions;\n\n if (!$scope.stage.baseOs && $scope.baseOsOptions && $scope.baseOsOptions.length) {\n $scope.stage.baseOs = $scope.baseOsOptions[0].id;\n }\n if (!$scope.stage.baseLabel && $scope.baseLabelOptions && $scope.baseLabelOptions.length) {\n $scope.stage.baseLabel = $scope.baseLabelOptions[0];\n }\n $scope.viewState.loading = false;\n });\n }\n\n function deleteEmptyProperties() {\n _.forOwn($scope.stage, function (val, key) {\n if (val === '') {\n delete $scope.stage[key];\n }\n });\n }\n\n $scope.$watch('stage', deleteEmptyProperties, true);\n\n initialize();\n },\n ]);\n","import { groupBy, reduce, trim, uniq } from 'lodash';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport Select from 'react-select';\n\nimport type { IAccount, IFindImageParams } from '@spinnaker/core';\nimport { AccountService, HelpField, Tooltip, ValidationMessage } from '@spinnaker/core';\n\nimport type { IDockerImage } from './DockerImageReader';\nimport { DockerChartImageReader } from './DockerImageReader';\nimport type { IDockerImageParts } from './DockerImageUtils';\nimport { DockerImageUtils } from './DockerImageUtils';\n\nexport type IDockerLookupType = 'tag' | 'digest';\n\nexport interface IDockerChartAndTagChanges {\n account?: string;\n organization?: string;\n registry?: string;\n repository?: string;\n tag?: string;\n digest?: string;\n imageId?: string;\n}\n\nexport interface IDockerChartAndTagSelectorProps {\n specifyTagByRegex: boolean;\n imageId: string;\n organization: string;\n registry: string;\n repository: string;\n tag: string;\n digest: string;\n account: string;\n showRegistry?: boolean;\n onChange: (changes: IDockerChartAndTagChanges) => void;\n deferInitialization?: boolean;\n showDigest?: boolean;\n allowManualDefinition?: boolean;\n}\n\nexport interface IDockerChartAndTagSelectorState {\n accountOptions: Array<Option<string>>;\n switchedManualWarning: string;\n missingFields?: string[];\n imagesLoaded: boolean;\n imagesLoading: boolean;\n organizationOptions: Array<Option<string>>;\n repositoryOptions: Array<Option<string>>;\n defineManually: boolean;\n tagOptions: Array<Option<string>>;\n lookupType: IDockerLookupType;\n}\n\nconst imageFields = ['organization', 'repository', 'tag', 'digest'];\nconst defineOptions = [\n { label: 'Manually', value: true },\n { label: 'Select from list', value: false },\n];\n\nexport class DockerChartAndTagSelector extends React.Component<\n IDockerChartAndTagSelectorProps,\n IDockerChartAndTagSelectorState\n> {\n public static defaultProps: Partial<IDockerChartAndTagSelectorProps> = {\n organization: '',\n registry: '',\n repository: '',\n showDigest: true,\n allowManualDefinition: true,\n };\n\n private unmounted = false;\n private images: IDockerImage[];\n private accounts: string[];\n\n private registryMap: { [key: string]: string };\n private accountMap: { [key: string]: string[] };\n private newAccounts: string[];\n private organizationMap: { [key: string]: string[] };\n private repositoryMap: { [key: string]: string[] };\n private organizations: string[];\n private cachedValues: { [key: string]: string } = {};\n\n public constructor(props: IDockerChartAndTagSelectorProps) {\n super(props);\n\n const accountOptions = props.account ? [{ label: props.account, value: props.account }] : [];\n const organizationOptions =\n props.organization && props.organization.length ? [{ label: props.organization, value: props.organization }] : [];\n const repositoryOptions =\n props.repository && props.repository.length ? [{ label: props.repository, value: props.repository }] : [];\n const tagOptions = props.tag && props.tag.length ? [{ label: props.tag, value: props.tag }] : [];\n const parsedImageId = DockerImageUtils.splitImageId(props.imageId);\n const defineManually = props.allowManualDefinition && Boolean(props.imageId && props.imageId.includes('${'));\n\n this.state = {\n accountOptions,\n switchedManualWarning: undefined,\n imagesLoaded: false,\n imagesLoading: false,\n organizationOptions,\n repositoryOptions,\n defineManually,\n tagOptions,\n lookupType: props.digest || parsedImageId.digest ? 'digest' : 'tag',\n };\n }\n\n private getAccountMap(images: IDockerImage[]): { [key: string]: string[] } {\n const groupedImages = groupBy(\n images.filter((image) => image.account),\n 'account',\n );\n return reduce<IDockerImage[], { [key: string]: string[] }>(\n groupedImages,\n (acc, image, key) => {\n acc[key] = uniq(image.map((i) => `${i.repository.split('/').slice(0, -1).join('/')}`));\n return acc;\n },\n {},\n );\n }\n\n private getRegistryMap(images: IDockerImage[]) {\n return images.reduce((m: { [key: string]: string }, image: IDockerImage) => {\n m[image.account] = image.registry;\n return m;\n }, {} as { [key: string]: string });\n }\n\n private getOrganizationMap(images: IDockerImage[]): { [key: string]: string[] } {\n const extractGroupByKey = (image: IDockerImage) =>\n `${image.account}/${image.repository.split('/').slice(0, -1).join('/')}`;\n const groupedImages = groupBy(\n images.filter((image) => image.repository),\n extractGroupByKey,\n );\n return reduce<IDockerImage[], { [key: string]: string[] }>(\n groupedImages,\n (acc, image, key) => {\n acc[key] = uniq(image.map((i) => i.repository));\n return acc;\n },\n {},\n );\n }\n\n private getRepositoryMap(images: IDockerImage[]) {\n const groupedImages = groupBy(\n images.filter((image) => image.account),\n 'repository',\n );\n return reduce<IDockerImage[], { [key: string]: string[] }>(\n groupedImages,\n (acc, image, key) => {\n acc[key] = uniq(image.map((i) => i.tag));\n return acc;\n },\n {},\n );\n }\n\n private getOrganizationsList(accountMap: { [key: string]: string[] }) {\n return accountMap ? accountMap[this.props.showRegistry ? this.props.account : this.props.registry] || [] : [];\n }\n\n private getRepositoryList(organizationMap: { [key: string]: string[] }, organization: string, registry: string) {\n if (organizationMap) {\n const key = `${this.props.showRegistry ? this.props.account : registry}/${organization || ''}`;\n return organizationMap[key] || [];\n }\n return [];\n }\n\n private getTags(tag: string, repositoryMap: { [key: string]: string[] }, repository: string) {\n let tags: string[] = [];\n if (this.props.specifyTagByRegex) {\n if (tag && trim(tag) === '') {\n tag = undefined;\n }\n } else {\n if (repositoryMap) {\n tags = repositoryMap[repository] || [];\n if (!tags.includes(tag) && tag && !tag.includes('${')) {\n tag = undefined;\n }\n }\n }\n\n return { tag, tags };\n }\n\n public componentWillReceiveProps(nextProps: IDockerChartAndTagSelectorProps) {\n if (\n !this.images ||\n ['account', 'showRegistry'].some(\n (key: keyof IDockerChartAndTagSelectorProps) => this.props[key] !== nextProps[key],\n )\n ) {\n this.refreshImages(nextProps);\n } else if (\n ['organization', 'registry', 'repository'].some(\n (key: keyof IDockerChartAndTagSelectorProps) => this.props[key] !== nextProps[key],\n )\n ) {\n this.updateThings(nextProps);\n }\n\n if (nextProps.imageId && nextProps.imageId.includes('${')) {\n this.setState({ defineManually: true });\n }\n }\n\n componentWillUnmount() {\n this.unmounted = true;\n }\n\n private synchronizeChanges(values: IDockerImageParts, registry: string) {\n const { organization, repository, tag, digest } = values;\n if (this.props.onChange) {\n const imageId = DockerImageUtils.generateImageId({ organization, repository, tag, digest });\n const changes: IDockerChartAndTagChanges = {};\n if (tag !== this.props.tag) {\n changes.tag = tag;\n }\n if (imageId !== this.props.imageId) {\n changes.imageId = imageId;\n }\n if (organization !== this.props.organization) {\n changes.organization = organization;\n }\n if (registry !== this.props.registry) {\n changes.registry = registry;\n }\n if (repository !== this.props.repository) {\n changes.repository = repository;\n }\n if (digest !== this.props.digest) {\n changes.digest = digest;\n }\n if (Object.keys(changes).length > 0) {\n this.props.onChange(changes);\n }\n }\n }\n\n private updateThings(props: IDockerChartAndTagSelectorProps, allowAutoSwitchToManualEntry = false) {\n if (!this.repositoryMap || this.unmounted) {\n return;\n }\n\n const { imageId, specifyTagByRegex } = props;\n let { organization, registry, repository } = props;\n\n if (props.showRegistry) {\n registry = this.registryMap[props.account];\n }\n\n const organizationFound = !organization || this.organizations.includes(organization) || organization.includes('${');\n if (!organizationFound) {\n organization = '';\n }\n\n const repositories = this.getRepositoryList(this.organizationMap, organization, registry);\n const repositoryFound = !repository || repository.includes('${') || repositories.includes(repository);\n\n if (!repositoryFound) {\n repository = '';\n }\n\n const { tag, tags } = this.getTags(props.tag, this.repositoryMap, repository);\n const tagFound = tag === props.tag || specifyTagByRegex;\n\n const newState = {\n accountOptions: this.newAccounts.sort().map((a) => ({ label: a, value: a })),\n organizationOptions: this.organizations\n .filter((o) => o)\n .sort()\n .map((o) => ({ label: o, value: o })),\n imagesLoaded: true,\n repositoryOptions: repositories.sort().map((r) => ({ label: r, value: r })),\n tagOptions: tags.sort().map((t) => ({ label: t, value: t })),\n } as IDockerChartAndTagSelectorState;\n\n if (\n imageId &&\n (!this.state.imagesLoaded || allowAutoSwitchToManualEntry) &&\n (!organizationFound || !repositoryFound || !tagFound)\n ) {\n newState.defineManually = true;\n\n const missingFields: string[] = [];\n if (!organizationFound) {\n missingFields.push('organization');\n }\n if (!repositoryFound) {\n missingFields.push('image');\n }\n if (!tagFound) {\n missingFields.push('tag');\n }\n newState.missingFields = missingFields;\n newState.switchedManualWarning = `Could not find ${missingFields.join(' or ')}, switched to manual entry`;\n } else if (!imageId || !imageId.includes('${')) {\n this.synchronizeChanges(\n this.state.defineManually\n ? DockerImageUtils.splitImageId(imageId)\n : { organization, repository, tag, digest: this.props.digest },\n registry,\n );\n }\n\n this.setState(newState);\n }\n\n private initializeImages(props: IDockerChartAndTagSelectorProps) {\n if (this.state.imagesLoading) {\n return;\n }\n\n const { showRegistry, account, registry } = props;\n\n const imageConfig: IFindImageParams = {\n provider: 'dockerRegistry',\n account: showRegistry ? account : registry,\n };\n\n this.setState({ imagesLoading: true });\n DockerChartImageReader.findImages(imageConfig)\n .then((images: IDockerImage[]) => {\n this.images = images;\n this.registryMap = this.getRegistryMap(this.images);\n this.accountMap = this.getAccountMap(this.images);\n this.newAccounts = this.accounts || Object.keys(this.accountMap);\n\n this.organizationMap = this.getOrganizationMap(this.images);\n this.repositoryMap = this.getRepositoryMap(this.images);\n this.organizations = this.getOrganizationsList(this.accountMap);\n this.updateThings(props, true);\n })\n .finally(() => {\n if (!this.unmounted) {\n this.setState({ imagesLoading: false });\n }\n });\n }\n\n public handleRefreshImages = (): void => {\n this.refreshImages(this.props);\n };\n\n public refreshImages(props: IDockerChartAndTagSelectorProps): void {\n this.initializeImages(props);\n }\n\n private initializeAccounts(props: IDockerChartAndTagSelectorProps) {\n let { account } = props;\n AccountService.listAccounts('dockerRegistry').then((allAccounts: IAccount[]) => {\n const accounts = allAccounts.map((a: IAccount) => a.name);\n if (this.props.showRegistry && !account) {\n account = accounts[0];\n }\n this.accounts = accounts;\n this.refreshImages({ ...props, ...{ account } });\n });\n }\n\n private isNew(): boolean {\n const { account, organization, registry, repository, tag } = this.props;\n return !account && !organization && !registry && !repository && !tag;\n }\n\n public componentDidMount() {\n if (!this.props.deferInitialization && (this.props.registry || this.isNew())) {\n this.initializeAccounts(this.props);\n }\n }\n\n private valueChanged(name: string, value: string) {\n const changes = { [name]: value };\n if (imageFields.some((n) => n === name)) {\n // values are parts of the image\n const { organization, repository, tag, digest } = this.props;\n const imageParts = { ...{ organization, repository, tag, digest }, ...changes };\n const imageId = DockerImageUtils.generateImageId(imageParts);\n changes.imageId = imageId;\n }\n this.props.onChange && this.props.onChange(changes);\n }\n\n private lookupTypeChanged = (o: Option<IDockerLookupType>) => {\n const newType = o.value;\n const oldType = this.state.lookupType;\n const oldValue = this.props[oldType];\n const cachedValue = this.cachedValues[newType];\n\n this.valueChanged(oldType, undefined);\n if (this.cachedValues[newType]) {\n this.valueChanged(newType, cachedValue);\n }\n this.setState({ lookupType: newType });\n this.cachedValues[oldType] = oldValue;\n };\n\n private showManualInput = (defineManually: boolean) => {\n if (!defineManually) {\n const newFields = DockerImageUtils.splitImageId(this.props.imageId || '');\n this.props.onChange(newFields);\n if (this.state.switchedManualWarning) {\n this.setState({ switchedManualWarning: undefined, missingFields: undefined });\n }\n }\n this.setState({ defineManually });\n };\n\n public render() {\n const {\n account,\n allowManualDefinition,\n digest,\n imageId,\n organization,\n repository,\n showDigest,\n showRegistry,\n specifyTagByRegex,\n tag,\n } = this.props;\n const {\n accountOptions,\n switchedManualWarning,\n missingFields,\n imagesLoading,\n lookupType,\n organizationOptions,\n repositoryOptions,\n defineManually,\n tagOptions,\n } = this.state;\n\n const parsedImageId = DockerImageUtils.splitImageId(imageId);\n\n const manualInputToggle = (\n <div className=\"sp-formItem groupHeader\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Define Image ID</div>\n\n <div className=\"sp-formActions sp-formActions--mobile\">\n <span className=\"action\" />\n </div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <Select\n value={defineManually}\n disabled={imagesLoading || !allowManualDefinition}\n onChange={(o: Option<boolean>) => this.showManualInput(o.value)}\n options={defineOptions}\n clearable={false}\n />\n </span>\n </div>\n </div>\n </div>\n );\n\n const warning = switchedManualWarning ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\" />\n <div className=\"sp-formItem__right\">\n <ValidationMessage\n type=\"warning\"\n message={\n <>\n {switchedManualWarning}\n {(missingFields || []).map((f) => (\n <div key={f}>\n <HelpField expand={true} id={`pipeline.config.docker.trigger.missing.${f}`} />\n </div>\n ))}\n </>\n }\n />\n </div>\n </div>\n ) : null;\n\n if (defineManually) {\n return (\n <div className=\"sp-formGroup\">\n {manualInputToggle}\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Image ID</div>\n <div className=\"sp-formActions sp-formActions--mobile\">\n <span className=\"action\" />\n </div>\n </div>\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <input\n className=\"form-control input-sm\"\n value={imageId || ''}\n onChange={(e) => this.valueChanged('imageId', e.target.value)}\n />\n </span>\n </div>\n </div>\n </div>\n {warning}\n </div>\n );\n }\n\n const Registry = showRegistry ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Registry Name</div>\n </div>\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <Select\n value={account}\n disabled={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('account', o ? o.value : '')}\n options={accountOptions}\n isLoading={imagesLoading}\n />\n </span>\n <span className=\"sp-formActions sp-formActions--web\">\n <span className=\"action\">\n <Tooltip value={imagesLoading ? 'Images refreshing' : 'Refresh images list'}>\n <i\n className={`fa icon-button-refresh-arrows ${imagesLoading ? 'fa-spin' : ''}`}\n onClick={this.handleRefreshImages}\n />\n </Tooltip>\n </span>\n </span>\n </div>\n </div>\n </div>\n ) : null;\n\n const Organization = (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Organization</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n {organization.includes('${') ? (\n <input\n disabled={imagesLoading}\n className=\"form-control input-sm\"\n value={organization || ''}\n onChange={(e) => this.valueChanged('organization', e.target.value)}\n />\n ) : (\n <Select\n value={organization || ''}\n disabled={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('organization', (o && o.value) || '')}\n placeholder=\"No organization\"\n options={organizationOptions}\n isLoading={imagesLoading}\n />\n )}\n </span>\n </div>\n </div>\n </div>\n );\n\n const Image = (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Image</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n {repository.includes('${') ? (\n <input\n className=\"form-control input-sm\"\n disabled={imagesLoading}\n value={repository || ''}\n onChange={(e) => this.valueChanged('repository', e.target.value)}\n />\n ) : (\n <Select\n value={repository || ''}\n disabled={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('repository', (o && o.value) || '')}\n options={repositoryOptions}\n required={true}\n isLoading={imagesLoading}\n />\n )}\n </span>\n </div>\n </div>\n </div>\n );\n\n const Tag =\n lookupType === 'tag' ? (\n specifyTagByRegex ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Tag</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <input\n type=\"text\"\n className=\"form-control input-sm\"\n value={tag || ''}\n disabled={imagesLoading || !repository}\n onChange={(e) => this.valueChanged('tag', e.target.value)}\n />\n </span>\n </div>\n <HelpField id=\"pipeline.config.docker.trigger.tag\" expand={true} />\n </div>\n </div>\n ) : (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Tag</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n {tag && tag.includes('${') ? (\n <input\n className=\"form-control input-sm\"\n disabled={imagesLoading}\n value={tag || ''}\n onChange={(e) => this.valueChanged('tag', e.target.value)}\n required={true}\n />\n ) : (\n <>\n <Select\n value={tag || ''}\n disabled={imagesLoading || !repository}\n isLoading={imagesLoading}\n onChange={(o: Option<string>) => this.valueChanged('tag', o ? o.value : undefined)}\n options={tagOptions}\n placeholder=\"No tag\"\n required={true}\n />\n <HelpField id=\"pipeline.config.docker.trigger.tag.additionalInfo\" expand={true} />\n </>\n )}\n </span>\n </div>\n </div>\n </div>\n )\n ) : null;\n\n const Digest =\n lookupType === 'digest' ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">\n Digest <HelpField id=\"pipeline.config.docker.trigger.digest\" />\n </div>\n </div>\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <input\n className=\"form-control input-sm\"\n placeholder=\"sha256:abc123\"\n value={digest || parsedImageId.digest || ''}\n onChange={(e) => this.valueChanged('digest', e.target.value)}\n required={true}\n />\n </span>\n </div>\n </div>\n </div>\n ) : null;\n\n const LookupTypeSelector = showDigest ? (\n <div className=\"sp-formItem\">\n <div className=\"sp-formItem__left\">\n <div className=\"sp-formLabel\">Type</div>\n </div>\n\n <div className=\"sp-formItem__right\">\n <div className=\"sp-form\">\n <span className=\"field\">\n <Select\n clearable={false}\n value={lookupType}\n options={[\n { value: 'digest', label: 'Digest' },\n { value: 'tag', label: 'Tag' },\n ]}\n onChange={this.lookupTypeChanged}\n />\n </span>\n </div>\n </div>\n </div>\n ) : null;\n\n return (\n <div className=\"sp-formGroup\">\n {manualInputToggle}\n {Registry}\n {Organization}\n {Image}\n {LookupTypeSelector}\n {Digest}\n {Tag}\n </div>\n );\n }\n}\n","import { get } from 'lodash';\nimport { $q } from 'ngimport';\nimport React from 'react';\nimport type { Option } from 'react-select';\nimport type { Subscription } from 'rxjs';\nimport { from as observableFrom, Subject } from 'rxjs';\nimport { debounceTime, switchMap } from 'rxjs/operators';\n\nimport type { IDockerTrigger, IPipelineCommand, ITriggerTemplateComponentProps } from '@spinnaker/core';\nimport { HelpField, Spinner, TetheredSelect } from '@spinnaker/core';\n\nimport type { IDockerLookupType } from '../../image';\nimport { DockerChartImageReader } from '../../image';\nimport { DockerImageReader } from '../../image';\n\nconst lookupTypeOptions = [\n { value: 'digest', label: 'Digest' },\n { value: 'tag', label: 'Tag' },\n];\n\nexport interface IDockerTriggerTemplateState {\n digest: string;\n tags: string[];\n tagsLoading: boolean;\n loadError: boolean;\n lookupType: string;\n selectedTag: string;\n}\n\nexport class DockerTriggerTemplate extends React.Component<\n ITriggerTemplateComponentProps,\n IDockerTriggerTemplateState\n> {\n private queryStream = new Subject();\n private subscription: Subscription;\n\n public static formatLabel(trigger: IDockerTrigger): PromiseLike<string> {\n return $q.when(`(Docker Registry) ${trigger.account ? trigger.account + ':' : ''} ${trigger.repository || ''}`);\n }\n\n public constructor(props: ITriggerTemplateComponentProps) {\n super(props);\n this.state = {\n digest: '',\n tags: [],\n tagsLoading: true,\n loadError: false,\n lookupType: 'tag',\n selectedTag: '',\n };\n }\n\n private handleQuery = () => {\n const trigger = this.props.command.trigger as IDockerTrigger;\n if (trigger.type === 'helm/oci') {\n return observableFrom(\n DockerChartImageReader.findTags({\n provider: 'dockerRegistry', // Use helmOci provider for Helm OCI triggers\n account: trigger.account,\n repository: trigger.repository,\n }),\n );\n } else {\n return observableFrom(\n DockerImageReader.findTags({\n provider: 'dockerRegistry',\n account: trigger.account,\n repository: trigger.repository,\n }),\n );\n }\n };\n\n private lookupTypeChanged = (o: Option<IDockerLookupType>) => {\n const newType = o.value;\n this.updateArtifact(this.props.command, newType === 'tag' ? this.state.selectedTag : this.state.digest);\n this.setState({ lookupType: newType });\n };\n\n private updateArtifact(command: IPipelineCommand, tagOrDigest: string) {\n this.props.updateCommand('extraFields.tag', tagOrDigest);\n const trigger = command.trigger as IDockerTrigger;\n if (trigger && trigger.repository) {\n let imageName = '';\n if (trigger.registry) {\n imageName += trigger.registry + '/';\n }\n imageName += trigger.repository;\n\n let imageReference = '';\n if (this.state.lookupType === 'digest') {\n imageReference = `${imageName}@${tagOrDigest}`;\n } else {\n imageReference = `${imageName}:${tagOrDigest}`;\n }\n // Use 'helm/image' artifact type for helm/oci triggers, otherwise use 'docker/image'\n const artifactType = trigger.type === 'docker' ? 'docker/image' : 'helm/image';\n\n this.props.updateCommand('extraFields.artifacts', [\n {\n type: artifactType,\n name: imageName,\n version: tagOrDigest,\n reference: imageReference,\n },\n ]);\n }\n }\n\n private updateSelectedTag = (tag: string) => {\n this.updateArtifact(this.props.command, tag);\n this.setState({ selectedTag: tag });\n this.props.command.triggerInvalid = false;\n };\n\n private updateDigest = (digest: string) => {\n this.updateArtifact(this.props.command, digest);\n this.setState({ digest });\n };\n\n private tagLoadSuccess = (tags: string[]) => {\n const { command } = this.props;\n const trigger = command.trigger as IDockerTrigger;\n const newState = {} as IDockerTriggerTemplateState;\n newState.tags = tags || [];\n // default to what is supplied by the trigger if possible\n const defaultSelection = newState.tags.find((t) => t === trigger.tag);\n if (defaultSelection) {\n newState.selectedTag = defaultSelection;\n this.updateSelectedTag(defaultSelection);\n }\n newState.tagsLoading = false;\n this.setState(newState);\n };\n\n private tagLoadFailure = () => {\n this.setState({\n tagsLoading: false,\n loadError: true,\n });\n };\n\n private initialize = () => {\n const { command } = this.props;\n this.props.updateCommand('triggerInvalid', true);\n\n // These fields will be added to the trigger when the form is submitted\n this.props.updateCommand('extraFields', {\n tag: get(command, 'extraFields.tag', ''),\n artifacts: get(command, 'extraFields.artifacts', ''),\n });\n\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n\n // cancel search stream if trigger has changed to some other type\n if (command.trigger.type !== 'docker' && command.trigger.type !== 'helm/oci') {\n return;\n }\n\n this.subscription = this.queryStream\n .pipe(debounceTime(250), switchMap(this.handleQuery))\n .subscribe(this.tagLoadSuccess, this.tagLoadFailure);\n\n this.searchTags();\n };\n\n public componentDidMount() {\n this.initialize();\n }\n\n public componentWillUnmount() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private searchTags = (query = '') => {\n this.setState({ tags: [`<span>Finding tags${query && ` matching ${query}`}...</span>`] });\n this.queryStream.next();\n };\n\n public render() {\n const { digest, tags, tagsLoading, loadError, selectedTag, lookupType } = this.state;\n\n const options = tags.map((tag) => {\n return { value: tag } as Option<string>;\n });\n\n return (\n <>\n <div className=\"form-group\">\n <div className=\"sm-label-right col-md-4\">Type</div>\n <div className=\"col-md-3\">\n <TetheredSelect\n clearable={false}\n value={lookupType}\n options={lookupTypeOptions}\n onChange={this.lookupTypeChanged}\n />\n </div>\n </div>\n {lookupType === 'tag' && (\n <div className=\"form-group\">\n <label className=\"col-md-4 sm-label-right\">Tag</label>\n {tagsLoading && (\n <div className=\"col-md-6\">\n <div className=\"form-control-static text-center\">\n <Spinner size=\"small\" />\n </div>\n </div>\n )}\n {loadError && <div className=\"col-md-6\">Error loading tags!</div>}\n {!tagsLoading && (\n <div className=\"col-md-6\">\n {tags.length === 0 && (\n <div>\n <p className=\"form-control-static\">No tags found</p>\n </div>\n )}\n {tags.length > 0 && (\n <TetheredSelect\n options={options}\n optionRenderer={(o) => <span>{o.value}</span>}\n clearable={false}\n value={selectedTag}\n valueRenderer={(o) => (\n <span>\n <strong>{o.value}</strong>\n </span>\n )}\n onChange={(o: Option<string>) => this.updateSelectedTag(o.value)}\n placeholder=\"Search tags...\"\n />\n )}\n </div>\n )}\n </div>\n )}\n {lookupType === 'digest' && (\n <div className=\"form-group\">\n <label className=\"col-md-4 sm-label-right\">\n Digest <HelpField id=\"pipeline.config.docker.trigger.digest\" />\n </label>\n <div className=\"col-md-6\">\n <input\n value={digest}\n onChange={(e) => this.updateDigest(e.target.value)}\n className=\"form-control input-sm\"\n required={true}\n />\n </div>\n </div>\n )}\n </>\n );\n }\n}\n","import React from 'react';\n\nimport type { IDockerTrigger, IExecutionTriggerStatusComponentProps } from '@spinnaker/core';\nimport { Registry } from '@spinnaker/core';\n\nimport { DockerHelmOciTriggerConfig } from './DockerHelmOciTriggerConfig';\nimport { DockerTriggerConfig } from './DockerTriggerConfig';\nimport { DockerTriggerTemplate } from './DockerTriggerTemplate';\n\nconst DockerTriggerExecutionStatus = (props: IExecutionTriggerStatusComponentProps) => {\n const trigger = props.trigger as IDockerTrigger;\n return (\n <li>\n {trigger.repository}:{trigger.tag}\n </li>\n );\n};\n\nRegistry.pipeline.registerTrigger({\n label: 'Docker Registry',\n description: 'Executes the pipeline on an image update',\n key: 'docker',\n component: DockerTriggerConfig,\n manualExecutionComponent: DockerTriggerTemplate,\n executionStatusComponent: DockerTriggerExecutionStatus,\n executionTriggerLabel: () => 'Docker Registry',\n validators: [\n {\n type: 'requiredField',\n fieldName: 'account',\n message: '<strong>Registry</strong> is a required field for Docker Registry triggers.',\n },\n {\n type: 'requiredField',\n fieldName: 'repository',\n message: '<strong>Image</strong> is a required field for Docker Registry triggers.',\n },\n {\n type: 'serviceAccountAccess',\n preventSave: true,\n 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.`,\n },\n ],\n});\n\nRegistry.pipeline.registerTrigger({\n label: 'Helm Docker Registry',\n description: 'Executes the pipeline on an helm/image update',\n key: 'helm/oci',\n component: DockerHelmOciTriggerConfig,\n manualExecutionComponent: DockerTriggerTemplate,\n executionStatusComponent: DockerTriggerExecutionStatus,\n executionTriggerLabel: () => 'Helm Docker Registry',\n validators: [\n {\n type: 'requiredField',\n fieldName: 'account',\n message: '<strong>Registry</strong> is a required field for Docker Registry triggers.',\n },\n {\n type: 'requiredField',\n fieldName: 'repository',\n message: '<strong>Image</strong> is a required field for Docker Registry triggers.',\n },\n {\n type: 'serviceAccountAccess',\n preventSave: true,\n 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.`,\n },\n ],\n});\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IDockerTrigger } from '@spinnaker/core';\n\nimport type { IDockerImageAndTagChanges } from '../../image';\nimport { DockerImageAndTagSelector } from '../../image';\n\nexport interface IDockerTriggerConfigProps {\n formik: FormikProps<IDockerTrigger>;\n triggerUpdated: (trigger: IDockerTrigger) => void;\n}\n\nexport function DockerTriggerConfig(props: IDockerTriggerConfigProps) {\n const { formik } = props;\n const trigger = formik.values;\n\n const dockerChanged = (changes: IDockerImageAndTagChanges) => {\n // Trigger doesn't use imageId.\n const { imageId, ...rest } = changes;\n props.triggerUpdated(rest as IDockerTrigger);\n };\n\n return (\n <div className=\"form-horizontal\">\n <DockerImageAndTagSelector\n allowManualDefinition={false}\n specifyTagByRegex={true}\n account={trigger.account}\n organization={trigger.organization}\n registry={trigger.registry}\n repository={trigger.repository}\n tag={trigger.tag}\n showRegistry={true}\n onChange={dockerChanged}\n showDigest={false}\n />\n </div>\n );\n}\n","import type { FormikProps } from 'formik';\nimport React from 'react';\n\nimport type { IDockerTrigger } from '@spinnaker/core';\nimport type { IDockerChartAndTagChanges } from '../../image/DockerChartAndTagSelector';\nimport { DockerChartAndTagSelector } from '../../image/DockerChartAndTagSelector';\n\nexport interface IDockerTriggerConfigProps {\n formik: FormikProps<IDockerTrigger>;\n triggerUpdated: (trigger: IDockerTrigger) => void;\n}\n\nexport function DockerHelmOciTriggerConfig(props: IDockerTriggerConfigProps) {\n const { formik } = props;\n const trigger = formik.values;\n\n const dockerChanged = (changes: IDockerChartAndTagChanges) => {\n // Trigger doesn't use imageId.\n const { imageId, ...rest } = changes;\n props.triggerUpdated(rest as IDockerTrigger);\n };\n\n return (\n <div className=\"form-horizontal\">\n <DockerChartAndTagSelector\n allowManualDefinition={false}\n specifyTagByRegex={true}\n account={trigger.account}\n organization={trigger.organization}\n registry={trigger.registry}\n repository={trigger.repository}\n tag={trigger.tag}\n showRegistry={true}\n onChange={dockerChanged}\n showDigest={false}\n />\n </div>\n );\n}\n","import { module } from 'angular';\n\nimport { DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE } from './pipeline/stages/bake/dockerBakeStage';\nimport './pipeline/trigger/DockerTrigger';\n\nexport const DOCKER_MODULE = 'spinnaker.docker';\nmodule(DOCKER_MODULE, [DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE]);\n"],"names":["DockerImageReader","getImage","imageName","region","credentials","REST","path","query","provider","get","then","results","length","catch","findImages","params","RetryService","buildRetrySequence","findTags","DockerChartImageReader","DockerImageUtils","splitImageId","imageId","imageParts","includes","split","repository","organization","slice","join","lookup","tag","digest","startsWith","generateImageId","parts","imageFields","defineOptions","label","value","DockerImageAndTagSelector","React","Component","constructor","props","super","this","unmounted","cachedValues","handleRefreshImages","refreshImages","lookupTypeChanged","o","newType","oldType","state","lookupType","oldValue","cachedValue","valueChanged","setState","showManualInput","defineManually","newFields","onChange","switchedManualWarning","missingFields","accountOptions","account","organizationOptions","repositoryOptions","tagOptions","parsedImageId","allowManualDefinition","Boolean","imagesLoaded","imagesLoading","getAccountMap","images","groupedImages","groupBy","filter","image","reduce","acc","key","uniq","map","i","getRegistryMap","m","registry","getOrganizationMap","getRepositoryMap","getOrganizationsList","accountMap","showRegistry","getRepositoryList","organizationMap","getTags","repositoryMap","tags","specifyTagByRegex","trim","componentWillReceiveProps","nextProps","some","updateThings","componentWillUnmount","synchronizeChanges","values","changes","Object","keys","allowAutoSwitchToManualEntry","registryMap","organizationFound","organizations","repositories","repositoryFound","tagFound","newState","newAccounts","sort","a","r","t","push","initializeImages","imageConfig","accounts","finally","initializeAccounts","AccountService","listAccounts","allAccounts","name","isNew","componentDidMount","deferInitialization","n","render","showDigest","manualInputToggle","className","Select","disabled","options","clearable","warning","createElement","ValidationMessage","type","message","f","HelpField","expand","id","e","target","Registry","isLoading","Tooltip","onClick","Organization","placeholder","Image","required","Tag","Fragment","Digest","LookupTypeSelector","defaultProps","DOCKER_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER","module","UIROUTER_ANGULARJS","controller","$scope","$stateParams","executionDetailsSectionService","$interpolate","configSections","initialized","detailsSection","details","stage","context","cloudProviderType","bakeryDetailUrl","roscoMode","SETTINGS","roscoDetailUrl","initialize","synchronizeSection","$on","DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE","config","pipeline","registerStage","provides","cloudProvider","description","templateUrl","executionDetailsUrl","executionLabelComponent","BakeExecutionLabel","extraLabelLines","masterStage","allPreviouslyBaked","somePreviouslyBaked","supportsCustomTimeout","validators","fieldName","restartable","$q","user","AuthenticationService","getAuthenticatedUser","viewState","loading","$watch","_","forOwn","val","providerSelected","all","BakeryReader","getBaseOsOptions","getBaseLabelOptions","baseOsOptions","baseLabelOptions","baseImages","baseOs","baseLabel","DockerChartAndTagSelector","lookupTypeOptions","DockerTriggerTemplate","queryStream","Subject","handleQuery","trigger","command","observableFrom","updateArtifact","selectedTag","updateSelectedTag","triggerInvalid","updateDigest","tagLoadSuccess","defaultSelection","find","tagsLoading","tagLoadFailure","loadError","updateCommand","artifacts","subscription","unsubscribe","pipe","debounceTime","switchMap","subscribe","searchTags","next","formatLabel","when","tagOrDigest","imageReference","artifactType","version","reference","TetheredSelect","Spinner","size","optionRenderer","valueRenderer","DockerTriggerExecutionStatus","registerTrigger","component","formik","rest","triggerUpdated","manualExecutionComponent","executionStatusComponent","executionTriggerLabel","preventSave","DOCKER_MODULE"],"mappings":"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"}
|