@catladder/cli 5.3.1 → 5.4.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/dist/bundles/catenv/index.js +79 -4
- package/dist/bundles/cli/index.js +79 -4
- package/dist/bundles/skills/catladder-builds/SKILL.md +4 -0
- package/dist/bundles/skills/catladder-builds/references/build-types.md +1 -0
- package/dist/packages/pipeline/src/backends/types.d.ts +6 -2
- package/dist/packages/pipeline/src/build/docker.d.ts +6 -0
- package/dist/packages/pipeline/src/build/docker.js +49 -2
- package/dist/packages/pipeline/src/build/docker.js.map +1 -1
- package/dist/packages/pipeline/src/build/types.d.ts +29 -0
- package/dist/packages/pipeline/src/build/types.js.map +1 -1
- package/dist/packages/pipeline/src/customImages/hash.d.ts +4 -0
- package/dist/packages/pipeline/src/customImages/hash.js +3 -0
- package/dist/packages/pipeline/src/customImages/hash.js.map +1 -1
- package/dist/packages/pipeline/src/customImages/jobImagesPlan.d.ts +2 -1
- package/dist/packages/pipeline/src/customImages/jobImagesPlan.js +21 -1
- package/dist/packages/pipeline/src/customImages/jobImagesPlan.js.map +1 -1
- package/dist/packages/pipeline/src/pipeline/generatePipelineFiles.js +1 -1
- package/dist/packages/pipeline/src/pipeline/generatePipelineFiles.js.map +1 -1
- package/dist/packages/pipeline/src/utils/writeFiles.d.ts +2 -1
- package/dist/packages/pipeline/src/utils/writeFiles.js +5 -0
- package/dist/packages/pipeline/src/utils/writeFiles.js.map +1 -1
- package/dist/skills/catladder-builds/SKILL.md +4 -0
- package/dist/skills/catladder-builds/references/build-types.md +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -6082,7 +6082,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
6082
6082
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6083
6083
|
};
|
|
6084
6084
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
6085
|
-
exports.hasDockerfile = exports.getDockerBuildDefaultScript = exports.getDockerBuildScriptWithBuiltInDockerFile = exports.gitlabDockerLogin = exports.DockerBuildJob = exports.getDockerJobBaseProps = exports.DOCKER_BUILD_JOB_NAME = exports.getDockerBuildVariables = exports.requiresDockerBuild = exports.getDockerImageVariables = void 0;
|
|
6085
|
+
exports.hasDockerfile = exports.getDockerBuildDefaultScript = exports.getDockerBuildScriptWithBuiltInDockerFile = exports.gitlabDockerLogin = exports.DockerBuildJob = exports.getDockerJobBaseProps = exports.DOCKER_BUILD_JOB_NAME = exports.getDockerBuildVariables = exports.requiresDockerBuild = exports.getReuseMainBranchImageScript = exports.getDockerImageVariables = void 0;
|
|
6086
6086
|
const fs_1 = __nccwpck_require__(79896);
|
|
6087
6087
|
const lodash_es_1 = __nccwpck_require__(50210);
|
|
6088
6088
|
const path_1 = __importDefault(__nccwpck_require__(16928));
|
|
@@ -6090,6 +6090,7 @@ const deploy_1 = __nccwpck_require__(3659);
|
|
|
6090
6090
|
const artifactsRegistry_1 = __nccwpck_require__(44330);
|
|
6091
6091
|
const gcloudServiceAccountLoginCommands_1 = __nccwpck_require__(54799);
|
|
6092
6092
|
const ciVariables_1 = __nccwpck_require__(91215);
|
|
6093
|
+
const configruedEnvs_1 = __nccwpck_require__(38866);
|
|
6093
6094
|
const runner_1 = __nccwpck_require__(92146);
|
|
6094
6095
|
const jobs_1 = __nccwpck_require__(98521);
|
|
6095
6096
|
const gitlab_1 = __nccwpck_require__(86962);
|
|
@@ -6121,6 +6122,52 @@ const getDockerImageVariables = (context) => {
|
|
|
6121
6122
|
};
|
|
6122
6123
|
};
|
|
6123
6124
|
exports.getDockerImageVariables = getDockerImageVariables;
|
|
6125
|
+
const shellQuote = (value) => `'${value.replace(/'/g, `'\\''`)}'`;
|
|
6126
|
+
/**
|
|
6127
|
+
* script that copies the main branch image instead of building it, see
|
|
6128
|
+
* `build.reuseMainBranchImage`. Exits the job when it
|
|
6129
|
+
* reused an image, so the build script after it only runs as fallback.
|
|
6130
|
+
*/
|
|
6131
|
+
const getReuseMainBranchImageScript = (context) => {
|
|
6132
|
+
var _a, _b;
|
|
6133
|
+
const buildConfig = context.build.config;
|
|
6134
|
+
// only standalone builds have the option, workspace builds don't
|
|
6135
|
+
const option = "reuseMainBranchImage" in buildConfig
|
|
6136
|
+
? buildConfig.reuseMainBranchImage
|
|
6137
|
+
: undefined;
|
|
6138
|
+
const { fullConfig, name, env } = context;
|
|
6139
|
+
if (!option ||
|
|
6140
|
+
!(0, configruedEnvs_1.getAllEnvsByTrigger)(fullConfig, name, "taggedRelease").includes(env)) {
|
|
6141
|
+
return [];
|
|
6142
|
+
}
|
|
6143
|
+
if ((0, deploy_1.isOfDeployType)((_a = context.deploy) === null || _a === void 0 ? void 0 : _a.config, "google-cloudrun")) {
|
|
6144
|
+
throw new Error(`${name}: build.reuseMainBranchImage is not supported for google-cloudrun deploys`);
|
|
6145
|
+
}
|
|
6146
|
+
const [mainBranchEnv] = (0, configruedEnvs_1.getAllEnvsByTrigger)(fullConfig, name, "mainBranch");
|
|
6147
|
+
if (!mainBranchEnv) {
|
|
6148
|
+
throw new Error(`${name}: build.reuseMainBranchImage needs an env that builds on the main branch (e.g. dev)`);
|
|
6149
|
+
}
|
|
6150
|
+
const releaseFiles = (_b = (option === true ? undefined : option.releaseFiles)) !== null && _b !== void 0 ? _b : [
|
|
6151
|
+
"CHANGELOG.md",
|
|
6152
|
+
];
|
|
6153
|
+
const sha = (0, ciVariables_1.getCiVariable)(context, "commitSha");
|
|
6154
|
+
return [
|
|
6155
|
+
...(0, exports.gitlabDockerLogin)(context),
|
|
6156
|
+
`REUSE_IMAGE="${(0, ciVariables_1.getCiVariable)(context, "registryImage")}/${mainBranchEnv}/${name}"`,
|
|
6157
|
+
`reuse_sha=""
|
|
6158
|
+
if docker buildx imagetools inspect "$REUSE_IMAGE:${sha}" >/dev/null 2>&1; then
|
|
6159
|
+
reuse_sha="${sha}"
|
|
6160
|
+
elif git fetch --quiet --depth=2 origin "${sha}" && [ -z "$(git diff --name-only "${sha}^" "${sha}" | grep -vxF ${releaseFiles.map((f) => `-e ${shellQuote(f)}`).join(" ")})" ]; then
|
|
6161
|
+
reuse_sha="$(git rev-parse "${sha}^")"
|
|
6162
|
+
fi
|
|
6163
|
+
if [ -n "$reuse_sha" ] && docker buildx imagetools create --prefer-index=false --tag "$DOCKER_IMAGE:$DOCKER_IMAGE_TAG" "$REUSE_IMAGE:$reuse_sha"; then
|
|
6164
|
+
echo "♻️ reused $REUSE_IMAGE:$reuse_sha, skipping the build"
|
|
6165
|
+
exit 0
|
|
6166
|
+
fi
|
|
6167
|
+
echo "no main branch image to reuse, building the image"`,
|
|
6168
|
+
];
|
|
6169
|
+
};
|
|
6170
|
+
exports.getReuseMainBranchImageScript = getReuseMainBranchImageScript;
|
|
6124
6171
|
/**
|
|
6125
6172
|
* Weather the context requires a docker build
|
|
6126
6173
|
*/
|
|
@@ -6192,7 +6239,7 @@ class DockerBuildJob extends jobs_1.CatladderJob {
|
|
|
6192
6239
|
provides: ["dockerImage"],
|
|
6193
6240
|
caches: cache,
|
|
6194
6241
|
...(0, exports.getDockerJobBaseProps)(),
|
|
6195
|
-
script: script || [],
|
|
6242
|
+
script: [...(0, exports.getReuseMainBranchImageScript)(context), ...(script || [])],
|
|
6196
6243
|
variables: {
|
|
6197
6244
|
...(0, removeUndefined_1.removeUndefined)((0, exports.getDockerBuildVariables)(context)),
|
|
6198
6245
|
...(0, removeUndefined_1.removeUndefined)(variables !== null && variables !== void 0 ? variables : {}),
|
|
@@ -8428,6 +8475,9 @@ function computeCustomImageHash(config) {
|
|
|
8428
8475
|
watchedPaths.push(`${extraDir}/**/*`);
|
|
8429
8476
|
}
|
|
8430
8477
|
watchedPaths.push(...hashExtras(hash, config));
|
|
8478
|
+
if (config.salt) {
|
|
8479
|
+
hash.update(config.salt);
|
|
8480
|
+
}
|
|
8431
8481
|
return {
|
|
8432
8482
|
hash: hash.digest("hex").slice(0, 12),
|
|
8433
8483
|
watchedPaths,
|
|
@@ -8497,8 +8547,27 @@ const toResolvedJobImage = ({ imageRef, jobName, }) => ({
|
|
|
8497
8547
|
*/
|
|
8498
8548
|
const materializeDir = (sourceDir, targetDir) => listFilesRecursive(sourceDir).map((file) => ({
|
|
8499
8549
|
path: (0, path_1.join)(targetDir, file),
|
|
8500
|
-
content: (
|
|
8550
|
+
content: readVerbatim((0, path_1.join)(sourceDir, file)),
|
|
8501
8551
|
}));
|
|
8552
|
+
/**
|
|
8553
|
+
* text files stay strings, anything that is not valid utf-8 (e.g. the
|
|
8554
|
+
* packaged helm chart dependencies of the kubernetes image) stays a
|
|
8555
|
+
* Buffer, so it is written byte for byte instead of being mangled into
|
|
8556
|
+
* replacement characters
|
|
8557
|
+
*/
|
|
8558
|
+
const readVerbatim = (path) => {
|
|
8559
|
+
const bytes = (0, fs_1.readFileSync)(path);
|
|
8560
|
+
const text = bytes.toString("utf-8");
|
|
8561
|
+
return Buffer.from(text, "utf-8").equals(bytes) ? text : bytes;
|
|
8562
|
+
};
|
|
8563
|
+
/**
|
|
8564
|
+
* part of the tag of every shipped image. Bump it when the images built
|
|
8565
|
+
* from the materialized definitions change while the shipped definitions
|
|
8566
|
+
* don't, so repositories rebuild them instead of reusing the existing tag:
|
|
8567
|
+
* - 2: up to 5.3.1 binary files were materialized as utf-8 text, which
|
|
8568
|
+
* corrupted the helm chart dependencies of the kubernetes image
|
|
8569
|
+
*/
|
|
8570
|
+
const SHIPPED_IMAGE_HASH_SALT = "2";
|
|
8502
8571
|
// built-in (catladder-shipped) images carry the catladder marker in
|
|
8503
8572
|
// their job name; project-declared images get the short plain name
|
|
8504
8573
|
const ensureJobName = (name) => `🐳 catladder image ${name}`;
|
|
@@ -8661,6 +8730,7 @@ class JobImagesPlan {
|
|
|
8661
8730
|
const { hash } = (0, hash_1.computeCustomImageHash)({
|
|
8662
8731
|
dir: (0, shippedImages_1.getShippedImageDir)(name),
|
|
8663
8732
|
extraDirs: dependencies.map((dependency) => (0, shippedImages_1.getShippedImageDir)(dependency)),
|
|
8733
|
+
salt: SHIPPED_IMAGE_HASH_SALT,
|
|
8664
8734
|
});
|
|
8665
8735
|
const targetDir = `${exports.GENERATED_IMAGES_FOLDER}/${name}`;
|
|
8666
8736
|
const planned = {
|
|
@@ -12552,7 +12622,7 @@ async function generatePipelineFilesForBackend(context, backend) {
|
|
|
12552
12622
|
// write files
|
|
12553
12623
|
await Promise.all(files.map(async ({ path, content }) => {
|
|
12554
12624
|
await (0, promises_1.mkdir)((0, path_1.dirname)(path), { recursive: true });
|
|
12555
|
-
if (typeof content === "string") {
|
|
12625
|
+
if (typeof content === "string" || Buffer.isBuffer(content)) {
|
|
12556
12626
|
await context.fileWriter.writeGeneratedFileRaw(path, content);
|
|
12557
12627
|
}
|
|
12558
12628
|
else {
|
|
@@ -13581,6 +13651,11 @@ class FileWriter {
|
|
|
13581
13651
|
* parser directives like `# syntax = ...`
|
|
13582
13652
|
*/
|
|
13583
13653
|
async writeGeneratedFileRaw(path, content) {
|
|
13654
|
+
if (Buffer.isBuffer(content)) {
|
|
13655
|
+
// binary content is written as is, file hooks only transform text
|
|
13656
|
+
await (0, promises_1.writeFile)(path, content);
|
|
13657
|
+
return;
|
|
13658
|
+
}
|
|
13584
13659
|
await this.writeTheFile(path, content);
|
|
13585
13660
|
}
|
|
13586
13661
|
async writeGeneratedFile(path, content, options) {
|
|
@@ -12659,7 +12659,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12659
12659
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
12660
12660
|
};
|
|
12661
12661
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
12662
|
-
exports.hasDockerfile = exports.getDockerBuildDefaultScript = exports.getDockerBuildScriptWithBuiltInDockerFile = exports.gitlabDockerLogin = exports.DockerBuildJob = exports.getDockerJobBaseProps = exports.DOCKER_BUILD_JOB_NAME = exports.getDockerBuildVariables = exports.requiresDockerBuild = exports.getDockerImageVariables = void 0;
|
|
12662
|
+
exports.hasDockerfile = exports.getDockerBuildDefaultScript = exports.getDockerBuildScriptWithBuiltInDockerFile = exports.gitlabDockerLogin = exports.DockerBuildJob = exports.getDockerJobBaseProps = exports.DOCKER_BUILD_JOB_NAME = exports.getDockerBuildVariables = exports.requiresDockerBuild = exports.getReuseMainBranchImageScript = exports.getDockerImageVariables = void 0;
|
|
12663
12663
|
const fs_1 = __nccwpck_require__(79896);
|
|
12664
12664
|
const lodash_es_1 = __nccwpck_require__(50210);
|
|
12665
12665
|
const path_1 = __importDefault(__nccwpck_require__(16928));
|
|
@@ -12667,6 +12667,7 @@ const deploy_1 = __nccwpck_require__(3659);
|
|
|
12667
12667
|
const artifactsRegistry_1 = __nccwpck_require__(44330);
|
|
12668
12668
|
const gcloudServiceAccountLoginCommands_1 = __nccwpck_require__(54799);
|
|
12669
12669
|
const ciVariables_1 = __nccwpck_require__(91215);
|
|
12670
|
+
const configruedEnvs_1 = __nccwpck_require__(38866);
|
|
12670
12671
|
const runner_1 = __nccwpck_require__(92146);
|
|
12671
12672
|
const jobs_1 = __nccwpck_require__(98521);
|
|
12672
12673
|
const gitlab_1 = __nccwpck_require__(86962);
|
|
@@ -12698,6 +12699,52 @@ const getDockerImageVariables = (context) => {
|
|
|
12698
12699
|
};
|
|
12699
12700
|
};
|
|
12700
12701
|
exports.getDockerImageVariables = getDockerImageVariables;
|
|
12702
|
+
const shellQuote = (value) => `'${value.replace(/'/g, `'\\''`)}'`;
|
|
12703
|
+
/**
|
|
12704
|
+
* script that copies the main branch image instead of building it, see
|
|
12705
|
+
* `build.reuseMainBranchImage`. Exits the job when it
|
|
12706
|
+
* reused an image, so the build script after it only runs as fallback.
|
|
12707
|
+
*/
|
|
12708
|
+
const getReuseMainBranchImageScript = (context) => {
|
|
12709
|
+
var _a, _b;
|
|
12710
|
+
const buildConfig = context.build.config;
|
|
12711
|
+
// only standalone builds have the option, workspace builds don't
|
|
12712
|
+
const option = "reuseMainBranchImage" in buildConfig
|
|
12713
|
+
? buildConfig.reuseMainBranchImage
|
|
12714
|
+
: undefined;
|
|
12715
|
+
const { fullConfig, name, env } = context;
|
|
12716
|
+
if (!option ||
|
|
12717
|
+
!(0, configruedEnvs_1.getAllEnvsByTrigger)(fullConfig, name, "taggedRelease").includes(env)) {
|
|
12718
|
+
return [];
|
|
12719
|
+
}
|
|
12720
|
+
if ((0, deploy_1.isOfDeployType)((_a = context.deploy) === null || _a === void 0 ? void 0 : _a.config, "google-cloudrun")) {
|
|
12721
|
+
throw new Error(`${name}: build.reuseMainBranchImage is not supported for google-cloudrun deploys`);
|
|
12722
|
+
}
|
|
12723
|
+
const [mainBranchEnv] = (0, configruedEnvs_1.getAllEnvsByTrigger)(fullConfig, name, "mainBranch");
|
|
12724
|
+
if (!mainBranchEnv) {
|
|
12725
|
+
throw new Error(`${name}: build.reuseMainBranchImage needs an env that builds on the main branch (e.g. dev)`);
|
|
12726
|
+
}
|
|
12727
|
+
const releaseFiles = (_b = (option === true ? undefined : option.releaseFiles)) !== null && _b !== void 0 ? _b : [
|
|
12728
|
+
"CHANGELOG.md",
|
|
12729
|
+
];
|
|
12730
|
+
const sha = (0, ciVariables_1.getCiVariable)(context, "commitSha");
|
|
12731
|
+
return [
|
|
12732
|
+
...(0, exports.gitlabDockerLogin)(context),
|
|
12733
|
+
`REUSE_IMAGE="${(0, ciVariables_1.getCiVariable)(context, "registryImage")}/${mainBranchEnv}/${name}"`,
|
|
12734
|
+
`reuse_sha=""
|
|
12735
|
+
if docker buildx imagetools inspect "$REUSE_IMAGE:${sha}" >/dev/null 2>&1; then
|
|
12736
|
+
reuse_sha="${sha}"
|
|
12737
|
+
elif git fetch --quiet --depth=2 origin "${sha}" && [ -z "$(git diff --name-only "${sha}^" "${sha}" | grep -vxF ${releaseFiles.map((f) => `-e ${shellQuote(f)}`).join(" ")})" ]; then
|
|
12738
|
+
reuse_sha="$(git rev-parse "${sha}^")"
|
|
12739
|
+
fi
|
|
12740
|
+
if [ -n "$reuse_sha" ] && docker buildx imagetools create --prefer-index=false --tag "$DOCKER_IMAGE:$DOCKER_IMAGE_TAG" "$REUSE_IMAGE:$reuse_sha"; then
|
|
12741
|
+
echo "♻️ reused $REUSE_IMAGE:$reuse_sha, skipping the build"
|
|
12742
|
+
exit 0
|
|
12743
|
+
fi
|
|
12744
|
+
echo "no main branch image to reuse, building the image"`,
|
|
12745
|
+
];
|
|
12746
|
+
};
|
|
12747
|
+
exports.getReuseMainBranchImageScript = getReuseMainBranchImageScript;
|
|
12701
12748
|
/**
|
|
12702
12749
|
* Weather the context requires a docker build
|
|
12703
12750
|
*/
|
|
@@ -12769,7 +12816,7 @@ class DockerBuildJob extends jobs_1.CatladderJob {
|
|
|
12769
12816
|
provides: ["dockerImage"],
|
|
12770
12817
|
caches: cache,
|
|
12771
12818
|
...(0, exports.getDockerJobBaseProps)(),
|
|
12772
|
-
script: script || [],
|
|
12819
|
+
script: [...(0, exports.getReuseMainBranchImageScript)(context), ...(script || [])],
|
|
12773
12820
|
variables: {
|
|
12774
12821
|
...(0, removeUndefined_1.removeUndefined)((0, exports.getDockerBuildVariables)(context)),
|
|
12775
12822
|
...(0, removeUndefined_1.removeUndefined)(variables !== null && variables !== void 0 ? variables : {}),
|
|
@@ -15005,6 +15052,9 @@ function computeCustomImageHash(config) {
|
|
|
15005
15052
|
watchedPaths.push(`${extraDir}/**/*`);
|
|
15006
15053
|
}
|
|
15007
15054
|
watchedPaths.push(...hashExtras(hash, config));
|
|
15055
|
+
if (config.salt) {
|
|
15056
|
+
hash.update(config.salt);
|
|
15057
|
+
}
|
|
15008
15058
|
return {
|
|
15009
15059
|
hash: hash.digest("hex").slice(0, 12),
|
|
15010
15060
|
watchedPaths,
|
|
@@ -15074,8 +15124,27 @@ const toResolvedJobImage = ({ imageRef, jobName, }) => ({
|
|
|
15074
15124
|
*/
|
|
15075
15125
|
const materializeDir = (sourceDir, targetDir) => listFilesRecursive(sourceDir).map((file) => ({
|
|
15076
15126
|
path: (0, path_1.join)(targetDir, file),
|
|
15077
|
-
content: (
|
|
15127
|
+
content: readVerbatim((0, path_1.join)(sourceDir, file)),
|
|
15078
15128
|
}));
|
|
15129
|
+
/**
|
|
15130
|
+
* text files stay strings, anything that is not valid utf-8 (e.g. the
|
|
15131
|
+
* packaged helm chart dependencies of the kubernetes image) stays a
|
|
15132
|
+
* Buffer, so it is written byte for byte instead of being mangled into
|
|
15133
|
+
* replacement characters
|
|
15134
|
+
*/
|
|
15135
|
+
const readVerbatim = (path) => {
|
|
15136
|
+
const bytes = (0, fs_1.readFileSync)(path);
|
|
15137
|
+
const text = bytes.toString("utf-8");
|
|
15138
|
+
return Buffer.from(text, "utf-8").equals(bytes) ? text : bytes;
|
|
15139
|
+
};
|
|
15140
|
+
/**
|
|
15141
|
+
* part of the tag of every shipped image. Bump it when the images built
|
|
15142
|
+
* from the materialized definitions change while the shipped definitions
|
|
15143
|
+
* don't, so repositories rebuild them instead of reusing the existing tag:
|
|
15144
|
+
* - 2: up to 5.3.1 binary files were materialized as utf-8 text, which
|
|
15145
|
+
* corrupted the helm chart dependencies of the kubernetes image
|
|
15146
|
+
*/
|
|
15147
|
+
const SHIPPED_IMAGE_HASH_SALT = "2";
|
|
15079
15148
|
// built-in (catladder-shipped) images carry the catladder marker in
|
|
15080
15149
|
// their job name; project-declared images get the short plain name
|
|
15081
15150
|
const ensureJobName = (name) => `🐳 catladder image ${name}`;
|
|
@@ -15238,6 +15307,7 @@ class JobImagesPlan {
|
|
|
15238
15307
|
const { hash } = (0, hash_1.computeCustomImageHash)({
|
|
15239
15308
|
dir: (0, shippedImages_1.getShippedImageDir)(name),
|
|
15240
15309
|
extraDirs: dependencies.map((dependency) => (0, shippedImages_1.getShippedImageDir)(dependency)),
|
|
15310
|
+
salt: SHIPPED_IMAGE_HASH_SALT,
|
|
15241
15311
|
});
|
|
15242
15312
|
const targetDir = `${exports.GENERATED_IMAGES_FOLDER}/${name}`;
|
|
15243
15313
|
const planned = {
|
|
@@ -19129,7 +19199,7 @@ async function generatePipelineFilesForBackend(context, backend) {
|
|
|
19129
19199
|
// write files
|
|
19130
19200
|
await Promise.all(files.map(async ({ path, content }) => {
|
|
19131
19201
|
await (0, promises_1.mkdir)((0, path_1.dirname)(path), { recursive: true });
|
|
19132
|
-
if (typeof content === "string") {
|
|
19202
|
+
if (typeof content === "string" || Buffer.isBuffer(content)) {
|
|
19133
19203
|
await context.fileWriter.writeGeneratedFileRaw(path, content);
|
|
19134
19204
|
}
|
|
19135
19205
|
else {
|
|
@@ -20158,6 +20228,11 @@ class FileWriter {
|
|
|
20158
20228
|
* parser directives like `# syntax = ...`
|
|
20159
20229
|
*/
|
|
20160
20230
|
async writeGeneratedFileRaw(path, content) {
|
|
20231
|
+
if (Buffer.isBuffer(content)) {
|
|
20232
|
+
// binary content is written as is, file hooks only transform text
|
|
20233
|
+
await (0, promises_1.writeFile)(path, content);
|
|
20234
|
+
return;
|
|
20235
|
+
}
|
|
20161
20236
|
await this.writeTheFile(path, content);
|
|
20162
20237
|
}
|
|
20163
20238
|
async writeGeneratedFile(path, content, options) {
|
|
@@ -74,6 +74,10 @@ type: `build: { from: "web" }` (see workspace builds below).
|
|
|
74
74
|
runner tags, build-only env vars, and extra runner variables. A
|
|
75
75
|
`jobImage` is a concrete image url or `{ image: "<name>" }`
|
|
76
76
|
referencing a project image (see below).
|
|
77
|
+
- `reuseMainBranchImage` — in release pipelines, stage/prod copy the
|
|
78
|
+
image the main branch (`dev`) built for the released commit instead of
|
|
79
|
+
rebuilding it (falls back to a build). Only for images that don't
|
|
80
|
+
depend on the env, e.g. Rails via Cloud Native Buildpacks.
|
|
77
81
|
- `docker` — the image build strategy: a built-in
|
|
78
82
|
(`{ type: "nginx" | "node" | "meteor" }`) or
|
|
79
83
|
`{ type: "custom" }` (expects a `Dockerfile`).
|
|
@@ -20,6 +20,7 @@ generated pipeline files.
|
|
|
20
20
|
| `runnerVariables` | `Record<string,string>` | extra runner vars (also for `services:`) |
|
|
21
21
|
| `jobTags` | `string[]` | runner tags |
|
|
22
22
|
| `jobImage` | `JobImageConfig` | CI image for the build: a concrete image or `{ image: "<name>" }` referencing a project image |
|
|
23
|
+
| `reuseMainBranchImage` | `boolean \| { releaseFiles?: string[] }` | release envs (stage/prod) copy the main branch (`dev`) image of the released commit instead of rebuilding; falls back to a build. Only for env-independent images; not for `google-cloudrun`. `true` = `{ releaseFiles: ["CHANGELOG.md"] }` |
|
|
23
24
|
| `docker` | see below | the deployable image strategy |
|
|
24
25
|
|
|
25
26
|
`TestJobCustom` (for `lint`/`test`/`audit`): `command`, `jobImage`,
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import type { Config, PipelineType } from "../types";
|
|
2
3
|
export type PipelineFile = {
|
|
3
4
|
path: string;
|
|
4
|
-
/**
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* yaml data, or verbatim content (e.g. materialized dockerfiles, or
|
|
7
|
+
* binary files of a materialized image definition as Buffer)
|
|
8
|
+
*/
|
|
9
|
+
content: Record<string, unknown> | string | Buffer;
|
|
6
10
|
};
|
|
7
11
|
/**
|
|
8
12
|
* A pipeline backend renders catladder jobs into the files of a concrete
|
|
@@ -13,6 +13,12 @@ export declare const getDockerImageVariables: (context: ComponentContext) => {
|
|
|
13
13
|
DOCKER_IMAGE_NAME: string;
|
|
14
14
|
DOCKER_IMAGE: string;
|
|
15
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* script that copies the main branch image instead of building it, see
|
|
18
|
+
* `build.reuseMainBranchImage`. Exits the job when it
|
|
19
|
+
* reused an image, so the build script after it only runs as fallback.
|
|
20
|
+
*/
|
|
21
|
+
export declare const getReuseMainBranchImageScript: (context: ComponentContextWithBuild) => string[];
|
|
16
22
|
/**
|
|
17
23
|
* Weather the context requires a docker build
|
|
18
24
|
*/
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.hasDockerfile = exports.getDockerBuildDefaultScript = exports.getDockerBuildScriptWithBuiltInDockerFile = exports.gitlabDockerLogin = exports.DockerBuildJob = exports.getDockerJobBaseProps = exports.DOCKER_BUILD_JOB_NAME = exports.getDockerBuildVariables = exports.requiresDockerBuild = exports.getDockerImageVariables = void 0;
|
|
6
|
+
exports.hasDockerfile = exports.getDockerBuildDefaultScript = exports.getDockerBuildScriptWithBuiltInDockerFile = exports.gitlabDockerLogin = exports.DockerBuildJob = exports.getDockerJobBaseProps = exports.DOCKER_BUILD_JOB_NAME = exports.getDockerBuildVariables = exports.requiresDockerBuild = exports.getReuseMainBranchImageScript = exports.getDockerImageVariables = void 0;
|
|
7
7
|
const fs_1 = require("fs");
|
|
8
8
|
const lodash_es_1 = require("lodash-es");
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
@@ -11,6 +11,7 @@ const deploy_1 = require("../deploy");
|
|
|
11
11
|
const artifactsRegistry_1 = require("../deploy/cloudRun/artifactsRegistry");
|
|
12
12
|
const gcloudServiceAccountLoginCommands_1 = require("../deploy/cloudRun/utils/gcloudServiceAccountLoginCommands");
|
|
13
13
|
const ciVariables_1 = require("../bash/ciVariables");
|
|
14
|
+
const configruedEnvs_1 = require("../config/configruedEnvs");
|
|
14
15
|
const runner_1 = require("../runner");
|
|
15
16
|
const jobs_1 = require("../types/jobs");
|
|
16
17
|
const gitlab_1 = require("../utils/gitlab");
|
|
@@ -42,6 +43,52 @@ const getDockerImageVariables = (context) => {
|
|
|
42
43
|
};
|
|
43
44
|
};
|
|
44
45
|
exports.getDockerImageVariables = getDockerImageVariables;
|
|
46
|
+
const shellQuote = (value) => `'${value.replace(/'/g, `'\\''`)}'`;
|
|
47
|
+
/**
|
|
48
|
+
* script that copies the main branch image instead of building it, see
|
|
49
|
+
* `build.reuseMainBranchImage`. Exits the job when it
|
|
50
|
+
* reused an image, so the build script after it only runs as fallback.
|
|
51
|
+
*/
|
|
52
|
+
const getReuseMainBranchImageScript = (context) => {
|
|
53
|
+
var _a, _b;
|
|
54
|
+
const buildConfig = context.build.config;
|
|
55
|
+
// only standalone builds have the option, workspace builds don't
|
|
56
|
+
const option = "reuseMainBranchImage" in buildConfig
|
|
57
|
+
? buildConfig.reuseMainBranchImage
|
|
58
|
+
: undefined;
|
|
59
|
+
const { fullConfig, name, env } = context;
|
|
60
|
+
if (!option ||
|
|
61
|
+
!(0, configruedEnvs_1.getAllEnvsByTrigger)(fullConfig, name, "taggedRelease").includes(env)) {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
if ((0, deploy_1.isOfDeployType)((_a = context.deploy) === null || _a === void 0 ? void 0 : _a.config, "google-cloudrun")) {
|
|
65
|
+
throw new Error(`${name}: build.reuseMainBranchImage is not supported for google-cloudrun deploys`);
|
|
66
|
+
}
|
|
67
|
+
const [mainBranchEnv] = (0, configruedEnvs_1.getAllEnvsByTrigger)(fullConfig, name, "mainBranch");
|
|
68
|
+
if (!mainBranchEnv) {
|
|
69
|
+
throw new Error(`${name}: build.reuseMainBranchImage needs an env that builds on the main branch (e.g. dev)`);
|
|
70
|
+
}
|
|
71
|
+
const releaseFiles = (_b = (option === true ? undefined : option.releaseFiles)) !== null && _b !== void 0 ? _b : [
|
|
72
|
+
"CHANGELOG.md",
|
|
73
|
+
];
|
|
74
|
+
const sha = (0, ciVariables_1.getCiVariable)(context, "commitSha");
|
|
75
|
+
return [
|
|
76
|
+
...(0, exports.gitlabDockerLogin)(context),
|
|
77
|
+
`REUSE_IMAGE="${(0, ciVariables_1.getCiVariable)(context, "registryImage")}/${mainBranchEnv}/${name}"`,
|
|
78
|
+
`reuse_sha=""
|
|
79
|
+
if docker buildx imagetools inspect "$REUSE_IMAGE:${sha}" >/dev/null 2>&1; then
|
|
80
|
+
reuse_sha="${sha}"
|
|
81
|
+
elif git fetch --quiet --depth=2 origin "${sha}" && [ -z "$(git diff --name-only "${sha}^" "${sha}" | grep -vxF ${releaseFiles.map((f) => `-e ${shellQuote(f)}`).join(" ")})" ]; then
|
|
82
|
+
reuse_sha="$(git rev-parse "${sha}^")"
|
|
83
|
+
fi
|
|
84
|
+
if [ -n "$reuse_sha" ] && docker buildx imagetools create --prefer-index=false --tag "$DOCKER_IMAGE:$DOCKER_IMAGE_TAG" "$REUSE_IMAGE:$reuse_sha"; then
|
|
85
|
+
echo "♻️ reused $REUSE_IMAGE:$reuse_sha, skipping the build"
|
|
86
|
+
exit 0
|
|
87
|
+
fi
|
|
88
|
+
echo "no main branch image to reuse, building the image"`,
|
|
89
|
+
];
|
|
90
|
+
};
|
|
91
|
+
exports.getReuseMainBranchImageScript = getReuseMainBranchImageScript;
|
|
45
92
|
/**
|
|
46
93
|
* Weather the context requires a docker build
|
|
47
94
|
*/
|
|
@@ -113,7 +160,7 @@ class DockerBuildJob extends jobs_1.CatladderJob {
|
|
|
113
160
|
provides: ["dockerImage"],
|
|
114
161
|
caches: cache,
|
|
115
162
|
...(0, exports.getDockerJobBaseProps)(),
|
|
116
|
-
script: script || [],
|
|
163
|
+
script: [...(0, exports.getReuseMainBranchImageScript)(context), ...(script || [])],
|
|
117
164
|
variables: {
|
|
118
165
|
...(0, removeUndefined_1.removeUndefined)((0, exports.getDockerBuildVariables)(context)),
|
|
119
166
|
...(0, removeUndefined_1.removeUndefined)(variables !== null && variables !== void 0 ? variables : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../../../../../packages/pipeline/src/build/docker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../../../../../packages/pipeline/src/build/docker.ts"],"names":[],"mappings":"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"}
|
|
@@ -178,6 +178,35 @@ export type BuildConfigBase = {
|
|
|
178
178
|
* custom image to use
|
|
179
179
|
*/
|
|
180
180
|
jobImage?: JobImageConfig;
|
|
181
|
+
/**
|
|
182
|
+
* reuse the docker image that the main branch pipeline already built,
|
|
183
|
+
* instead of building it again in tagged-release pipelines (stage / prod).
|
|
184
|
+
*
|
|
185
|
+
* The 🔨 docker job of a release env copies the image of the main branch
|
|
186
|
+
* env (e.g. `dev/<component>:<sha>`) to its own image name — a registry-side
|
|
187
|
+
* copy that keeps the digest, no rebuild. It reuses the image of
|
|
188
|
+
*
|
|
189
|
+
* - the tagged commit itself, or
|
|
190
|
+
* - its parent, when the tagged commit is a release commit that only
|
|
191
|
+
* touches `releaseFiles` (e.g. the `CHANGELOG.md` commit of semantic-release)
|
|
192
|
+
*
|
|
193
|
+
* and falls back to a regular build when there is no such image.
|
|
194
|
+
*
|
|
195
|
+
* Only enable this when the image does not depend on the env (no
|
|
196
|
+
* env-specific build vars or build args baked in): stage and prod then run
|
|
197
|
+
* exactly the image that was built and deployed on the main branch.
|
|
198
|
+
*
|
|
199
|
+
* `true` is short for `{ releaseFiles: ["CHANGELOG.md"] }`.
|
|
200
|
+
* Not supported for `google-cloudrun` deploys.
|
|
201
|
+
*/
|
|
202
|
+
reuseMainBranchImage?: boolean | {
|
|
203
|
+
/**
|
|
204
|
+
* files (relative to the repository root) a release commit may
|
|
205
|
+
* change without invalidating the image of its parent.
|
|
206
|
+
* Defaults to `["CHANGELOG.md"]`.
|
|
207
|
+
*/
|
|
208
|
+
releaseFiles?: string[];
|
|
209
|
+
};
|
|
181
210
|
} & WithCacheConfig;
|
|
182
211
|
export type BuildConfigNodeBase = BuildConfigBase & {
|
|
183
212
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/pipeline/src/build/types.ts"],"names":[],"mappings":";;;AA+
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/pipeline/src/build/types.ts"],"names":[],"mappings":";;;AA+cO,MAAM,uBAAuB,GAAG,CACrC,CAAsB,EACM,EAAE;IAC9B,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACxB,CAAC,CAAC;AALW,QAAA,uBAAuB,2BAKlC;AAEK,MAAM,aAAa,GAAG,CAC3B,CAAc,EACd,GAAG,KAAQ,EACqC,EAAE;IAClD,IAAI,CAAC,IAAA,+BAAuB,EAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB"}
|
|
@@ -7,6 +7,10 @@ export type ImageHashConfig = {
|
|
|
7
7
|
extraDirs?: string[];
|
|
8
8
|
hashExtraPaths?: string[];
|
|
9
9
|
buildArgs?: Record<string, string>;
|
|
10
|
+
/**
|
|
11
|
+
* bumped to change the hash although no hashed file changed
|
|
12
|
+
*/
|
|
13
|
+
salt?: string;
|
|
10
14
|
};
|
|
11
15
|
export type CustomImageHashResult = {
|
|
12
16
|
hash: string;
|
|
@@ -65,6 +65,9 @@ function computeCustomImageHash(config) {
|
|
|
65
65
|
watchedPaths.push(`${extraDir}/**/*`);
|
|
66
66
|
}
|
|
67
67
|
watchedPaths.push(...hashExtras(hash, config));
|
|
68
|
+
if (config.salt) {
|
|
69
|
+
hash.update(config.salt);
|
|
70
|
+
}
|
|
68
71
|
return {
|
|
69
72
|
hash: hash.digest("hex").slice(0, 12),
|
|
70
73
|
watchedPaths,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../../../../../packages/pipeline/src/customImages/hash.ts"],"names":[],"mappings":";;;AACA,mCAAoC;AACpC,2BAAyD;AACzD,+BAAqC;
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../../../../../packages/pipeline/src/customImages/hash.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import type { CatladderImageRef } from "../runner";
|
|
2
3
|
import type { GitlabJobImage, PipelineType } from "../types";
|
|
3
4
|
import type { CatladderJob, CatladderJobNeed } from "../types/jobs";
|
|
@@ -13,7 +14,7 @@ export type ResolvedJobImage = {
|
|
|
13
14
|
};
|
|
14
15
|
export type GeneratedImageFile = {
|
|
15
16
|
path: string;
|
|
16
|
-
content: string;
|
|
17
|
+
content: string | Buffer;
|
|
17
18
|
};
|
|
18
19
|
/**
|
|
19
20
|
* where inline project Dockerfiles are materialized — a subfolder, so a
|
|
@@ -37,8 +37,27 @@ const toResolvedJobImage = ({ imageRef, jobName, }) => ({
|
|
|
37
37
|
*/
|
|
38
38
|
const materializeDir = (sourceDir, targetDir) => listFilesRecursive(sourceDir).map((file) => ({
|
|
39
39
|
path: (0, path_1.join)(targetDir, file),
|
|
40
|
-
content: (
|
|
40
|
+
content: readVerbatim((0, path_1.join)(sourceDir, file)),
|
|
41
41
|
}));
|
|
42
|
+
/**
|
|
43
|
+
* text files stay strings, anything that is not valid utf-8 (e.g. the
|
|
44
|
+
* packaged helm chart dependencies of the kubernetes image) stays a
|
|
45
|
+
* Buffer, so it is written byte for byte instead of being mangled into
|
|
46
|
+
* replacement characters
|
|
47
|
+
*/
|
|
48
|
+
const readVerbatim = (path) => {
|
|
49
|
+
const bytes = (0, fs_1.readFileSync)(path);
|
|
50
|
+
const text = bytes.toString("utf-8");
|
|
51
|
+
return Buffer.from(text, "utf-8").equals(bytes) ? text : bytes;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* part of the tag of every shipped image. Bump it when the images built
|
|
55
|
+
* from the materialized definitions change while the shipped definitions
|
|
56
|
+
* don't, so repositories rebuild them instead of reusing the existing tag:
|
|
57
|
+
* - 2: up to 5.3.1 binary files were materialized as utf-8 text, which
|
|
58
|
+
* corrupted the helm chart dependencies of the kubernetes image
|
|
59
|
+
*/
|
|
60
|
+
const SHIPPED_IMAGE_HASH_SALT = "2";
|
|
42
61
|
// built-in (catladder-shipped) images carry the catladder marker in
|
|
43
62
|
// their job name; project-declared images get the short plain name
|
|
44
63
|
const ensureJobName = (name) => `🐳 catladder image ${name}`;
|
|
@@ -201,6 +220,7 @@ class JobImagesPlan {
|
|
|
201
220
|
const { hash } = (0, hash_1.computeCustomImageHash)({
|
|
202
221
|
dir: (0, shippedImages_1.getShippedImageDir)(name),
|
|
203
222
|
extraDirs: dependencies.map((dependency) => (0, shippedImages_1.getShippedImageDir)(dependency)),
|
|
223
|
+
salt: SHIPPED_IMAGE_HASH_SALT,
|
|
204
224
|
});
|
|
205
225
|
const targetDir = `${exports.GENERATED_IMAGES_FOLDER}/${name}`;
|
|
206
226
|
const planned = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobImagesPlan.js","sourceRoot":"","sources":["../../../../../../../packages/pipeline/src/customImages/jobImagesPlan.ts"],"names":[],"mappings":";;;AAAA,2BAAqE;AACrE,+BAA4B;AAC5B,qDAAoD;AACpD,kDAAqE;AACrE,4CAAwD;AAExD,sCAAgD;AAGhD,4CAAsD;AACtD,iCAAwE;AAExE,mDAAoD;AACpD,mDAIyB;AAEZ,QAAA,uBAAuB,GAAG,6BAA6B,CAAC;AAErE;;;GAGG;AACH,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAyChD;;;GAGG;AACH,MAAM,kBAAkB,GAAG,CAAC,EAC1B,QAAQ,EACR,OAAO,GACM,EAAoB,EAAE,CAAC,CAAC;IACrC,KAAK,EAAE,QAAQ;IACf,gBAAgB,EAAE,IAAI;IACtB,IAAI,EAAE;QACJ,GAAG,EAAE,OAAO;QACZ,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,IAAI;KACb;CACF,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,cAAc,GAAG,CACrB,SAAiB,EACjB,SAAiB,EACK,EAAE,CACxB,kBAAkB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,CAAC;IAC3B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"jobImagesPlan.js","sourceRoot":"","sources":["../../../../../../../packages/pipeline/src/customImages/jobImagesPlan.ts"],"names":[],"mappings":"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"}
|