projen-pipelines 0.2.12 → 0.2.14

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.
Files changed (49) hide show
  1. package/.jsii +5703 -1380
  2. package/API.md +5813 -1492
  3. package/README.md +253 -0
  4. package/docs/drift-detection.md +264 -0
  5. package/lib/assign-approver/base.js +1 -1
  6. package/lib/assign-approver/github.js +1 -1
  7. package/lib/awscdk/base.d.ts +21 -0
  8. package/lib/awscdk/base.js +246 -2
  9. package/lib/awscdk/bash.js +1 -1
  10. package/lib/awscdk/github.js +1 -1
  11. package/lib/awscdk/gitlab.js +1 -1
  12. package/lib/drift/base.d.ts +64 -0
  13. package/lib/drift/base.js +18 -0
  14. package/lib/drift/bash.d.ts +15 -0
  15. package/lib/drift/bash.js +170 -0
  16. package/lib/drift/detect-drift.d.ts +54 -0
  17. package/lib/drift/detect-drift.js +259 -0
  18. package/lib/drift/github.d.ts +21 -0
  19. package/lib/drift/github.js +232 -0
  20. package/lib/drift/gitlab.d.ts +20 -0
  21. package/lib/drift/gitlab.js +138 -0
  22. package/lib/drift/index.d.ts +5 -0
  23. package/lib/drift/index.js +22 -0
  24. package/lib/drift/step.d.ts +14 -0
  25. package/lib/drift/step.js +48 -0
  26. package/lib/index.d.ts +2 -0
  27. package/lib/index.js +3 -1
  28. package/lib/steps/artifact-steps.js +2 -2
  29. package/lib/steps/aws-assume-role.step.js +1 -1
  30. package/lib/steps/registries.js +2 -2
  31. package/lib/steps/step.d.ts +6 -1
  32. package/lib/steps/step.js +14 -10
  33. package/lib/versioning/computation.d.ts +63 -0
  34. package/lib/versioning/computation.js +121 -0
  35. package/lib/versioning/config.d.ts +41 -0
  36. package/lib/versioning/config.js +91 -0
  37. package/lib/versioning/index.d.ts +7 -0
  38. package/lib/versioning/index.js +46 -0
  39. package/lib/versioning/outputs.d.ts +87 -0
  40. package/lib/versioning/outputs.js +166 -0
  41. package/lib/versioning/setup.d.ts +30 -0
  42. package/lib/versioning/setup.js +165 -0
  43. package/lib/versioning/strategy.d.ts +21 -0
  44. package/lib/versioning/strategy.js +51 -0
  45. package/lib/versioning/types.d.ts +183 -0
  46. package/lib/versioning/types.js +3 -0
  47. package/lib/versioning/version-info.d.ts +106 -0
  48. package/lib/versioning/version-info.js +269 -0
  49. package/package.json +2 -1
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.VersioningSetup = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Sets up versioning tasks and integration for a project
8
+ */
9
+ class VersioningSetup {
10
+ constructor(project, config) {
11
+ this.project = project;
12
+ this.config = config;
13
+ }
14
+ /**
15
+ * Set up all versioning-related tasks and configurations
16
+ */
17
+ setup() {
18
+ // Create version computation task
19
+ this.createVersionComputeTask();
20
+ // Create version print task
21
+ this.createVersionPrintTask();
22
+ // Add version computation to build process
23
+ this.integrateWithBuildProcess();
24
+ // Add version file to gitignore
25
+ this.project.gitignore.exclude('~version.json');
26
+ }
27
+ /**
28
+ * Create the version:compute task
29
+ */
30
+ createVersionComputeTask() {
31
+ this.project.addTask('version:compute', {
32
+ description: 'Compute version information from git',
33
+ steps: [
34
+ { exec: 'echo "Computing version information..."' },
35
+ {
36
+ exec: this.generateVersionComputeScript(),
37
+ },
38
+ ],
39
+ });
40
+ }
41
+ /**
42
+ * Create the version:print task
43
+ */
44
+ createVersionPrintTask() {
45
+ this.project.addTask('version:print', {
46
+ description: 'Print version information',
47
+ steps: [
48
+ { exec: 'cat ~version.json' },
49
+ ],
50
+ });
51
+ }
52
+ /**
53
+ * Integrate version computation with the build process
54
+ */
55
+ integrateWithBuildProcess() {
56
+ const compileTask = this.project.tasks.tryFind('compile');
57
+ const computeTask = this.project.tasks.tryFind('version:compute');
58
+ const printTask = this.project.tasks.tryFind('version:print');
59
+ if (compileTask && computeTask && printTask) {
60
+ compileTask.prependSpawn(printTask);
61
+ compileTask.prependSpawn(computeTask);
62
+ }
63
+ }
64
+ /**
65
+ * Generate the Node.js script for version computation
66
+ */
67
+ generateVersionComputeScript() {
68
+ const strategyJson = JSON.stringify(this.config.strategy).replace(/"/g, '\\"');
69
+ return `node -e "
70
+ const fs = require('fs');
71
+ const cp = require('child_process');
72
+
73
+ // Import versioning modules
74
+ const { VersionComputer, VersioningStrategy } = require('projen-pipelines');
75
+
76
+ try {
77
+ // Gather git information
78
+ const commitHash = cp.execSync('git rev-parse HEAD', {encoding: 'utf8'}).trim();
79
+ const commitHashShort = commitHash.substring(0, 8);
80
+ const commitCount = parseInt(cp.execSync('git rev-list --count HEAD', {encoding: 'utf8'}).trim());
81
+ const branch = cp.execSync('git rev-parse --abbrev-ref HEAD', {encoding: 'utf8'}).trim();
82
+
83
+ let tag = '';
84
+ let commitsSinceTag = 0;
85
+ try {
86
+ tag = cp.execSync('git describe --tags --exact-match --all', {encoding: 'utf8'}).trim();
87
+ } catch {
88
+ try {
89
+ const describeOutput = cp.execSync('git describe --tags --long --all', {encoding: 'utf8'}).trim();
90
+ const match = describeOutput.match(/^(.+)-(\\\\d+)-g[0-9a-f]+$/);
91
+ if (match) {
92
+ tag = match[1];
93
+ commitsSinceTag = parseInt(match[2]);
94
+ }
95
+ } catch {}
96
+ }
97
+
98
+ let packageVersion = '0.0.0';
99
+ try {
100
+ packageVersion = JSON.parse(fs.readFileSync('package.json', 'utf8')).version;
101
+ } catch {}
102
+
103
+ // Create computation context
104
+ const context = {
105
+ gitInfo: {
106
+ commitHash,
107
+ commitHashShort,
108
+ branch,
109
+ tag,
110
+ commitsSinceTag,
111
+ commitCount,
112
+ packageVersion
113
+ },
114
+ environment: process.env.STAGE || process.env.ENVIRONMENT || 'unknown',
115
+ deployedBy: process.env.GITHUB_ACTOR || process.env.GITLAB_USER_LOGIN || process.env.USER || 'unknown',
116
+ buildNumber: process.env.BUILD_NUMBER || process.env.GITHUB_RUN_NUMBER,
117
+ repository: process.env.GITHUB_REPOSITORY || process.env.CI_PROJECT_PATH,
118
+ pipelineVersion: process.env.PIPELINE_VERSION
119
+ };
120
+
121
+ // Create strategy from configuration
122
+ const strategyConfig = ${strategyJson};
123
+ const strategy = new VersioningStrategy(strategyConfig.format, strategyConfig.components);
124
+
125
+ // Compute version
126
+ const computer = new VersionComputer(strategy);
127
+ computer.computeVersionInfo(context).then(versionInfo => {
128
+ fs.writeFileSync('~version.json', versionInfo.toJson());
129
+ console.log('Version computed:', versionInfo.version, '(commit:', versionInfo.commitHashShort + ')');
130
+ }).catch(error => {
131
+ console.error('Error computing version:', error.message);
132
+ const fallback = {
133
+ version: '0.0.0',
134
+ commitHash: 'unknown',
135
+ commitHashShort: 'unknown',
136
+ branch: 'unknown',
137
+ commitCount: 0,
138
+ packageVersion: '0.0.0',
139
+ deployedAt: new Date().toISOString(),
140
+ deployedBy: 'unknown',
141
+ environment: 'unknown'
142
+ };
143
+ fs.writeFileSync('~version.json', JSON.stringify(fallback, null, 2));
144
+ });
145
+ } catch (e) {
146
+ console.error('Error in version computation:', e.message);
147
+ const fallback = {
148
+ version: '0.0.0',
149
+ commitHash: 'unknown',
150
+ commitHashShort: 'unknown',
151
+ branch: 'unknown',
152
+ commitCount: 0,
153
+ packageVersion: '0.0.0',
154
+ deployedAt: new Date().toISOString(),
155
+ deployedBy: 'unknown',
156
+ environment: 'unknown'
157
+ };
158
+ fs.writeFileSync('~version.json', JSON.stringify(fallback, null, 2));
159
+ }"`;
160
+ }
161
+ }
162
+ exports.VersioningSetup = VersioningSetup;
163
+ _a = JSII_RTTI_SYMBOL_1;
164
+ VersioningSetup[_a] = { fqn: "projen-pipelines.VersioningSetup", version: "0.2.14" };
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyc2lvbmluZy9zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBOztHQUVHO0FBQ0gsTUFBYSxlQUFlO0lBRTFCLFlBQTZCLE9BQWdCLEVBQW1CLE1BQXdCO1FBQTNELFlBQU8sR0FBUCxPQUFPLENBQVM7UUFBbUIsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7SUFDeEYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUVoQyw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFOUIsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBRWpDLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssd0JBQXdCO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFO1lBQ3RDLFdBQVcsRUFBRSxzQ0FBc0M7WUFDbkQsS0FBSyxFQUFFO2dCQUNMLEVBQUUsSUFBSSxFQUFFLHlDQUF5QyxFQUFFO2dCQUNuRDtvQkFDRSxJQUFJLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixFQUFFO2lCQUMxQzthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssc0JBQXNCO1FBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtZQUNwQyxXQUFXLEVBQUUsMkJBQTJCO1lBQ3hDLEtBQUssRUFBRTtnQkFDTCxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRTthQUM5QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLHlCQUF5QjtRQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTlELElBQUksV0FBVyxJQUFJLFdBQVcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUM1QyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDLFdBQVcsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLDRCQUE0QjtRQUNsQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUvRSxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQkFxRGdCLFlBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ3BDLENBQUM7SUFDRixDQUFDOztBQWhLSCwwQ0FpS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IFZlcnNpb25pbmdDb25maWcgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBTZXRzIHVwIHZlcnNpb25pbmcgdGFza3MgYW5kIGludGVncmF0aW9uIGZvciBhIHByb2plY3RcbiAqL1xuZXhwb3J0IGNsYXNzIFZlcnNpb25pbmdTZXR1cCB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9qZWN0OiBQcm9qZWN0LCBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogVmVyc2lvbmluZ0NvbmZpZykge1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCBhbGwgdmVyc2lvbmluZy1yZWxhdGVkIHRhc2tzIGFuZCBjb25maWd1cmF0aW9uc1xuICAgKi9cbiAgcHVibGljIHNldHVwKCk6IHZvaWQge1xuICAgIC8vIENyZWF0ZSB2ZXJzaW9uIGNvbXB1dGF0aW9uIHRhc2tcbiAgICB0aGlzLmNyZWF0ZVZlcnNpb25Db21wdXRlVGFzaygpO1xuXG4gICAgLy8gQ3JlYXRlIHZlcnNpb24gcHJpbnQgdGFza1xuICAgIHRoaXMuY3JlYXRlVmVyc2lvblByaW50VGFzaygpO1xuXG4gICAgLy8gQWRkIHZlcnNpb24gY29tcHV0YXRpb24gdG8gYnVpbGQgcHJvY2Vzc1xuICAgIHRoaXMuaW50ZWdyYXRlV2l0aEJ1aWxkUHJvY2VzcygpO1xuXG4gICAgLy8gQWRkIHZlcnNpb24gZmlsZSB0byBnaXRpZ25vcmVcbiAgICB0aGlzLnByb2plY3QuZ2l0aWdub3JlLmV4Y2x1ZGUoJ352ZXJzaW9uLmpzb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIHZlcnNpb246Y29tcHV0ZSB0YXNrXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVZlcnNpb25Db21wdXRlVGFzaygpOiB2b2lkIHtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygndmVyc2lvbjpjb21wdXRlJywge1xuICAgICAgZGVzY3JpcHRpb246ICdDb21wdXRlIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSBnaXQnLFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAgeyBleGVjOiAnZWNobyBcIkNvbXB1dGluZyB2ZXJzaW9uIGluZm9ybWF0aW9uLi4uXCInIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBleGVjOiB0aGlzLmdlbmVyYXRlVmVyc2lvbkNvbXB1dGVTY3JpcHQoKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSB2ZXJzaW9uOnByaW50IHRhc2tcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlVmVyc2lvblByaW50VGFzaygpOiB2b2lkIHtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygndmVyc2lvbjpwcmludCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbicsXG4gICAgICBzdGVwczogW1xuICAgICAgICB7IGV4ZWM6ICdjYXQgfnZlcnNpb24uanNvbicgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZWdyYXRlIHZlcnNpb24gY29tcHV0YXRpb24gd2l0aCB0aGUgYnVpbGQgcHJvY2Vzc1xuICAgKi9cbiAgcHJpdmF0ZSBpbnRlZ3JhdGVXaXRoQnVpbGRQcm9jZXNzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBpbGVUYXNrID0gdGhpcy5wcm9qZWN0LnRhc2tzLnRyeUZpbmQoJ2NvbXBpbGUnKTtcbiAgICBjb25zdCBjb21wdXRlVGFzayA9IHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKCd2ZXJzaW9uOmNvbXB1dGUnKTtcbiAgICBjb25zdCBwcmludFRhc2sgPSB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZCgndmVyc2lvbjpwcmludCcpO1xuXG4gICAgaWYgKGNvbXBpbGVUYXNrICYmIGNvbXB1dGVUYXNrICYmIHByaW50VGFzaykge1xuICAgICAgY29tcGlsZVRhc2sucHJlcGVuZFNwYXduKHByaW50VGFzayk7XG4gICAgICBjb21waWxlVGFzay5wcmVwZW5kU3Bhd24oY29tcHV0ZVRhc2spO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgTm9kZS5qcyBzY3JpcHQgZm9yIHZlcnNpb24gY29tcHV0YXRpb25cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVWZXJzaW9uQ29tcHV0ZVNjcmlwdCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmF0ZWd5SnNvbiA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnLnN0cmF0ZWd5KS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyk7XG5cbiAgICByZXR1cm4gYG5vZGUgLWUgXCJcbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbmNvbnN0IGNwID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpO1xuXG4vLyBJbXBvcnQgdmVyc2lvbmluZyBtb2R1bGVzXG5jb25zdCB7IFZlcnNpb25Db21wdXRlciwgVmVyc2lvbmluZ1N0cmF0ZWd5IH0gPSByZXF1aXJlKCdwcm9qZW4tcGlwZWxpbmVzJyk7XG5cbnRyeSB7XG4gIC8vIEdhdGhlciBnaXQgaW5mb3JtYXRpb25cbiAgY29uc3QgY29tbWl0SGFzaCA9IGNwLmV4ZWNTeW5jKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCB7ZW5jb2Rpbmc6ICd1dGY4J30pLnRyaW0oKTtcbiAgY29uc3QgY29tbWl0SGFzaFNob3J0ID0gY29tbWl0SGFzaC5zdWJzdHJpbmcoMCwgOCk7XG4gIGNvbnN0IGNvbW1pdENvdW50ID0gcGFyc2VJbnQoY3AuZXhlY1N5bmMoJ2dpdCByZXYtbGlzdCAtLWNvdW50IEhFQUQnLCB7ZW5jb2Rpbmc6ICd1dGY4J30pLnRyaW0oKSk7XG4gIGNvbnN0IGJyYW5jaCA9IGNwLmV4ZWNTeW5jKCdnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEJywge2VuY29kaW5nOiAndXRmOCd9KS50cmltKCk7XG4gIFxuICBsZXQgdGFnID0gJyc7XG4gIGxldCBjb21taXRzU2luY2VUYWcgPSAwO1xuICB0cnkgeyBcbiAgICB0YWcgPSBjcC5leGVjU3luYygnZ2l0IGRlc2NyaWJlIC0tdGFncyAtLWV4YWN0LW1hdGNoIC0tYWxsJywge2VuY29kaW5nOiAndXRmOCd9KS50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZXNjcmliZU91dHB1dCA9IGNwLmV4ZWNTeW5jKCdnaXQgZGVzY3JpYmUgLS10YWdzIC0tbG9uZyAtLWFsbCcsIHtlbmNvZGluZzogJ3V0ZjgnfSkudHJpbSgpO1xuICAgICAgY29uc3QgbWF0Y2ggPSBkZXNjcmliZU91dHB1dC5tYXRjaCgvXiguKyktKFxcXFxcXFxcZCspLWdbMC05YS1mXSskLyk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgdGFnID0gbWF0Y2hbMV07XG4gICAgICAgIGNvbW1pdHNTaW5jZVRhZyA9IHBhcnNlSW50KG1hdGNoWzJdKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHt9XG4gIH1cbiAgXG4gIGxldCBwYWNrYWdlVmVyc2lvbiA9ICcwLjAuMCc7XG4gIHRyeSB7XG4gICAgcGFja2FnZVZlcnNpb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYygncGFja2FnZS5qc29uJywgJ3V0ZjgnKSkudmVyc2lvbjtcbiAgfSBjYXRjaCB7fVxuICBcbiAgLy8gQ3JlYXRlIGNvbXB1dGF0aW9uIGNvbnRleHRcbiAgY29uc3QgY29udGV4dCA9IHtcbiAgICBnaXRJbmZvOiB7XG4gICAgICBjb21taXRIYXNoLFxuICAgICAgY29tbWl0SGFzaFNob3J0LFxuICAgICAgYnJhbmNoLFxuICAgICAgdGFnLFxuICAgICAgY29tbWl0c1NpbmNlVGFnLFxuICAgICAgY29tbWl0Q291bnQsXG4gICAgICBwYWNrYWdlVmVyc2lvblxuICAgIH0sXG4gICAgZW52aXJvbm1lbnQ6IHByb2Nlc3MuZW52LlNUQUdFIHx8IHByb2Nlc3MuZW52LkVOVklST05NRU5UIHx8ICd1bmtub3duJyxcbiAgICBkZXBsb3llZEJ5OiBwcm9jZXNzLmVudi5HSVRIVUJfQUNUT1IgfHwgcHJvY2Vzcy5lbnYuR0lUTEFCX1VTRVJfTE9HSU4gfHwgcHJvY2Vzcy5lbnYuVVNFUiB8fCAndW5rbm93bicsXG4gICAgYnVpbGROdW1iZXI6IHByb2Nlc3MuZW52LkJVSUxEX05VTUJFUiB8fCBwcm9jZXNzLmVudi5HSVRIVUJfUlVOX05VTUJFUixcbiAgICByZXBvc2l0b3J5OiBwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWSB8fCBwcm9jZXNzLmVudi5DSV9QUk9KRUNUX1BBVEgsXG4gICAgcGlwZWxpbmVWZXJzaW9uOiBwcm9jZXNzLmVudi5QSVBFTElORV9WRVJTSU9OXG4gIH07XG4gIFxuICAvLyBDcmVhdGUgc3RyYXRlZ3kgZnJvbSBjb25maWd1cmF0aW9uXG4gIGNvbnN0IHN0cmF0ZWd5Q29uZmlnID0gJHtzdHJhdGVneUpzb259O1xuICBjb25zdCBzdHJhdGVneSA9IG5ldyBWZXJzaW9uaW5nU3RyYXRlZ3koc3RyYXRlZ3lDb25maWcuZm9ybWF0LCBzdHJhdGVneUNvbmZpZy5jb21wb25lbnRzKTtcbiAgXG4gIC8vIENvbXB1dGUgdmVyc2lvblxuICBjb25zdCBjb21wdXRlciA9IG5ldyBWZXJzaW9uQ29tcHV0ZXIoc3RyYXRlZ3kpO1xuICBjb21wdXRlci5jb21wdXRlVmVyc2lvbkluZm8oY29udGV4dCkudGhlbih2ZXJzaW9uSW5mbyA9PiB7XG4gICAgZnMud3JpdGVGaWxlU3luYygnfnZlcnNpb24uanNvbicsIHZlcnNpb25JbmZvLnRvSnNvbigpKTtcbiAgICBjb25zb2xlLmxvZygnVmVyc2lvbiBjb21wdXRlZDonLCB2ZXJzaW9uSW5mby52ZXJzaW9uLCAnKGNvbW1pdDonLCB2ZXJzaW9uSW5mby5jb21taXRIYXNoU2hvcnQgKyAnKScpO1xuICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgY29tcHV0aW5nIHZlcnNpb246JywgZXJyb3IubWVzc2FnZSk7XG4gICAgY29uc3QgZmFsbGJhY2sgPSB7XG4gICAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgY29tbWl0SGFzaDogJ3Vua25vd24nLFxuICAgICAgY29tbWl0SGFzaFNob3J0OiAndW5rbm93bicsXG4gICAgICBicmFuY2g6ICd1bmtub3duJyxcbiAgICAgIGNvbW1pdENvdW50OiAwLFxuICAgICAgcGFja2FnZVZlcnNpb246ICcwLjAuMCcsXG4gICAgICBkZXBsb3llZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBkZXBsb3llZEJ5OiAndW5rbm93bicsXG4gICAgICBlbnZpcm9ubWVudDogJ3Vua25vd24nXG4gICAgfTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKCd+dmVyc2lvbi5qc29uJywgSlNPTi5zdHJpbmdpZnkoZmFsbGJhY2ssIG51bGwsIDIpKTtcbiAgfSk7XG59IGNhdGNoIChlKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHZlcnNpb24gY29tcHV0YXRpb246JywgZS5tZXNzYWdlKTtcbiAgY29uc3QgZmFsbGJhY2sgPSB7XG4gICAgdmVyc2lvbjogJzAuMC4wJyxcbiAgICBjb21taXRIYXNoOiAndW5rbm93bicsXG4gICAgY29tbWl0SGFzaFNob3J0OiAndW5rbm93bicsXG4gICAgYnJhbmNoOiAndW5rbm93bicsXG4gICAgY29tbWl0Q291bnQ6IDAsXG4gICAgcGFja2FnZVZlcnNpb246ICcwLjAuMCcsXG4gICAgZGVwbG95ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIGRlcGxveWVkQnk6ICd1bmtub3duJyxcbiAgICBlbnZpcm9ubWVudDogJ3Vua25vd24nXG4gIH07XG4gIGZzLndyaXRlRmlsZVN5bmMoJ352ZXJzaW9uLmpzb24nLCBKU09OLnN0cmluZ2lmeShmYWxsYmFjaywgbnVsbCwgMikpO1xufVwiYDtcbiAgfVxufVxuIl19
@@ -0,0 +1,21 @@
1
+ import { GitTagConfig, PackageJsonConfig, CommitCountConfig, IVersioningStrategy, VersioningStrategyComponents, BuildNumberConfig } from './types';
2
+ /**
3
+ * Composite versioning strategy that combines multiple strategies
4
+ */
5
+ export declare class VersioningStrategy implements IVersioningStrategy {
6
+ readonly format: string;
7
+ readonly components: VersioningStrategyComponents;
8
+ /**
9
+ * Create a composite strategy with custom format and components
10
+ */
11
+ static create(format: string, components: VersioningStrategyComponents): VersioningStrategy;
12
+ /**
13
+ * Create a build number based strategy
14
+ */
15
+ static buildNumber(config?: BuildNumberConfig): VersioningStrategy;
16
+ static gitTag(config?: GitTagConfig): VersioningStrategy;
17
+ static packageJson(config?: PackageJsonConfig): VersioningStrategy;
18
+ static commitCount(config?: CommitCountConfig): VersioningStrategy;
19
+ static commitHash(): VersioningStrategy;
20
+ private constructor();
21
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.VersioningStrategy = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Composite versioning strategy that combines multiple strategies
8
+ */
9
+ class VersioningStrategy {
10
+ /**
11
+ * Create a composite strategy with custom format and components
12
+ */
13
+ static create(format, components) {
14
+ return new VersioningStrategy(format, components);
15
+ }
16
+ /**
17
+ * Create a build number based strategy
18
+ */
19
+ static buildNumber(config) {
20
+ const prefix = config?.prefix ?? 'build';
21
+ return new VersioningStrategy(`${prefix}-{commit-count}-{commit-hash:8}`, {
22
+ commitCount: config?.commitCount ?? { countFrom: 'all', padding: 5 },
23
+ });
24
+ }
25
+ static gitTag(config) {
26
+ return new VersioningStrategy('{git-tag}', {
27
+ gitTag: config ?? { stripPrefix: 'v' },
28
+ commitCount: { countFrom: 'all' },
29
+ });
30
+ }
31
+ static packageJson(config) {
32
+ return new VersioningStrategy('{package-version}', { packageJson: config ?? {} });
33
+ }
34
+ static commitCount(config) {
35
+ return new VersioningStrategy('{commit-count}', {
36
+ commitCount: config ?? { countFrom: 'all' },
37
+ });
38
+ }
39
+ static commitHash() {
40
+ return new VersioningStrategy('{commit-hash}', {});
41
+ }
42
+ constructor(format, components) {
43
+ this.format = format;
44
+ this.components = components;
45
+ //
46
+ }
47
+ }
48
+ exports.VersioningStrategy = VersioningStrategy;
49
+ _a = JSII_RTTI_SYMBOL_1;
50
+ VersioningStrategy[_a] = { fqn: "projen-pipelines.VersioningStrategy", version: "0.2.14" };
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyc2lvbmluZy9zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBOztHQUVHO0FBQ0gsTUFBYSxrQkFBa0I7SUFFN0I7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUNsQixNQUFjLEVBQ2QsVUFBd0M7UUFFeEMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQTBCO1FBQ2xELE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxNQUFNLElBQUksT0FBTyxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0saUNBQWlDLEVBQUU7WUFDeEUsV0FBVyxFQUFFLE1BQU0sRUFBRSxXQUFXLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7U0FDckUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBcUI7UUFDeEMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFdBQVcsRUFBRTtZQUN6QyxNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRTtZQUN0QyxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQTBCO1FBQ2xELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUEwQjtRQUNsRCxPQUFPLElBQUksa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUU7WUFDOUMsV0FBVyxFQUFFLE1BQU0sSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7U0FDNUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxVQUFVO1FBQ3RCLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELFlBQ2tCLE1BQWMsRUFDZCxVQUF3QztRQUR4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBOEI7UUFFeEQsRUFBRTtJQUNKLENBQUM7O0FBaERILGdEQWtEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdpdFRhZ0NvbmZpZywgUGFja2FnZUpzb25Db25maWcsIENvbW1pdENvdW50Q29uZmlnLCBJVmVyc2lvbmluZ1N0cmF0ZWd5LCBWZXJzaW9uaW5nU3RyYXRlZ3lDb21wb25lbnRzLCBCdWlsZE51bWJlckNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG5cbi8qKlxuICogQ29tcG9zaXRlIHZlcnNpb25pbmcgc3RyYXRlZ3kgdGhhdCBjb21iaW5lcyBtdWx0aXBsZSBzdHJhdGVnaWVzXG4gKi9cbmV4cG9ydCBjbGFzcyBWZXJzaW9uaW5nU3RyYXRlZ3kgaW1wbGVtZW50cyBJVmVyc2lvbmluZ1N0cmF0ZWd5IHtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgY29tcG9zaXRlIHN0cmF0ZWd5IHdpdGggY3VzdG9tIGZvcm1hdCBhbmQgY29tcG9uZW50c1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUoXG4gICAgZm9ybWF0OiBzdHJpbmcsXG4gICAgY29tcG9uZW50czogVmVyc2lvbmluZ1N0cmF0ZWd5Q29tcG9uZW50cyxcbiAgKTogVmVyc2lvbmluZ1N0cmF0ZWd5IHtcbiAgICByZXR1cm4gbmV3IFZlcnNpb25pbmdTdHJhdGVneShmb3JtYXQsIGNvbXBvbmVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGJ1aWxkIG51bWJlciBiYXNlZCBzdHJhdGVneVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBidWlsZE51bWJlcihjb25maWc/OiBCdWlsZE51bWJlckNvbmZpZyk6IFZlcnNpb25pbmdTdHJhdGVneSB7XG4gICAgY29uc3QgcHJlZml4ID0gY29uZmlnPy5wcmVmaXggPz8gJ2J1aWxkJztcbiAgICByZXR1cm4gbmV3IFZlcnNpb25pbmdTdHJhdGVneShgJHtwcmVmaXh9LXtjb21taXQtY291bnR9LXtjb21taXQtaGFzaDo4fWAsIHtcbiAgICAgIGNvbW1pdENvdW50OiBjb25maWc/LmNvbW1pdENvdW50ID8/IHsgY291bnRGcm9tOiAnYWxsJywgcGFkZGluZzogNSB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnaXRUYWcoY29uZmlnPzogR2l0VGFnQ29uZmlnKTogVmVyc2lvbmluZ1N0cmF0ZWd5IHtcbiAgICByZXR1cm4gbmV3IFZlcnNpb25pbmdTdHJhdGVneSgne2dpdC10YWd9Jywge1xuICAgICAgZ2l0VGFnOiBjb25maWcgPz8geyBzdHJpcFByZWZpeDogJ3YnIH0sXG4gICAgICBjb21taXRDb3VudDogeyBjb3VudEZyb206ICdhbGwnIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHBhY2thZ2VKc29uKGNvbmZpZz86IFBhY2thZ2VKc29uQ29uZmlnKTogVmVyc2lvbmluZ1N0cmF0ZWd5IHtcbiAgICByZXR1cm4gbmV3IFZlcnNpb25pbmdTdHJhdGVneSgne3BhY2thZ2UtdmVyc2lvbn0nLCB7IHBhY2thZ2VKc29uOiBjb25maWcgPz8ge30gfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNvbW1pdENvdW50KGNvbmZpZz86IENvbW1pdENvdW50Q29uZmlnKTogVmVyc2lvbmluZ1N0cmF0ZWd5IHtcbiAgICByZXR1cm4gbmV3IFZlcnNpb25pbmdTdHJhdGVneSgne2NvbW1pdC1jb3VudH0nLCB7XG4gICAgICBjb21taXRDb3VudDogY29uZmlnID8/IHsgY291bnRGcm9tOiAnYWxsJyB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjb21taXRIYXNoKCk6IFZlcnNpb25pbmdTdHJhdGVneSB7XG4gICAgcmV0dXJuIG5ldyBWZXJzaW9uaW5nU3RyYXRlZ3koJ3tjb21taXQtaGFzaH0nLCB7fSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBmb3JtYXQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50czogVmVyc2lvbmluZ1N0cmF0ZWd5Q29tcG9uZW50cyxcbiAgKSB7XG4gICAgLy9cbiAgfVxuXG59XG4iXX0=
@@ -0,0 +1,183 @@
1
+ export type StageOverrides = {
2
+ [stage: string]: VersioningConfig;
3
+ };
4
+ export interface VersioningConfig {
5
+ /**
6
+ * Enable versioning feature
7
+ * @default true
8
+ */
9
+ readonly enabled: boolean;
10
+ /**
11
+ * Primary versioning strategy
12
+ */
13
+ readonly strategy: IVersioningStrategy;
14
+ /**
15
+ * Output configuration
16
+ */
17
+ readonly outputs: VersioningOutputConfig;
18
+ /**
19
+ * Stage-specific overrides
20
+ */
21
+ readonly stageOverrides?: StageOverrides;
22
+ }
23
+ export interface VersioningStrategyComponents {
24
+ readonly gitTag?: GitTagConfig;
25
+ readonly packageJson?: PackageJsonConfig;
26
+ readonly commitCount?: CommitCountConfig;
27
+ }
28
+ export interface IVersioningStrategy {
29
+ /**
30
+ * Version format template
31
+ * Variables: {git-tag}, {package-version}, {commit-count}, {commit-hash},
32
+ * {commit-hash:8}, {branch}, {build-number}
33
+ */
34
+ readonly format: string;
35
+ /**
36
+ * Components to include
37
+ */
38
+ readonly components: VersioningStrategyComponents;
39
+ }
40
+ export interface GitTagConfig {
41
+ /**
42
+ * Only use annotated tags
43
+ */
44
+ readonly annotatedOnly?: boolean;
45
+ /**
46
+ * Tag pattern to match
47
+ */
48
+ readonly pattern?: string;
49
+ /**
50
+ * Strip prefix from tag
51
+ */
52
+ readonly stripPrefix?: string;
53
+ /**
54
+ * Include commits since tag
55
+ */
56
+ readonly includeSinceTag?: boolean;
57
+ }
58
+ export interface PackageJsonConfig {
59
+ /**
60
+ * Path to package.json
61
+ */
62
+ readonly path?: string;
63
+ /**
64
+ * Include pre-release version
65
+ */
66
+ readonly includePrerelease?: boolean;
67
+ /**
68
+ * Append commit info
69
+ */
70
+ readonly appendCommitInfo?: boolean;
71
+ }
72
+ export interface CommitCountConfig {
73
+ /**
74
+ * Count from: 'all' | 'branch' | 'since-tag'
75
+ */
76
+ readonly countFrom?: 'all' | 'branch' | 'since-tag';
77
+ /**
78
+ * Include branch name
79
+ */
80
+ readonly includeBranch?: boolean;
81
+ /**
82
+ * Reset on major version
83
+ */
84
+ readonly resetOnMajor?: boolean;
85
+ /**
86
+ * Padding for count
87
+ */
88
+ readonly padding?: number;
89
+ }
90
+ export interface VersioningOutputConfig {
91
+ /**
92
+ * Output to CloudFormation stack outputs
93
+ * @default true
94
+ */
95
+ readonly cloudFormation: CloudFormationOutputConfig;
96
+ /**
97
+ * Output to SSM Parameter Store
98
+ * @default false
99
+ */
100
+ readonly parameterStore: ParameterStoreConfig;
101
+ }
102
+ export interface CloudFormationOutputConfig {
103
+ readonly enabled: boolean;
104
+ readonly exportName?: string;
105
+ }
106
+ export interface ParameterStoreConfig {
107
+ readonly enabled: boolean;
108
+ readonly parameterName?: string;
109
+ readonly description?: string;
110
+ readonly allowOverwrite?: boolean;
111
+ readonly splitParameters?: boolean;
112
+ readonly hierarchical?: boolean;
113
+ }
114
+ export interface BuildNumberConfig {
115
+ readonly prefix?: string;
116
+ readonly commitCount?: CommitCountConfig;
117
+ }
118
+ export interface GitInfoInput {
119
+ readonly commitHash: string;
120
+ readonly branch: string;
121
+ readonly tag?: string;
122
+ readonly commitsSinceTag?: number;
123
+ readonly commitCount: number;
124
+ }
125
+ export interface DeploymentInfoInput {
126
+ readonly environment: string;
127
+ readonly deployedBy?: string;
128
+ readonly buildNumber?: string;
129
+ }
130
+ export interface StandardConfigOptions {
131
+ readonly parameterStore?: boolean | string;
132
+ readonly format?: 'plain' | 'structured';
133
+ }
134
+ export interface CloudFormationOnlyOptions {
135
+ readonly format?: 'plain' | 'structured';
136
+ readonly stackOutputName?: string;
137
+ readonly exportName?: string;
138
+ }
139
+ export interface HierarchicalParametersOptions {
140
+ readonly includeCloudFormation?: boolean;
141
+ readonly format?: 'plain' | 'structured';
142
+ }
143
+ export interface StandardOutputOptions {
144
+ readonly parameterName?: string;
145
+ readonly format?: 'plain' | 'structured';
146
+ }
147
+ export interface IVersionInfo {
148
+ /**
149
+ * Primary version string
150
+ */
151
+ readonly version: string;
152
+ /**
153
+ * Git information (ALWAYS included)
154
+ */
155
+ readonly commitHash: string;
156
+ readonly commitHashShort: string;
157
+ readonly branch: string;
158
+ /**
159
+ * Optional git tag information
160
+ */
161
+ readonly tag?: string;
162
+ readonly commitsSinceTag?: number;
163
+ /**
164
+ * Commit count information
165
+ */
166
+ readonly commitCount: number;
167
+ /**
168
+ * Package.json information (if applicable)
169
+ */
170
+ readonly packageVersion?: string;
171
+ /**
172
+ * Deployment metadata
173
+ */
174
+ readonly deployedAt: string;
175
+ readonly deployedBy: string;
176
+ readonly buildNumber?: string;
177
+ readonly environment: string;
178
+ /**
179
+ * Additional metadata
180
+ */
181
+ readonly repository?: string;
182
+ readonly pipelineVersion?: string;
183
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyc2lvbmluZy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmV4cG9ydCB0eXBlIFN0YWdlT3ZlcnJpZGVzID0geyBbc3RhZ2U6IHN0cmluZ106IFZlcnNpb25pbmdDb25maWcgfTtcblxuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uaW5nQ29uZmlnIHtcbiAgLyoqXG4gICAqIEVuYWJsZSB2ZXJzaW9uaW5nIGZlYXR1cmVcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJpbWFyeSB2ZXJzaW9uaW5nIHN0cmF0ZWd5XG4gICAqL1xuICByZWFkb25seSBzdHJhdGVneTogSVZlcnNpb25pbmdTdHJhdGVneTtcblxuICAvKipcbiAgICogT3V0cHV0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dHM6IFZlcnNpb25pbmdPdXRwdXRDb25maWc7XG5cbiAgLyoqXG4gICAqIFN0YWdlLXNwZWNpZmljIG92ZXJyaWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VPdmVycmlkZXM/OiBTdGFnZU92ZXJyaWRlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uaW5nU3RyYXRlZ3lDb21wb25lbnRzIHtcbiAgcmVhZG9ubHkgZ2l0VGFnPzogR2l0VGFnQ29uZmlnO1xuICByZWFkb25seSBwYWNrYWdlSnNvbj86IFBhY2thZ2VKc29uQ29uZmlnO1xuICByZWFkb25seSBjb21taXRDb3VudD86IENvbW1pdENvdW50Q29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWZXJzaW9uaW5nU3RyYXRlZ3kge1xuICAvKipcbiAgICogVmVyc2lvbiBmb3JtYXQgdGVtcGxhdGVcbiAgICogVmFyaWFibGVzOiB7Z2l0LXRhZ30sIHtwYWNrYWdlLXZlcnNpb259LCB7Y29tbWl0LWNvdW50fSwge2NvbW1pdC1oYXNofSxcbiAgICogICAgICAgICAgICB7Y29tbWl0LWhhc2g6OH0sIHticmFuY2h9LCB7YnVpbGQtbnVtYmVyfVxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudHMgdG8gaW5jbHVkZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50czogVmVyc2lvbmluZ1N0cmF0ZWd5Q29tcG9uZW50cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHaXRUYWdDb25maWcge1xuICAvKipcbiAgICogT25seSB1c2UgYW5ub3RhdGVkIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IGFubm90YXRlZE9ubHk/OiBib29sZWFuO1xuICAvKipcbiAgICogVGFnIHBhdHRlcm4gdG8gbWF0Y2hcbiAgICovXG4gIHJlYWRvbmx5IHBhdHRlcm4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTdHJpcCBwcmVmaXggZnJvbSB0YWdcbiAgICovXG4gIHJlYWRvbmx5IHN0cmlwUHJlZml4Pzogc3RyaW5nO1xuICAvKipcbiAgICogSW5jbHVkZSBjb21taXRzIHNpbmNlIHRhZ1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZVNpbmNlVGFnPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlSnNvbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHBhY2thZ2UuanNvblxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIEluY2x1ZGUgcHJlLXJlbGVhc2UgdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZVByZXJlbGVhc2U/OiBib29sZWFuO1xuICAvKipcbiAgICogQXBwZW5kIGNvbW1pdCBpbmZvXG4gICAqL1xuICByZWFkb25seSBhcHBlbmRDb21taXRJbmZvPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21taXRDb3VudENvbmZpZyB7XG4gIC8qKlxuICAgKiBDb3VudCBmcm9tOiAnYWxsJyB8ICdicmFuY2gnIHwgJ3NpbmNlLXRhZydcbiAgICovXG4gIHJlYWRvbmx5IGNvdW50RnJvbT86ICdhbGwnIHwgJ2JyYW5jaCcgfCAnc2luY2UtdGFnJztcbiAgLyoqXG4gICAqIEluY2x1ZGUgYnJhbmNoIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVCcmFuY2g/OiBib29sZWFuO1xuICAvKipcbiAgICogUmVzZXQgb24gbWFqb3IgdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVzZXRPbk1ham9yPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFBhZGRpbmcgZm9yIGNvdW50XG4gICAqL1xuICByZWFkb25seSBwYWRkaW5nPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25pbmdPdXRwdXRDb25maWcge1xuICAvKipcbiAgICogT3V0cHV0IHRvIENsb3VkRm9ybWF0aW9uIHN0YWNrIG91dHB1dHNcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGb3JtYXRpb246IENsb3VkRm9ybWF0aW9uT3V0cHV0Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBPdXRwdXQgdG8gU1NNIFBhcmFtZXRlciBTdG9yZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVyU3RvcmU6IFBhcmFtZXRlclN0b3JlQ29uZmlnO1xuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRGb3JtYXRpb25PdXRwdXRDb25maWcge1xuICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuICByZWFkb25seSBleHBvcnROYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlclN0b3JlQ29uZmlnIHtcbiAgcmVhZG9ubHkgZW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFsbG93T3ZlcndyaXRlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3BsaXRQYXJhbWV0ZXJzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaGllcmFyY2hpY2FsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZE51bWJlckNvbmZpZyB7XG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcbiAgcmVhZG9ubHkgY29tbWl0Q291bnQ/OiBDb21taXRDb3VudENvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHaXRJbmZvSW5wdXQge1xuICByZWFkb25seSBjb21taXRIYXNoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJyYW5jaDogc3RyaW5nO1xuICByZWFkb25seSB0YWc/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbW1pdHNTaW5jZVRhZz86IG51bWJlcjtcbiAgcmVhZG9ubHkgY29tbWl0Q291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50SW5mb0lucHV0IHtcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVwbG95ZWRCeT86IHN0cmluZztcbiAgcmVhZG9ubHkgYnVpbGROdW1iZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhcmRDb25maWdPcHRpb25zIHtcbiAgcmVhZG9ubHkgcGFyYW1ldGVyU3RvcmU/OiBib29sZWFuIHwgc3RyaW5nO1xuICByZWFkb25seSBmb3JtYXQ/OiAncGxhaW4nIHwgJ3N0cnVjdHVyZWQnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRm9ybWF0aW9uT25seU9wdGlvbnMge1xuICByZWFkb25seSBmb3JtYXQ/OiAncGxhaW4nIHwgJ3N0cnVjdHVyZWQnO1xuICByZWFkb25seSBzdGFja091dHB1dE5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4cG9ydE5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGllcmFyY2hpY2FsUGFyYW1ldGVyc09wdGlvbnMge1xuICByZWFkb25seSBpbmNsdWRlQ2xvdWRGb3JtYXRpb24/OiBib29sZWFuO1xuICByZWFkb25seSBmb3JtYXQ/OiAncGxhaW4nIHwgJ3N0cnVjdHVyZWQnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkT3V0cHV0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZvcm1hdD86ICdwbGFpbicgfCAnc3RydWN0dXJlZCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZlcnNpb25JbmZvIHtcbiAgLyoqXG4gICAqIFByaW1hcnkgdmVyc2lvbiBzdHJpbmdcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogR2l0IGluZm9ybWF0aW9uIChBTFdBWVMgaW5jbHVkZWQpXG4gICAqL1xuICByZWFkb25seSBjb21taXRIYXNoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbW1pdEhhc2hTaG9ydDogc3RyaW5nO1xuICByZWFkb25seSBicmFuY2g6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZ2l0IHRhZyBpbmZvcm1hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdGFnPzogc3RyaW5nO1xuICByZWFkb25seSBjb21taXRzU2luY2VUYWc/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbW1pdCBjb3VudCBpbmZvcm1hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWl0Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogUGFja2FnZS5qc29uIGluZm9ybWF0aW9uIChpZiBhcHBsaWNhYmxlKVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlcGxveW1lbnQgbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveWVkQXQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVwbG95ZWRCeTogc3RyaW5nO1xuICByZWFkb25seSBidWlsZE51bWJlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgcmVhZG9ubHkgcGlwZWxpbmVWZXJzaW9uPzogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,106 @@
1
+ import { IVersionInfo, GitInfoInput, DeploymentInfoInput } from './types';
2
+ /**
3
+ * Represents complete version information for a deployment
4
+ */
5
+ export declare class VersionInfo implements IVersionInfo {
6
+ /**
7
+ * Create a VersionInfo instance from raw data
8
+ */
9
+ static create(props: IVersionInfo): VersionInfo;
10
+ /**
11
+ * Create a VersionInfo instance from environment variables
12
+ */
13
+ static fromEnvironment(env: {
14
+ [key: string]: string;
15
+ }): VersionInfo;
16
+ /**
17
+ * Create a VersionInfo instance from a JSON string
18
+ */
19
+ static fromJson(json: string): VersionInfo;
20
+ readonly version: string;
21
+ readonly commitHash: string;
22
+ readonly commitHashShort: string;
23
+ readonly branch: string;
24
+ readonly tag?: string;
25
+ readonly commitsSinceTag?: number;
26
+ readonly commitCount: number;
27
+ readonly packageVersion?: string;
28
+ readonly deployedAt: string;
29
+ readonly deployedBy: string;
30
+ readonly buildNumber?: string;
31
+ readonly environment: string;
32
+ readonly repository?: string;
33
+ readonly pipelineVersion?: string;
34
+ private constructor();
35
+ /**
36
+ * Convert to plain version string
37
+ */
38
+ toString(): string;
39
+ /**
40
+ * Convert to JSON string
41
+ */
42
+ toJson(pretty?: boolean): string;
43
+ /**
44
+ * Convert to object
45
+ */
46
+ toObject(): IVersionInfo;
47
+ /**
48
+ * Get formatted version for display
49
+ */
50
+ displayVersion(): string;
51
+ /**
52
+ * Check if this version is from a tagged release
53
+ */
54
+ taggedRelease(): boolean;
55
+ /**
56
+ * Check if this version is from the main branch
57
+ */
58
+ mainBranch(): boolean;
59
+ /**
60
+ * Compare with another version
61
+ * Returns: -1 if this < other, 0 if equal, 1 if this > other
62
+ */
63
+ compare(other: VersionInfo): number;
64
+ /**
65
+ * Create a parameter name for SSM Parameter Store
66
+ */
67
+ parameterName(template: string): string;
68
+ /**
69
+ * Create CloudFormation export name
70
+ */
71
+ exportName(template: string): string;
72
+ }
73
+ /**
74
+ * Builder class for creating VersionInfo instances
75
+ */
76
+ export declare class VersionInfoBuilder {
77
+ private props;
78
+ /**
79
+ * Set the version string
80
+ */
81
+ version(version: string): this;
82
+ /**
83
+ * Set git information
84
+ */
85
+ gitInfo(info: GitInfoInput): this;
86
+ /**
87
+ * Set package version
88
+ */
89
+ packageVersion(version: string): this;
90
+ /**
91
+ * Set deployment metadata
92
+ */
93
+ deploymentInfo(info: DeploymentInfoInput): this;
94
+ /**
95
+ * Set repository information
96
+ */
97
+ repository(repo: string): this;
98
+ /**
99
+ * Set pipeline version
100
+ */
101
+ pipelineVersion(version: string): this;
102
+ /**
103
+ * Build the VersionInfo instance
104
+ */
105
+ create(): VersionInfo;
106
+ }