mirror of
https://github.com/softprops/action-gh-release.git
synced 2025-06-27 22:06:03 +00:00
feat: add input option overwrite_files. (#343)
Some checks are pending
main / build (push) Waiting to run
Some checks are pending
main / build (push) Waiting to run
* Add input option overwrite_files. * Fix description. * update test and run fmt/build Signed-off-by: Rui Chen <rui@chenrui.dev> --------- Signed-off-by: Rui Chen <rui@chenrui.dev> Co-authored-by: Rui Chen <rui@chenrui.dev>
This commit is contained in:
parent
5822334cb4
commit
605f567f95
7 changed files with 50 additions and 18 deletions
|
@ -185,6 +185,7 @@ The following are optional as `step.with` keys
|
||||||
| `prerelease` | Boolean | Indicator of whether or not is a prerelease |
|
| `prerelease` | Boolean | Indicator of whether or not is a prerelease |
|
||||||
| `preserve_order` | Boolean | Indicator of whether order of files should be preserved when uploading assets |
|
| `preserve_order` | Boolean | Indicator of whether order of files should be preserved when uploading assets |
|
||||||
| `files` | String | Newline-delimited globs of paths to assets to upload for release |
|
| `files` | String | Newline-delimited globs of paths to assets to upload for release |
|
||||||
|
| `overwrite_files` | Boolean | Indicator of whether files should be overwritten when they already exist. Defaults to true |
|
||||||
| `name` | String | Name of the release. defaults to tag name |
|
| `name` | String | Name of the release. defaults to tag name |
|
||||||
| `tag_name` | String | Name of a tag. defaults to `github.ref_name` |
|
| `tag_name` | String | Name of a tag. defaults to `github.ref_name` |
|
||||||
| `fail_on_unmatched_files` | Boolean | Indicator of whether to fail if any of the `files` globs match nothing |
|
| `fail_on_unmatched_files` | Boolean | Indicator of whether to fail if any of the `files` globs match nothing |
|
||||||
|
|
|
@ -50,6 +50,7 @@ describe("util", () => {
|
||||||
input_prerelease: false,
|
input_prerelease: false,
|
||||||
input_preserve_order: undefined,
|
input_preserve_order: undefined,
|
||||||
input_files: [],
|
input_files: [],
|
||||||
|
input_overwrite_files: undefined,
|
||||||
input_name: undefined,
|
input_name: undefined,
|
||||||
input_tag_name: undefined,
|
input_tag_name: undefined,
|
||||||
input_target_commitish: undefined,
|
input_target_commitish: undefined,
|
||||||
|
@ -72,6 +73,7 @@ describe("util", () => {
|
||||||
input_prerelease: false,
|
input_prerelease: false,
|
||||||
input_preserve_order: undefined,
|
input_preserve_order: undefined,
|
||||||
input_files: [],
|
input_files: [],
|
||||||
|
input_overwrite_files: undefined,
|
||||||
input_name: undefined,
|
input_name: undefined,
|
||||||
input_tag_name: undefined,
|
input_tag_name: undefined,
|
||||||
input_target_commitish: undefined,
|
input_target_commitish: undefined,
|
||||||
|
@ -94,6 +96,7 @@ describe("util", () => {
|
||||||
input_prerelease: false,
|
input_prerelease: false,
|
||||||
input_preserve_order: undefined,
|
input_preserve_order: undefined,
|
||||||
input_files: [],
|
input_files: [],
|
||||||
|
input_overwrite_files: undefined,
|
||||||
input_name: undefined,
|
input_name: undefined,
|
||||||
input_tag_name: undefined,
|
input_tag_name: undefined,
|
||||||
input_target_commitish: undefined,
|
input_target_commitish: undefined,
|
||||||
|
@ -128,6 +131,7 @@ describe("util", () => {
|
||||||
input_prerelease: undefined,
|
input_prerelease: undefined,
|
||||||
input_preserve_order: undefined,
|
input_preserve_order: undefined,
|
||||||
input_files: [],
|
input_files: [],
|
||||||
|
input_overwrite_files: undefined,
|
||||||
input_name: undefined,
|
input_name: undefined,
|
||||||
input_tag_name: undefined,
|
input_tag_name: undefined,
|
||||||
input_fail_on_unmatched_files: false,
|
input_fail_on_unmatched_files: false,
|
||||||
|
@ -154,6 +158,7 @@ describe("util", () => {
|
||||||
input_draft: undefined,
|
input_draft: undefined,
|
||||||
input_prerelease: undefined,
|
input_prerelease: undefined,
|
||||||
input_files: [],
|
input_files: [],
|
||||||
|
input_overwrite_files: undefined,
|
||||||
input_preserve_order: undefined,
|
input_preserve_order: undefined,
|
||||||
input_name: undefined,
|
input_name: undefined,
|
||||||
input_tag_name: undefined,
|
input_tag_name: undefined,
|
||||||
|
@ -182,6 +187,7 @@ describe("util", () => {
|
||||||
input_files: [],
|
input_files: [],
|
||||||
input_preserve_order: undefined,
|
input_preserve_order: undefined,
|
||||||
input_name: undefined,
|
input_name: undefined,
|
||||||
|
input_overwrite_files: undefined,
|
||||||
input_tag_name: undefined,
|
input_tag_name: undefined,
|
||||||
input_fail_on_unmatched_files: false,
|
input_fail_on_unmatched_files: false,
|
||||||
input_target_commitish: undefined,
|
input_target_commitish: undefined,
|
||||||
|
@ -208,6 +214,7 @@ describe("util", () => {
|
||||||
input_prerelease: undefined,
|
input_prerelease: undefined,
|
||||||
input_preserve_order: undefined,
|
input_preserve_order: undefined,
|
||||||
input_files: [],
|
input_files: [],
|
||||||
|
input_overwrite_files: undefined,
|
||||||
input_name: undefined,
|
input_name: undefined,
|
||||||
input_tag_name: undefined,
|
input_tag_name: undefined,
|
||||||
input_fail_on_unmatched_files: false,
|
input_fail_on_unmatched_files: false,
|
||||||
|
@ -239,6 +246,7 @@ describe("util", () => {
|
||||||
input_prerelease: true,
|
input_prerelease: true,
|
||||||
input_preserve_order: true,
|
input_preserve_order: true,
|
||||||
input_files: [],
|
input_files: [],
|
||||||
|
input_overwrite_files: undefined,
|
||||||
input_name: undefined,
|
input_name: undefined,
|
||||||
input_tag_name: undefined,
|
input_tag_name: undefined,
|
||||||
input_fail_on_unmatched_files: false,
|
input_fail_on_unmatched_files: false,
|
||||||
|
@ -267,6 +275,7 @@ describe("util", () => {
|
||||||
input_prerelease: true,
|
input_prerelease: true,
|
||||||
input_preserve_order: undefined,
|
input_preserve_order: undefined,
|
||||||
input_files: [],
|
input_files: [],
|
||||||
|
input_overwrite_files: undefined,
|
||||||
input_name: undefined,
|
input_name: undefined,
|
||||||
input_tag_name: undefined,
|
input_tag_name: undefined,
|
||||||
input_fail_on_unmatched_files: false,
|
input_fail_on_unmatched_files: false,
|
||||||
|
@ -294,6 +303,7 @@ describe("util", () => {
|
||||||
input_prerelease: true,
|
input_prerelease: true,
|
||||||
input_preserve_order: undefined,
|
input_preserve_order: undefined,
|
||||||
input_files: [],
|
input_files: [],
|
||||||
|
input_overwrite_files: undefined,
|
||||||
input_name: undefined,
|
input_name: undefined,
|
||||||
input_tag_name: undefined,
|
input_tag_name: undefined,
|
||||||
input_fail_on_unmatched_files: false,
|
input_fail_on_unmatched_files: false,
|
||||||
|
@ -321,6 +331,7 @@ describe("util", () => {
|
||||||
input_preserve_order: undefined,
|
input_preserve_order: undefined,
|
||||||
input_files: [],
|
input_files: [],
|
||||||
input_name: undefined,
|
input_name: undefined,
|
||||||
|
input_overwrite_files: undefined,
|
||||||
input_tag_name: undefined,
|
input_tag_name: undefined,
|
||||||
input_fail_on_unmatched_files: false,
|
input_fail_on_unmatched_files: false,
|
||||||
input_target_commitish: undefined,
|
input_target_commitish: undefined,
|
||||||
|
@ -346,6 +357,7 @@ describe("util", () => {
|
||||||
input_prerelease: undefined,
|
input_prerelease: undefined,
|
||||||
input_preserve_order: undefined,
|
input_preserve_order: undefined,
|
||||||
input_files: [],
|
input_files: [],
|
||||||
|
input_overwrite_files: undefined,
|
||||||
input_name: undefined,
|
input_name: undefined,
|
||||||
input_tag_name: undefined,
|
input_tag_name: undefined,
|
||||||
input_fail_on_unmatched_files: false,
|
input_fail_on_unmatched_files: false,
|
||||||
|
|
|
@ -27,6 +27,10 @@ inputs:
|
||||||
files:
|
files:
|
||||||
description: "Newline-delimited list of path globs for asset files to upload"
|
description: "Newline-delimited list of path globs for asset files to upload"
|
||||||
required: false
|
required: false
|
||||||
|
overwrite_files:
|
||||||
|
description: "Overwrite existing files with the same name. Defaults to true"
|
||||||
|
required: false
|
||||||
|
default: 'true'
|
||||||
fail_on_unmatched_files:
|
fail_on_unmatched_files:
|
||||||
description: "Fails if any of the `files` globs match nothing. Defaults to false"
|
description: "Fails if any of the `files` globs match nothing. Defaults to false"
|
||||||
required: false
|
required: false
|
||||||
|
|
4
dist/index.js
vendored
4
dist/index.js
vendored
File diff suppressed because one or more lines are too long
|
@ -168,6 +168,12 @@ export const upload = async (
|
||||||
({ name: currentName }) => currentName == alignAssetName(name),
|
({ name: currentName }) => currentName == alignAssetName(name),
|
||||||
);
|
);
|
||||||
if (currentAsset) {
|
if (currentAsset) {
|
||||||
|
if (config.input_overwrite_files === false) {
|
||||||
|
console.log(
|
||||||
|
`Asset ${name} already exists and overwrite_files is false...`,
|
||||||
|
);
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
console.log(`♻️ Deleting previously uploaded asset ${name}...`);
|
console.log(`♻️ Deleting previously uploaded asset ${name}...`);
|
||||||
await github.rest.repos.deleteReleaseAsset({
|
await github.rest.repos.deleteReleaseAsset({
|
||||||
asset_id: currentAsset.id || 1,
|
asset_id: currentAsset.id || 1,
|
||||||
|
@ -175,6 +181,7 @@ export const upload = async (
|
||||||
repo,
|
repo,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
console.log(`⬆️ Uploading ${name}...`);
|
console.log(`⬆️ Uploading ${name}...`);
|
||||||
const endpoint = new URL(url);
|
const endpoint = new URL(url);
|
||||||
endpoint.searchParams.append("name", name);
|
endpoint.searchParams.append("name", name);
|
||||||
|
|
22
src/main.ts
22
src/main.ts
|
@ -1,13 +1,13 @@
|
||||||
|
import { setFailed, setOutput } from "@actions/core";
|
||||||
|
import { getOctokit } from "@actions/github";
|
||||||
|
import { GitHubReleaser, release, upload } from "./github";
|
||||||
import {
|
import {
|
||||||
paths,
|
|
||||||
parseConfig,
|
|
||||||
isTag,
|
isTag,
|
||||||
|
parseConfig,
|
||||||
|
paths,
|
||||||
unmatchedPatterns,
|
unmatchedPatterns,
|
||||||
uploadUrl,
|
uploadUrl,
|
||||||
} from "./util";
|
} from "./util";
|
||||||
import { release, upload, GitHubReleaser } from "./github";
|
|
||||||
import { getOctokit } from "@actions/github";
|
|
||||||
import { setFailed, setOutput } from "@actions/core";
|
|
||||||
|
|
||||||
import { env } from "process";
|
import { env } from "process";
|
||||||
|
|
||||||
|
@ -86,19 +86,23 @@ async function run() {
|
||||||
path,
|
path,
|
||||||
currentAssets,
|
currentAssets,
|
||||||
);
|
);
|
||||||
|
if (json) {
|
||||||
delete json.uploader;
|
delete json.uploader;
|
||||||
|
}
|
||||||
return json;
|
return json;
|
||||||
};
|
};
|
||||||
|
|
||||||
let assets;
|
let results: (any | null)[];
|
||||||
if (!config.input_preserve_order) {
|
if (!config.input_preserve_order) {
|
||||||
assets = await Promise.all(files.map(uploadFile));
|
results = await Promise.all(files.map(uploadFile));
|
||||||
} else {
|
} else {
|
||||||
assets = [];
|
results = [];
|
||||||
for (const path of files) {
|
for (const path of files) {
|
||||||
assets.push(await uploadFile(path));
|
results.push(await uploadFile(path));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const assets = results.filter(Boolean);
|
||||||
setOutput("assets", assets);
|
setOutput("assets", assets);
|
||||||
}
|
}
|
||||||
console.log(`🎉 Release ready at ${rel.html_url}`);
|
console.log(`🎉 Release ready at ${rel.html_url}`);
|
||||||
|
|
|
@ -12,6 +12,7 @@ export interface Config {
|
||||||
input_body?: string;
|
input_body?: string;
|
||||||
input_body_path?: string;
|
input_body_path?: string;
|
||||||
input_files?: string[];
|
input_files?: string[];
|
||||||
|
input_overwrite_files?: boolean;
|
||||||
input_draft?: boolean;
|
input_draft?: boolean;
|
||||||
input_preserve_order?: boolean;
|
input_preserve_order?: boolean;
|
||||||
input_prerelease?: boolean;
|
input_prerelease?: boolean;
|
||||||
|
@ -62,6 +63,9 @@ export const parseConfig = (env: Env): Config => {
|
||||||
input_body: env.INPUT_BODY,
|
input_body: env.INPUT_BODY,
|
||||||
input_body_path: env.INPUT_BODY_PATH,
|
input_body_path: env.INPUT_BODY_PATH,
|
||||||
input_files: parseInputFiles(env.INPUT_FILES || ""),
|
input_files: parseInputFiles(env.INPUT_FILES || ""),
|
||||||
|
input_overwrite_files: env.INPUT_OVERWRITE_FILES
|
||||||
|
? env.INPUT_OVERWRITE_FILES == "true"
|
||||||
|
: undefined,
|
||||||
input_draft: env.INPUT_DRAFT ? env.INPUT_DRAFT === "true" : undefined,
|
input_draft: env.INPUT_DRAFT ? env.INPUT_DRAFT === "true" : undefined,
|
||||||
input_preserve_order: env.INPUT_PRESERVE_ORDER
|
input_preserve_order: env.INPUT_PRESERVE_ORDER
|
||||||
? env.INPUT_PRESERVE_ORDER == "true"
|
? env.INPUT_PRESERVE_ORDER == "true"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue