@spinnaker/docker 0.0.0-main-2
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/DockerImageAndTagSelector.d.ts +74 -0
- package/dist/image/DockerImageReader.d.ts +12 -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 +976 -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/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/DockerImageAndTagSelector.tsx +735 -0
- package/src/image/DockerImageReader.ts +42 -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/DockerTrigger.tsx +44 -0
- package/src/pipeline/trigger/DockerTriggerConfig.tsx +40 -0
- package/src/pipeline/trigger/DockerTriggerTemplate.tsx +246 -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/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","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 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 { 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 return observableFrom(\n DockerImageReader.findTags({\n provider: 'dockerRegistry',\n account: trigger.account,\n repository: trigger.repository,\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\n this.props.updateCommand('extraFields.artifacts', [\n {\n type: 'docker/image',\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') {\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 { 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","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":["observableFrom"],"mappings":"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"}
|
|
@@ -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-main-2",
|
|
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": "4.3.5"
|
|
39
|
+
},
|
|
40
|
+
"gitHead": "41637c82dc23fbf1195173a93611a08000fc0e53"
|
|
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]);
|