@waypoint-framework/cli 0.2.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/commands/init.d.ts +7 -0
- package/dist/commands/init.js +124 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.js +149 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.js +139 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/version.d.ts +5 -0
- package/dist/commands/version.js +108 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -0
- package/dist/util/git.d.ts +17 -0
- package/dist/util/git.js +76 -0
- package/dist/util/git.js.map +1 -0
- package/package.json +27 -0
- package/src/commands/init.ts +115 -0
- package/src/commands/update.ts +155 -0
- package/src/commands/validate.ts +117 -0
- package/src/commands/version.ts +90 -0
- package/src/index.ts +80 -0
- package/src/util/git.ts +75 -0
- package/tsconfig.json +22 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.init = init;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const core_1 = require("@waypoint-framework/core");
|
|
40
|
+
const git_1 = require("../util/git");
|
|
41
|
+
async function init(options) {
|
|
42
|
+
const projectDir = path.resolve(options.dir);
|
|
43
|
+
const versionPath = path.join(projectDir, '.waypoint', 'version');
|
|
44
|
+
try {
|
|
45
|
+
await fs.access(versionPath);
|
|
46
|
+
console.error('.waypoint/version already exists.');
|
|
47
|
+
console.error('Use "waypoint version" to view current configuration.');
|
|
48
|
+
return 1;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// expected — file doesn't exist yet
|
|
52
|
+
}
|
|
53
|
+
if (!options.workflow) {
|
|
54
|
+
console.error('--workflow is required (e.g. advizo-ai/marketing-workflow)');
|
|
55
|
+
return 1;
|
|
56
|
+
}
|
|
57
|
+
const versionLine = options.version || 'v1.x';
|
|
58
|
+
const lineMatch = versionLine.match(/^v?\d+\.x$/);
|
|
59
|
+
if (!lineMatch) {
|
|
60
|
+
console.error(`Invalid version line: ${versionLine}. Expected format: v1.x, v2.x, etc.`);
|
|
61
|
+
return 1;
|
|
62
|
+
}
|
|
63
|
+
const upstreamUrl = `https://github.com/${options.workflow}.git`;
|
|
64
|
+
console.log(`Configuring upstream remote → ${upstreamUrl}`);
|
|
65
|
+
(0, git_1.addUpstreamRemote)(projectDir, upstreamUrl);
|
|
66
|
+
const configuredUrl = (0, git_1.getUpstreamUrl)(projectDir);
|
|
67
|
+
if (configuredUrl) {
|
|
68
|
+
console.log(` upstream: ${configuredUrl}`);
|
|
69
|
+
}
|
|
70
|
+
let pinnedTag = options.tag;
|
|
71
|
+
if (!pinnedTag) {
|
|
72
|
+
console.log('Fetching upstream tags...');
|
|
73
|
+
try {
|
|
74
|
+
(0, git_1.fetchUpstream)(projectDir, '--tags');
|
|
75
|
+
const tags = (0, git_1.getUpstreamTags)(projectDir);
|
|
76
|
+
const latest = core_1.VersionFile.findLatestInLine(tags, versionLine);
|
|
77
|
+
if (latest) {
|
|
78
|
+
pinnedTag = latest;
|
|
79
|
+
console.log(` Latest tag on ${versionLine}: ${pinnedTag}`);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const major = versionLine.replace(/\.x$/, '.0.0');
|
|
83
|
+
pinnedTag = major.startsWith('v') ? major : `v${major}`;
|
|
84
|
+
console.log(` No tags found for ${versionLine}, defaulting to ${pinnedTag}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
const major = versionLine.replace(/\.x$/, '.0.0');
|
|
89
|
+
pinnedTag = major.startsWith('v') ? major : `v${major}`;
|
|
90
|
+
console.log(` Could not fetch tags, defaulting to ${pinnedTag}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
core_1.VersionFile.parseSemVer(pinnedTag);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
console.error(`Invalid tag format: ${pinnedTag}. Expected semver like v1.0.0`);
|
|
98
|
+
return 1;
|
|
99
|
+
}
|
|
100
|
+
const vf = core_1.VersionFile.create({
|
|
101
|
+
workflow: options.workflow,
|
|
102
|
+
version: versionLine,
|
|
103
|
+
pinned_tag: pinnedTag,
|
|
104
|
+
}, versionPath);
|
|
105
|
+
await vf.save();
|
|
106
|
+
console.log('\nCreated .waypoint/version:');
|
|
107
|
+
console.log(` workflow: ${vf.workflow}`);
|
|
108
|
+
console.log(` version: ${vf.version}`);
|
|
109
|
+
console.log(` pinned_tag: ${vf.pinnedTag}`);
|
|
110
|
+
console.log('\nFetching upstream release branch...');
|
|
111
|
+
try {
|
|
112
|
+
(0, git_1.fetchUpstream)(projectDir, vf.releaseBranch);
|
|
113
|
+
console.log(` Fetched upstream/${vf.releaseBranch}`);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
console.log(` Branch upstream/${vf.releaseBranch} not found yet (may need to be created).`);
|
|
117
|
+
}
|
|
118
|
+
console.log('\nSetup complete. Next steps:');
|
|
119
|
+
console.log(' 1. git add .waypoint/version');
|
|
120
|
+
console.log(' 2. git commit -m "chore: initialize workflow version tracking"');
|
|
121
|
+
console.log(' 3. Run "waypoint version --check-upstream" to verify');
|
|
122
|
+
return 0;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.update = update;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const core_1 = require("@waypoint-framework/core");
|
|
40
|
+
const validate_1 = require("./validate");
|
|
41
|
+
const git_1 = require("../util/git");
|
|
42
|
+
async function update(options) {
|
|
43
|
+
const projectDir = path.resolve(options.dir);
|
|
44
|
+
const versionPath = path.join(projectDir, '.waypoint', 'version');
|
|
45
|
+
try {
|
|
46
|
+
await fs.access(versionPath);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
console.error('No .waypoint/version found. Run "waypoint init" first.');
|
|
50
|
+
return 1;
|
|
51
|
+
}
|
|
52
|
+
const vf = await core_1.VersionFile.fromFile(versionPath);
|
|
53
|
+
if (!(0, git_1.hasRemote)('upstream', projectDir)) {
|
|
54
|
+
console.error('No upstream remote configured.');
|
|
55
|
+
console.error(`Add it with: git remote add upstream https://github.com/${vf.workflow}.git`);
|
|
56
|
+
return 1;
|
|
57
|
+
}
|
|
58
|
+
console.log(`Fetching upstream (${vf.workflow})...`);
|
|
59
|
+
(0, git_1.fetchUpstream)(projectDir, '--tags');
|
|
60
|
+
(0, git_1.fetchUpstream)(projectDir, vf.releaseBranch);
|
|
61
|
+
const tags = (0, git_1.getUpstreamTags)(projectDir);
|
|
62
|
+
const latestInLine = core_1.VersionFile.findLatestInLine(tags, vf.version);
|
|
63
|
+
const latestOverall = core_1.VersionFile.findLatestTag(tags);
|
|
64
|
+
const hasMinorOrPatch = latestInLine != null &&
|
|
65
|
+
core_1.VersionFile.compareSemVer(latestInLine, vf.pinnedTag) > 0;
|
|
66
|
+
const hasMajor = latestOverall != null &&
|
|
67
|
+
core_1.VersionFile.parseSemVer(latestOverall).major >
|
|
68
|
+
core_1.VersionFile.parseSemVer(vf.pinnedTag).major;
|
|
69
|
+
if (!hasMinorOrPatch && !hasMajor) {
|
|
70
|
+
console.log(`Already up to date (${vf.pinnedTag}).`);
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
if (hasMinorOrPatch) {
|
|
74
|
+
const updateType = core_1.VersionFile.classifyUpdate(vf.pinnedTag, latestInLine);
|
|
75
|
+
console.log(`Update available (${updateType}): ${vf.pinnedTag} → ${latestInLine}`);
|
|
76
|
+
const behind = (0, git_1.commitsBehindUpstream)(projectDir, vf.releaseBranch);
|
|
77
|
+
console.log(`${behind} commit(s) behind upstream/${vf.releaseBranch}`);
|
|
78
|
+
}
|
|
79
|
+
if (hasMajor && !hasMinorOrPatch) {
|
|
80
|
+
console.log(`Major version available: ${latestOverall}`);
|
|
81
|
+
if (!options.major) {
|
|
82
|
+
console.log('Use --major to upgrade to the next major version.');
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (hasMajor && options.major) {
|
|
87
|
+
console.log(`\n⚠ Major update available: ${latestOverall}`);
|
|
88
|
+
console.log('Major updates may contain breaking schema changes.');
|
|
89
|
+
}
|
|
90
|
+
if (options.check) {
|
|
91
|
+
console.log('\n(check-only mode, no changes applied)');
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
if ((0, git_1.hasUncommittedChanges)(projectDir)) {
|
|
95
|
+
console.error('\nUncommitted changes detected. Commit or stash them before updating.');
|
|
96
|
+
return 1;
|
|
97
|
+
}
|
|
98
|
+
let targetBranch;
|
|
99
|
+
let targetTag;
|
|
100
|
+
if (options.major && hasMajor) {
|
|
101
|
+
const newMajor = core_1.VersionFile.parseSemVer(latestOverall).major;
|
|
102
|
+
targetBranch = `release/v${newMajor}.x`;
|
|
103
|
+
targetTag = latestOverall;
|
|
104
|
+
console.log(`\nFetching major release branch: ${targetBranch}`);
|
|
105
|
+
(0, git_1.fetchUpstream)(projectDir, targetBranch);
|
|
106
|
+
}
|
|
107
|
+
else if (hasMinorOrPatch) {
|
|
108
|
+
targetBranch = vf.releaseBranch;
|
|
109
|
+
targetTag = latestInLine;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
console.log('No applicable updates.');
|
|
113
|
+
return 0;
|
|
114
|
+
}
|
|
115
|
+
console.log(`\nMerging upstream/${targetBranch}...`);
|
|
116
|
+
const result = (0, git_1.mergeUpstream)(projectDir, targetBranch);
|
|
117
|
+
if (!result.success) {
|
|
118
|
+
console.error('\nMerge conflicts detected!');
|
|
119
|
+
console.error('Resolve conflicts manually, then run:');
|
|
120
|
+
console.error(' git add . && git commit');
|
|
121
|
+
console.error(' waypoint validate --local --all');
|
|
122
|
+
(0, git_1.abortMerge)(projectDir);
|
|
123
|
+
return 1;
|
|
124
|
+
}
|
|
125
|
+
console.log('Merge successful.');
|
|
126
|
+
const newVersion = options.major && hasMajor
|
|
127
|
+
? `v${core_1.VersionFile.parseSemVer(targetTag).major}.x`
|
|
128
|
+
: vf.version;
|
|
129
|
+
const updatedVf = core_1.VersionFile.create({
|
|
130
|
+
workflow: vf.workflow,
|
|
131
|
+
version: newVersion,
|
|
132
|
+
pinned_tag: targetTag,
|
|
133
|
+
}, versionPath);
|
|
134
|
+
await updatedVf.save();
|
|
135
|
+
console.log(`Updated .waypoint/version: pinned_tag → ${targetTag}`);
|
|
136
|
+
if (options.validate) {
|
|
137
|
+
console.log('\nRunning post-update validation...');
|
|
138
|
+
const exitCode = await (0, validate_1.validate)({ local: true, all: true, dir: projectDir });
|
|
139
|
+
if (exitCode !== 0) {
|
|
140
|
+
console.error('\nValidation failed after update.');
|
|
141
|
+
console.error('Fix validation errors, then commit.');
|
|
142
|
+
return 1;
|
|
143
|
+
}
|
|
144
|
+
console.log('All validations passed.');
|
|
145
|
+
}
|
|
146
|
+
console.log('\nUpdate complete. Review changes and commit when ready.');
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.validate = validate;
|
|
40
|
+
const fs = __importStar(require("fs/promises"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const child_process_1 = require("child_process");
|
|
43
|
+
const ajv_1 = __importDefault(require("ajv"));
|
|
44
|
+
const core_1 = require("@waypoint-framework/core");
|
|
45
|
+
async function validate(options) {
|
|
46
|
+
const projectDir = path.resolve(options.dir);
|
|
47
|
+
const waypointPath = path.join(projectDir, 'waypoint.yaml');
|
|
48
|
+
try {
|
|
49
|
+
await fs.access(waypointPath);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
console.error(`No waypoint.yaml found in ${projectDir}`);
|
|
53
|
+
return 1;
|
|
54
|
+
}
|
|
55
|
+
const wp = await core_1.WaypointYaml.fromFile(waypointPath);
|
|
56
|
+
const schemaMappings = wp.getSchemaMappings(path.join(projectDir, 'schemas'));
|
|
57
|
+
let filesToValidate;
|
|
58
|
+
if (options.all) {
|
|
59
|
+
filesToValidate = getAllArtifactFiles(wp, projectDir);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
filesToValidate = getChangedFiles(projectDir);
|
|
63
|
+
}
|
|
64
|
+
if (filesToValidate.length === 0) {
|
|
65
|
+
console.log('No files to validate.');
|
|
66
|
+
return 0;
|
|
67
|
+
}
|
|
68
|
+
const ajv = new ajv_1.default({ allErrors: true, strict: false });
|
|
69
|
+
let hasErrors = false;
|
|
70
|
+
for (const filePath of filesToValidate) {
|
|
71
|
+
const waypointId = wp.findWaypointForFile(filePath);
|
|
72
|
+
if (!waypointId) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const schemaMapping = schemaMappings.find((m) => m.waypointId === waypointId);
|
|
76
|
+
if (!schemaMapping) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
let schema;
|
|
80
|
+
try {
|
|
81
|
+
const schemaContent = await fs.readFile(schemaMapping.schemaPath, 'utf-8');
|
|
82
|
+
schema = JSON.parse(schemaContent);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
console.warn(` Schema not found: ${schemaMapping.schemaPath}`);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const fullPath = path.isAbsolute(filePath) ? filePath : path.join(projectDir, filePath);
|
|
89
|
+
let data;
|
|
90
|
+
try {
|
|
91
|
+
const content = await fs.readFile(fullPath, 'utf-8');
|
|
92
|
+
data = JSON.parse(content);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const valid = ajv.validate(schema, data);
|
|
98
|
+
if (!valid) {
|
|
99
|
+
hasErrors = true;
|
|
100
|
+
console.error(`FAIL ${filePath}`);
|
|
101
|
+
for (const err of ajv.errors || []) {
|
|
102
|
+
console.error(` ${err.instancePath || '/'}: ${err.message}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
console.log(`PASS ${filePath}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return hasErrors ? 1 : 0;
|
|
110
|
+
}
|
|
111
|
+
function getChangedFiles(projectDir) {
|
|
112
|
+
try {
|
|
113
|
+
const staged = (0, child_process_1.execSync)('git diff --cached --name-only', {
|
|
114
|
+
cwd: projectDir,
|
|
115
|
+
encoding: 'utf-8',
|
|
116
|
+
}).trim();
|
|
117
|
+
if (staged) {
|
|
118
|
+
return staged.split('\n').filter(Boolean);
|
|
119
|
+
}
|
|
120
|
+
const unstaged = (0, child_process_1.execSync)('git diff --name-only', {
|
|
121
|
+
cwd: projectDir,
|
|
122
|
+
encoding: 'utf-8',
|
|
123
|
+
}).trim();
|
|
124
|
+
return unstaged.split('\n').filter(Boolean);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function getAllArtifactFiles(wp, projectDir) {
|
|
131
|
+
const allIds = wp.getAllNodeIds();
|
|
132
|
+
const files = [];
|
|
133
|
+
for (const id of allIds) {
|
|
134
|
+
files.push(`${id}.json`);
|
|
135
|
+
files.push(`${id}.md`);
|
|
136
|
+
}
|
|
137
|
+
return files;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.version = version;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const core_1 = require("@waypoint-framework/core");
|
|
40
|
+
const git_1 = require("../util/git");
|
|
41
|
+
async function version(options) {
|
|
42
|
+
const projectDir = path.resolve(options.dir);
|
|
43
|
+
const versionPath = path.join(projectDir, '.waypoint', 'version');
|
|
44
|
+
try {
|
|
45
|
+
await fs.access(versionPath);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
console.error(`No .waypoint/version found in ${projectDir}`);
|
|
49
|
+
console.error('Run "waypoint init" to set up workflow version tracking.');
|
|
50
|
+
return 1;
|
|
51
|
+
}
|
|
52
|
+
const vf = await core_1.VersionFile.fromFile(versionPath);
|
|
53
|
+
console.log('Workflow Version Info');
|
|
54
|
+
console.log('────────────────────');
|
|
55
|
+
console.log(` Workflow: ${vf.workflow}`);
|
|
56
|
+
console.log(` Version: ${vf.version}`);
|
|
57
|
+
console.log(` Pinned Tag: ${vf.pinnedTag}`);
|
|
58
|
+
console.log(` Release Branch: ${vf.releaseBranch}`);
|
|
59
|
+
const upstreamUrl = (0, git_1.getUpstreamUrl)(projectDir);
|
|
60
|
+
if (upstreamUrl) {
|
|
61
|
+
console.log(` Upstream: ${upstreamUrl}`);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.log(' Upstream: (not configured)');
|
|
65
|
+
}
|
|
66
|
+
if (!options.checkUpstream)
|
|
67
|
+
return 0;
|
|
68
|
+
if (!(0, git_1.hasRemote)('upstream', projectDir)) {
|
|
69
|
+
console.log('\n⚠ No upstream remote configured. Cannot check for updates.');
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
console.log('\nChecking upstream for updates...');
|
|
73
|
+
try {
|
|
74
|
+
const tags = (0, git_1.getUpstreamTags)(projectDir);
|
|
75
|
+
if (tags.length === 0) {
|
|
76
|
+
console.log(' No version tags found on upstream.');
|
|
77
|
+
return 0;
|
|
78
|
+
}
|
|
79
|
+
const latestInLine = core_1.VersionFile.findLatestInLine(tags, vf.version);
|
|
80
|
+
const latestOverall = core_1.VersionFile.findLatestTag(tags);
|
|
81
|
+
if (latestInLine && core_1.VersionFile.compareSemVer(latestInLine, vf.pinnedTag) > 0) {
|
|
82
|
+
const updateType = core_1.VersionFile.classifyUpdate(vf.pinnedTag, latestInLine);
|
|
83
|
+
console.log(` Update available (${updateType}): ${vf.pinnedTag} → ${latestInLine}`);
|
|
84
|
+
const behind = (0, git_1.commitsBehindUpstream)(projectDir, vf.releaseBranch);
|
|
85
|
+
if (behind > 0) {
|
|
86
|
+
console.log(` ${behind} commit(s) behind upstream/${vf.releaseBranch}`);
|
|
87
|
+
}
|
|
88
|
+
console.log(' Run "waypoint update" to apply.');
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.log(` Up to date on ${vf.version} line (${vf.pinnedTag}).`);
|
|
92
|
+
}
|
|
93
|
+
if (latestOverall) {
|
|
94
|
+
const latestSv = core_1.VersionFile.parseSemVer(latestOverall);
|
|
95
|
+
const pinnedSv = core_1.VersionFile.parseSemVer(vf.pinnedTag);
|
|
96
|
+
if (latestSv.major > pinnedSv.major) {
|
|
97
|
+
console.log(`\n⚠ Major version available: ${latestOverall}`);
|
|
98
|
+
console.log(' Major updates may contain breaking schema changes.');
|
|
99
|
+
console.log(' Run "waypoint update --major" to migrate.');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
console.error(`\nFailed to check upstream: ${err.message}`);
|
|
105
|
+
}
|
|
106
|
+
return 0;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const validate_1 = require("./commands/validate");
|
|
6
|
+
const version_1 = require("./commands/version");
|
|
7
|
+
const update_1 = require("./commands/update");
|
|
8
|
+
const init_1 = require("./commands/init");
|
|
9
|
+
const program = new commander_1.Command();
|
|
10
|
+
program
|
|
11
|
+
.name('waypoint')
|
|
12
|
+
.description('Waypoint Framework CLI — local validation and workflow versioning for project repos')
|
|
13
|
+
.version('0.2.0');
|
|
14
|
+
program
|
|
15
|
+
.command('validate')
|
|
16
|
+
.description('Validate changed files against their waypoint JSON schemas')
|
|
17
|
+
.option('--local', 'Run validation locally (default)', true)
|
|
18
|
+
.option('--all', 'Validate all files, not just changed ones')
|
|
19
|
+
.option('--dir <path>', 'Project directory (defaults to cwd)', process.cwd())
|
|
20
|
+
.action(async (options) => {
|
|
21
|
+
try {
|
|
22
|
+
const exitCode = await (0, validate_1.validate)(options);
|
|
23
|
+
process.exit(exitCode);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
console.error(`Error: ${err.message}`);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
program
|
|
31
|
+
.command('version')
|
|
32
|
+
.description('Show workflow version info for this project')
|
|
33
|
+
.option('--dir <path>', 'Project directory (defaults to cwd)', process.cwd())
|
|
34
|
+
.option('--check-upstream', 'Check upstream repo for available updates', false)
|
|
35
|
+
.action(async (options) => {
|
|
36
|
+
try {
|
|
37
|
+
const exitCode = await (0, version_1.version)(options);
|
|
38
|
+
process.exit(exitCode);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
console.error(`Error: ${err.message}`);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
program
|
|
46
|
+
.command('update')
|
|
47
|
+
.description('Check for and apply workflow updates from the upstream repo')
|
|
48
|
+
.option('--dir <path>', 'Project directory (defaults to cwd)', process.cwd())
|
|
49
|
+
.option('--check', 'Only check for updates, do not apply', false)
|
|
50
|
+
.option('--major', 'Allow major version upgrades (breaking changes)', false)
|
|
51
|
+
.option('--no-validate', 'Skip post-update validation')
|
|
52
|
+
.action(async (options) => {
|
|
53
|
+
try {
|
|
54
|
+
const exitCode = await (0, update_1.update)(options);
|
|
55
|
+
process.exit(exitCode);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
console.error(`Error: ${err.message}`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
program
|
|
63
|
+
.command('init')
|
|
64
|
+
.description('Initialize workflow version tracking for a project fork')
|
|
65
|
+
.requiredOption('--workflow <owner/repo>', 'Upstream workflow repo (e.g. advizo-ai/marketing-workflow)')
|
|
66
|
+
.option('--version <line>', 'Version line to track (e.g. v1.x)', 'v1.x')
|
|
67
|
+
.option('--tag <tag>', 'Specific tag to pin (auto-detected if omitted)')
|
|
68
|
+
.option('--dir <path>', 'Project directory (defaults to cwd)', process.cwd())
|
|
69
|
+
.action(async (options) => {
|
|
70
|
+
try {
|
|
71
|
+
const exitCode = await (0, init_1.init)(options);
|
|
72
|
+
process.exit(exitCode);
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
console.error(`Error: ${err.message}`);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
program.parse();
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|