@payfit/nx-core 0.0.0-e2e
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/README.md +173 -0
- package/dist/src/codegen.d.ts +3 -0
- package/dist/src/codegen.js +25 -0
- package/dist/src/codegen.js.map +1 -0
- package/dist/src/executors/preview-deploy/README.md +5 -0
- package/dist/src/executors/preview-deploy/argocdOverride.d.ts +4 -0
- package/dist/src/executors/preview-deploy/argocdOverride.js +22 -0
- package/dist/src/executors/preview-deploy/argocdOverride.js.map +1 -0
- package/dist/src/executors/preview-deploy/executor.d.ts +4 -0
- package/dist/src/executors/preview-deploy/executor.js +143 -0
- package/dist/src/executors/preview-deploy/executor.js.map +1 -0
- package/dist/src/executors/preview-deploy/kargoPolicy.d.ts +14 -0
- package/dist/src/executors/preview-deploy/kargoPolicy.js +69 -0
- package/dist/src/executors/preview-deploy/kargoPolicy.js.map +1 -0
- package/dist/src/executors/preview-deploy/schema.json +28 -0
- package/dist/src/executors/publisher/README.md +3 -0
- package/dist/src/executors/publisher/docker.d.ts +3 -0
- package/dist/src/executors/publisher/docker.js +66 -0
- package/dist/src/executors/publisher/docker.js.map +1 -0
- package/dist/src/executors/publisher/executor.d.ts +4 -0
- package/dist/src/executors/publisher/executor.js +20 -0
- package/dist/src/executors/publisher/executor.js.map +1 -0
- package/dist/src/executors/publisher/helm.d.ts +3 -0
- package/dist/src/executors/publisher/helm.js +69 -0
- package/dist/src/executors/publisher/helm.js.map +1 -0
- package/dist/src/executors/publisher/lambda.d.ts +18 -0
- package/dist/src/executors/publisher/lambda.js +86 -0
- package/dist/src/executors/publisher/lambda.js.map +1 -0
- package/dist/src/executors/publisher/schema.json +62 -0
- package/dist/src/executors/release/README.md +15 -0
- package/dist/src/executors/release/executor.d.ts +4 -0
- package/dist/src/executors/release/executor.js +104 -0
- package/dist/src/executors/release/executor.js.map +1 -0
- package/dist/src/executors/release/schema.json +37 -0
- package/dist/src/generators/init/README.md +5 -0
- package/dist/src/generators/init/files/.circleci/config.yml.template +232 -0
- package/dist/src/generators/init/files/.circleci/teleport/shared-charts.conf.template +24 -0
- package/dist/src/generators/init/files/.npmrc.template +1 -0
- package/dist/src/generators/init/init.d.ts +13 -0
- package/dist/src/generators/init/init.js +278 -0
- package/dist/src/generators/init/init.js.map +1 -0
- package/dist/src/generators/init/schema.json +7 -0
- package/dist/src/index.d.ts +27 -0
- package/dist/src/index.js +118 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/scripts/codegen-with-auth.js +55 -0
- package/dist/src/scripts/version-actions.d.ts +8 -0
- package/dist/src/scripts/version-actions.js +41 -0
- package/dist/src/scripts/version-actions.js.map +1 -0
- package/dist/src/scripts/version-actions.mock.d.ts +6 -0
- package/dist/src/scripts/version-actions.mock.js +61 -0
- package/dist/src/scripts/version-actions.mock.js.map +1 -0
- package/dist/src/utils/common/aws-auth.d.ts +47 -0
- package/dist/src/utils/common/aws-auth.js +145 -0
- package/dist/src/utils/common/aws-auth.js.map +1 -0
- package/dist/src/utils/common/circleci.d.ts +2 -0
- package/dist/src/utils/common/circleci.js +20 -0
- package/dist/src/utils/common/circleci.js.map +1 -0
- package/dist/src/utils/common/exec.d.ts +4 -0
- package/dist/src/utils/common/exec.js +52 -0
- package/dist/src/utils/common/exec.js.map +1 -0
- package/dist/src/utils/common/github.d.ts +20 -0
- package/dist/src/utils/common/github.js +60 -0
- package/dist/src/utils/common/github.js.map +1 -0
- package/dist/src/utils/common/import-esm.d.ts +2 -0
- package/dist/src/utils/common/import-esm.js +12 -0
- package/dist/src/utils/common/import-esm.js.map +1 -0
- package/dist/src/utils/common/logger.d.ts +1 -0
- package/dist/src/utils/common/logger.js +8 -0
- package/dist/src/utils/common/logger.js.map +1 -0
- package/dist/src/utils/common/nx.d.ts +22 -0
- package/dist/src/utils/common/nx.js +174 -0
- package/dist/src/utils/common/nx.js.map +1 -0
- package/dist/src/utils/common/s3.d.ts +1 -0
- package/dist/src/utils/common/s3.js +18 -0
- package/dist/src/utils/common/s3.js.map +1 -0
- package/dist/src/utils/common/tsh.d.ts +11 -0
- package/dist/src/utils/common/tsh.js +112 -0
- package/dist/src/utils/common/tsh.js.map +1 -0
- package/dist/src/utils/datadog.d.ts +1 -0
- package/dist/src/utils/datadog.js +33 -0
- package/dist/src/utils/datadog.js.map +1 -0
- package/dist/src/utils/docker.d.ts +15 -0
- package/dist/src/utils/docker.js +73 -0
- package/dist/src/utils/docker.js.map +1 -0
- package/dist/src/utils/helm.d.ts +64 -0
- package/dist/src/utils/helm.js +159 -0
- package/dist/src/utils/helm.js.map +1 -0
- package/dist/src/utils/helm.mock.d.ts +85 -0
- package/dist/src/utils/helm.mock.js +100 -0
- package/dist/src/utils/helm.mock.js.map +1 -0
- package/dist/src/utils/lambda/aws-lambda.d.ts +47 -0
- package/dist/src/utils/lambda/aws-lambda.js +231 -0
- package/dist/src/utils/lambda/aws-lambda.js.map +1 -0
- package/dist/src/utils/lambda/lambda.d.ts +7 -0
- package/dist/src/utils/lambda/lambda.js +20 -0
- package/dist/src/utils/lambda/lambda.js.map +1 -0
- package/dist/src/utils/lambda/oci.d.ts +8 -0
- package/dist/src/utils/lambda/oci.js +22 -0
- package/dist/src/utils/lambda/oci.js.map +1 -0
- package/dist/src/utils/lambda/publish.d.ts +14 -0
- package/dist/src/utils/lambda/publish.js +44 -0
- package/dist/src/utils/lambda/publish.js.map +1 -0
- package/dist/src/utils/lambda/spacelift.d.ts +3 -0
- package/dist/src/utils/lambda/spacelift.js +55 -0
- package/dist/src/utils/lambda/spacelift.js.map +1 -0
- package/dist/src/utils/spacelift/lib/__generated__/fragment-masking.d.ts +19 -0
- package/dist/src/utils/spacelift/lib/__generated__/fragment-masking.js +22 -0
- package/dist/src/utils/spacelift/lib/__generated__/fragment-masking.js.map +1 -0
- package/dist/src/utils/spacelift/lib/__generated__/gql.d.ts +15 -0
- package/dist/src/utils/spacelift/lib/__generated__/gql.js +8 -0
- package/dist/src/utils/spacelift/lib/__generated__/gql.js.map +1 -0
- package/dist/src/utils/spacelift/lib/__generated__/graphql.d.ts +9426 -0
- package/dist/src/utils/spacelift/lib/__generated__/graphql.js +819 -0
- package/dist/src/utils/spacelift/lib/__generated__/graphql.js.map +1 -0
- package/dist/src/utils/spacelift/lib/__generated__/index.d.ts +2 -0
- package/dist/src/utils/spacelift/lib/__generated__/index.js +6 -0
- package/dist/src/utils/spacelift/lib/__generated__/index.js.map +1 -0
- package/dist/src/utils/spacelift/lib/graphql.service.d.ts +18 -0
- package/dist/src/utils/spacelift/lib/graphql.service.js +186 -0
- package/dist/src/utils/spacelift/lib/graphql.service.js.map +1 -0
- package/dist/src/utils/spacelift/lib/query/spacelift.queries.d.ts +34 -0
- package/dist/src/utils/spacelift/lib/query/spacelift.queries.js +48 -0
- package/dist/src/utils/spacelift/lib/query/spacelift.queries.js.map +1 -0
- package/dist/src/utils/spacelift/lib/spacelift.error.d.ts +43 -0
- package/dist/src/utils/spacelift/lib/spacelift.error.js +63 -0
- package/dist/src/utils/spacelift/lib/spacelift.error.js.map +1 -0
- package/dist/src/utils/spacelift/lib/spacelift.service.d.ts +16 -0
- package/dist/src/utils/spacelift/lib/spacelift.service.js +58 -0
- package/dist/src/utils/spacelift/lib/spacelift.service.js.map +1 -0
- package/dist/src/utils/spacelift/lib/utils.d.ts +4 -0
- package/dist/src/utils/spacelift/lib/utils.js +32 -0
- package/dist/src/utils/spacelift/lib/utils.js.map +1 -0
- package/executors.json +19 -0
- package/generators.json +9 -0
- package/package.json +60 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.publishHelm = publishHelm;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs = require("node:fs");
|
|
6
|
+
const aws_auth_1 = require("../../utils/common/aws-auth");
|
|
7
|
+
const github_1 = require("../../utils/common/github");
|
|
8
|
+
const logger_1 = require("../../utils/common/logger");
|
|
9
|
+
const tsh_1 = require("../../utils/common/tsh");
|
|
10
|
+
const helm_1 = require("../../utils/helm");
|
|
11
|
+
async function publishHelm(options, context, version, projectRoot, projectDist, isDryRun) {
|
|
12
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
13
|
+
try {
|
|
14
|
+
const helmChartFolder = options.helmChartFolder || '.deploy';
|
|
15
|
+
const projectHelmFolder = `${projectRoot}/${helmChartFolder}`;
|
|
16
|
+
const valuesConfigPath = `${projectHelmFolder}/values.yaml`;
|
|
17
|
+
const chartConfigPath = `${projectHelmFolder}/Chart.yaml`;
|
|
18
|
+
const destinationHelmFolder = `${projectDist}/chart/`;
|
|
19
|
+
const gitBranchName = await (0, github_1.getSanitizedCurrentGitBranch)();
|
|
20
|
+
if (!gitBranchName)
|
|
21
|
+
throw new Error('Unable to get current Git branch');
|
|
22
|
+
if (!fs.existsSync(chartConfigPath)) {
|
|
23
|
+
logger_1.consola.warn(`No helm chart found in project ${context.projectName}, searching ${chartConfigPath}, skipping`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (!options.chartRegistry) {
|
|
27
|
+
logger_1.consola.error('Helm chart detected but no chart registry provided, add "chartRegistry" to your project.json metadata');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (isDryRun) {
|
|
31
|
+
logger_1.consola.box(`Would have published Helm chart located at ${projectHelmFolder} to ${options.ociEcrRegistry ? options.ociEcrRegistry : options.chartRegistry}/${gitBranchName} with version ${version} but --dry-run is enabled`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
await (0, aws_auth_1.checkAwsAuth)();
|
|
35
|
+
logger_1.consola.box(`Publishing Helm chart to ${options.chartRegistry}/${gitBranchName} with version ${version}`);
|
|
36
|
+
// connect to the chartmuseum through teleport
|
|
37
|
+
const proxyData = tslib_1.__addDisposableResource(env_1, await (0, tsh_1.getLocalPortForChartMuseum)(), false);
|
|
38
|
+
await proxyData.isReady();
|
|
39
|
+
logger_1.consola.start('Building Helm chart');
|
|
40
|
+
await (0, helm_1.setupTeleportProxyHelmChartFile)(projectHelmFolder, proxyData.port);
|
|
41
|
+
await (0, helm_1.installHelmRepo)(projectHelmFolder);
|
|
42
|
+
await (0, helm_1.patchImageTag)(valuesConfigPath, chartConfigPath, version);
|
|
43
|
+
await (0, helm_1.packageHelm)(projectHelmFolder, version, destinationHelmFolder);
|
|
44
|
+
await (0, helm_1.resetTeleportProxyHelmChartFile)(projectHelmFolder, proxyData.port);
|
|
45
|
+
logger_1.consola.success('Helm chart packaged!');
|
|
46
|
+
const chartConfig = await (0, helm_1.getHelmChartFile)(projectHelmFolder);
|
|
47
|
+
const packagedHelmChartName = `${chartConfig.name}-${version}.tgz`;
|
|
48
|
+
const packagedHelmChartPath = `${destinationHelmFolder}${packagedHelmChartName}`;
|
|
49
|
+
logger_1.consola.start('Publishing Helm chart');
|
|
50
|
+
// If ociEcrRegistry is provided, push to ECR using OCI format
|
|
51
|
+
if (options.ociEcrRegistry) {
|
|
52
|
+
logger_1.consola.log(`Publishing Helm chart to OCI registry ${options.ociEcrRegistry}`);
|
|
53
|
+
await (0, helm_1.pushOciPackagedHelm)(packagedHelmChartPath, options.ociEcrRegistry);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Otherwise, push to the chartmuseum as before
|
|
57
|
+
await (0, helm_1.pushPackagedHelm)(packagedHelmChartPath, packagedHelmChartName, options.chartRegistry, gitBranchName);
|
|
58
|
+
}
|
|
59
|
+
logger_1.consola.success('Helm chart published successfully!');
|
|
60
|
+
}
|
|
61
|
+
catch (e_1) {
|
|
62
|
+
env_1.error = e_1;
|
|
63
|
+
env_1.hasError = true;
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
tslib_1.__disposeResources(env_1);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=helm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helm.js","sourceRoot":"","sources":["../../../../src/executors/publisher/helm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ExecutorContext } from '@nx/devkit';
|
|
2
|
+
import { PublisherExecutorOptions } from './schema';
|
|
3
|
+
/**
|
|
4
|
+
* Function called by nx-release-publish, it :
|
|
5
|
+
* - publish zip to S3
|
|
6
|
+
* - creates new version via Spacelift
|
|
7
|
+
* - runs smoke tests
|
|
8
|
+
* - create alias for lambda function
|
|
9
|
+
* - push OCI in ECR registry
|
|
10
|
+
*
|
|
11
|
+
* @param options - Contains lambdaBucket, lambdaFunctions, and lambdaStacks configuration
|
|
12
|
+
* @param context - NX executor context with project information
|
|
13
|
+
* @param version - Version string for deployment
|
|
14
|
+
* @param projectRoot - Project root directory path
|
|
15
|
+
* @param projectDist - Built code directory path
|
|
16
|
+
* @param isDryRun - Skip actual deployment if true
|
|
17
|
+
*/
|
|
18
|
+
export declare function publishLambda(options: PublisherExecutorOptions, context: ExecutorContext, version: string, projectRoot: string, projectDist: string, isDryRun: boolean): Promise<void>;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.publishLambda = publishLambda;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const aws_auth_1 = require("../../utils/common/aws-auth");
|
|
6
|
+
const github_1 = require("../../utils/common/github");
|
|
7
|
+
const logger_1 = require("../../utils/common/logger");
|
|
8
|
+
const s3_1 = require("../../utils/common/s3");
|
|
9
|
+
const lambda_1 = require("../../utils/lambda/lambda");
|
|
10
|
+
const oci_1 = require("../../utils/lambda/oci");
|
|
11
|
+
const publish_1 = require("../../utils/lambda/publish");
|
|
12
|
+
/**
|
|
13
|
+
* Function called by nx-release-publish, it :
|
|
14
|
+
* - publish zip to S3
|
|
15
|
+
* - creates new version via Spacelift
|
|
16
|
+
* - runs smoke tests
|
|
17
|
+
* - create alias for lambda function
|
|
18
|
+
* - push OCI in ECR registry
|
|
19
|
+
*
|
|
20
|
+
* @param options - Contains lambdaBucket, lambdaFunctions, and lambdaStacks configuration
|
|
21
|
+
* @param context - NX executor context with project information
|
|
22
|
+
* @param version - Version string for deployment
|
|
23
|
+
* @param projectRoot - Project root directory path
|
|
24
|
+
* @param projectDist - Built code directory path
|
|
25
|
+
* @param isDryRun - Skip actual deployment if true
|
|
26
|
+
*/
|
|
27
|
+
async function publishLambda(options, context, version, projectRoot, projectDist, isDryRun) {
|
|
28
|
+
const gitBranchName = await (0, github_1.getSanitizedCurrentGitBranch)();
|
|
29
|
+
const repoUrl = await (0, github_1.getSanitizedCurrentGitRepoUrl)();
|
|
30
|
+
const repoName = repoUrl.split('/').pop() ?? 'unknown-repo';
|
|
31
|
+
// Sanitize project name to ensure it is a valid S3 key
|
|
32
|
+
// Remove any characters that are not alphanumeric, hyphen, or underscore
|
|
33
|
+
// remove the @payfit/ prefix if it exists
|
|
34
|
+
const sanitizedProjectName = context.projectName
|
|
35
|
+
.replace(/^@payfit\//, '')
|
|
36
|
+
.replace(/[^a-zA-Z0-9-_]/g, '-');
|
|
37
|
+
const zipName = `${version}.zip`;
|
|
38
|
+
const zipFileNameS3 = `${options.lambdaBucket}/${repoName}/${sanitizedProjectName}/${zipName}`;
|
|
39
|
+
if (!gitBranchName)
|
|
40
|
+
throw new Error('Unable to get current Git branch');
|
|
41
|
+
if (!options.lambdaFunctions) {
|
|
42
|
+
logger_1.consola.info(`No lambda functions provided in project ${context.projectName} no "lambdaFunctions" parameter in project.json metadata, skipping`);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (!options.lambdaStacks) {
|
|
46
|
+
logger_1.consola.error('No lambda spacelift stacks provided, add "lambdaStacks" to your project.json metadata');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (!options.lambdaHealthCheckPayload) {
|
|
50
|
+
logger_1.consola.error('A healthCheck payload should be defined to run smoke test before releasing the lambda', 'Add "lambdaHealthCheckPayload" to your project.json metadata');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const lambdaPayload = options.lambdaHealthCheckPayload;
|
|
55
|
+
try {
|
|
56
|
+
JSON.parse(lambdaPayload);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
logger_1.consola.error(`lambdaHealthCheckPayload should be a JSON string, got ${lambdaPayload}`);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (isDryRun) {
|
|
64
|
+
logger_1.consola.box(`Would have published lambda artefact to S3 ${zipFileNameS3} but --dry-run is enabled`);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
await (0, aws_auth_1.checkAwsAuth)();
|
|
68
|
+
logger_1.consola.box(`Publishing the lambda artefact ${zipFileNameS3}`);
|
|
69
|
+
logger_1.consola.info(`Zipping ${zipName} from ${projectDist}`);
|
|
70
|
+
await (0, lambda_1.createZip)(projectDist, zipName);
|
|
71
|
+
const zipPath = (0, path_1.join)(projectDist, zipName);
|
|
72
|
+
logger_1.consola.info(`Uploading ${zipPath} to S3 at ${zipFileNameS3}`);
|
|
73
|
+
await (0, s3_1.pushToS3)(zipPath, zipFileNameS3);
|
|
74
|
+
logger_1.consola.success(`Lambda artefact successfully pushed to S3 at ${zipFileNameS3}`);
|
|
75
|
+
logger_1.consola.box(`Creating new Lambda version and running smoke tests`);
|
|
76
|
+
await (0, publish_1.createLambdaVersion)(options.lambdaStacks, options.lambdaFunctions, version, options.lambdaHealthCheckPayload);
|
|
77
|
+
const packageJsonPath = (0, path_1.join)(projectDist, 'package.json');
|
|
78
|
+
for (const registry of options.lambdaFunctions) {
|
|
79
|
+
logger_1.consola.info(`Pushing empty image to ECR ${process.env.AWS_ECR_REGISTRY}/${registry}:${version}`);
|
|
80
|
+
await (0, aws_auth_1.loginToEcr)(process.env.AWS_ECR_REGISTRY);
|
|
81
|
+
await (0, oci_1.pushImageToEcr)(registry, version, packageJsonPath);
|
|
82
|
+
}
|
|
83
|
+
logger_1.consola.success('Lambda artifact successfully pushed to S3!');
|
|
84
|
+
logger_1.consola.success(`Lambda version ${version} successfully created and smoke tests passed, you're lambda is ready to be promoted in Kargo !`);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=lambda.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lambda.js","sourceRoot":"","sources":["../../../../src/executors/publisher/lambda.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/schema",
|
|
3
|
+
"version": 2,
|
|
4
|
+
"title": "Publisher executor",
|
|
5
|
+
"description": "Publish the helm chart to the chartmuseum and docker image to ECR",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"chartRegistry": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "The helm chart registry"
|
|
11
|
+
},
|
|
12
|
+
"ecrRegistry": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "The docker registry"
|
|
15
|
+
},
|
|
16
|
+
"ociEcrRegistry": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "The docker registry in oci format (AWS ECR)"
|
|
19
|
+
},
|
|
20
|
+
"isPublicRegistry": {
|
|
21
|
+
"type": "boolean",
|
|
22
|
+
"description": "Whether to use the public ECR registry",
|
|
23
|
+
"default": false
|
|
24
|
+
},
|
|
25
|
+
"helmChartFolder": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "The folder containing the Helm chart files (Chart.yaml, values.yaml, etc.)",
|
|
28
|
+
"default": ".deploy"
|
|
29
|
+
},
|
|
30
|
+
"extraReleaseTags": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"items": {
|
|
33
|
+
"type": "string"
|
|
34
|
+
},
|
|
35
|
+
"description": "Additional tags to add to the Docker image during a release",
|
|
36
|
+
"default": []
|
|
37
|
+
},
|
|
38
|
+
"dryRun": {
|
|
39
|
+
"type": "boolean",
|
|
40
|
+
"description": "Whether to run in dry run mode. When true, shows what would be published without actually publishing.",
|
|
41
|
+
"default": false
|
|
42
|
+
},
|
|
43
|
+
"lambdaBucket": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"description": "The S3 bucket for lambda",
|
|
46
|
+
"default": "payfit-shared-lambda-artifacts"
|
|
47
|
+
},
|
|
48
|
+
"lambdaStacks": {
|
|
49
|
+
"type": "array",
|
|
50
|
+
"description": "The list of stacks to publish the lambda to"
|
|
51
|
+
},
|
|
52
|
+
"lambdaFunctions": {
|
|
53
|
+
"type": "array",
|
|
54
|
+
"description": "The list of lambda functions inside the workload"
|
|
55
|
+
},
|
|
56
|
+
"lambdaHealthCheckPayload": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"description": "Health check payload for the lambda functions. Must be in JSON string format"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"required": []
|
|
62
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# nx-core release executor
|
|
2
|
+
|
|
3
|
+
It is handling all the release using the SDK of Nx
|
|
4
|
+
|
|
5
|
+
https://nx.dev/features/manage-releases#using-the-programmatic-api-for-nx-release
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
flowchart LR
|
|
9
|
+
A(["releaseVersion"]) --> B(["releaseChangelog"])
|
|
10
|
+
B --> C(["releasePublish"])
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
1. **releaseVersion**: will define affected apps & calculate new versions based on the version actions defined (so semver, calver, ...)
|
|
14
|
+
2. **releaseChangelog**: will generate the changelog based on the git history
|
|
15
|
+
3. **releasePublish**: will trigger the `nx-release-publish` target on all the affected apps
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ExecutorContext } from '@nx/devkit';
|
|
2
|
+
import { ReleaseExecutorOptions, ReleaseExecutorSchema } from './schema';
|
|
3
|
+
declare const runExecutor: (options: ReleaseExecutorOptions, context: ExecutorContext) => Promise<ReleaseExecutorSchema>;
|
|
4
|
+
export default runExecutor;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const release_1 = require("nx/release");
|
|
4
|
+
const circleci_1 = require("../../utils/common/circleci");
|
|
5
|
+
const github_1 = require("../../utils/common/github");
|
|
6
|
+
const logger_1 = require("../../utils/common/logger");
|
|
7
|
+
const nx_1 = require("../../utils/common/nx");
|
|
8
|
+
const tsh_1 = require("../../utils/common/tsh");
|
|
9
|
+
const runExecutor = async (options, context) => {
|
|
10
|
+
const dryRun = process.env.NX_DRY_RUN === 'true' || options.dryRun || false;
|
|
11
|
+
if ((0, circleci_1.isCircleCIRunner)()) {
|
|
12
|
+
logger_1.consola.start('CircleCI runner detected, setting it up!');
|
|
13
|
+
await (0, circleci_1.setupCircleCIRunner)();
|
|
14
|
+
await (0, tsh_1.startTbot)();
|
|
15
|
+
logger_1.consola.success('CircleCI runner setup successfully!');
|
|
16
|
+
}
|
|
17
|
+
const branchName = await (0, github_1.getSanitizedCurrentGitBranch)();
|
|
18
|
+
const commit = await (0, github_1.getCurrentGitCommitSha)();
|
|
19
|
+
const isPreRelease = options?.preRelease != null
|
|
20
|
+
? options.preRelease
|
|
21
|
+
: branchName != 'main' && branchName != 'master';
|
|
22
|
+
const specifier = isPreRelease ? 'prerelease' : options.specifier;
|
|
23
|
+
const groups = options.groups && options.groups.length > 0 ? options.groups : undefined;
|
|
24
|
+
if (isPreRelease)
|
|
25
|
+
logger_1.consola.warn('This is an ephemeral release');
|
|
26
|
+
const allProjects = await (0, nx_1.getAffectedProjects)(groups);
|
|
27
|
+
if (allProjects.length === 0) {
|
|
28
|
+
logger_1.consola.warn('No projects to publish');
|
|
29
|
+
return {
|
|
30
|
+
success: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
logger_1.consola.success(`Found ${allProjects.length} affected projects: ${allProjects.join(', ')}`);
|
|
34
|
+
// Step 1: Version Release
|
|
35
|
+
logger_1.consola.start('Calculating new versions');
|
|
36
|
+
const { projectsVersionData } = await (0, release_1.releaseVersion)({
|
|
37
|
+
dryRun,
|
|
38
|
+
verbose: options.verbose,
|
|
39
|
+
specifier,
|
|
40
|
+
projects: allProjects,
|
|
41
|
+
preid: isPreRelease
|
|
42
|
+
? `ephemeral-${branchName.substring(0, 100)}-${commit.substring(0, 7)}`
|
|
43
|
+
: undefined,
|
|
44
|
+
});
|
|
45
|
+
logger_1.consola.success('New versions calculated successfully!');
|
|
46
|
+
// iterate over `projectsVersionData` to extract changed projects
|
|
47
|
+
const changedProjects = Object.entries(projectsVersionData)
|
|
48
|
+
.map(([projectName, versionData]) => {
|
|
49
|
+
if (versionData?.newVersion) {
|
|
50
|
+
logger_1.consola.info(`Project '${projectName}' will be updated to version ${versionData.newVersion}`);
|
|
51
|
+
return projectName;
|
|
52
|
+
}
|
|
53
|
+
return null; // filter out projects that didn't change
|
|
54
|
+
})
|
|
55
|
+
.filter(Boolean);
|
|
56
|
+
if (changedProjects.length === 0) {
|
|
57
|
+
logger_1.consola.warn('No project to publish');
|
|
58
|
+
return {
|
|
59
|
+
success: true,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// Step 2: Changelog Release
|
|
63
|
+
logger_1.consola.start('Generating & pushing changelogs');
|
|
64
|
+
await (0, release_1.releaseChangelog)({
|
|
65
|
+
versionData: projectsVersionData,
|
|
66
|
+
dryRun,
|
|
67
|
+
verbose: options.verbose,
|
|
68
|
+
projects: changedProjects,
|
|
69
|
+
createRelease: isPreRelease ? false : 'github',
|
|
70
|
+
});
|
|
71
|
+
logger_1.consola.success('Generated & pushed changelogs successfully!');
|
|
72
|
+
if (options.skipPublish) {
|
|
73
|
+
logger_1.consola.warn('Skipping publishing step as skipPublish = true');
|
|
74
|
+
return {
|
|
75
|
+
success: true,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// Step 3: Publish Release
|
|
79
|
+
logger_1.consola.start('Publishing packages');
|
|
80
|
+
const publishResults = await (0, release_1.releasePublish)({
|
|
81
|
+
projects: changedProjects,
|
|
82
|
+
dryRun,
|
|
83
|
+
verbose: options.verbose,
|
|
84
|
+
tag: isPreRelease ? 'ephemeral' : undefined,
|
|
85
|
+
});
|
|
86
|
+
// Log publish results
|
|
87
|
+
let publishError = false;
|
|
88
|
+
Object.entries(publishResults).forEach(([projectName, result]) => {
|
|
89
|
+
if (result.code === 0) {
|
|
90
|
+
logger_1.consola.success(`Published ${projectName} successfully!`);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
publishError = true;
|
|
94
|
+
logger_1.consola.fail(`Failed to publish ${projectName} with exit code ${result.code}`);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
if (publishError)
|
|
98
|
+
throw new Error('We got errors when publishing, check the logs');
|
|
99
|
+
return {
|
|
100
|
+
success: true,
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
exports.default = runExecutor;
|
|
104
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../src/executors/release/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/schema",
|
|
3
|
+
"version": 2,
|
|
4
|
+
"title": "Publisher executor",
|
|
5
|
+
"description": "Publish the helm chart to the chartmuseum and docker image to ECR",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"preRelease": {
|
|
9
|
+
"type": "boolean",
|
|
10
|
+
"description": "The release is an ephemeral/rc"
|
|
11
|
+
},
|
|
12
|
+
"skipPublish": {
|
|
13
|
+
"type": "boolean",
|
|
14
|
+
"description": "Should skip publish"
|
|
15
|
+
},
|
|
16
|
+
"dryRun": {
|
|
17
|
+
"type": "boolean",
|
|
18
|
+
"description": "Is dry run"
|
|
19
|
+
},
|
|
20
|
+
"verbose": {
|
|
21
|
+
"type": "boolean",
|
|
22
|
+
"description": "Is verbose"
|
|
23
|
+
},
|
|
24
|
+
"groups": {
|
|
25
|
+
"type": "array",
|
|
26
|
+
"items": {
|
|
27
|
+
"type": "string"
|
|
28
|
+
},
|
|
29
|
+
"description": "Release groups to target (optional). If not specified, all configured projects will be released."
|
|
30
|
+
},
|
|
31
|
+
"specifier": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Exact version or semver keyword to apply (e.g., 'patch', 'minor', 'major', '1.2.3')"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"required": []
|
|
37
|
+
}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
version: 2.1
|
|
2
|
+
<% if (keepContinuationJobs) { %>
|
|
3
|
+
setup: true
|
|
4
|
+
<% } %>
|
|
5
|
+
orbs:
|
|
6
|
+
nx: nrwl/nx@1.7
|
|
7
|
+
aws-cli: circleci/aws-cli@5.4
|
|
8
|
+
github: payfit/github@0.9
|
|
9
|
+
node: circleci/node@7.1
|
|
10
|
+
<% if (keepContinuationJobs) { %>
|
|
11
|
+
continuation: circleci/continuation@1.0
|
|
12
|
+
payfit-nx: payfit/nx@2
|
|
13
|
+
<% } %>
|
|
14
|
+
|
|
15
|
+
references:
|
|
16
|
+
setup_env_node: &setup_env_node
|
|
17
|
+
docker:
|
|
18
|
+
- image: cimg/node:22.16
|
|
19
|
+
setup_env_machine: &setup_env_machine # Used for getting docker cli
|
|
20
|
+
machine:
|
|
21
|
+
image: ubuntu-2204:current
|
|
22
|
+
install_packages: &install_packages
|
|
23
|
+
check-cache: always
|
|
24
|
+
pkg-manager: yarn-berry
|
|
25
|
+
attach_workspace: &attach_workspace
|
|
26
|
+
at: ~/project
|
|
27
|
+
nx/set-shas: &nx_set_shas_option
|
|
28
|
+
error-on-no-successful-workflow: false
|
|
29
|
+
main-branch-name: main
|
|
30
|
+
workflow-name: build-test-deploy
|
|
31
|
+
<% if (keepContinuationJobs) { %>
|
|
32
|
+
only_main_and_deploy_branches: &only_main_and_deploy_branches
|
|
33
|
+
branches:
|
|
34
|
+
only:
|
|
35
|
+
- main
|
|
36
|
+
- /^deploy.*/
|
|
37
|
+
<% } %>
|
|
38
|
+
|
|
39
|
+
jobs:
|
|
40
|
+
install_packages:
|
|
41
|
+
<<: *setup_env_node
|
|
42
|
+
steps:
|
|
43
|
+
- checkout
|
|
44
|
+
- node/install-packages: *install_packages
|
|
45
|
+
|
|
46
|
+
lint:
|
|
47
|
+
<<: *setup_env_node
|
|
48
|
+
steps:
|
|
49
|
+
- checkout
|
|
50
|
+
- node/install-packages: *install_packages
|
|
51
|
+
- nx/set-shas: *nx_set_shas_option
|
|
52
|
+
- run: npx nx affected -t lint
|
|
53
|
+
|
|
54
|
+
nx-conformance:
|
|
55
|
+
<<: *setup_env_node
|
|
56
|
+
steps:
|
|
57
|
+
- checkout
|
|
58
|
+
- node/install-packages: *install_packages
|
|
59
|
+
- run: npx nx-cloud record -- npx nx-cloud conformance:check
|
|
60
|
+
|
|
61
|
+
nx-sync:
|
|
62
|
+
<<: *setup_env_node
|
|
63
|
+
steps:
|
|
64
|
+
- checkout
|
|
65
|
+
- node/install-packages: *install_packages
|
|
66
|
+
- run: npx nx-cloud record -- npx nx sync:check
|
|
67
|
+
|
|
68
|
+
format:
|
|
69
|
+
<<: *setup_env_node
|
|
70
|
+
steps:
|
|
71
|
+
- checkout
|
|
72
|
+
- node/install-packages: *install_packages
|
|
73
|
+
- run: npx nx-cloud record -- npx nx format:check
|
|
74
|
+
|
|
75
|
+
build:
|
|
76
|
+
<<: *setup_env_node
|
|
77
|
+
steps:
|
|
78
|
+
- checkout
|
|
79
|
+
- node/install-packages: *install_packages
|
|
80
|
+
- nx/set-shas: *nx_set_shas_option
|
|
81
|
+
- run: npx nx run-many -t build
|
|
82
|
+
- persist_to_workspace:
|
|
83
|
+
root: '.'
|
|
84
|
+
paths:
|
|
85
|
+
- dist
|
|
86
|
+
- apps/*/dist
|
|
87
|
+
- packages/*/dist
|
|
88
|
+
- libs/*/dist
|
|
89
|
+
|
|
90
|
+
test:
|
|
91
|
+
<<: *setup_env_node
|
|
92
|
+
steps:
|
|
93
|
+
- checkout
|
|
94
|
+
- node/install-packages: *install_packages
|
|
95
|
+
- nx/set-shas: *nx_set_shas_option
|
|
96
|
+
- run: npx nx affected -t test
|
|
97
|
+
|
|
98
|
+
publish:
|
|
99
|
+
<<: *setup_env_machine
|
|
100
|
+
steps:
|
|
101
|
+
- checkout
|
|
102
|
+
- attach_workspace: *attach_workspace
|
|
103
|
+
- node/install:
|
|
104
|
+
install-yarn: true
|
|
105
|
+
- node/install-packages: *install_packages
|
|
106
|
+
- nx/set-shas: *nx_set_shas_option
|
|
107
|
+
- aws-cli/setup:
|
|
108
|
+
role_arn: ${PUBLISH_ROLE_ARN}
|
|
109
|
+
profile_name: 'OIDC-PROFILE'
|
|
110
|
+
- run:
|
|
111
|
+
name: 'Install Helm 3'
|
|
112
|
+
command: |
|
|
113
|
+
curl -sSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
|
|
114
|
+
- run:
|
|
115
|
+
name: 'Install Tsh'
|
|
116
|
+
command: |
|
|
117
|
+
curl -LsSO https://cdn.teleport.dev/teleport-${TELEPORT_VERSION}-linux-amd64-bin.tar.gz
|
|
118
|
+
tar -xzf teleport-${TELEPORT_VERSION}-linux-amd64-bin.tar.gz
|
|
119
|
+
cd teleport
|
|
120
|
+
sudo ./install
|
|
121
|
+
- run:
|
|
122
|
+
name: 'Install Oras'
|
|
123
|
+
command: |
|
|
124
|
+
VERSION="1.2.2"
|
|
125
|
+
curl -LO "https://github.com/oras-project/oras/releases/download/v${VERSION}/oras_${VERSION}_linux_amd64.tar.gz"
|
|
126
|
+
mkdir -p oras-install/
|
|
127
|
+
tar -zxf oras_${VERSION}_*.tar.gz -C oras-install/
|
|
128
|
+
sudo mv oras-install/oras /usr/local/bin/
|
|
129
|
+
rm -rf oras_${VERSION}_*.tar.gz oras-install/
|
|
130
|
+
- run:
|
|
131
|
+
name: Release
|
|
132
|
+
command: |
|
|
133
|
+
export GH_TOKEN="$(cat github_token)"
|
|
134
|
+
export GITHUB_TOKEN="$(cat github_token)"
|
|
135
|
+
git remote set-url origin https://x-access-token:${GH_TOKEN}@github.com/PayFit/${CIRCLE_PROJECT_REPONAME}.git
|
|
136
|
+
npx nx run <%= packageJsonName %>:release
|
|
137
|
+
|
|
138
|
+
<% if (keepContinuationJobs) { %>
|
|
139
|
+
affected-merge-continuation:
|
|
140
|
+
<<: *setup_env_node
|
|
141
|
+
steps:
|
|
142
|
+
- checkout
|
|
143
|
+
- node/install-packages: *install_packages
|
|
144
|
+
- nx/set-shas: *nx_set_shas_option
|
|
145
|
+
- payfit-nx/affected-apps:
|
|
146
|
+
output-file: affected-list.txt
|
|
147
|
+
main-branch-name: main
|
|
148
|
+
allow-on-hold-workflow: true
|
|
149
|
+
nx-ci-execution-id: $CIRCLE_WORKFLOW_ID
|
|
150
|
+
projects-to-exclude: '<%= packageJsonName %>'
|
|
151
|
+
- payfit-nx/merge-circle-config:
|
|
152
|
+
shared-config-file: .circleci/shared-config.yml
|
|
153
|
+
affected-list-file: affected-list.txt
|
|
154
|
+
config-output: .circleci/continue-config.yml
|
|
155
|
+
- run:
|
|
156
|
+
name: skip if no affected-apps
|
|
157
|
+
command: |
|
|
158
|
+
# If `affected-apps` is unavailable, stop this job without continuation
|
|
159
|
+
if [ ! -f ".circleci/continue-config.yml" ] || [ ! -s ".circleci/continue-config.yml" ]
|
|
160
|
+
then
|
|
161
|
+
echo 'No affected apps, nothing to do.'
|
|
162
|
+
circleci-agent step halt
|
|
163
|
+
exit
|
|
164
|
+
fi
|
|
165
|
+
- run:
|
|
166
|
+
name: Setup parameters
|
|
167
|
+
command: |
|
|
168
|
+
echo "{\"workflow-id\": \"$CIRCLE_WORKFLOW_ID\"}" > parameters.json
|
|
169
|
+
- continuation/continue:
|
|
170
|
+
configuration_path: .circleci/continue-config.yml
|
|
171
|
+
parameters: parameters.json
|
|
172
|
+
<% } %>
|
|
173
|
+
|
|
174
|
+
workflows:
|
|
175
|
+
build-test-deploy:
|
|
176
|
+
jobs:
|
|
177
|
+
- github/auth:
|
|
178
|
+
outputFile: github_token
|
|
179
|
+
name: github_authenticate
|
|
180
|
+
context:
|
|
181
|
+
- NX_COMMON_PACKAGES # TSH config / AWS credentials / NPM token
|
|
182
|
+
- install_packages:
|
|
183
|
+
context: NX_COMMON_PACKAGES # TSH config / AWS credentials / NPM token
|
|
184
|
+
|
|
185
|
+
- lint:
|
|
186
|
+
context: NX_COMMON_PACKAGES # TSH config / AWS credentials / NPM token
|
|
187
|
+
requires:
|
|
188
|
+
- install_packages
|
|
189
|
+
|
|
190
|
+
- nx-sync:
|
|
191
|
+
context: NX_COMMON_PACKAGES # TSH config / AWS credentials / NPM token
|
|
192
|
+
requires:
|
|
193
|
+
- install_packages
|
|
194
|
+
|
|
195
|
+
- format:
|
|
196
|
+
context: NX_COMMON_PACKAGES # TSH config / AWS credentials / NPM token
|
|
197
|
+
requires:
|
|
198
|
+
- install_packages
|
|
199
|
+
|
|
200
|
+
- nx-conformance:
|
|
201
|
+
context: NX_COMMON_PACKAGES # TSH config / AWS credentials / NPM token
|
|
202
|
+
requires:
|
|
203
|
+
- install_packages
|
|
204
|
+
|
|
205
|
+
- build:
|
|
206
|
+
context: NX_COMMON_PACKAGES # TSH config / AWS credentials / NPM token
|
|
207
|
+
requires:
|
|
208
|
+
- install_packages
|
|
209
|
+
|
|
210
|
+
- test:
|
|
211
|
+
context: NX_COMMON_PACKAGES # TSH config / AWS credentials / NPM token
|
|
212
|
+
requires:
|
|
213
|
+
- install_packages
|
|
214
|
+
|
|
215
|
+
- publish:
|
|
216
|
+
name: Publish
|
|
217
|
+
requires:
|
|
218
|
+
- github_authenticate
|
|
219
|
+
- test
|
|
220
|
+
- build
|
|
221
|
+
context:
|
|
222
|
+
- NX_COMMON_PACKAGES # TSH config / AWS credentials / NPM token
|
|
223
|
+
|
|
224
|
+
<% if (keepContinuationJobs) { %>
|
|
225
|
+
- affected-merge-continuation:
|
|
226
|
+
requires:
|
|
227
|
+
- build
|
|
228
|
+
- test
|
|
229
|
+
context:
|
|
230
|
+
- NX_COMMON_PACKAGES # TSH config / AWS credentials / NPM token
|
|
231
|
+
filters: *only_main_and_deploy_branches
|
|
232
|
+
<% } %>
|