@spinnaker/docker 0.0.0-2025.1-0
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/CHANGELOG.md +1413 -0
- package/LICENSE.txt +203 -0
- package/dist/docker.module.d.ts +2 -0
- package/dist/image/DockerChartAndTagSelector.d.ts +74 -0
- package/dist/image/DockerImageAndTagSelector.d.ts +74 -0
- package/dist/image/DockerImageReader.d.ts +17 -0
- package/dist/image/DockerImageUtils.d.ts +10 -0
- package/dist/image/index.d.ts +3 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1570 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline/stages/bake/bakeExecutionDetails.controller.d.ts +2 -0
- package/dist/pipeline/stages/bake/dockerBakeStage.d.ts +2 -0
- package/dist/pipeline/trigger/DockerHelmOciTriggerConfig.d.ts +8 -0
- package/dist/pipeline/trigger/DockerTrigger.d.ts +1 -0
- package/dist/pipeline/trigger/DockerTriggerConfig.d.ts +8 -0
- package/dist/pipeline/trigger/DockerTriggerTemplate.d.ts +28 -0
- package/package.json +41 -0
- package/src/docker.module.ts +7 -0
- package/src/image/DockerChartAndTagSelector.tsx +735 -0
- package/src/image/DockerImageAndTagSelector.tsx +735 -0
- package/src/image/DockerImageReader.ts +75 -0
- package/src/image/DockerImageUtils.spec.ts +148 -0
- package/src/image/DockerImageUtils.ts +52 -0
- package/src/image/index.ts +3 -0
- package/src/index.ts +2 -0
- package/src/pipeline/stages/bake/bakeExecutionDetails.controller.js +36 -0
- package/src/pipeline/stages/bake/bakeExecutionDetails.html +47 -0
- package/src/pipeline/stages/bake/bakeStage.html +32 -0
- package/src/pipeline/stages/bake/dockerBakeStage.js +81 -0
- package/src/pipeline/trigger/DockerHelmOciTriggerConfig.tsx +39 -0
- package/src/pipeline/trigger/DockerTrigger.tsx +73 -0
- package/src/pipeline/trigger/DockerTriggerConfig.tsx +40 -0
- package/src/pipeline/trigger/DockerTriggerTemplate.tsx +259 -0
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { FormikProps } from 'formik';
|
|
3
|
+
import type { IDockerTrigger } from '@spinnaker/core';
|
|
4
|
+
export interface IDockerTriggerConfigProps {
|
|
5
|
+
formik: FormikProps<IDockerTrigger>;
|
|
6
|
+
triggerUpdated: (trigger: IDockerTrigger) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function DockerHelmOciTriggerConfig(props: IDockerTriggerConfigProps): JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { FormikProps } from 'formik';
|
|
3
|
+
import type { IDockerTrigger } from '@spinnaker/core';
|
|
4
|
+
export interface IDockerTriggerConfigProps {
|
|
5
|
+
formik: FormikProps<IDockerTrigger>;
|
|
6
|
+
triggerUpdated: (trigger: IDockerTrigger) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function DockerTriggerConfig(props: IDockerTriggerConfigProps): JSX.Element;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { IDockerTrigger, ITriggerTemplateComponentProps } from '@spinnaker/core';
|
|
3
|
+
export interface IDockerTriggerTemplateState {
|
|
4
|
+
digest: string;
|
|
5
|
+
tags: string[];
|
|
6
|
+
tagsLoading: boolean;
|
|
7
|
+
loadError: boolean;
|
|
8
|
+
lookupType: string;
|
|
9
|
+
selectedTag: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class DockerTriggerTemplate extends React.Component<ITriggerTemplateComponentProps, IDockerTriggerTemplateState> {
|
|
12
|
+
private queryStream;
|
|
13
|
+
private subscription;
|
|
14
|
+
static formatLabel(trigger: IDockerTrigger): PromiseLike<string>;
|
|
15
|
+
constructor(props: ITriggerTemplateComponentProps);
|
|
16
|
+
private handleQuery;
|
|
17
|
+
private lookupTypeChanged;
|
|
18
|
+
private updateArtifact;
|
|
19
|
+
private updateSelectedTag;
|
|
20
|
+
private updateDigest;
|
|
21
|
+
private tagLoadSuccess;
|
|
22
|
+
private tagLoadFailure;
|
|
23
|
+
private initialize;
|
|
24
|
+
componentDidMount(): void;
|
|
25
|
+
componentWillUnmount(): void;
|
|
26
|
+
private searchTags;
|
|
27
|
+
render(): JSX.Element;
|
|
28
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@spinnaker/docker",
|
|
3
|
+
"license": "Apache-2.0",
|
|
4
|
+
"version": "0.0.0-2025.1-0",
|
|
5
|
+
"module": "dist/index.js",
|
|
6
|
+
"typings": "dist/index.d.ts",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public",
|
|
9
|
+
"registry": "https://registry.npmjs.org"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"clean": "shx rm -rf dist",
|
|
13
|
+
"prepublishOnly": "npm run build",
|
|
14
|
+
"build": "npm run clean && spinnaker-scripts build",
|
|
15
|
+
"dev": "spinnaker-scripts start",
|
|
16
|
+
"dev:push": "spinnaker-scripts start --push",
|
|
17
|
+
"lib": "npm run build"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@spinnaker/core": "^0.29.1",
|
|
21
|
+
"@uirouter/angularjs": "1.0.26",
|
|
22
|
+
"angular": "1.6.10",
|
|
23
|
+
"formik": "1.5.1",
|
|
24
|
+
"lodash": "4.17.21",
|
|
25
|
+
"ngimport": "0.6.1",
|
|
26
|
+
"react": "16.14.0",
|
|
27
|
+
"react-select": "1.2.1",
|
|
28
|
+
"rxjs": "6.6.7"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@spinnaker/eslint-plugin": "^3.0.2",
|
|
32
|
+
"@spinnaker/scripts": "^0.4.0",
|
|
33
|
+
"@types/angular": "1.6.26",
|
|
34
|
+
"@types/lodash": "4.14.64",
|
|
35
|
+
"@types/react": "16.14.10",
|
|
36
|
+
"@types/react-select": "1.3.4",
|
|
37
|
+
"shx": "0.3.3",
|
|
38
|
+
"typescript": "5.0.4"
|
|
39
|
+
},
|
|
40
|
+
"gitHead": "34dbf558fc510cee68ecbc8c7921590ef3048dba"
|
|
41
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { module } from 'angular';
|
|
2
|
+
|
|
3
|
+
import { DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE } from './pipeline/stages/bake/dockerBakeStage';
|
|
4
|
+
import './pipeline/trigger/DockerTrigger';
|
|
5
|
+
|
|
6
|
+
export const DOCKER_MODULE = 'spinnaker.docker';
|
|
7
|
+
module(DOCKER_MODULE, [DOCKER_PIPELINE_STAGES_BAKE_DOCKERBAKESTAGE]);
|