Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e74ff71f7d | ||
|
|
697a9f190e | ||
|
|
011f7957ff | ||
|
|
4f71b6d30b | ||
|
|
24b1cacbb1 |
@@ -1,5 +1,9 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [2.2.0] - 2020-10-07
|
||||||
|
- Add support for ceating a new release in a foreign repository [#25](https://github.com/svenstaro/upload-release-action/pull/25) (thanks @kittaakos)
|
||||||
|
- Upgrade all deps
|
||||||
|
|
||||||
## [2.1.1] - 2020-09-25
|
## [2.1.1] - 2020-09-25
|
||||||
- Fix `release_name` option [#27](https://github.com/svenstaro/upload-release-action/pull/27) (thanks @kittaakos)
|
- Fix `release_name` option [#27](https://github.com/svenstaro/upload-release-action/pull/27) (thanks @kittaakos)
|
||||||
|
|
||||||
|
|||||||
38
README.md
38
README.md
@@ -19,7 +19,8 @@ Optional Arguments
|
|||||||
- `overwrite`: If an asset with the same name already exists, overwrite it (Default: `false`).
|
- `overwrite`: If an asset with the same name already exists, overwrite it (Default: `false`).
|
||||||
- `prerelease`: Mark the release as a pre-release (Default: `false`).
|
- `prerelease`: Mark the release as a pre-release (Default: `false`).
|
||||||
- `release_name`: Explicitly set a release name. (Defaults: implicitly same as `tag` via GitHub API).
|
- `release_name`: Explicitly set a release name. (Defaults: implicitly same as `tag` via GitHub API).
|
||||||
- `body`: Content of the release text (Defaut: `""`).
|
- `body`: Content of the release text (Default: `""`).
|
||||||
|
- `repo_name`: Specify the name of the GitHub repository in which the GitHub release will be created, edited, and deleted. If the repository is other than the current, it is required to create a personal access token with `repo`, `user`, `admin:repo_hook` scopes to the foreign repository and add it as a secret. (Default: current repository).
|
||||||
|
|
||||||
## Output variables
|
## Output variables
|
||||||
|
|
||||||
@@ -101,12 +102,14 @@ jobs:
|
|||||||
```
|
```
|
||||||
|
|
||||||
Example with `file_glob`:
|
Example with `file_glob`:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
name: Publish
|
name: Publish
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- '*'
|
- '*'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Publish binaries
|
name: Publish binaries
|
||||||
@@ -125,6 +128,39 @@ jobs:
|
|||||||
file_glob: true
|
file_glob: true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Example for creating a release in a foreign repository using `repo_name`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
name: Publish
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Publish binaries
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Build
|
||||||
|
run: cargo build --release
|
||||||
|
- name: Upload binaries to release
|
||||||
|
uses: svenstaro/upload-release-action@v2
|
||||||
|
with:
|
||||||
|
repo_name: owner/repository-name
|
||||||
|
# A personal access token for the GitHub repository in which the release will be created and edited.
|
||||||
|
# It is recommended to create the access token with the following scopes: `repo, user, admin:repo_hook`.
|
||||||
|
repo_token: ${{ secrets.YOUR_PERSONAL_ACCESS_TOKEN }}
|
||||||
|
file: target/release/mything
|
||||||
|
asset_name: mything
|
||||||
|
tag: ${{ github.ref }}
|
||||||
|
overwrite: true
|
||||||
|
body: "This is my release text"
|
||||||
|
```
|
||||||
|
|
||||||
## Releasing
|
## Releasing
|
||||||
|
|
||||||
To release this Action:
|
To release this Action:
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ inputs:
|
|||||||
description: 'Explicitly set a release name. Defaults to empty which will cause the release to take the tag as name on GitHub.'
|
description: 'Explicitly set a release name. Defaults to empty which will cause the release to take the tag as name on GitHub.'
|
||||||
body:
|
body:
|
||||||
description: 'Content of the release text. Empty by default.'
|
description: 'Content of the release text. Empty by default.'
|
||||||
|
repo_name:
|
||||||
|
description: 'Specify the name of the GitHub repository in which the GitHub release will be created, edited, and deleted. If the repository is other than the current, it is required to create a personal access token with `repo`, `user`, `admin:repo_hook` scopes to the foreign repository and add it as a secret. Defaults to the current repository'
|
||||||
outputs:
|
outputs:
|
||||||
browser_download_url:
|
browser_download_url:
|
||||||
description: 'The publicly available URL of the asset.'
|
description: 'The publicly available URL of the asset.'
|
||||||
|
|||||||
137
dist/index.js
vendored
137
dist/index.js
vendored
@@ -385,6 +385,32 @@ const windowsRelease = release => {
|
|||||||
module.exports = windowsRelease;
|
module.exports = windowsRelease;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 82:
|
||||||
|
/***/ (function(__unusedmodule, exports) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// We use any as a valid input type
|
||||||
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
/**
|
||||||
|
* Sanitizes an input into a string so it can be passed into issueCommand safely
|
||||||
|
* @param input input to sanitize into a string
|
||||||
|
*/
|
||||||
|
function toCommandValue(input) {
|
||||||
|
if (input === null || input === undefined) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
else if (typeof input === 'string' || input instanceof String) {
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
return JSON.stringify(input);
|
||||||
|
}
|
||||||
|
exports.toCommandValue = toCommandValue;
|
||||||
|
//# sourceMappingURL=utils.js.map
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 87:
|
/***/ 87:
|
||||||
@@ -1322,6 +1348,42 @@ function regExpEscape (s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 102:
|
||||||
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// For internal use, subject to change.
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
// We use any as a valid input type
|
||||||
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
|
const fs = __importStar(__webpack_require__(747));
|
||||||
|
const os = __importStar(__webpack_require__(87));
|
||||||
|
const utils_1 = __webpack_require__(82);
|
||||||
|
function issueCommand(command, message) {
|
||||||
|
const filePath = process.env[`GITHUB_${command}`];
|
||||||
|
if (!filePath) {
|
||||||
|
throw new Error(`Unable to find environment variable for file command ${command}`);
|
||||||
|
}
|
||||||
|
if (!fs.existsSync(filePath)) {
|
||||||
|
throw new Error(`Missing file at path: ${filePath}`);
|
||||||
|
}
|
||||||
|
fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {
|
||||||
|
encoding: 'utf8'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.issueCommand = issueCommand;
|
||||||
|
//# sourceMappingURL=file-command.js.map
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 117:
|
/***/ 117:
|
||||||
@@ -2205,13 +2267,13 @@ function get_release_by_tag(tag, prerelease, release_name, body, octokit) {
|
|||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
core.debug(`Getting release by tag ${tag}.`);
|
core.debug(`Getting release by tag ${tag}.`);
|
||||||
return yield octokit.repos.getReleaseByTag(Object.assign(Object.assign({}, github.context.repo), { tag: tag }));
|
return yield octokit.repos.getReleaseByTag(Object.assign(Object.assign({}, repo()), { tag: tag }));
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
// If this returns 404, we need to create the release first.
|
// If this returns 404, we need to create the release first.
|
||||||
if (error.status === 404) {
|
if (error.status === 404) {
|
||||||
core.debug(`Release for tag ${tag} doesn't exist yet so we'll create it now.`);
|
core.debug(`Release for tag ${tag} doesn't exist yet so we'll create it now.`);
|
||||||
return yield octokit.repos.createRelease(Object.assign(Object.assign({}, github.context.repo), { tag_name: tag, prerelease: prerelease, name: release_name, body: body }));
|
return yield octokit.repos.createRelease(Object.assign(Object.assign({}, repo()), { tag_name: tag, prerelease: prerelease, name: release_name, body: body }));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw error;
|
throw error;
|
||||||
@@ -2229,12 +2291,12 @@ function upload_to_release(release, file, asset_name, tag, overwrite, octokit) {
|
|||||||
const file_size = stat.size;
|
const file_size = stat.size;
|
||||||
const file_bytes = fs.readFileSync(file);
|
const file_bytes = fs.readFileSync(file);
|
||||||
// Check for duplicates.
|
// Check for duplicates.
|
||||||
const assets = yield octokit.repos.listReleaseAssets(Object.assign(Object.assign({}, github.context.repo), { release_id: release.data.id }));
|
const assets = yield octokit.repos.listReleaseAssets(Object.assign(Object.assign({}, repo()), { release_id: release.data.id }));
|
||||||
const duplicate_asset = assets.data.find(a => a.name === asset_name);
|
const duplicate_asset = assets.data.find(a => a.name === asset_name);
|
||||||
if (duplicate_asset !== undefined) {
|
if (duplicate_asset !== undefined) {
|
||||||
if (overwrite) {
|
if (overwrite) {
|
||||||
core.debug(`An asset called ${asset_name} already exists in release ${tag} so we'll overwrite it.`);
|
core.debug(`An asset called ${asset_name} already exists in release ${tag} so we'll overwrite it.`);
|
||||||
yield octokit.repos.deleteReleaseAsset(Object.assign(Object.assign({}, github.context.repo), { asset_id: duplicate_asset.id }));
|
yield octokit.repos.deleteReleaseAsset(Object.assign(Object.assign({}, repo()), { asset_id: duplicate_asset.id }));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
core.setFailed(`An asset called ${asset_name} already exists.`);
|
core.setFailed(`An asset called ${asset_name} already exists.`);
|
||||||
@@ -2257,6 +2319,25 @@ function upload_to_release(release, file, asset_name, tag, overwrite, octokit) {
|
|||||||
return uploaded_asset.data.browser_download_url;
|
return uploaded_asset.data.browser_download_url;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
function repo() {
|
||||||
|
const repo_name = core.getInput('repo_name');
|
||||||
|
// If we're not targeting a foreign repository, we can just return immediately and don't have to do extra work.
|
||||||
|
if (!repo_name) {
|
||||||
|
return github.context.repo;
|
||||||
|
}
|
||||||
|
const owner = repo_name.substr(0, repo_name.indexOf('/'));
|
||||||
|
if (!owner) {
|
||||||
|
throw new Error(`Could not extract 'owner' from 'repo_name': ${repo_name}.`);
|
||||||
|
}
|
||||||
|
const repo = repo_name.substr(repo_name.indexOf('/') + 1);
|
||||||
|
if (!repo) {
|
||||||
|
throw new Error(`Could not extract 'repo' from 'repo_name': ${repo_name}.`);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
owner,
|
||||||
|
repo
|
||||||
|
};
|
||||||
|
}
|
||||||
function run() {
|
function run() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
@@ -6406,6 +6487,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const os = __importStar(__webpack_require__(87));
|
const os = __importStar(__webpack_require__(87));
|
||||||
|
const utils_1 = __webpack_require__(82);
|
||||||
/**
|
/**
|
||||||
* Commands
|
* Commands
|
||||||
*
|
*
|
||||||
@@ -6459,28 +6541,14 @@ class Command {
|
|||||||
return cmdStr;
|
return cmdStr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Sanitizes an input into a string so it can be passed into issueCommand safely
|
|
||||||
* @param input input to sanitize into a string
|
|
||||||
*/
|
|
||||||
function toCommandValue(input) {
|
|
||||||
if (input === null || input === undefined) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
else if (typeof input === 'string' || input instanceof String) {
|
|
||||||
return input;
|
|
||||||
}
|
|
||||||
return JSON.stringify(input);
|
|
||||||
}
|
|
||||||
exports.toCommandValue = toCommandValue;
|
|
||||||
function escapeData(s) {
|
function escapeData(s) {
|
||||||
return toCommandValue(s)
|
return utils_1.toCommandValue(s)
|
||||||
.replace(/%/g, '%25')
|
.replace(/%/g, '%25')
|
||||||
.replace(/\r/g, '%0D')
|
.replace(/\r/g, '%0D')
|
||||||
.replace(/\n/g, '%0A');
|
.replace(/\n/g, '%0A');
|
||||||
}
|
}
|
||||||
function escapeProperty(s) {
|
function escapeProperty(s) {
|
||||||
return toCommandValue(s)
|
return utils_1.toCommandValue(s)
|
||||||
.replace(/%/g, '%25')
|
.replace(/%/g, '%25')
|
||||||
.replace(/\r/g, '%0D')
|
.replace(/\r/g, '%0D')
|
||||||
.replace(/\n/g, '%0A')
|
.replace(/\n/g, '%0A')
|
||||||
@@ -7235,6 +7303,12 @@ function convertBody(buffer, headers) {
|
|||||||
// html4
|
// html4
|
||||||
if (!res && str) {
|
if (!res && str) {
|
||||||
res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
|
res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
|
||||||
|
if (!res) {
|
||||||
|
res = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str);
|
||||||
|
if (res) {
|
||||||
|
res.pop(); // drop last quote
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (res) {
|
if (res) {
|
||||||
res = /charset=(.*)/i.exec(res.pop());
|
res = /charset=(.*)/i.exec(res.pop());
|
||||||
@@ -8242,7 +8316,7 @@ function fetch(url, opts) {
|
|||||||
// HTTP fetch step 5.5
|
// HTTP fetch step 5.5
|
||||||
switch (request.redirect) {
|
switch (request.redirect) {
|
||||||
case 'error':
|
case 'error':
|
||||||
reject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect'));
|
reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
|
||||||
finalize();
|
finalize();
|
||||||
return;
|
return;
|
||||||
case 'manual':
|
case 'manual':
|
||||||
@@ -8281,7 +8355,8 @@ function fetch(url, opts) {
|
|||||||
method: request.method,
|
method: request.method,
|
||||||
body: request.body,
|
body: request.body,
|
||||||
signal: request.signal,
|
signal: request.signal,
|
||||||
timeout: request.timeout
|
timeout: request.timeout,
|
||||||
|
size: request.size
|
||||||
};
|
};
|
||||||
|
|
||||||
// HTTP-redirect fetch step 9
|
// HTTP-redirect fetch step 9
|
||||||
@@ -8596,6 +8671,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const command_1 = __webpack_require__(431);
|
const command_1 = __webpack_require__(431);
|
||||||
|
const file_command_1 = __webpack_require__(102);
|
||||||
|
const utils_1 = __webpack_require__(82);
|
||||||
const os = __importStar(__webpack_require__(87));
|
const os = __importStar(__webpack_require__(87));
|
||||||
const path = __importStar(__webpack_require__(622));
|
const path = __importStar(__webpack_require__(622));
|
||||||
/**
|
/**
|
||||||
@@ -8622,9 +8699,17 @@ var ExitCode;
|
|||||||
*/
|
*/
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
function exportVariable(name, val) {
|
function exportVariable(name, val) {
|
||||||
const convertedVal = command_1.toCommandValue(val);
|
const convertedVal = utils_1.toCommandValue(val);
|
||||||
process.env[name] = convertedVal;
|
process.env[name] = convertedVal;
|
||||||
|
const filePath = process.env['GITHUB_ENV'] || '';
|
||||||
|
if (filePath) {
|
||||||
|
const delimiter = '_GitHubActionsFileCommandDelimeter_';
|
||||||
|
const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`;
|
||||||
|
file_command_1.issueCommand('ENV', commandValue);
|
||||||
|
}
|
||||||
|
else {
|
||||||
command_1.issueCommand('set-env', { name }, convertedVal);
|
command_1.issueCommand('set-env', { name }, convertedVal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
exports.exportVariable = exportVariable;
|
exports.exportVariable = exportVariable;
|
||||||
/**
|
/**
|
||||||
@@ -8640,7 +8725,13 @@ exports.setSecret = setSecret;
|
|||||||
* @param inputPath
|
* @param inputPath
|
||||||
*/
|
*/
|
||||||
function addPath(inputPath) {
|
function addPath(inputPath) {
|
||||||
|
const filePath = process.env['GITHUB_PATH'] || '';
|
||||||
|
if (filePath) {
|
||||||
|
file_command_1.issueCommand('PATH', inputPath);
|
||||||
|
}
|
||||||
|
else {
|
||||||
command_1.issueCommand('add-path', {}, inputPath);
|
command_1.issueCommand('add-path', {}, inputPath);
|
||||||
|
}
|
||||||
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
|
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
|
||||||
}
|
}
|
||||||
exports.addPath = addPath;
|
exports.addPath = addPath;
|
||||||
|
|||||||
2510
package-lock.json
generated
2510
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
14
package.json
14
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "upload-release-action",
|
"name": "upload-release-action",
|
||||||
"version": "2.1.1",
|
"version": "2.2.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Upload files to a GitHub release",
|
"description": "Upload files to a GitHub release",
|
||||||
"main": "lib/main.js",
|
"main": "lib/main.js",
|
||||||
@@ -27,24 +27,24 @@
|
|||||||
"author": "Sven-Hendrik Haase",
|
"author": "Sven-Hendrik Haase",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.2.0",
|
"@actions/core": "^1.2.6",
|
||||||
"@actions/github": "^4.0.0",
|
"@actions/github": "^4.0.0",
|
||||||
"@types/glob": "^7.1.2",
|
"@types/glob": "^7.1.2",
|
||||||
"glob": "^7.1.6"
|
"glob": "^7.1.6"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^24.9.1",
|
"@types/jest": "^24.9.1",
|
||||||
"@types/node": "^12.12.47",
|
"@types/node": "^12.12.64",
|
||||||
"@typescript-eslint/parser": "^3.5.0",
|
"@typescript-eslint/parser": "^3.5.0",
|
||||||
"@zeit/ncc": "^0.22.3",
|
"@zeit/ncc": "^0.22.3",
|
||||||
"eslint": "^7.3.1",
|
"eslint": "^7.10.0",
|
||||||
"eslint-plugin-github": "^4.0.1",
|
"eslint-plugin-github": "^4.0.1",
|
||||||
"eslint-plugin-jest": "^23.17.1",
|
"eslint-plugin-jest": "^23.17.1",
|
||||||
"jest": "^26.1.0",
|
"jest": "^26.5.2",
|
||||||
"jest-circus": "^26.1.0",
|
"jest-circus": "^26.5.2",
|
||||||
"js-yaml": "^3.14.0",
|
"js-yaml": "^3.14.0",
|
||||||
"prettier": "^2.0.5",
|
"prettier": "^2.0.5",
|
||||||
"ts-jest": "^26.1.1",
|
"ts-jest": "^26.4.1",
|
||||||
"typescript": "^3.9.6"
|
"typescript": "^3.9.6"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
28
src/main.ts
28
src/main.ts
@@ -21,7 +21,7 @@ async function get_release_by_tag(
|
|||||||
try {
|
try {
|
||||||
core.debug(`Getting release by tag ${tag}.`)
|
core.debug(`Getting release by tag ${tag}.`)
|
||||||
return await octokit.repos.getReleaseByTag({
|
return await octokit.repos.getReleaseByTag({
|
||||||
...github.context.repo,
|
...repo(),
|
||||||
tag: tag
|
tag: tag
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -31,7 +31,7 @@ async function get_release_by_tag(
|
|||||||
`Release for tag ${tag} doesn't exist yet so we'll create it now.`
|
`Release for tag ${tag} doesn't exist yet so we'll create it now.`
|
||||||
)
|
)
|
||||||
return await octokit.repos.createRelease({
|
return await octokit.repos.createRelease({
|
||||||
...github.context.repo,
|
...repo(),
|
||||||
tag_name: tag,
|
tag_name: tag,
|
||||||
prerelease: prerelease,
|
prerelease: prerelease,
|
||||||
name: release_name,
|
name: release_name,
|
||||||
@@ -61,7 +61,7 @@ async function upload_to_release(
|
|||||||
|
|
||||||
// Check for duplicates.
|
// Check for duplicates.
|
||||||
const assets: RepoAssetsResp = await octokit.repos.listReleaseAssets({
|
const assets: RepoAssetsResp = await octokit.repos.listReleaseAssets({
|
||||||
...github.context.repo,
|
...repo(),
|
||||||
release_id: release.data.id
|
release_id: release.data.id
|
||||||
})
|
})
|
||||||
const duplicate_asset = assets.data.find(a => a.name === asset_name)
|
const duplicate_asset = assets.data.find(a => a.name === asset_name)
|
||||||
@@ -71,7 +71,7 @@ async function upload_to_release(
|
|||||||
`An asset called ${asset_name} already exists in release ${tag} so we'll overwrite it.`
|
`An asset called ${asset_name} already exists in release ${tag} so we'll overwrite it.`
|
||||||
)
|
)
|
||||||
await octokit.repos.deleteReleaseAsset({
|
await octokit.repos.deleteReleaseAsset({
|
||||||
...github.context.repo,
|
...repo(),
|
||||||
asset_id: duplicate_asset.id
|
asset_id: duplicate_asset.id
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
@@ -99,6 +99,26 @@ async function upload_to_release(
|
|||||||
return uploaded_asset.data.browser_download_url
|
return uploaded_asset.data.browser_download_url
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function repo(): {owner: string; repo: string} {
|
||||||
|
const repo_name = core.getInput('repo_name')
|
||||||
|
// If we're not targeting a foreign repository, we can just return immediately and don't have to do extra work.
|
||||||
|
if (!repo_name) {
|
||||||
|
return github.context.repo
|
||||||
|
}
|
||||||
|
const owner = repo_name.substr(0, repo_name.indexOf('/'))
|
||||||
|
if (!owner) {
|
||||||
|
throw new Error(`Could not extract 'owner' from 'repo_name': ${repo_name}.`)
|
||||||
|
}
|
||||||
|
const repo = repo_name.substr(repo_name.indexOf('/') + 1)
|
||||||
|
if (!repo) {
|
||||||
|
throw new Error(`Could not extract 'repo' from 'repo_name': ${repo_name}.`)
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
owner,
|
||||||
|
repo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function run(): Promise<void> {
|
async function run(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
// Get the inputs from the workflow file: https://github.com/actions/toolkit/tree/master/packages/core#inputsoutputs
|
// Get the inputs from the workflow file: https://github.com/actions/toolkit/tree/master/packages/core#inputsoutputs
|
||||||
|
|||||||
Reference in New Issue
Block a user