jsii-release 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -48,6 +48,7 @@ You can also execute individual publishers:
48
48
  * `publib-npm`
49
49
  * `publib-pypi`
50
50
  * `publib-golang`
51
+ * `publib-github`
51
52
 
52
53
  ## Dry Run
53
54
 
@@ -305,6 +306,34 @@ Repository tags will be in the following format:
305
306
  | `GIT_CLONE_DEPTH` | Optional | The git clone depth. Usually only the latest commit is required. Defaults to 1. |
306
307
  | `DRYRUN` | Optional | Deprecated. Use `PUBLIB_DRYRUN` instead. Set to "true" for a dry run. |
307
308
 
309
+ ## GitHub Releases
310
+
311
+ Creates a [GitHub release](https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases) for a tag.
312
+
313
+ If a release for the tag already exists, the command succeeds without touching
314
+ the existing release, so that re-running a (partially failed) release workflow
315
+ is a no-op rather than a failure.
316
+
317
+ **Usage:**
318
+
319
+ ```shell
320
+ npx publib-github
321
+ ```
322
+
323
+ **Options (environment variables):**
324
+
325
+ | Option | Required | Description |
326
+ | ------------------------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
327
+ | `GITHUB_TOKEN` | Required | Token used to authenticate against the GitHub API. Requires `contents: write` permission. |
328
+ | `GITHUB_REPOSITORY` | Required | The repository to release to, in `owner/repo` format. Set automatically in [GitHub Actions workflows](https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables). |
329
+ | `GITHUB_RELEASE_TAG` | Either this or `GITHUB_RELEASE_TAG_FILE` is required | The tag to release (e.g. `v1.2.3`). |
330
+ | `GITHUB_RELEASE_TAG_FILE` | Either this or `GITHUB_RELEASE_TAG` is required | A file containing the tag to release (e.g. `dist/releasetag.txt`). |
331
+ | `GITHUB_CHANGELOG_FILE` | Optional | A markdown file used as the release notes (e.g. `dist/changelog.md`). |
332
+ | `GITHUB_SHA` | Optional | The commit to tag if the tag doesn't exist yet. Ignored if the tag already exists. Defaults to the repository's default branch. Set automatically in GitHub Actions workflows. |
333
+ | `GITHUB_PRERELEASE` | Optional | Set to "true" to mark the release as a prerelease. |
334
+ | `GITHUB_MARK_LATEST` | Optional | `true` to explicitly mark the release as the latest release, `false` to explicitly not mark it as latest. Defaults to GitHub determining the latest release. |
335
+ | `GITHUB_API_URL` | Optional | Base URL of the GitHub API, for GitHub Enterprise instances. Defaults to `https://api.github.com`. Set automatically in GitHub Actions workflows. |
336
+
308
337
  ## Publish to CodeArtifact for testing
309
338
 
310
339
  This package contains the `publib-ca` CLI tool which is intended to use to publish
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('../lib/bin/publib-github.js');
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,133 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ /**
38
+ * Creates a GitHub release, tolerating a release that already exists so that
39
+ * re-running a release is a no-op rather than a failure.
40
+ *
41
+ * Usage: publib-github
42
+ *
43
+ * GITHUB_TOKEN (required): token used to authenticate against the GitHub API
44
+ * GITHUB_RELEASE_TAG (optional): the tag to release; either this or GITHUB_RELEASE_TAG_FILE is required
45
+ * GITHUB_RELEASE_TAG_FILE (optional): a file containing the tag to release
46
+ * GITHUB_CHANGELOG_FILE (optional): a markdown file used as the release notes
47
+ * GITHUB_REPOSITORY (optional): the repository to release to, in `owner/repo` format (defaults to the repository of the "origin" remote in the current directory)
48
+ * GITHUB_SHA (optional): the commit to tag if the tag doesn't exist yet (defaults to the current git HEAD, or the repository's default branch when not in a git repository)
49
+ * GITHUB_PRERELEASE (optional): set to "true" to mark the release as a prerelease
50
+ * GITHUB_MARK_LATEST (optional): "true" to explicitly mark the release as the latest release, "false" to explicitly not mark it as latest (defaults to GitHub determining the latest release)
51
+ * GITHUB_API_URL (optional): base URL of the GitHub API (defaults to "https://api.github.com"; set automatically in GitHub Actions)
52
+ * PUBLIB_DRYRUN (optional): set to "true" to print what would be done without creating a release
53
+ */
54
+ const fs_1 = require("fs");
55
+ const git = __importStar(require("../help/git"));
56
+ const github_1 = require("../targets/github");
57
+ async function main() {
58
+ const repository = optionalEnv('GITHUB_REPOSITORY') ?? git.repositorySlug();
59
+ if (!repository) {
60
+ throw new Error('GITHUB_REPOSITORY is required, could not infer the repository from the "origin" remote');
61
+ }
62
+ const tag = releaseTag();
63
+ const changelogFile = optionalEnv('GITHUB_CHANGELOG_FILE');
64
+ const body = changelogFile ? (0, fs_1.readFileSync)(changelogFile, 'utf-8') : undefined;
65
+ const target = optionalEnv('GITHUB_SHA') ?? git.head();
66
+ const prerelease = (optionalEnv('GITHUB_PRERELEASE') ?? 'false').toLowerCase() === 'true';
67
+ const latest = parseMarkLatest(optionalEnv('GITHUB_MARK_LATEST'));
68
+ const dryRun = (process.env.PUBLIB_DRYRUN ?? process.env.DRYRUN ?? 'false').toLowerCase() === 'true';
69
+ if (dryRun) {
70
+ console.log(`🏜️ Dry run: would create GitHub release ${tag}${prerelease ? ' (prerelease)' : ''} in ${repository}${target ? ` at ${target}` : ''}`);
71
+ console.log('SUCCESS (dry run)');
72
+ return;
73
+ }
74
+ const result = await (0, github_1.createGitHubRelease)({
75
+ tag,
76
+ repository,
77
+ body,
78
+ target,
79
+ prerelease,
80
+ latest,
81
+ token: requireEnv('GITHUB_TOKEN'),
82
+ apiUrl: optionalEnv('GITHUB_API_URL'),
83
+ });
84
+ if (result === 'already_exists') {
85
+ console.log(`SKIPPING: release ${tag} already exists`);
86
+ }
87
+ else {
88
+ console.log(`SUCCESS: created release ${tag}`);
89
+ }
90
+ }
91
+ function releaseTag() {
92
+ const explicitTag = optionalEnv('GITHUB_RELEASE_TAG');
93
+ if (explicitTag) {
94
+ return explicitTag;
95
+ }
96
+ const tagFile = optionalEnv('GITHUB_RELEASE_TAG_FILE');
97
+ if (!tagFile) {
98
+ throw new Error('GITHUB_RELEASE_TAG or GITHUB_RELEASE_TAG_FILE is required');
99
+ }
100
+ const tag = (0, fs_1.readFileSync)(tagFile, 'utf-8').trim();
101
+ if (!tag) {
102
+ throw new Error(`release tag file ${tagFile} is empty`);
103
+ }
104
+ return tag;
105
+ }
106
+ function parseMarkLatest(value) {
107
+ if (value === undefined) {
108
+ return undefined;
109
+ }
110
+ if (value === 'true' || value === 'false') {
111
+ return value === 'true';
112
+ }
113
+ throw new Error(`GITHUB_MARK_LATEST must be "true" or "false", got: "${value}"`);
114
+ }
115
+ /**
116
+ * Returns the value of the environment variable, treating an empty string as
117
+ * not set.
118
+ */
119
+ function optionalEnv(name) {
120
+ return process.env[name] ? process.env[name] : undefined;
121
+ }
122
+ function requireEnv(name) {
123
+ const value = process.env[name];
124
+ if (!value) {
125
+ throw new Error(`${name} is required`);
126
+ }
127
+ return value;
128
+ }
129
+ main().catch((error) => {
130
+ console.error(`ERROR: ${error.message}`);
131
+ process.exit(1);
132
+ });
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGliLWdpdGh1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vcHVibGliLWdpdGh1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILDJCQUFrQztBQUNsQyxpREFBbUM7QUFDbkMsOENBQXdEO0FBRXhELEtBQUssVUFBVSxJQUFJO0lBQ2pCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM1RSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3RkFBd0YsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxVQUFVLEVBQUUsQ0FBQztJQUN6QixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMzRCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUEsaUJBQVksRUFBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM5RSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZELE1BQU0sVUFBVSxHQUFHLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDO0lBQzFGLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUks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QzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN6QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBDcmVhdGVzIGEgR2l0SHViIHJlbGVhc2UsIHRvbGVyYXRpbmcgYSByZWxlYXNlIHRoYXQgYWxyZWFkeSBleGlzdHMgc28gdGhhdFxuICogcmUtcnVubmluZyBhIHJlbGVhc2UgaXMgYSBuby1vcCByYXRoZXIgdGhhbiBhIGZhaWx1cmUuXG4gKlxuICogVXNhZ2U6IHB1YmxpYi1naXRodWJcbiAqXG4gKiBHSVRIVUJfVE9LRU4gKHJlcXVpcmVkKTogdG9rZW4gdXNlZCB0byBhdXRoZW50aWNhdGUgYWdhaW5zdCB0aGUgR2l0SHViIEFQSVxuICogR0lUSFVCX1JFTEVBU0VfVEFHIChvcHRpb25hbCk6IHRoZSB0YWcgdG8gcmVsZWFzZTsgZWl0aGVyIHRoaXMgb3IgR0lUSFVCX1JFTEVBU0VfVEFHX0ZJTEUgaXMgcmVxdWlyZWRcbiAqIEdJVEhVQl9SRUxFQVNFX1RBR19GSUxFIChvcHRpb25hbCk6IGEgZmlsZSBjb250YWluaW5nIHRoZSB0YWcgdG8gcmVsZWFzZVxuICogR0lUSFVCX0NIQU5HRUxPR19GSUxFIChvcHRpb25hbCk6IGEgbWFya2Rvd24gZmlsZSB1c2VkIGFzIHRoZSByZWxlYXNlIG5vdGVzXG4gKiBHSVRIVUJfUkVQT1NJVE9SWSAob3B0aW9uYWwpOiB0aGUgcmVwb3NpdG9yeSB0byByZWxlYXNlIHRvLCBpbiBgb3duZXIvcmVwb2AgZm9ybWF0IChkZWZhdWx0cyB0byB0aGUgcmVwb3NpdG9yeSBvZiB0aGUgXCJvcmlnaW5cIiByZW1vdGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5KVxuICogR0lUSFVCX1NIQSAob3B0aW9uYWwpOiB0aGUgY29tbWl0IHRvIHRhZyBpZiB0aGUgdGFnIGRvZXNuJ3QgZXhpc3QgeWV0IChkZWZhdWx0cyB0byB0aGUgY3VycmVudCBnaXQgSEVBRCwgb3IgdGhlIHJlcG9zaXRvcnkncyBkZWZhdWx0IGJyYW5jaCB3aGVuIG5vdCBpbiBhIGdpdCByZXBvc2l0b3J5KVxuICogR0lUSFVCX1BSRVJFTEVBU0UgKG9wdGlvbmFsKTogc2V0IHRvIFwidHJ1ZVwiIHRvIG1hcmsgdGhlIHJlbGVhc2UgYXMgYSBwcmVyZWxlYXNlXG4gKiBHSVRIVUJfTUFSS19MQVRFU1QgKG9wdGlvbmFsKTogXCJ0cnVlXCIgdG8gZXhwbGljaXRseSBtYXJrIHRoZSByZWxlYXNlIGFzIHRoZSBsYXRlc3QgcmVsZWFzZSwgXCJmYWxzZVwiIHRvIGV4cGxpY2l0bHkgbm90IG1hcmsgaXQgYXMgbGF0ZXN0IChkZWZhdWx0cyB0byBHaXRIdWIgZGV0ZXJtaW5pbmcgdGhlIGxhdGVzdCByZWxlYXNlKVxuICogR0lUSFVCX0FQSV9VUkwgKG9wdGlvbmFsKTogYmFzZSBVUkwgb2YgdGhlIEdpdEh1YiBBUEkgKGRlZmF1bHRzIHRvIFwiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbVwiOyBzZXQgYXV0b21hdGljYWxseSBpbiBHaXRIdWIgQWN0aW9ucylcbiAqIFBVQkxJQl9EUllSVU4gKG9wdGlvbmFsKTogc2V0IHRvIFwidHJ1ZVwiIHRvIHByaW50IHdoYXQgd291bGQgYmUgZG9uZSB3aXRob3V0IGNyZWF0aW5nIGEgcmVsZWFzZVxuICovXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBnaXQgZnJvbSAnLi4vaGVscC9naXQnO1xuaW1wb3J0IHsgY3JlYXRlR2l0SHViUmVsZWFzZSB9IGZyb20gJy4uL3RhcmdldHMvZ2l0aHViJztcblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgcmVwb3NpdG9yeSA9IG9wdGlvbmFsRW52KCdHSVRIVUJfUkVQT1NJVE9SWScpID8/IGdpdC5yZXBvc2l0b3J5U2x1ZygpO1xuICBpZiAoIXJlcG9zaXRvcnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0dJVEhVQl9SRVBPU0lUT1JZIGlzIHJlcXVpcmVkLCBjb3VsZCBub3QgaW5mZXIgdGhlIHJlcG9zaXRvcnkgZnJvbSB0aGUgXCJvcmlnaW5cIiByZW1vdGUnKTtcbiAgfVxuICBjb25zdCB0YWcgPSByZWxlYXNlVGFnKCk7XG4gIGNvbnN0IGNoYW5nZWxvZ0ZpbGUgPSBvcHRpb25hbEVudignR0lUSFVCX0NIQU5HRUxPR19GSUxFJyk7XG4gIGNvbnN0IGJvZHkgPSBjaGFuZ2Vsb2dGaWxlID8gcmVhZEZpbGVTeW5jKGNoYW5nZWxvZ0ZpbGUsICd1dGYtOCcpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0YXJnZXQgPSBvcHRpb25hbEVudignR0lUSFVCX1NIQScpID8/IGdpdC5oZWFkKCk7XG4gIGNvbnN0IHByZXJlbGVhc2UgPSAob3B0aW9uYWxFbnYoJ0dJVEhVQl9QUkVSRUxFQVNFJykgPz8gJ2ZhbHNlJykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICBjb25zdCBsYXRlc3QgPSBwYXJzZU1hcmtMYXRlc3Qob3B0aW9uYWxFbnYoJ0dJVEhVQl9NQVJLX0xBVEVTVCcpKTtcbiAgY29uc3QgZHJ5UnVuID0gKHByb2Nlc3MuZW52LlBVQkxJQl9EUllSVU4gPz8gcHJvY2Vzcy5lbnYuRFJZUlVOID8/ICdmYWxzZScpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcblxuICBpZiAoZHJ5UnVuKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBg8J+PnO+4jyBEcnkgcnVuOiB3b3VsZCBjcmVhdGUgR2l0SHViIHJlbGVhc2UgJHt0YWd9JHtwcmVyZWxlYXNlID8gJyAocHJlcmVsZWFzZSknIDogJyd9IGluICR7cmVwb3NpdG9yeX0ke3RhcmdldCA/IGAgYXQgJHt0YXJnZXR9YCA6ICcnfWAsXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZygnU1VDQ0VTUyAoZHJ5IHJ1biknKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVHaXRIdWJSZWxlYXNlKHtcbiAgICB0YWcsXG4gICAgcmVwb3NpdG9yeSxcbiAgICBib2R5LFxuICAgIHRhcmdldCxcbiAgICBwcmVyZWxlYXNlLFxuICAgIGxhdGVzdCxcbiAgICB0b2tlbjogcmVxdWlyZUVudignR0lUSFVCX1RPS0VOJyksXG4gICAgYXBpVXJsOiBvcHRpb25hbEVudignR0lUSFVCX0FQSV9VUkwnKSxcbiAgfSk7XG5cbiAgaWYgKHJlc3VsdCA9PT0gJ2FscmVhZHlfZXhpc3RzJykge1xuICAgIGNvbnNvbGUubG9nKGBTS0lQUElORzogcmVsZWFzZSAke3RhZ30gYWxyZWFkeSBleGlzdHNgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhgU1VDQ0VTUzogY3JlYXRlZCByZWxlYXNlICR7dGFnfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbGVhc2VUYWcoKTogc3RyaW5nIHtcbiAgY29uc3QgZXhwbGljaXRUYWcgPSBvcHRpb25hbEVudignR0lUSFVCX1JFTEVBU0VfVEFHJyk7XG4gIGlmIChleHBsaWNpdFRhZykge1xuICAgIHJldHVybiBleHBsaWNpdFRhZztcbiAgfVxuICBjb25zdCB0YWdGaWxlID0gb3B0aW9uYWxFbnYoJ0dJVEhVQl9SRUxFQVNFX1RBR19GSUxFJyk7XG4gIGlmICghdGFnRmlsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignR0lUSFVCX1JFTEVBU0VfVEFHIG9yIEdJVEhVQl9SRUxFQVNFX1RBR19GSUxFIGlzIHJlcXVpcmVkJyk7XG4gIH1cbiAgY29uc3QgdGFnID0gcmVhZEZpbGVTeW5jKHRhZ0ZpbGUsICd1dGYtOCcpLnRyaW0oKTtcbiAgaWYgKCF0YWcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlbGVhc2UgdGFnIGZpbGUgJHt0YWdGaWxlfSBpcyBlbXB0eWApO1xuICB9XG4gIHJldHVybiB0YWc7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWFya0xhdGVzdCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAodmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgR0lUSFVCX01BUktfTEFURVNUIG11c3QgYmUgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiLCBnb3Q6IFwiJHt2YWx1ZX1cImApO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdHJlYXRpbmcgYW4gZW1wdHkgc3RyaW5nIGFzXG4gKiBub3Qgc2V0LlxuICovXG5mdW5jdGlvbiBvcHRpb25hbEVudihuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcHJvY2Vzcy5lbnZbbmFtZV0gPyBwcm9jZXNzLmVudltuYW1lXSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZUVudihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB2YWx1ZSA9IHByb2Nlc3MuZW52W25hbWVdO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IGlzIHJlcXVpcmVkYCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tYWluKCkuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICBjb25zb2xlLmVycm9yKGBFUlJPUjogJHtlcnJvci5tZXNzYWdlfWApO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcbiJdfQ==
package/lib/help/git.d.ts CHANGED
@@ -113,3 +113,24 @@ export declare function identify(user: string, address: string): void;
113
113
  * Does the given branch exists on the remote.
114
114
  */
115
115
  export declare function branchExistsOnRemote(repositoryUrl: string, branch: string): boolean;
116
+ /**
117
+ * Returns the `owner/repo` slug of the `origin` remote in the current
118
+ * directory, or undefined if it cannot be determined (e.g. not in a git
119
+ * repository, or no `origin` remote configured).
120
+ */
121
+ export declare function repositorySlug(): string | undefined;
122
+ /**
123
+ * Extracts the `owner/repo` slug from a git remote URL.
124
+ *
125
+ * Supports HTTPS (`https://github.com/owner/repo.git`), SSH
126
+ * (`git@github.com:owner/repo.git`, `ssh://git@github.com/owner/repo.git`)
127
+ * and URLs without a `.git` suffix.
128
+ *
129
+ * @returns the `owner/repo` slug, or undefined if it cannot be determined
130
+ */
131
+ export declare function parseRepositorySlug(url: string): string | undefined;
132
+ /**
133
+ * Returns the commit hash of HEAD in the current directory, or undefined if
134
+ * it cannot be determined (e.g. not in a git repository).
135
+ */
136
+ export declare function head(): string | undefined;
package/lib/help/git.js CHANGED
@@ -49,6 +49,9 @@ exports.username = username;
49
49
  exports.email = email;
50
50
  exports.identify = identify;
51
51
  exports.branchExistsOnRemote = branchExistsOnRemote;
52
+ exports.repositorySlug = repositorySlug;
53
+ exports.parseRepositorySlug = parseRepositorySlug;
54
+ exports.head = head;
52
55
  const shell = __importStar(require("./shell"));
53
56
  /**
54
57
  * Clones a repository from GitHub. Requires a `GITHUB_TOKEN` env variable.
@@ -259,4 +262,55 @@ function identify(user, address) {
259
262
  function branchExistsOnRemote(repositoryUrl, branch) {
260
263
  return shell.check(`git ls-remote --exit-code --heads ${tryDetectRepositoryUrl(repositoryUrl)} ${branch}`, { capture: true });
261
264
  }
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHAvZ2l0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJBLHNCQW1CQztBQXlCRCw4QkFNQztBQVFELDRCQU1DO0FBT0QsOEJBRUM7QUFPRCw4QkFPQztBQU9ELGtCQUVDO0FBT0QsZ0JBU0M7QUFPRCx3QkFFQztBQUtELG9CQUVDO0FBUUQsa0JBVUM7QUFPRCxvQkFFQztBQVFELDRCQWFDO0FBTUQsNEJBU0M7QUFNRCxzQkFTQztBQVFELDRCQUdDO0FBS0Qsb0RBRUM7QUF6UEQsK0NBQWlDO0FBbUJqQzs7Ozs7R0FLRztBQUNILFNBQWdCLEtBQUssQ0FBQyxhQUFxQixFQUFFLFNBQWlCLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxLQUFLLEVBQUUsTUFBTSxLQUFtQixFQUFFO0lBQ3BILE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTdCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2hELEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFcEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcs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LE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsYUFBcUIsRUFBRSxNQUFjO0lBQ3hFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLElBQUksTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNoSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2hlbGwgZnJvbSAnLi9zaGVsbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvbmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJlYWRvbmx5IGRlcHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBicmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSByZXBvc2l0b3J5IGZyb20gR2l0SHViLiBSZXF1aXJlcyBhIGBHSVRIVUJfVE9LRU5gIGVudiB2YXJpYWJsZS5cbiAqXG4gKiBAcGFyYW0gcmVwb3NpdG9yeVVybCB0aGUgcmVwb3NpdG9yeSB0byBjbG9uZS5cbiAqIEBwYXJhbSB0YXJnZXREaXIgdGhlIGNsb25lIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKHJlcG9zaXRvcnlVcmw6IHN0cmluZywgdGFyZ2V0RGlyOiBzdHJpbmcsIHsgZGVwdGggPSAxLCB0YWdzID0gZmFsc2UsIGJyYW5jaCB9OiBDbG9uZU9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBjbWQgPSBbJ2dpdCcsICdjbG9uZSddO1xuXG4gIGlmIChkZXB0aCkge1xuICAgIGNtZC5wdXNoKGAtLWRlcHRoICR7ZGVwdGh9YCk7XG4gIH1cblxuICBpZiAoYnJhbmNoKSB7XG4gICAgY21kLnB1c2goYC0tYnJhbmNoICR7YnJhbmNofWApO1xuICB9XG5cbiAgaWYgKHRhZ3MpIHtcbiAgICBjbWQucHVzaCgnLS10YWdzJyk7XG4gIH1cblxuICBjbWQucHVzaCh0cnlEZXRlY3RSZXBvc2l0b3J5VXJsKHJlcG9zaXRvcnlVcmwpKTtcbiAgY21kLnB1c2godGFyZ2V0RGlyKTtcblxuICBzaGVsbC5ydW4oY21kLmpvaW4oJyAnKSk7XG59XG5cbmZ1bmN0aW9uIHRyeURldGVjdFJlcG9zaXRvcnlVcmwocmVwb3NpdG9yeVVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZ2l0SHViVXNlU3NoID0gZGV0ZWN0U1NIKCk7XG4gIGlmIChnaXRIdWJVc2VTc2gpIHtcbiAgICBjb25zdCBzc2hSZXBvc2l0b3J5VXJsID0gcmVwb3NpdG9yeVVybC5yZXBsYWNlKCcvJywgJzonKTtcbiAgICByZXR1cm4gYGdpdEAke3NzaFJlcG9zaXRvcnlVcmx9LmdpdGA7XG4gIH1cblxuICBjb25zdCBnaXRIdWJUb2tlbiA9IGdldFRva2VuKGRldGVjdEdIRSgpKTtcbiAgaWYgKCFnaXRIdWJUb2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcignR0lUSFVCX1RPS0VOIGVudiB2YXJpYWJsZSBpcyByZXF1aXJlZCB3aGVuIEdJVEhVQl9VU0VfU1NIIGVudiB2YXJpYWJsZSBpcyBub3QgdXNlZCcpO1xuICB9XG4gIHJldHVybiBgaHR0cHM6Ly8ke2dpdEh1YlRva2VufUAke3JlcG9zaXRvcnlVcmx9LmdpdGA7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIGFuIEdIRSBlbnZpcm9ubWVudC5cbiAqXG4gKiBUaGlzIGNoZWNrIGlzIHVzaW5nIEdJVEhVQl9BUElfVVJMIHNldCBpbiBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvdywgYXMgd2VsbCBhcyBjb21tb24gZ2ggY2xpIGVudiB2YXJpYWJsZXMuXG4gKiBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2xlYXJuLWdpdGh1Yi1hY3Rpb25zL3ZhcmlhYmxlcyNkZWZhdWx0LWVudmlyb25tZW50LXZhcmlhYmxlc1xuICogaHR0cHM6Ly9jbGkuZ2l0aHViLmNvbS9tYW51YWwvZ2hfaGVscF9lbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm4gLSBgdHJ1ZWAgaWYgR0hfSE9TVCBvciBHSVRIVUJfQVBJX1VSTCBlbnYgdmFyIGFyZSBkZWZpbmVkIGFuZCBub3QgZXF1YWwgdG8gdGhlIHB1YmxpYyBnaXRodWIgZW5kcG9pbnQsIG90aGVyd2lzZSBgZmFsc2VgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RHSEUoKTogYm9vbGVhbiB7XG4gIGNvbnN0IGdpdGh1YkFwaVVybCA9IHByb2Nlc3MuZW52LkdJVEhVQl9BUElfVVJMO1xuICBjb25zdCBnaEhvc3QgPSBwcm9jZXNzLmVudi5HSF9IT1NUO1xuXG4gIHJldHVybiAoQm9vbGVhbihnaEhvc3QpICYmIGdoSG9zdCEudHJpbSgpLnRvTG93ZXJDYXNlKCkgIT0gJ2dpdGh1Yi5jb20nKVxuICAgIHx8IChCb29sZWFuKGdpdGh1YkFwaVVybCkgJiYgZ2l0aHViQXBpVXJsIS50cmltKCkudG9Mb3dlckNhc2UoKSAhPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbScpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXBwcm9wcmlhdGUgZ2l0aHViIHRva2VuIGZyb20gdGhlIGVudmlyb25tZW50LlxuICpcbiAqIEByZXR1cm4gR0hfRU5URVJQUklTRV9UT0tFTiBvciBHSVRIVUJfRU5URVJQUklTRV9UT0tFTiBvciBHSVRIVUJfVE9LRU4gaWYgaW4gYW4gR0hFIGVudmlyb25tZW50LCBvdGhlcndpc2UgR0lUSFVCX1RPS0VOXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRva2VuKGlzR0hFOiBib29sZWFuKTogKHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICBpZiAoaXNHSEUpIHtcbiAgICBjb25zdCBnaXRodWJFbnRlcnBpc2VUb2tlbiA9IHByb2Nlc3MuZW52LkdIX0VOVEVSUFJJU0VfVE9LRU4gPz8gcHJvY2Vzcy5lbnYuR0lUSFVCX0VOVEVSUFJJU0VfVE9LRU4gPz8gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOO1xuICAgIHJldHVybiBnaXRodWJFbnRlcnBpc2VUb2tlbjtcbiAgfVxuICByZXR1cm4gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBTU0ggc2hvdWxkIGJlIHVzZWQgdG8gY2xvbmUgcmVwby5cbiAqIFRoaXMgY2hlY2tzIHRoZSBwcmVzZW5jZSBhbmQgdmFsdWVzIG9mIHRoZSBHSVRfVVNFX1NTSCBlbnYgdmFyaWFibGUgYW5kIHRoZSBkZXByZWNhdGVkIEdJVEhVQl9VU0VfU1NIIGZvciBsZWdhY3kgcmVhc29uLiBSZXR1cm5zIHRydWUgaWYgZWl0aGVyIG9mIHRoZXNlIGVudiB2YXJzIGFyZSBkZWZpbmVkIGFuZCBub3QgZmFsc3kuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFNTSCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4ocHJvY2Vzcy5lbnYuR0lUX1VTRV9TU0ggPz8gcHJvY2Vzcy5lbnYuR0lUSFVCX1VTRV9TU0gpO1xufVxuXG4vKipcbiAqIFF1ZXJ5IHRoZSBnaXQgaW5kZXggZm9yIGNoYW5nZXMuXG4gKlxuICogQHJldHVybiBUcnVlIGlmIGNoYW5nZXMgZXhpc3QsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZJbmRleCgpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBzaGVsbC5ydW4oJ2dpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQgLS0nKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQWRkIGZpbGVzIHRvIHRoZSBpbmRleC5cbiAqXG4gKiBAcGFyYW0gcCB0aGUgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZChwOiBzdHJpbmcpIHtcbiAgc2hlbGwucnVuKGBnaXQgYWRkICR7cH1gKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleFxuICpcbiAqIEBwYXJhbSBwIHRoZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcm0ocDogc3RyaW5nLCBvcHRpb25zOiB7IHJlY3Vyc2l2ZT86IGJvb2xlYW4gfSA9IHt9KSB7XG4gIGNvbnN0IGNtZCA9IFsnZ2l0JywgJ3JtJ107XG4gIGlmIChvcHRpb25zLnJlY3Vyc2l2ZSkge1xuICAgIGNtZC5wdXNoKCctcicpO1xuICB9XG5cbiAgY21kLnB1c2gocCk7XG5cbiAgc2hlbGwucnVuKGNtZC5qb2luKCcgJykpO1xufVxuXG4vKipcbiAqIENvbW1pdC5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSB0aGUgY29tbWl0IG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21taXQobWVzc2FnZTogc3RyaW5nKSB7XG4gIHNoZWxsLnJ1bihgZ2l0IGNvbW1pdCAtbSBcIiR7bWVzc2FnZX1cImApO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYSByZXBvc2l0b3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgc2hlbGwucnVuKCdnaXQgaW5pdCcpO1xufVxuXG4vKipcbiAqIENlcmF0ZSBhIHRhZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSB0YWcgbmFtZS5cbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRhZyB3YXMgY3JlYXRlZCwgZmFsc2UgaWYgaXQgYWxyZWFkeSBleGlzdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWcobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgc2hlbGwucnVuKGBnaXQgdGFnIC1hICR7bmFtZX0gLW0gJHtuYW1lfWAsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn1cblxuLyoqXG4gKiBQdXNoIGEgcmVmIHRvIG9yaWdpbi5cbiAqXG4gKiBAcGFyYW0gcmVmIHRoZSByZWZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1c2gocmVmOiBzdHJpbmcpIHtcbiAgc2hlbGwucnVuKGBnaXQgcHVzaCBvcmlnaW4gJHtyZWZ9YCk7XG59XG5cbi8qKlxuICogQ2hlY2tvdXQgdG8gYSBuZXcgYnJhbmNoLiBDcmVhdGVzIGEgbmV3IG9uZSBpZiBgb3B0aW9ucy5jcmVhdGVJZk1pc3NpbmdgIGlzIFRydWUgYW5kIHRoZSBicmFuY2ggZG9lc24ndCBleGlzdC5cbiAqXG4gKiBAcGFyYW0gYnJhbmNoIHRoZSBicmFuY2guXG4gKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tvdXQoYnJhbmNoOiBzdHJpbmcsIG9wdGlvbnM6IHsgY3JlYXRlSWZNaXNzaW5nPzogYm9vbGVhbiB9ICkge1xuICBpZiAob3B0aW9ucy5jcmVhdGVJZk1pc3NpbmcpIHtcbiAgICB0cnkge1xuICAgICAgc2hlbGwucnVuKGBnaXQgc2hvdy1icmFuY2ggb3JpZ2luLyR7YnJhbmNofWAsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUubWVzc2FnZS5pbmNsdWRlcygnZmF0YWw6IGJhZCBzaGExIHJlZmVyZW5jZScpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdGUgYnJhbmNoIG5vdCBmb3VuZCwgY3JlYXRpbmcgbmV3IGJyYW5jaC4nKTtcbiAgICAgICAgc2hlbGwucnVuKGBnaXQgY2hlY2tvdXQgLUIgJHticmFuY2h9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc2hlbGwucnVuKGBnaXQgY2hlY2tvdXQgJHticmFuY2h9YCk7XG59XG5cbi8qKlxuICogRmV0Y2ggdGhlIGNvbmZpZ3VyZWQgZ2l0IHVzZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LlxuICogUmV0dXJucyB1bmRlZmluZWQgaWYgbm90IGNvbmZpZ3VyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VybmFtZSgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc2hlbGwucnVuKCdnaXQgY29uZmlnIHVzZXIubmFtZScsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oZXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRmV0Y2ggdGhlIGNvbmZpZ3VyZWQgZ2l0IHVzZXIgZW1haWwgZm9yIHRoZSBjdXJyZW50IGRpcmVjdG9yeS5cbiAqIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vdCBjb25maWd1cmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1haWwoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHNoZWxsLnJ1bignZ2l0IGNvbmZpZyB1c2VyLmVtYWlsJywgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihlcnIubWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBJZGVudGlmeSB0aGUgY29tbWl0dGVyIHdpdGggYSB1c2VybmFtZSBhbmQgZW1haWwuXG4gKlxuICogQHBhcmFtIHVzZXIgdGhlIHVzZXJuYW1lLlxuICogQHBhcmFtIGVtYWlsIHRoZSBlbWFpbCBhZGRyZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZnkodXNlcjogc3RyaW5nLCBhZGRyZXNzOiBzdHJpbmcpIHtcbiAgc2hlbGwucnVuKGBnaXQgY29uZmlnIHVzZXIubmFtZSBcIiR7dXNlcn1cImApO1xuICBzaGVsbC5ydW4oYGdpdCBjb25maWcgdXNlci5lbWFpbCBcIiR7YWRkcmVzc31cImApO1xufVxuXG4vKipcbiAqIERvZXMgdGhlIGdpdmVuIGJyYW5jaCBleGlzdHMgb24gdGhlIHJlbW90ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyYW5jaEV4aXN0c09uUmVtb3RlKHJlcG9zaXRvcnlVcmw6IHN0cmluZywgYnJhbmNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNoZWxsLmNoZWNrKGBnaXQgbHMtcmVtb3RlIC0tZXhpdC1jb2RlIC0taGVhZHMgJHt0cnlEZXRlY3RSZXBvc2l0b3J5VXJsKHJlcG9zaXRvcnlVcmwpfSAke2JyYW5jaH1gLCB7IGNhcHR1cmU6IHRydWUgfSk7XG59XG4iXX0=
265
+ /**
266
+ * Returns the `owner/repo` slug of the `origin` remote in the current
267
+ * directory, or undefined if it cannot be determined (e.g. not in a git
268
+ * repository, or no `origin` remote configured).
269
+ */
270
+ function repositorySlug() {
271
+ try {
272
+ const url = shell.run('git remote get-url origin', { capture: true });
273
+ return parseRepositorySlug(url);
274
+ }
275
+ catch {
276
+ return undefined;
277
+ }
278
+ }
279
+ /**
280
+ * Extracts the `owner/repo` slug from a git remote URL.
281
+ *
282
+ * Supports HTTPS (`https://github.com/owner/repo.git`), SSH
283
+ * (`git@github.com:owner/repo.git`, `ssh://git@github.com/owner/repo.git`)
284
+ * and URLs without a `.git` suffix.
285
+ *
286
+ * @returns the `owner/repo` slug, or undefined if it cannot be determined
287
+ */
288
+ function parseRepositorySlug(url) {
289
+ const path = url
290
+ .trim()
291
+ .replace(/\.git$/, '')
292
+ // drop the scheme (https://, ssh://, git+ssh://, ...)
293
+ .replace(/^[a-z+]+:\/\//, '')
294
+ // normalize scp-like ssh syntax (git@host:owner/repo) to a path
295
+ .replace(/^git@[^:/]+[:/]/, '')
296
+ // strip a leading host segment (github.com/owner/repo)
297
+ .replace(/^[^/]+\.[^/]+\//, '');
298
+ const parts = path.split('/').filter(Boolean);
299
+ if (parts.length !== 2) {
300
+ return undefined;
301
+ }
302
+ return parts.join('/');
303
+ }
304
+ /**
305
+ * Returns the commit hash of HEAD in the current directory, or undefined if
306
+ * it cannot be determined (e.g. not in a git repository).
307
+ */
308
+ function head() {
309
+ try {
310
+ return shell.run('git rev-parse HEAD', { capture: true });
311
+ }
312
+ catch {
313
+ return undefined;
314
+ }
315
+ }
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHAvZ2l0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJBLHNCQW1CQztBQXlCRCw4QkFNQztBQVFELDRCQU1DO0FBT0QsOEJBRUM7QUFPRCw4QkFPQztBQU9ELGtCQUVDO0FBT0QsZ0JBU0M7QUFPRCx3QkFFQztBQUtELG9CQUVDO0FBUUQsa0JBVUM7QUFPRCxvQkFFQztBQVFELDRCQWFDO0FBTUQsNEJBU0M7QUFNRCxzQkFTQztBQVFELDRCQUdDO0FBS0Qsb0RBRUM7QUFPRCx3Q0FPQztBQVdELGtEQWVDO0FBTUQsb0JBTUM7QUE3U0QsK0NBQWlDO0FBbUJqQzs7Ozs7R0FLRztBQUNILFNBQWdCLEtBQUssQ0FBQyxhQUFxQixFQUFFLFNBQWlCLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxLQUFLLEVBQUUsTUFBTSxLQUFtQixFQUFFO0lBQ3BILE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTdCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2hELEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFcEIsS0FBSyxDQUFDLEdB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QUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsSUFBSTtJQUNsQixJQUFJLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzaGVsbCBmcm9tICcuL3NoZWxsJztcblxuZXhwb3J0IGludGVyZmFjZSBDbG9uZU9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IGJyYW5jaFxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENsb25lcyBhIHJlcG9zaXRvcnkgZnJvbSBHaXRIdWIuIFJlcXVpcmVzIGEgYEdJVEhVQl9UT0tFTmAgZW52IHZhcmlhYmxlLlxuICpcbiAqIEBwYXJhbSByZXBvc2l0b3J5VXJsIHRoZSByZXBvc2l0b3J5IHRvIGNsb25lLlxuICogQHBhcmFtIHRhcmdldERpciB0aGUgY2xvbmUgZGlyZWN0b3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUocmVwb3NpdG9yeVVybDogc3RyaW5nLCB0YXJnZXREaXI6IHN0cmluZywgeyBkZXB0aCA9IDEsIHRhZ3MgPSBmYWxzZSwgYnJhbmNoIH06IENsb25lT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGNtZCA9IFsnZ2l0JywgJ2Nsb25lJ107XG5cbiAgaWYgKGRlcHRoKSB7XG4gICAgY21kLnB1c2goYC0tZGVwdGggJHtkZXB0aH1gKTtcbiAgfVxuXG4gIGlmIChicmFuY2gpIHtcbiAgICBjbWQucHVzaChgLS1icmFuY2ggJHticmFuY2h9YCk7XG4gIH1cblxuICBpZiAodGFncykge1xuICAgIGNtZC5wdXNoKCctLXRhZ3MnKTtcbiAgfVxuXG4gIGNtZC5wdXNoKHRyeURldGVjdFJlcG9zaXRvcnlVcmwocmVwb3NpdG9yeVVybCkpO1xuICBjbWQucHVzaCh0YXJnZXREaXIpO1xuXG4gIHNoZWxsLnJ1bihjbWQuam9pbignICcpKTtcbn1cblxuZnVuY3Rpb24gdHJ5RGV0ZWN0UmVwb3NpdG9yeVVybChyZXBvc2l0b3J5VXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBnaXRIdWJVc2VTc2ggPSBkZXRlY3RTU0goKTtcbiAgaWYgKGdpdEh1YlVzZVNzaCkge1xuICAgIGNvbnN0IHNzaFJlcG9zaXRvcnlVcmwgPSByZXBvc2l0b3J5VXJsLnJlcGxhY2UoJy8nLCAnOicpO1xuICAgIHJldHVybiBgZ2l0QCR7c3NoUmVwb3NpdG9yeVVybH0uZ2l0YDtcbiAgfVxuXG4gIGNvbnN0IGdpdEh1YlRva2VuID0gZ2V0VG9rZW4oZGV0ZWN0R0hFKCkpO1xuICBpZiAoIWdpdEh1YlRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdHSVRIVUJfVE9LRU4gZW52IHZhcmlhYmxlIGlzIHJlcXVpcmVkIHdoZW4gR0lUSFVCX1VTRV9TU0ggZW52IHZhcmlhYmxlIGlzIG5vdCB1c2VkJyk7XG4gIH1cbiAgcmV0dXJuIGBodHRwczovLyR7Z2l0SHViVG9rZW59QCR7cmVwb3NpdG9yeVVybH0uZ2l0YDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYW4gR0hFIGVudmlyb25tZW50LlxuICpcbiAqIFRoaXMgY2hlY2sgaXMgdXNpbmcgR0lUSFVCX0FQSV9VUkwgc2V0IGluIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93LCBhcyB3ZWxsIGFzIGNvbW1vbiBnaCBjbGkgZW52IHZhcmlhYmxlcy5cbiAqIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvbGVhcm4tZ2l0aHViLWFjdGlvbnMvdmFyaWFibGVzI2RlZmF1bHQtZW52aXJvbm1lbnQtdmFyaWFibGVzXG4gKiBodHRwczovL2NsaS5naXRodWIuY29tL21hbnVhbC9naF9oZWxwX2Vudmlyb25tZW50XG4gKlxuICogQHJldHVybiAtIGB0cnVlYCBpZiBHSF9IT1NUIG9yIEdJVEhVQl9BUElfVVJMIGVudiB2YXIgYXJlIGRlZmluZWQgYW5kIG5vdCBlcXVhbCB0byB0aGUgcHVibGljIGdpdGh1YiBlbmRwb2ludCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEdIRSgpOiBib29sZWFuIHtcbiAgY29uc3QgZ2l0aHViQXBpVXJsID0gcHJvY2Vzcy5lbnYuR0lUSFVCX0FQSV9VUkw7XG4gIGNvbnN0IGdoSG9zdCA9IHByb2Nlc3MuZW52LkdIX0hPU1Q7XG5cbiAgcmV0dXJuIChCb29sZWFuKGdoSG9zdCkgJiYgZ2hIb3N0IS50cmltKCkudG9Mb3dlckNhc2UoKSAhPSAnZ2l0aHViLmNvbScpXG4gICAgfHwgKEJvb2xlYW4oZ2l0aHViQXBpVXJsKSAmJiBnaXRodWJBcGlVcmwhLnRyaW0oKS50b0xvd2VyQ2FzZSgpICE9ICdodHRwczovL2FwaS5naXRodWIuY29tJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcHByb3ByaWF0ZSBnaXRodWIgdG9rZW4gZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gKlxuICogQHJldHVybiBHSF9FTlRFUlBSSVNFX1RPS0VOIG9yIEdJVEhVQl9FTlRFUlBSSVNFX1RPS0VOIG9yIEdJVEhVQl9UT0tFTiBpZiBpbiBhbiBHSEUgZW52aXJvbm1lbnQsIG90aGVyd2lzZSBHSVRIVUJfVE9LRU5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9rZW4oaXNHSEU6IGJvb2xlYW4pOiAoc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIGlmIChpc0dIRSkge1xuICAgIGNvbnN0IGdpdGh1YkVudGVycGlzZVRva2VuID0gcHJvY2Vzcy5lbnYuR0hfRU5URVJQUklTRV9UT0tFTiA/PyBwcm9jZXNzLmVudi5HSVRIVUJfRU5URVJQUklTRV9UT0tFTiA/PyBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG4gICAgcmV0dXJuIGdpdGh1YkVudGVycGlzZVRva2VuO1xuICB9XG4gIHJldHVybiBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIFNTSCBzaG91bGQgYmUgdXNlZCB0byBjbG9uZSByZXBvLlxuICogVGhpcyBjaGVja3MgdGhlIHByZXNlbmNlIGFuZCB2YWx1ZXMgb2YgdGhlIEdJVF9VU0VfU1NIIGVudiB2YXJpYWJsZSBhbmQgdGhlIGRlcHJlY2F0ZWQgR0lUSFVCX1VTRV9TU0ggZm9yIGxlZ2FjeSByZWFzb24uIFJldHVybnMgdHJ1ZSBpZiBlaXRoZXIgb2YgdGhlc2UgZW52IHZhcnMgYXJlIGRlZmluZWQgYW5kIG5vdCBmYWxzeS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0U1NIKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihwcm9jZXNzLmVudi5HSVRfVVNFX1NTSCA/PyBwcm9jZXNzLmVudi5HSVRIVUJfVVNFX1NTSCk7XG59XG5cbi8qKlxuICogUXVlcnkgdGhlIGdpdCBpbmRleCBmb3IgY2hhbmdlcy5cbiAqXG4gKiBAcmV0dXJuIFRydWUgaWYgY2hhbmdlcyBleGlzdCwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZkluZGV4KCk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHNoZWxsLnJ1bignZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRCAtLScpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgZmlsZXMgdG8gdGhlIGluZGV4LlxuICpcbiAqIEBwYXJhbSBwIHRoZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkKHA6IHN0cmluZykge1xuICBzaGVsbC5ydW4oYGdpdCBhZGQgJHtwfWApO1xufVxuXG4vKipcbiAqIFJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4XG4gKlxuICogQHBhcmFtIHAgdGhlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBybShwOiBzdHJpbmcsIG9wdGlvbnM6IHsgcmVjdXJzaXZlPzogYm9vbGVhbiB9ID0ge30pIHtcbiAgY29uc3QgY21kID0gWydnaXQnLCAncm0nXTtcbiAgaWYgKG9wdGlvbnMucmVjdXJzaXZlKSB7XG4gICAgY21kLnB1c2goJy1yJyk7XG4gIH1cblxuICBjbWQucHVzaChwKTtcblxuICBzaGVsbC5ydW4oY21kLmpvaW4oJyAnKSk7XG59XG5cbi8qKlxuICogQ29tbWl0LlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIHRoZSBjb21taXQgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1pdChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgc2hlbGwucnVuKGBnaXQgY29tbWl0IC1tIFwiJHttZXNzYWdlfVwiYCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIHJlcG9zaXRvcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICBzaGVsbC5ydW4oJ2dpdCBpbml0Jyk7XG59XG5cbi8qKlxuICogQ2VyYXRlIGEgdGFnLlxuICpcbiAqIEBwYXJhbSBuYW1lIHRhZyBuYW1lLlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdGFnIHdhcyBjcmVhdGVkLCBmYWxzZSBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhZyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBzaGVsbC5ydW4oYGdpdCB0YWcgLWEgJHtuYW1lfSAtbSAke25hbWV9YCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIFB1c2ggYSByZWYgdG8gb3JpZ2luLlxuICpcbiAqIEBwYXJhbSByZWYgdGhlIHJlZlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVzaChyZWY6IHN0cmluZykge1xuICBzaGVsbC5ydW4oYGdpdCBwdXNoIG9yaWdpbiAke3JlZn1gKTtcbn1cblxuLyoqXG4gKiBDaGVja291dCB0byBhIG5ldyBicmFuY2guIENyZWF0ZXMgYSBuZXcgb25lIGlmIGBvcHRpb25zLmNyZWF0ZUlmTWlzc2luZ2AgaXMgVHJ1ZSBhbmQgdGhlIGJyYW5jaCBkb2Vzbid0IGV4aXN0LlxuICpcbiAqIEBwYXJhbSBicmFuY2ggdGhlIGJyYW5jaC5cbiAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja291dChicmFuY2g6IHN0cmluZywgb3B0aW9uczogeyBjcmVhdGVJZk1pc3Npbmc/OiBib29sZWFuIH0gKSB7XG4gIGlmIChvcHRpb25zLmNyZWF0ZUlmTWlzc2luZykge1xuICAgIHRyeSB7XG4gICAgICBzaGVsbC5ydW4oYGdpdCBzaG93LWJyYW5jaCBvcmlnaW4vJHticmFuY2h9YCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdmYXRhbDogYmFkIHNoYTEgcmVmZXJlbmNlJykpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1JlbW90ZSBicmFuY2ggbm90IGZvdW5kLCBjcmVhdGluZyBuZXcgYnJhbmNoLicpO1xuICAgICAgICBzaGVsbC5ydW4oYGdpdCBjaGVja291dCAtQiAke2JyYW5jaH1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzaGVsbC5ydW4oYGdpdCBjaGVja291dCAke2JyYW5jaH1gKTtcbn1cblxuLyoqXG4gKiBGZXRjaCB0aGUgY29uZmlndXJlZCBnaXQgdXNlciBuYW1lIGZvciB0aGUgY3VycmVudCBkaXJlY3RvcnkuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub3QgY29uZmlndXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJuYW1lKCkge1xuICB0cnkge1xuICAgIHJldHVybiBzaGVsbC5ydW4oJ2dpdCBjb25maWcgdXNlci5uYW1lJywgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihlcnIubWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaCB0aGUgY29uZmlndXJlZCBnaXQgdXNlciBlbWFpbCBmb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LlxuICogUmV0dXJucyB1bmRlZmluZWQgaWYgbm90IGNvbmZpZ3VyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWFpbCgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc2hlbGwucnVuKCdnaXQgY29uZmlnIHVzZXIuZW1haWwnLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKGVyci5tZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIElkZW50aWZ5IHRoZSBjb21taXR0ZXIgd2l0aCBhIHVzZXJuYW1lIGFuZCBlbWFpbC5cbiAqXG4gKiBAcGFyYW0gdXNlciB0aGUgdXNlcm5hbWUuXG4gKiBAcGFyYW0gZW1haWwgdGhlIGVtYWlsIGFkZHJlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmeSh1c2VyOiBzdHJpbmcsIGFkZHJlc3M6IHN0cmluZykge1xuICBzaGVsbC5ydW4oYGdpdCBjb25maWcgdXNlci5uYW1lIFwiJHt1c2VyfVwiYCk7XG4gIHNoZWxsLnJ1bihgZ2l0IGNvbmZpZyB1c2VyLmVtYWlsIFwiJHthZGRyZXNzfVwiYCk7XG59XG5cbi8qKlxuICogRG9lcyB0aGUgZ2l2ZW4gYnJhbmNoIGV4aXN0cyBvbiB0aGUgcmVtb3RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJhbmNoRXhpc3RzT25SZW1vdGUocmVwb3NpdG9yeVVybDogc3RyaW5nLCBicmFuY2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2hlbGwuY2hlY2soYGdpdCBscy1yZW1vdGUgLS1leGl0LWNvZGUgLS1oZWFkcyAke3RyeURldGVjdFJlcG9zaXRvcnlVcmwocmVwb3NpdG9yeVVybCl9ICR7YnJhbmNofWAsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBgb3duZXIvcmVwb2Agc2x1ZyBvZiB0aGUgYG9yaWdpbmAgcmVtb3RlIGluIHRoZSBjdXJyZW50XG4gKiBkaXJlY3RvcnksIG9yIHVuZGVmaW5lZCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAoZS5nLiBub3QgaW4gYSBnaXRcbiAqIHJlcG9zaXRvcnksIG9yIG5vIGBvcmlnaW5gIHJlbW90ZSBjb25maWd1cmVkKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9zaXRvcnlTbHVnKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gc2hlbGwucnVuKCdnaXQgcmVtb3RlIGdldC11cmwgb3JpZ2luJywgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIHJldHVybiBwYXJzZVJlcG9zaXRvcnlTbHVnKHVybCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYG93bmVyL3JlcG9gIHNsdWcgZnJvbSBhIGdpdCByZW1vdGUgVVJMLlxuICpcbiAqIFN1cHBvcnRzIEhUVFBTIChgaHR0cHM6Ly9naXRodWIuY29tL293bmVyL3JlcG8uZ2l0YCksIFNTSFxuICogKGBnaXRAZ2l0aHViLmNvbTpvd25lci9yZXBvLmdpdGAsIGBzc2g6Ly9naXRAZ2l0aHViLmNvbS9vd25lci9yZXBvLmdpdGApXG4gKiBhbmQgVVJMcyB3aXRob3V0IGEgYC5naXRgIHN1ZmZpeC5cbiAqXG4gKiBAcmV0dXJucyB0aGUgYG93bmVyL3JlcG9gIHNsdWcsIG9yIHVuZGVmaW5lZCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXBvc2l0b3J5U2x1Zyh1cmw6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhdGggPSB1cmxcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UoL1xcLmdpdCQvLCAnJylcbiAgICAvLyBkcm9wIHRoZSBzY2hlbWUgKGh0dHBzOi8vLCBzc2g6Ly8sIGdpdCtzc2g6Ly8sIC4uLilcbiAgICAucmVwbGFjZSgvXlthLXorXSs6XFwvXFwvLywgJycpXG4gICAgLy8gbm9ybWFsaXplIHNjcC1saWtlIHNzaCBzeW50YXggKGdpdEBob3N0Om93bmVyL3JlcG8pIHRvIGEgcGF0aFxuICAgIC5yZXBsYWNlKC9eZ2l0QFteOi9dK1s6L10vLCAnJylcbiAgICAvLyBzdHJpcCBhIGxlYWRpbmcgaG9zdCBzZWdtZW50IChnaXRodWIuY29tL293bmVyL3JlcG8pXG4gICAgLnJlcGxhY2UoL15bXi9dK1xcLlteL10rXFwvLywgJycpO1xuICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKCcvJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29tbWl0IGhhc2ggb2YgSEVBRCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIG9yIHVuZGVmaW5lZCBpZlxuICogaXQgY2Fubm90IGJlIGRldGVybWluZWQgKGUuZy4gbm90IGluIGEgZ2l0IHJlcG9zaXRvcnkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGVhZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBzaGVsbC5ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Creates GitHub releases via the GitHub REST API, tolerating a release that
3
+ * already exists so that re-running a release is a no-op rather than a
4
+ * failure.
5
+ */
6
+ /**
7
+ * Options for creating a GitHub release.
8
+ */
9
+ export interface GitHubReleaseOptions {
10
+ /**
11
+ * The tag name of the release (e.g. `v1.2.3`).
12
+ */
13
+ readonly tag: string;
14
+ /**
15
+ * The repository to release to, in `owner/repo` format.
16
+ */
17
+ readonly repository: string;
18
+ /**
19
+ * The token used to authenticate against the GitHub API.
20
+ */
21
+ readonly token: string;
22
+ /**
23
+ * Markdown body of the release (release notes).
24
+ *
25
+ * @default - no release notes
26
+ */
27
+ readonly body?: string;
28
+ /**
29
+ * The commitish the release tag will point to, if the tag does not exist
30
+ * yet. Ignored by GitHub when the tag already exists.
31
+ *
32
+ * @default - the repository's default branch
33
+ */
34
+ readonly target?: string;
35
+ /**
36
+ * Mark the release as a prerelease.
37
+ *
38
+ * @default false
39
+ */
40
+ readonly prerelease?: boolean;
41
+ /**
42
+ * Whether this release should be explicitly marked as the latest release
43
+ * (`true`) or explicitly not marked as the latest release (`false`).
44
+ *
45
+ * Passed to the GitHub API as `make_latest`.
46
+ *
47
+ * @default - not sent; GitHub determines the latest release
48
+ */
49
+ readonly latest?: boolean;
50
+ /**
51
+ * Base URL of the GitHub API.
52
+ *
53
+ * @default 'https://api.github.com'
54
+ */
55
+ readonly apiUrl?: string;
56
+ }
57
+ /**
58
+ * The outcome of `createGitHubRelease`.
59
+ */
60
+ export type GitHubReleaseResult = 'created' | 'already_exists';
61
+ /**
62
+ * Creates a GitHub release.
63
+ *
64
+ * Returns `'already_exists'` instead of failing when a release for the tag
65
+ * already exists, so that a re-run of a (partially failed) release workflow is
66
+ * a no-op rather than a failure. The existing release is left untouched. Any
67
+ * other error is thrown.
68
+ */
69
+ export declare function createGitHubRelease(options: GitHubReleaseOptions): Promise<GitHubReleaseResult>;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * Creates GitHub releases via the GitHub REST API, tolerating a release that
4
+ * already exists so that re-running a release is a no-op rather than a
5
+ * failure.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.createGitHubRelease = createGitHubRelease;
9
+ /**
10
+ * Creates a GitHub release.
11
+ *
12
+ * Returns `'already_exists'` instead of failing when a release for the tag
13
+ * already exists, so that a re-run of a (partially failed) release workflow is
14
+ * a no-op rather than a failure. The existing release is left untouched. Any
15
+ * other error is thrown.
16
+ */
17
+ async function createGitHubRelease(options) {
18
+ const apiUrl = (options.apiUrl ?? 'https://api.github.com').replace(/\/+$/, '');
19
+ const response = await fetch(`${apiUrl}/repos/${options.repository}/releases`, {
20
+ method: 'POST',
21
+ headers: {
22
+ 'Accept': 'application/vnd.github+json',
23
+ 'Authorization': `Bearer ${options.token}`,
24
+ 'Content-Type': 'application/json',
25
+ 'X-GitHub-Api-Version': '2022-11-28',
26
+ },
27
+ body: JSON.stringify({
28
+ tag_name: options.tag,
29
+ name: options.tag,
30
+ body: options.body ?? '',
31
+ prerelease: options.prerelease ?? false,
32
+ ...(options.target ? { target_commitish: options.target } : {}),
33
+ ...(options.latest !== undefined ? { make_latest: String(options.latest) } : {}),
34
+ }),
35
+ });
36
+ if (response.ok) {
37
+ return 'created';
38
+ }
39
+ const body = await response.text();
40
+ if (response.status === 422 && releaseAlreadyExists(body)) {
41
+ return 'already_exists';
42
+ }
43
+ throw new Error(`GitHub release creation failed: HTTP ${response.status} ${response.statusText}: ${body}`);
44
+ }
45
+ /**
46
+ * Whether a 422 response body indicates that a release for the tag already
47
+ * exists.
48
+ *
49
+ * The API reports this as
50
+ * `{ errors: [{ resource: 'Release', code: 'already_exists', field: 'tag_name' }] }`.
51
+ */
52
+ function releaseAlreadyExists(responseBody) {
53
+ try {
54
+ const parsed = JSON.parse(responseBody);
55
+ const errors = Array.isArray(parsed?.errors) ? parsed.errors : [];
56
+ return errors.some((e) => e?.resource === 'Release' && e?.code === 'already_exists');
57
+ }
58
+ catch {
59
+ return false;
60
+ }
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RhcmdldHMvZ2l0aHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOztBQTBFSCxrREErQkM7QUF2Q0Q7Ozs7Ozs7R0FPRztBQUNJLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxPQUE2QjtJQUNyRSxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWhGLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsTUFBTSxVQUFVLE9BQU8sQ0FBQyxVQUFVLFdBQVcsRUFBRTtRQUM3RSxNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRTtZQUNQLFFBQVEsRUFBRSw2QkFBNkI7WUFDdkMsZUFBZSxFQUFFLFVBQVUsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUMxQyxjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLHNCQUFzQixFQUFFLFlBQVk7U0FDckM7UUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNuQixRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDckIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHO1lBQ2pCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDeEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksS0FBSztZQUN2QyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ2pGLENBQUM7S0FDSCxDQUFDLENBQUM7SUFFSCxJQUFJLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzFELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdHLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG9CQUFvQixDQUFDLFlBQW9CO0lBQ2hELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQVUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6RSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEtBQUssU0FBUyxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlYXRlcyBHaXRIdWIgcmVsZWFzZXMgdmlhIHRoZSBHaXRIdWIgUkVTVCBBUEksIHRvbGVyYXRpbmcgYSByZWxlYXNlIHRoYXRcbiAqIGFscmVhZHkgZXhpc3RzIHNvIHRoYXQgcmUtcnVubmluZyBhIHJlbGVhc2UgaXMgYSBuby1vcCByYXRoZXIgdGhhbiBhXG4gKiBmYWlsdXJlLlxuICovXG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBHaXRIdWIgcmVsZWFzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRIdWJSZWxlYXNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdGFnIG5hbWUgb2YgdGhlIHJlbGVhc2UgKGUuZy4gYHYxLjIuM2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFnOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IHRvIHJlbGVhc2UgdG8sIGluIGBvd25lci9yZXBvYCBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSByZXBvc2l0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0b2tlbiB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpbnN0IHRoZSBHaXRIdWIgQVBJLlxuICAgKi9cbiAgcmVhZG9ubHkgdG9rZW46IHN0cmluZztcblxuICAvKipcbiAgICogTWFya2Rvd24gYm9keSBvZiB0aGUgcmVsZWFzZSAocmVsZWFzZSBub3RlcykuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcmVsZWFzZSBub3Rlc1xuICAgKi9cbiAgcmVhZG9ubHkgYm9keT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbW1pdGlzaCB0aGUgcmVsZWFzZSB0YWcgd2lsbCBwb2ludCB0bywgaWYgdGhlIHRhZyBkb2VzIG5vdCBleGlzdFxuICAgKiB5ZXQuIElnbm9yZWQgYnkgR2l0SHViIHdoZW4gdGhlIHRhZyBhbHJlYWR5IGV4aXN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgcmVwb3NpdG9yeSdzIGRlZmF1bHQgYnJhbmNoXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhlIHJlbGVhc2UgYXMgYSBwcmVyZWxlYXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlcmVsZWFzZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByZWxlYXNlIHNob3VsZCBiZSBleHBsaWNpdGx5IG1hcmtlZCBhcyB0aGUgbGF0ZXN0IHJlbGVhc2VcbiAgICogKGB0cnVlYCkgb3IgZXhwbGljaXRseSBub3QgbWFya2VkIGFzIHRoZSBsYXRlc3QgcmVsZWFzZSAoYGZhbHNlYCkuXG4gICAqXG4gICAqIFBhc3NlZCB0byB0aGUgR2l0SHViIEFQSSBhcyBgbWFrZV9sYXRlc3RgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdCBzZW50OyBHaXRIdWIgZGV0ZXJtaW5lcyB0aGUgbGF0ZXN0IHJlbGVhc2VcbiAgICovXG4gIHJlYWRvbmx5IGxhdGVzdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJhc2UgVVJMIG9mIHRoZSBHaXRIdWIgQVBJLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSdcbiAgICovXG4gIHJlYWRvbmx5IGFwaVVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgb3V0Y29tZSBvZiBgY3JlYXRlR2l0SHViUmVsZWFzZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEdpdEh1YlJlbGVhc2VSZXN1bHQgPSAnY3JlYXRlZCcgfCAnYWxyZWFkeV9leGlzdHMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBHaXRIdWIgcmVsZWFzZS5cbiAqXG4gKiBSZXR1cm5zIGAnYWxyZWFkeV9leGlzdHMnYCBpbnN0ZWFkIG9mIGZhaWxpbmcgd2hlbiBhIHJlbGVhc2UgZm9yIHRoZSB0YWdcbiAqIGFscmVhZHkgZXhpc3RzLCBzbyB0aGF0IGEgcmUtcnVuIG9mIGEgKHBhcnRpYWxseSBmYWlsZWQpIHJlbGVhc2Ugd29ya2Zsb3cgaXNcbiAqIGEgbm8tb3AgcmF0aGVyIHRoYW4gYSBmYWlsdXJlLiBUaGUgZXhpc3RpbmcgcmVsZWFzZSBpcyBsZWZ0IHVudG91Y2hlZC4gQW55XG4gKiBvdGhlciBlcnJvciBpcyB0aHJvd24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVHaXRIdWJSZWxlYXNlKG9wdGlvbnM6IEdpdEh1YlJlbGVhc2VPcHRpb25zKTogUHJvbWlzZTxHaXRIdWJSZWxlYXNlUmVzdWx0PiB7XG4gIGNvbnN0IGFwaVVybCA9IChvcHRpb25zLmFwaVVybCA/PyAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbScpLnJlcGxhY2UoL1xcLyskLywgJycpO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YXBpVXJsfS9yZXBvcy8ke29wdGlvbnMucmVwb3NpdG9yeX0vcmVsZWFzZXNgLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24nLFxuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7b3B0aW9ucy50b2tlbn1gLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdYLUdpdEh1Yi1BcGktVmVyc2lvbic6ICcyMDIyLTExLTI4JyxcbiAgICB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHRhZ19uYW1lOiBvcHRpb25zLnRhZyxcbiAgICAgIG5hbWU6IG9wdGlvbnMudGFnLFxuICAgICAgYm9keTogb3B0aW9ucy5ib2R5ID8/ICcnLFxuICAgICAgcHJlcmVsZWFzZTogb3B0aW9ucy5wcmVyZWxlYXNlID8/IGZhbHNlLFxuICAgICAgLi4uKG9wdGlvbnMudGFyZ2V0ID8geyB0YXJnZXRfY29tbWl0aXNoOiBvcHRpb25zLnRhcmdldCB9IDoge30pLFxuICAgICAgLi4uKG9wdGlvbnMubGF0ZXN0ICE9PSB1bmRlZmluZWQgPyB7IG1ha2VfbGF0ZXN0OiBTdHJpbmcob3B0aW9ucy5sYXRlc3QpIH0gOiB7fSksXG4gICAgfSksXG4gIH0pO1xuXG4gIGlmIChyZXNwb25zZS5vaykge1xuICAgIHJldHVybiAnY3JlYXRlZCc7XG4gIH1cblxuICBjb25zdCBib2R5ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MjIgJiYgcmVsZWFzZUFscmVhZHlFeGlzdHMoYm9keSkpIHtcbiAgICByZXR1cm4gJ2FscmVhZHlfZXhpc3RzJztcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgR2l0SHViIHJlbGVhc2UgY3JlYXRpb24gZmFpbGVkOiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9OiAke2JvZHl9YCk7XG59XG5cbi8qKlxuICogV2hldGhlciBhIDQyMiByZXNwb25zZSBib2R5IGluZGljYXRlcyB0aGF0IGEgcmVsZWFzZSBmb3IgdGhlIHRhZyBhbHJlYWR5XG4gKiBleGlzdHMuXG4gKlxuICogVGhlIEFQSSByZXBvcnRzIHRoaXMgYXNcbiAqIGB7IGVycm9yczogW3sgcmVzb3VyY2U6ICdSZWxlYXNlJywgY29kZTogJ2FscmVhZHlfZXhpc3RzJywgZmllbGQ6ICd0YWdfbmFtZScgfV0gfWAuXG4gKi9cbmZ1bmN0aW9uIHJlbGVhc2VBbHJlYWR5RXhpc3RzKHJlc3BvbnNlQm9keTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXNwb25zZUJvZHkpO1xuICAgIGNvbnN0IGVycm9yczogYW55W10gPSBBcnJheS5pc0FycmF5KHBhcnNlZD8uZXJyb3JzKSA/IHBhcnNlZC5lcnJvcnMgOiBbXTtcbiAgICByZXR1cm4gZXJyb3JzLnNvbWUoKGUpID0+IGU/LnJlc291cmNlID09PSAnUmVsZWFzZScgJiYgZT8uY29kZSA9PT0gJ2FscmVhZHlfZXhpc3RzJyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -8,6 +8,7 @@
8
8
  "bin": {
9
9
  "jsii-release": "./bin/jsii-release-shim",
10
10
  "jsii-release-ca": "./bin/jsii-release-shim",
11
+ "jsii-release-github": "./bin/jsii-release-shim",
11
12
  "jsii-release-golang": "./bin/jsii-release-shim",
12
13
  "jsii-release-maven": "./bin/jsii-release-shim",
13
14
  "jsii-release-npm": "./bin/jsii-release-shim",
@@ -16,6 +17,7 @@
16
17
  "jsii-release-shim": "bin/jsii-release-shim",
17
18
  "publib": "bin/publib",
18
19
  "publib-ca": "bin/publib-ca",
20
+ "publib-github": "bin/publib-github",
19
21
  "publib-golang": "bin/publib-golang",
20
22
  "publib-maven": "bin/publib-maven",
21
23
  "publib-npm": "bin/publib-npm",
@@ -97,7 +99,7 @@
97
99
  "publishConfig": {
98
100
  "access": "public"
99
101
  },
100
- "version": "0.3.0",
102
+ "version": "0.3.1",
101
103
  "jest": {
102
104
  "coverageProvider": "v8",
103
105
  "testMatch": [
package/package.json.bak CHANGED
@@ -8,6 +8,7 @@
8
8
  "bin": {
9
9
  "jsii-release": "./bin/jsii-release-shim",
10
10
  "jsii-release-ca": "./bin/jsii-release-shim",
11
+ "jsii-release-github": "./bin/jsii-release-shim",
11
12
  "jsii-release-golang": "./bin/jsii-release-shim",
12
13
  "jsii-release-maven": "./bin/jsii-release-shim",
13
14
  "jsii-release-npm": "./bin/jsii-release-shim",
@@ -16,6 +17,7 @@
16
17
  "jsii-release-shim": "bin/jsii-release-shim",
17
18
  "publib": "bin/publib",
18
19
  "publib-ca": "bin/publib-ca",
20
+ "publib-github": "bin/publib-github",
19
21
  "publib-golang": "bin/publib-golang",
20
22
  "publib-maven": "bin/publib-maven",
21
23
  "publib-npm": "bin/publib-npm",
@@ -97,7 +99,7 @@
97
99
  "publishConfig": {
98
100
  "access": "public"
99
101
  },
100
- "version": "0.3.0",
102
+ "version": "0.3.1",
101
103
  "jest": {
102
104
  "coverageProvider": "v8",
103
105
  "testMatch": [