@kitsi/pack-github-release 0.0.2
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/checks/gh-auth.d.ts +6 -0
- package/dist/checks/gh-auth.d.ts.map +1 -0
- package/dist/checks/gh-auth.js +22 -0
- package/dist/checks/gh-auth.js.map +1 -0
- package/dist/checks/gh-cli.d.ts +6 -0
- package/dist/checks/gh-cli.d.ts.map +1 -0
- package/dist/checks/gh-cli.js +24 -0
- package/dist/checks/gh-cli.js.map +1 -0
- package/dist/checks/index.d.ts +18 -0
- package/dist/checks/index.d.ts.map +1 -0
- package/dist/checks/index.js +33 -0
- package/dist/checks/index.js.map +1 -0
- package/dist/checks/repository.d.ts +6 -0
- package/dist/checks/repository.d.ts.map +1 -0
- package/dist/checks/repository.js +25 -0
- package/dist/checks/repository.js.map +1 -0
- package/dist/checks/tags.d.ts +6 -0
- package/dist/checks/tags.d.ts.map +1 -0
- package/dist/checks/tags.js +27 -0
- package/dist/checks/tags.js.map +1 -0
- package/dist/index.d.ts +88 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/refs.d.ts +16 -0
- package/dist/refs.d.ts.map +1 -0
- package/dist/refs.js +16 -0
- package/dist/refs.js.map +1 -0
- package/dist/release.d.ts +49 -0
- package/dist/release.d.ts.map +1 -0
- package/dist/release.js +174 -0
- package/dist/release.js.map +1 -0
- package/dist/steps/create-release.d.ts +16 -0
- package/dist/steps/create-release.d.ts.map +1 -0
- package/dist/steps/create-release.js +79 -0
- package/dist/steps/create-release.js.map +1 -0
- package/dist/steps/detect-repository.d.ts +6 -0
- package/dist/steps/detect-repository.d.ts.map +1 -0
- package/dist/steps/detect-repository.js +32 -0
- package/dist/steps/detect-repository.js.map +1 -0
- package/dist/steps/index.d.ts +6 -0
- package/dist/steps/index.d.ts.map +1 -0
- package/dist/steps/index.js +5 -0
- package/dist/steps/index.js.map +1 -0
- package/dist/steps/preflight-checks.d.ts +26 -0
- package/dist/steps/preflight-checks.d.ts.map +1 -0
- package/dist/steps/preflight-checks.js +80 -0
- package/dist/steps/preflight-checks.js.map +1 -0
- package/dist/steps/upload-assets.d.ts +6 -0
- package/dist/steps/upload-assets.d.ts.map +1 -0
- package/dist/steps/upload-assets.js +35 -0
- package/dist/steps/upload-assets.js.map +1 -0
- package/dist/types/check-result.d.ts +18 -0
- package/dist/types/check-result.d.ts.map +1 -0
- package/dist/types/check-result.js +2 -0
- package/dist/types/check-result.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/release-options.d.ts +84 -0
- package/dist/types/release-options.d.ts.map +1 -0
- package/dist/types/release-options.js +2 -0
- package/dist/types/release-options.js.map +1 -0
- package/dist/types/release-result.d.ts +22 -0
- package/dist/types/release-result.d.ts.map +1 -0
- package/dist/types/release-result.js +2 -0
- package/dist/types/release-result.js.map +1 -0
- package/package.json +54 -0
package/dist/release.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { emit, plan, step, summary, task, use } from '@kitsi/cli';
|
|
2
|
+
import { refs } from './refs.js';
|
|
3
|
+
import { createRelease } from './steps/create-release.js';
|
|
4
|
+
import { runPreflightChecks } from './steps/preflight-checks.js';
|
|
5
|
+
import { uploadAssets } from './steps/upload-assets.js';
|
|
6
|
+
/**
|
|
7
|
+
* Creates a release plan for publishing GitHub releases.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { githubRelease } from '@kitsi/pack-github-release';
|
|
12
|
+
*
|
|
13
|
+
* // Simple usage with explicit packages
|
|
14
|
+
* export const ci = registry(
|
|
15
|
+
* githubRelease.release({
|
|
16
|
+
* packages: [
|
|
17
|
+
* { name: '@kitsi/cli', tagName: '@kitsi/cli@1.0.0', version: '1.0.0' },
|
|
18
|
+
* ],
|
|
19
|
+
* }),
|
|
20
|
+
* );
|
|
21
|
+
*
|
|
22
|
+
* // Integration with pack-version
|
|
23
|
+
* const { push: versionPush } = version.tasks({ packages: [...] });
|
|
24
|
+
* export const ci = registry(
|
|
25
|
+
* githubRelease.release({
|
|
26
|
+
* versionTask: versionPush,
|
|
27
|
+
* }),
|
|
28
|
+
* );
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export function release(opts = {}) {
|
|
32
|
+
const { preflight, create, upload } = tasks(opts);
|
|
33
|
+
const taskList = [];
|
|
34
|
+
if (!opts.skip?.preflight) {
|
|
35
|
+
taskList.push(preflight);
|
|
36
|
+
}
|
|
37
|
+
if (!opts.skip?.create) {
|
|
38
|
+
taskList.push(create);
|
|
39
|
+
}
|
|
40
|
+
if (!opts.skip?.upload) {
|
|
41
|
+
taskList.push(upload);
|
|
42
|
+
}
|
|
43
|
+
return plan('github-release').tasks(taskList);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Creates individual GitHub release tasks that can be composed into other plans.
|
|
47
|
+
* Use this when you need to integrate release tasks with other workflows.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const { preflight, create, upload } = githubRelease.tasks({ ... });
|
|
52
|
+
*
|
|
53
|
+
* plan('release').tasks(
|
|
54
|
+
* versionPush,
|
|
55
|
+
* preflight.needs(versionPush),
|
|
56
|
+
* create,
|
|
57
|
+
* upload,
|
|
58
|
+
* );
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export function tasks(opts = {}) {
|
|
62
|
+
// Preflight check task
|
|
63
|
+
const preflight = task('github-release:preflight')
|
|
64
|
+
.cache({ enabled: false })
|
|
65
|
+
.steps(step('Run Preflight Checks', function* (_ctx) {
|
|
66
|
+
yield* runPreflightChecks(opts.repository, opts.packages);
|
|
67
|
+
}));
|
|
68
|
+
// Create releases task
|
|
69
|
+
const create = task('github-release:create')
|
|
70
|
+
.needs(preflight)
|
|
71
|
+
.cache({ enabled: false })
|
|
72
|
+
.steps(step('Create GitHub Releases', function* (_ctx) {
|
|
73
|
+
const packages = yield* resolvePackages(opts);
|
|
74
|
+
if (packages.length === 0) {
|
|
75
|
+
yield* emitEmptyResults();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
yield summary.md(`Creating releases for ${packages.length} package(s)`);
|
|
79
|
+
const { results, releaseUrls } = yield* createReleases(packages, opts);
|
|
80
|
+
yield* emitResults(results, releaseUrls);
|
|
81
|
+
}));
|
|
82
|
+
// Upload assets task
|
|
83
|
+
const upload = task('github-release:upload')
|
|
84
|
+
.needs(create)
|
|
85
|
+
.cache({ enabled: false })
|
|
86
|
+
.steps(step('Upload Release Assets', function* (_ctx) {
|
|
87
|
+
const packages = opts.packages ?? [];
|
|
88
|
+
const packagesWithAssets = packages.filter((p) => p.assets && p.assets.length > 0);
|
|
89
|
+
if (packagesWithAssets.length === 0) {
|
|
90
|
+
yield summary.md('No assets to upload');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
yield summary.md(`Uploading assets for ${packagesWithAssets.length} release(s)`);
|
|
94
|
+
for (const pkg of packagesWithAssets) {
|
|
95
|
+
if (!pkg.assets)
|
|
96
|
+
continue;
|
|
97
|
+
const uploaded = yield* uploadAssets(pkg.tagName, pkg.assets, opts.dryRun);
|
|
98
|
+
if (uploaded.length > 0) {
|
|
99
|
+
yield summary.md(`Uploaded ${uploaded.length} asset(s) to ${pkg.tagName}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}));
|
|
103
|
+
return { preflight, create, upload };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Resolves packages from options or version task outputs.
|
|
107
|
+
*/
|
|
108
|
+
function* resolvePackages(opts) {
|
|
109
|
+
let packages = opts.packages ?? [];
|
|
110
|
+
if (opts.versionTask) {
|
|
111
|
+
const versionResultsRef = {
|
|
112
|
+
kind: 'value',
|
|
113
|
+
name: 'version:results',
|
|
114
|
+
parse: (value) => value,
|
|
115
|
+
};
|
|
116
|
+
const versionResults = (yield use(opts.versionTask, versionResultsRef));
|
|
117
|
+
if (versionResults && versionResults.length > 0) {
|
|
118
|
+
packages = versionResults.map((r) => ({
|
|
119
|
+
name: r.name,
|
|
120
|
+
tagName: r.tagName,
|
|
121
|
+
version: r.newVersion,
|
|
122
|
+
changelogPath: r.changelogPath,
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return packages;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Emits empty results when no packages to release.
|
|
130
|
+
*/
|
|
131
|
+
function* emitEmptyResults() {
|
|
132
|
+
yield summary.md('No packages to release');
|
|
133
|
+
yield emit(refs.HasReleases, false);
|
|
134
|
+
yield emit(refs.Results, []);
|
|
135
|
+
yield emit(refs.ReleaseUrls, {});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Creates releases for all packages.
|
|
139
|
+
*/
|
|
140
|
+
function* createReleases(packages, opts) {
|
|
141
|
+
const results = [];
|
|
142
|
+
const releaseUrls = {};
|
|
143
|
+
for (const pkg of packages) {
|
|
144
|
+
const result = yield* createRelease(pkg, {
|
|
145
|
+
draft: opts.draft,
|
|
146
|
+
prerelease: opts.prerelease,
|
|
147
|
+
generateNotes: opts.generateNotes,
|
|
148
|
+
latest: opts.latest,
|
|
149
|
+
discussionCategory: opts.discussionCategory,
|
|
150
|
+
dryRun: opts.dryRun,
|
|
151
|
+
});
|
|
152
|
+
if (result) {
|
|
153
|
+
results.push(result);
|
|
154
|
+
releaseUrls[result.name] = result.url;
|
|
155
|
+
yield summary.md(`Created release: [${result.tagName}](${result.url})`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return { results, releaseUrls };
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Emits final results.
|
|
162
|
+
*/
|
|
163
|
+
function* emitResults(results, releaseUrls) {
|
|
164
|
+
yield emit(refs.HasReleases, results.length > 0);
|
|
165
|
+
yield emit(refs.Results, results);
|
|
166
|
+
yield emit(refs.ReleaseUrls, releaseUrls);
|
|
167
|
+
if (results.length === 0) {
|
|
168
|
+
yield summary.md('No releases were created');
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
yield summary.md(`Successfully created ${results.length} release(s)`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=release.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release.js","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PackageReleaseConfig } from '../types/release-options.js';
|
|
2
|
+
import type { ReleaseResult } from '../types/release-result.js';
|
|
3
|
+
export interface CreateReleaseOptions {
|
|
4
|
+
draft?: boolean;
|
|
5
|
+
prerelease?: boolean;
|
|
6
|
+
generateNotes?: boolean;
|
|
7
|
+
latest?: boolean;
|
|
8
|
+
discussionCategory?: string;
|
|
9
|
+
dryRun?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Creates a GitHub release for a package.
|
|
13
|
+
* Yields shell commands and returns the release result.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createRelease(pkg: PackageReleaseConfig, opts?: CreateReleaseOptions): Generator<unknown, ReleaseResult | null, unknown>;
|
|
16
|
+
//# sourceMappingURL=create-release.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-release.d.ts","sourceRoot":"","sources":["../../src/steps/create-release.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAuED;;;GAGG;AACH,wBAAiB,aAAa,CAC5B,GAAG,EAAE,oBAAoB,EACzB,IAAI,GAAE,oBAAyB,GAC9B,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,EAAE,OAAO,CAAC,CAiBnD"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { sh } from '@kitsi/cli';
|
|
2
|
+
/**
|
|
3
|
+
* Builds the gh release create flags from options.
|
|
4
|
+
*/
|
|
5
|
+
function buildReleaseFlags(pkg, opts) {
|
|
6
|
+
const flags = [];
|
|
7
|
+
if (opts.draft)
|
|
8
|
+
flags.push('--draft');
|
|
9
|
+
if (opts.prerelease)
|
|
10
|
+
flags.push('--prerelease');
|
|
11
|
+
if (opts.generateNotes !== false)
|
|
12
|
+
flags.push('--generate-notes');
|
|
13
|
+
if (opts.latest === true)
|
|
14
|
+
flags.push('--latest');
|
|
15
|
+
else if (opts.latest === false)
|
|
16
|
+
flags.push('--latest=false');
|
|
17
|
+
if (opts.discussionCategory) {
|
|
18
|
+
flags.push(`--discussion-category "${opts.discussionCategory}"`);
|
|
19
|
+
}
|
|
20
|
+
const title = pkg.title ?? pkg.tagName;
|
|
21
|
+
flags.push(`--title "${title}"`);
|
|
22
|
+
if (pkg.body) {
|
|
23
|
+
flags.push(`--notes "${pkg.body.replace(/"/g, '\\"')}"`);
|
|
24
|
+
}
|
|
25
|
+
return flags;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a dry run result for testing.
|
|
29
|
+
*/
|
|
30
|
+
function createDryRunResult(pkg, opts) {
|
|
31
|
+
return {
|
|
32
|
+
name: pkg.name,
|
|
33
|
+
version: pkg.version,
|
|
34
|
+
tagName: pkg.tagName,
|
|
35
|
+
url: `https://github.com/OWNER/REPO/releases/tag/${pkg.tagName}`,
|
|
36
|
+
id: 'dry-run',
|
|
37
|
+
isDraft: opts.draft ?? false,
|
|
38
|
+
isPrerelease: opts.prerelease ?? false,
|
|
39
|
+
uploadedAssets: [],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Parses the release result from gh output.
|
|
44
|
+
*/
|
|
45
|
+
function parseReleaseResult(pkg, output, opts) {
|
|
46
|
+
const urlMatch = output.match(/https:\/\/github\.com\/[^\s]+/);
|
|
47
|
+
const url = urlMatch ? urlMatch[0] : '';
|
|
48
|
+
const idMatch = url.match(/\/releases\/tag\/([^/\s]+)/);
|
|
49
|
+
const id = (idMatch ? idMatch[1] : pkg.tagName) ?? '';
|
|
50
|
+
return {
|
|
51
|
+
name: pkg.name,
|
|
52
|
+
version: pkg.version,
|
|
53
|
+
tagName: pkg.tagName,
|
|
54
|
+
url,
|
|
55
|
+
id,
|
|
56
|
+
isDraft: opts.draft ?? false,
|
|
57
|
+
isPrerelease: opts.prerelease ?? false,
|
|
58
|
+
uploadedAssets: [],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Creates a GitHub release for a package.
|
|
63
|
+
* Yields shell commands and returns the release result.
|
|
64
|
+
*/
|
|
65
|
+
export function* createRelease(pkg, opts = {}) {
|
|
66
|
+
const flags = buildReleaseFlags(pkg, opts);
|
|
67
|
+
const flagsStr = flags.join(' ');
|
|
68
|
+
const tagName = pkg.tagName;
|
|
69
|
+
if (opts.dryRun) {
|
|
70
|
+
yield sh `echo "[DRY RUN] Would create release: ${tagName}"`.must();
|
|
71
|
+
return createDryRunResult(pkg, opts);
|
|
72
|
+
}
|
|
73
|
+
const result = (yield sh `gh release create "${tagName}" ${flagsStr} 2>&1`.stdout());
|
|
74
|
+
if (result === '') {
|
|
75
|
+
return null; // Analysis mode
|
|
76
|
+
}
|
|
77
|
+
return parseReleaseResult(pkg, result, opts);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=create-release.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-release.js","sourceRoot":"","sources":["../../src/steps/create-release.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detects the GitHub repository from git remotes.
|
|
3
|
+
* Yields shell commands and returns the repository in 'owner/repo' format.
|
|
4
|
+
*/
|
|
5
|
+
export declare function detectRepository(): Generator<unknown, string | null, unknown>;
|
|
6
|
+
//# sourceMappingURL=detect-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-repository.d.ts","sourceRoot":"","sources":["../../src/steps/detect-repository.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAiB,gBAAgB,IAAI,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,CA+B9E"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { sh } from '@kitsi/cli';
|
|
2
|
+
/**
|
|
3
|
+
* Detects the GitHub repository from git remotes.
|
|
4
|
+
* Yields shell commands and returns the repository in 'owner/repo' format.
|
|
5
|
+
*/
|
|
6
|
+
export function* detectRepository() {
|
|
7
|
+
// Try to get the remote URL
|
|
8
|
+
const remoteUrl = (yield sh `git remote get-url origin 2>/dev/null || echo ""`.stdout());
|
|
9
|
+
if (remoteUrl === '') {
|
|
10
|
+
return null; // Analysis mode or no remote
|
|
11
|
+
}
|
|
12
|
+
const trimmed = remoteUrl.trim();
|
|
13
|
+
if (!trimmed) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
// Parse GitHub repository from various URL formats
|
|
17
|
+
// SSH: git@github.com:owner/repo.git
|
|
18
|
+
// HTTPS: https://github.com/owner/repo.git
|
|
19
|
+
// HTTPS with auth: https://token@github.com/owner/repo.git
|
|
20
|
+
const patterns = [
|
|
21
|
+
/github\.com[:/]([^/]+\/[^/.]+)(?:\.git)?$/,
|
|
22
|
+
/github\.com[:/]([^/]+\/[^/]+?)(?:\.git)?$/,
|
|
23
|
+
];
|
|
24
|
+
for (const pattern of patterns) {
|
|
25
|
+
const match = trimmed.match(pattern);
|
|
26
|
+
if (match?.[1]) {
|
|
27
|
+
return match[1].replace(/\.git$/, '');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=detect-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-repository.js","sourceRoot":"","sources":["../../src/steps/detect-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAEhC;;;GAGG;AACH,MAAM,SAAS,CAAC,CAAC,gBAAgB;IAC/B,4BAA4B;IAC5B,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,CAAA,kDAAkD,CAAC,MAAM,EAAE,CAAW,CAAC;IAElG,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,CAAC,6BAA6B;IAC5C,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mDAAmD;IACnD,qCAAqC;IACrC,2CAA2C;IAC3C,2DAA2D;IAE3D,MAAM,QAAQ,GAAG;QACf,2CAA2C;QAC3C,2CAA2C;KAC5C,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createRelease } from './create-release.js';
|
|
2
|
+
export type { CreateReleaseOptions } from './create-release.js';
|
|
3
|
+
export { detectRepository } from './detect-repository.js';
|
|
4
|
+
export { runPreflightChecks } from './preflight-checks.js';
|
|
5
|
+
export { uploadAssets } from './upload-assets.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/steps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/steps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CheckResult } from '../types/check-result.js';
|
|
2
|
+
import type { PackageReleaseConfig } from '../types/release-options.js';
|
|
3
|
+
/**
|
|
4
|
+
* Runs GitHub CLI availability check.
|
|
5
|
+
*/
|
|
6
|
+
export declare function checkGhCliStep(): Generator<unknown, CheckResult | null, unknown>;
|
|
7
|
+
/**
|
|
8
|
+
* Runs GitHub authentication check.
|
|
9
|
+
*/
|
|
10
|
+
export declare function checkGhAuthStep(): Generator<unknown, CheckResult, unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* Detects and validates the GitHub repository.
|
|
13
|
+
*/
|
|
14
|
+
export declare function checkRepositoryStep(explicitRepo: string | undefined): Generator<unknown, {
|
|
15
|
+
check: CheckResult;
|
|
16
|
+
repository: string | null;
|
|
17
|
+
}, unknown>;
|
|
18
|
+
/**
|
|
19
|
+
* Checks for the existence of git tags.
|
|
20
|
+
*/
|
|
21
|
+
export declare function checkTagsStep(packages: PackageReleaseConfig[]): Generator<unknown, CheckResult, unknown>;
|
|
22
|
+
/**
|
|
23
|
+
* Runs all preflight checks and emits summary.
|
|
24
|
+
*/
|
|
25
|
+
export declare function runPreflightChecks(explicitRepo: string | undefined, packages: PackageReleaseConfig[] | undefined): Generator<unknown, void, unknown>;
|
|
26
|
+
//# sourceMappingURL=preflight-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight-checks.d.ts","sourceRoot":"","sources":["../../src/steps/preflight-checks.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGxE;;GAEG;AACH,wBAAiB,cAAc,IAAI,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,EAAE,OAAO,CAAC,CASjF;AAED;;GAEG;AACH,wBAAiB,eAAe,IAAI,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAI3E;AAED;;GAEG;AACH,wBAAiB,mBAAmB,CAClC,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,SAAS,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,OAAO,CAAC,CAchF;AAED;;GAEG;AACH,wBAAiB,aAAa,CAC5B,QAAQ,EAAE,oBAAoB,EAAE,GAC/B,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAa1C;AAED;;GAEG;AACH,wBAAiB,kBAAkB,CACjC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,SAAS,GAC3C,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAgCnC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { emit, sh, summary } from '@kitsi/cli';
|
|
2
|
+
import { checkGhAuth, checkGhCli, checkRepository, checkTags, formatCheckResults, hasFailures, } from '../checks/index.js';
|
|
3
|
+
import { refs } from '../refs.js';
|
|
4
|
+
import { detectRepository } from './detect-repository.js';
|
|
5
|
+
/**
|
|
6
|
+
* Runs GitHub CLI availability check.
|
|
7
|
+
*/
|
|
8
|
+
export function* checkGhCliStep() {
|
|
9
|
+
const ghVersion = (yield sh `command -v gh >/dev/null 2>&1 && echo "yes" || echo "no"`.stdout());
|
|
10
|
+
if (ghVersion === '') {
|
|
11
|
+
return null; // Analysis mode
|
|
12
|
+
}
|
|
13
|
+
return checkGhCli(ghVersion.trim() === 'yes');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Runs GitHub authentication check.
|
|
17
|
+
*/
|
|
18
|
+
export function* checkGhAuthStep() {
|
|
19
|
+
const authStatus = (yield sh `gh auth status >/dev/null 2>&1 && echo "yes" || echo "no"`.stdout());
|
|
20
|
+
return checkGhAuth(authStatus.trim() === 'yes');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Detects and validates the GitHub repository.
|
|
24
|
+
*/
|
|
25
|
+
export function* checkRepositoryStep(explicitRepo) {
|
|
26
|
+
let repository = explicitRepo ?? null;
|
|
27
|
+
if (!repository) {
|
|
28
|
+
repository = yield* detectRepository();
|
|
29
|
+
}
|
|
30
|
+
const check = checkRepository(repository);
|
|
31
|
+
if (repository) {
|
|
32
|
+
yield emit(refs.Repository, repository);
|
|
33
|
+
}
|
|
34
|
+
return { check, repository };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Checks for the existence of git tags.
|
|
38
|
+
*/
|
|
39
|
+
export function* checkTagsStep(packages) {
|
|
40
|
+
const tagNames = packages.map((p) => p.tagName);
|
|
41
|
+
const existingTags = [];
|
|
42
|
+
for (const tagName of tagNames) {
|
|
43
|
+
const tagExists = (yield sh `git rev-parse "${tagName}" >/dev/null 2>&1 && echo "yes" || echo "no"`.stdout());
|
|
44
|
+
if (tagExists.trim() === 'yes') {
|
|
45
|
+
existingTags.push(tagName);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return checkTags(existingTags.length > 0, existingTags);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Runs all preflight checks and emits summary.
|
|
52
|
+
*/
|
|
53
|
+
export function* runPreflightChecks(explicitRepo, packages) {
|
|
54
|
+
const checkResults = [];
|
|
55
|
+
// Check gh CLI
|
|
56
|
+
const ghCliCheck = yield* checkGhCliStep();
|
|
57
|
+
if (ghCliCheck === null) {
|
|
58
|
+
return; // Analysis mode
|
|
59
|
+
}
|
|
60
|
+
checkResults.push(ghCliCheck);
|
|
61
|
+
// Check authentication
|
|
62
|
+
checkResults.push(yield* checkGhAuthStep());
|
|
63
|
+
// Check repository
|
|
64
|
+
const { check: repoCheck } = yield* checkRepositoryStep(explicitRepo);
|
|
65
|
+
checkResults.push(repoCheck);
|
|
66
|
+
// Check tags if packages specified
|
|
67
|
+
if (packages && packages.length > 0) {
|
|
68
|
+
checkResults.push(yield* checkTagsStep(packages));
|
|
69
|
+
}
|
|
70
|
+
// Output summary
|
|
71
|
+
const output = formatCheckResults(checkResults);
|
|
72
|
+
yield summary.md(`\`\`\`\n${output}\n\`\`\``);
|
|
73
|
+
// Throw if failures
|
|
74
|
+
if (hasFailures(checkResults)) {
|
|
75
|
+
const failures = checkResults.filter((r) => r.status === 'fail');
|
|
76
|
+
const errorMsg = failures.map((r) => `${r.name}: ${r.message}`).join('\n');
|
|
77
|
+
throw new Error(`Preflight checks failed:\n${errorMsg}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=preflight-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight-checks.js","sourceRoot":"","sources":["../../src/steps/preflight-checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Uploads assets to an existing GitHub release.
|
|
3
|
+
* Yields shell commands and returns the list of uploaded asset paths.
|
|
4
|
+
*/
|
|
5
|
+
export declare function uploadAssets(tagName: string, assets: string[], dryRun?: boolean): Generator<unknown, string[], unknown>;
|
|
6
|
+
//# sourceMappingURL=upload-assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-assets.d.ts","sourceRoot":"","sources":["../../src/steps/upload-assets.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAiB,YAAY,CAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,CAAC,EAAE,OAAO,GACf,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAoCvC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { sh } from '@kitsi/cli';
|
|
2
|
+
/**
|
|
3
|
+
* Uploads assets to an existing GitHub release.
|
|
4
|
+
* Yields shell commands and returns the list of uploaded asset paths.
|
|
5
|
+
*/
|
|
6
|
+
export function* uploadAssets(tagName, assets, dryRun) {
|
|
7
|
+
if (assets.length === 0) {
|
|
8
|
+
return [];
|
|
9
|
+
}
|
|
10
|
+
const uploaded = [];
|
|
11
|
+
for (const asset of assets) {
|
|
12
|
+
if (dryRun) {
|
|
13
|
+
yield sh `echo "[DRY RUN] Would upload asset: ${asset} to ${tagName}"`.must();
|
|
14
|
+
uploaded.push(asset);
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
// Check if asset exists
|
|
18
|
+
const exists = (yield sh `test -f "${asset}" && echo "yes" || echo "no"`.stdout());
|
|
19
|
+
if (exists === '') {
|
|
20
|
+
continue; // Analysis mode
|
|
21
|
+
}
|
|
22
|
+
if (exists.trim() !== 'yes') {
|
|
23
|
+
// Asset doesn't exist, skip with warning
|
|
24
|
+
yield sh `echo "Warning: Asset not found: ${asset}"`.must();
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
// Upload the asset
|
|
28
|
+
const result = yield sh `gh release upload "${tagName}" "${asset}" --clobber`;
|
|
29
|
+
if (result.ok) {
|
|
30
|
+
uploaded.push(asset);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return uploaded;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=upload-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-assets.js","sourceRoot":"","sources":["../../src/steps/upload-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAEhC;;;GAGG;AACH,MAAM,SAAS,CAAC,CAAC,YAAY,CAC3B,OAAe,EACf,MAAgB,EAChB,MAAgB;IAEhB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,EAAE,CAAA,uCAAuC,KAAK,OAAO,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7E,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,wBAAwB;QACxB,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAA,YAAY,KAAK,8BAA8B,CAAC,MAAM,EAAE,CAAW,CAAC;QAE5F,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YAClB,SAAS,CAAC,gBAAgB;QAC5B,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;YAC5B,yCAAyC;YACzC,MAAM,EAAE,CAAA,mCAAmC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3D,SAAS;QACX,CAAC;QAED,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAA,sBAAsB,OAAO,MAAM,KAAK,aAAa,CAAC;QAE7E,IAAK,MAA0B,CAAC,EAAE,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status of a preflight check.
|
|
3
|
+
*/
|
|
4
|
+
export type CheckStatus = 'pass' | 'warn' | 'fail';
|
|
5
|
+
/**
|
|
6
|
+
* Result of a preflight check with guidance for developers.
|
|
7
|
+
*/
|
|
8
|
+
export interface CheckResult {
|
|
9
|
+
/** Name of the check */
|
|
10
|
+
name: string;
|
|
11
|
+
/** Whether the check passed, warned, or failed */
|
|
12
|
+
status: CheckStatus;
|
|
13
|
+
/** Human-readable message describing the result */
|
|
14
|
+
message: string;
|
|
15
|
+
/** Step-by-step instructions to fix the issue (if status is warn or fail) */
|
|
16
|
+
remediation?: string | undefined;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=check-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-result.d.ts","sourceRoot":"","sources":["../../src/types/check-result.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IAEb,kDAAkD;IAClD,MAAM,EAAE,WAAW,CAAC;IAEpB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAEhB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-result.js","sourceRoot":"","sources":["../../src/types/check-result.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|