UNPKG

aws-cdk-lib

Version:

Version 2 of the AWS Cloud Development Kit library

3 lines (2 loc) 8.16 kB
"use strict";var _a,_b,_c;Object.defineProperty(exports,"__esModule",{value:!0}),exports.DockerImageAsset=exports.Platform=exports.NetworkMode=void 0;var jsiiDeprecationWarnings=()=>{var tmp=require("../../.warnings.jsii.js");return jsiiDeprecationWarnings=()=>tmp,tmp};const JSII_RTTI_SYMBOL_1=Symbol.for("jsii.rtti");var fs=()=>{var tmp=require("fs");return fs=()=>tmp,tmp},path=()=>{var tmp=require("path");return path=()=>tmp,tmp},constructs_1=()=>{var tmp=require("constructs");return constructs_1=()=>tmp,tmp},assets_1=()=>{var tmp=require("../../assets");return assets_1=()=>tmp,tmp},ecr=()=>{var tmp=require("../../aws-ecr");return ecr=()=>tmp,tmp},core_1=()=>{var tmp=require("../../core");return core_1=()=>tmp,tmp},cxapi=()=>{var tmp=require("../../cx-api");return cxapi=()=>tmp,tmp};class NetworkMode{static fromContainer(containerId){return new NetworkMode(`container:${containerId}`)}static custom(mode){return new NetworkMode(mode)}constructor(mode){this.mode=mode}}exports.NetworkMode=NetworkMode,_a=JSII_RTTI_SYMBOL_1,NetworkMode[_a]={fqn:"aws-cdk-lib.aws_ecr_assets.NetworkMode",version:"2.185.0"},NetworkMode.DEFAULT=new NetworkMode("default"),NetworkMode.HOST=new NetworkMode("host"),NetworkMode.NONE=new NetworkMode("none");class Platform{static custom(platform){return new Platform(platform)}constructor(platform){this.platform=platform}}exports.Platform=Platform,_b=JSII_RTTI_SYMBOL_1,Platform[_b]={fqn:"aws-cdk-lib.aws_ecr_assets.Platform",version:"2.185.0"},Platform.LINUX_AMD64=new Platform("linux/amd64"),Platform.LINUX_ARM64=new Platform("linux/arm64");class DockerImageAsset extends constructs_1().Construct{constructor(scope,id,props){super(scope,id);try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ecr_assets_DockerImageAssetProps(props)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,DockerImageAsset),error}validateProps(props);const dir=path().resolve(props.directory);if(!fs().existsSync(dir))throw new Error(`Cannot find image directory at ${dir}`);this.dockerfilePath=props.file||"Dockerfile";const file=path().join(dir,this.dockerfilePath);if(!fs().existsSync(file))throw new Error(`Cannot find file at ${file}`);const defaultIgnoreMode=core_1().FeatureFlags.of(this).isEnabled(cxapi().DOCKER_IGNORE_SUPPORT)?core_1().IgnoreMode.DOCKER:core_1().IgnoreMode.GLOB;let ignoreMode=props.ignoreMode??defaultIgnoreMode,exclude=props.exclude||[];const ignore=path().join(dir,".dockerignore");fs().existsSync(ignore)&&(exclude=[...fs().readFileSync(ignore).toString().split(` `).filter(e=>!!e),...exclude,"!.dockerignore"]),exclude.push("!"+path().basename(file));const cdkout=core_1().Stage.of(this)?.outdir??"cdk.out";exclude.push(cdkout),props.repositoryName&&core_1().Annotations.of(this).addWarningV2("@aws-cdk/aws-ecr-assets:repositoryNameDeprecated",'DockerImageAsset.repositoryName is deprecated. Override "core.Stack.addDockerImageAsset" to control asset locations');const extraHash={};props.invalidation?.extraHash!==!1&&props.extraHash&&(extraHash.user=props.extraHash),props.invalidation?.buildArgs!==!1&&props.buildArgs&&(extraHash.buildArgs=props.buildArgs),props.invalidation?.buildSecrets!==!1&&props.buildSecrets&&(extraHash.buildSecrets=props.buildSecrets),props.invalidation?.buildSsh!==!1&&props.buildSsh&&(extraHash.buildSsh=props.buildSsh),props.invalidation?.target!==!1&&props.target&&(extraHash.target=props.target),props.invalidation?.file!==!1&&props.file&&(extraHash.file=props.file),props.invalidation?.repositoryName!==!1&&props.repositoryName&&(extraHash.repositoryName=props.repositoryName),props.invalidation?.networkMode!==!1&&props.networkMode&&(extraHash.networkMode=props.networkMode),props.invalidation?.platform!==!1&&props.platform&&(extraHash.platform=props.platform),props.invalidation?.outputs!==!1&&props.outputs&&(extraHash.outputs=props.outputs),extraHash.version="1.21.0";const staging=new(core_1()).AssetStaging(this,"Staging",{...props,follow:props.followSymlinks??toSymlinkFollow(props.follow),exclude,ignoreMode,sourcePath:dir,extraHash:Object.keys(extraHash).length===0?void 0:JSON.stringify(extraHash)});this.assetHash=staging.assetHash,this.sourceHash=this.assetHash;const stack=core_1().Stack.of(this);this.assetPath=staging.relativeStagedPath(stack),this.assetName=props.assetName,this.dockerBuildArgs=props.buildArgs,this.dockerBuildSecrets=props.buildSecrets,this.dockerBuildSsh=props.buildSsh,this.dockerBuildTarget=props.target,this.dockerOutputs=props.outputs,this.dockerCacheFrom=props.cacheFrom,this.dockerCacheTo=props.cacheTo,this.dockerCacheDisabled=props.cacheDisabled;const location=stack.synthesizer.addDockerImageAsset({directoryName:this.assetPath,assetName:this.assetName,dockerBuildArgs:this.dockerBuildArgs,dockerBuildSecrets:this.dockerBuildSecrets,dockerBuildSsh:this.dockerBuildSsh,dockerBuildTarget:this.dockerBuildTarget,dockerFile:props.file,sourceHash:staging.assetHash,networkMode:props.networkMode?.mode,platform:props.platform?.platform,dockerOutputs:this.dockerOutputs,dockerCacheFrom:this.dockerCacheFrom,dockerCacheTo:this.dockerCacheTo,dockerCacheDisabled:this.dockerCacheDisabled});this.repository=ecr().Repository.fromRepositoryName(this,"Repository",location.repositoryName),this.imageUri=location.imageUri,this.imageTag=location.imageTag??this.assetHash}addResourceMetadata(resource,resourceProperty){try{jsiiDeprecationWarnings().aws_cdk_lib_CfnResource(resource)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addResourceMetadata),error}this.node.tryGetContext(cxapi().ASSET_RESOURCE_METADATA_ENABLED_CONTEXT)&&(resource.cfnOptions.metadata=resource.cfnOptions.metadata||{},resource.cfnOptions.metadata[cxapi().ASSET_RESOURCE_METADATA_PATH_KEY]=this.assetPath,resource.cfnOptions.metadata[cxapi().ASSET_RESOURCE_METADATA_DOCKERFILE_PATH_KEY]=this.dockerfilePath,resource.cfnOptions.metadata[cxapi().ASSET_RESOURCE_METADATA_DOCKER_BUILD_ARGS_KEY]=this.dockerBuildArgs,resource.cfnOptions.metadata[cxapi().ASSET_RESOURCE_METADATA_DOCKER_BUILD_SECRETS_KEY]=this.dockerBuildSecrets,resource.cfnOptions.metadata[cxapi().ASSET_RESOURCE_METADATA_DOCKER_BUILD_SSH_KEY]=this.dockerBuildSsh,resource.cfnOptions.metadata[cxapi().ASSET_RESOURCE_METADATA_DOCKER_BUILD_TARGET_KEY]=this.dockerBuildTarget,resource.cfnOptions.metadata[cxapi().ASSET_RESOURCE_METADATA_PROPERTY_KEY]=resourceProperty,resource.cfnOptions.metadata[cxapi().ASSET_RESOURCE_METADATA_DOCKER_OUTPUTS_KEY]=this.dockerOutputs,resource.cfnOptions.metadata[cxapi().ASSET_RESOURCE_METADATA_DOCKER_CACHE_FROM_KEY]=this.dockerCacheFrom,resource.cfnOptions.metadata[cxapi().ASSET_RESOURCE_METADATA_DOCKER_CACHE_TO_KEY]=this.dockerCacheTo,resource.cfnOptions.metadata[cxapi().ASSET_RESOURCE_METADATA_DOCKER_CACHE_DISABLED_KEY]=this.dockerCacheDisabled)}}exports.DockerImageAsset=DockerImageAsset,_c=JSII_RTTI_SYMBOL_1,DockerImageAsset[_c]={fqn:"aws-cdk-lib.aws_ecr_assets.DockerImageAsset",version:"2.185.0"};function validateProps(props){for(const[key,value]of Object.entries(props))if(core_1().Token.isUnresolved(value))throw new Error(`Cannot use Token as value of '${key}': this value is used before deployment starts`);validateBuildArgs(props.buildArgs),validateBuildSecrets(props.buildSecrets)}function validateBuildProps(buildPropName,buildProps){for(const[key,value]of Object.entries(buildProps||{}))if(core_1().Token.isUnresolved(key)||core_1().Token.isUnresolved(value))throw new Error(`Cannot use tokens in keys or values of "${buildPropName}" since they are needed before deployment`)}function validateBuildArgs(buildArgs){validateBuildProps("buildArgs",buildArgs)}function validateBuildSecrets(buildSecrets){validateBuildProps("buildSecrets",buildSecrets)}function toSymlinkFollow(follow){switch(follow){case void 0:return;case assets_1().FollowMode.NEVER:return core_1().SymlinkFollowMode.NEVER;case assets_1().FollowMode.ALWAYS:return core_1().SymlinkFollowMode.ALWAYS;case assets_1().FollowMode.BLOCK_EXTERNAL:return core_1().SymlinkFollowMode.BLOCK_EXTERNAL;case assets_1().FollowMode.EXTERNAL:return core_1().SymlinkFollowMode.EXTERNAL}}