Skip to content

Commit 605f567

Browse files
feat: add input option overwrite_files. (#343)
* 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>
1 parent 5822334 commit 605f567

File tree

7 files changed

+50
-18
lines changed

7 files changed

+50
-18
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ The following are optional as `step.with` keys
185185
| `prerelease` | Boolean | Indicator of whether or not is a prerelease |
186186
| `preserve_order` | Boolean | Indicator of whether order of files should be preserved when uploading assets |
187187
| `files` | String | Newline-delimited globs of paths to assets to upload for release |
188+
| `overwrite_files` | Boolean | Indicator of whether files should be overwritten when they already exist. Defaults to true |
188189
| `name` | String | Name of the release. defaults to tag name |
189190
| `tag_name` | String | Name of a tag. defaults to `github.ref_name` |
190191
| `fail_on_unmatched_files` | Boolean | Indicator of whether to fail if any of the `files` globs match nothing |

__tests__/util.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ describe("util", () => {
5050
input_prerelease: false,
5151
input_preserve_order: undefined,
5252
input_files: [],
53+
input_overwrite_files: undefined,
5354
input_name: undefined,
5455
input_tag_name: undefined,
5556
input_target_commitish: undefined,
@@ -72,6 +73,7 @@ describe("util", () => {
7273
input_prerelease: false,
7374
input_preserve_order: undefined,
7475
input_files: [],
76+
input_overwrite_files: undefined,
7577
input_name: undefined,
7678
input_tag_name: undefined,
7779
input_target_commitish: undefined,
@@ -94,6 +96,7 @@ describe("util", () => {
9496
input_prerelease: false,
9597
input_preserve_order: undefined,
9698
input_files: [],
99+
input_overwrite_files: undefined,
97100
input_name: undefined,
98101
input_tag_name: undefined,
99102
input_target_commitish: undefined,
@@ -128,6 +131,7 @@ describe("util", () => {
128131
input_prerelease: undefined,
129132
input_preserve_order: undefined,
130133
input_files: [],
134+
input_overwrite_files: undefined,
131135
input_name: undefined,
132136
input_tag_name: undefined,
133137
input_fail_on_unmatched_files: false,
@@ -154,6 +158,7 @@ describe("util", () => {
154158
input_draft: undefined,
155159
input_prerelease: undefined,
156160
input_files: [],
161+
input_overwrite_files: undefined,
157162
input_preserve_order: undefined,
158163
input_name: undefined,
159164
input_tag_name: undefined,
@@ -182,6 +187,7 @@ describe("util", () => {
182187
input_files: [],
183188
input_preserve_order: undefined,
184189
input_name: undefined,
190+
input_overwrite_files: undefined,
185191
input_tag_name: undefined,
186192
input_fail_on_unmatched_files: false,
187193
input_target_commitish: undefined,
@@ -208,6 +214,7 @@ describe("util", () => {
208214
input_prerelease: undefined,
209215
input_preserve_order: undefined,
210216
input_files: [],
217+
input_overwrite_files: undefined,
211218
input_name: undefined,
212219
input_tag_name: undefined,
213220
input_fail_on_unmatched_files: false,
@@ -239,6 +246,7 @@ describe("util", () => {
239246
input_prerelease: true,
240247
input_preserve_order: true,
241248
input_files: [],
249+
input_overwrite_files: undefined,
242250
input_name: undefined,
243251
input_tag_name: undefined,
244252
input_fail_on_unmatched_files: false,
@@ -267,6 +275,7 @@ describe("util", () => {
267275
input_prerelease: true,
268276
input_preserve_order: undefined,
269277
input_files: [],
278+
input_overwrite_files: undefined,
270279
input_name: undefined,
271280
input_tag_name: undefined,
272281
input_fail_on_unmatched_files: false,
@@ -294,6 +303,7 @@ describe("util", () => {
294303
input_prerelease: true,
295304
input_preserve_order: undefined,
296305
input_files: [],
306+
input_overwrite_files: undefined,
297307
input_name: undefined,
298308
input_tag_name: undefined,
299309
input_fail_on_unmatched_files: false,
@@ -321,6 +331,7 @@ describe("util", () => {
321331
input_preserve_order: undefined,
322332
input_files: [],
323333
input_name: undefined,
334+
input_overwrite_files: undefined,
324335
input_tag_name: undefined,
325336
input_fail_on_unmatched_files: false,
326337
input_target_commitish: undefined,
@@ -346,6 +357,7 @@ describe("util", () => {
346357
input_prerelease: undefined,
347358
input_preserve_order: undefined,
348359
input_files: [],
360+
input_overwrite_files: undefined,
349361
input_name: undefined,
350362
input_tag_name: undefined,
351363
input_fail_on_unmatched_files: false,

action.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ inputs:
2727
files:
2828
description: "Newline-delimited list of path globs for asset files to upload"
2929
required: false
30+
overwrite_files:
31+
description: "Overwrite existing files with the same name. Defaults to true"
32+
required: false
33+
default: 'true'
3034
fail_on_unmatched_files:
3135
description: "Fails if any of the `files` globs match nothing. Defaults to false"
3236
required: false

dist/index.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/github.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,19 @@ export const upload = async (
168168
({ name: currentName }) => currentName == alignAssetName(name),
169169
);
170170
if (currentAsset) {
171-
console.log(`♻️ Deleting previously uploaded asset ${name}...`);
172-
await github.rest.repos.deleteReleaseAsset({
173-
asset_id: currentAsset.id || 1,
174-
owner,
175-
repo,
176-
});
171+
if (config.input_overwrite_files === false) {
172+
console.log(
173+
`Asset ${name} already exists and overwrite_files is false...`,
174+
);
175+
return null;
176+
} else {
177+
console.log(`♻️ Deleting previously uploaded asset ${name}...`);
178+
await github.rest.repos.deleteReleaseAsset({
179+
asset_id: currentAsset.id || 1,
180+
owner,
181+
repo,
182+
});
183+
}
177184
}
178185
console.log(`⬆️ Uploading ${name}...`);
179186
const endpoint = new URL(url);

src/main.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1+
import { setFailed, setOutput } from "@actions/core";
2+
import { getOctokit } from "@actions/github";
3+
import { GitHubReleaser, release, upload } from "./github";
14
import {
2-
paths,
3-
parseConfig,
45
isTag,
6+
parseConfig,
7+
paths,
58
unmatchedPatterns,
69
uploadUrl,
710
} from "./util";
8-
import { release, upload, GitHubReleaser } from "./github";
9-
import { getOctokit } from "@actions/github";
10-
import { setFailed, setOutput } from "@actions/core";
1111

1212
import { env } from "process";
1313

@@ -86,19 +86,23 @@ async function run() {
8686
path,
8787
currentAssets,
8888
);
89-
delete json.uploader;
89+
if (json) {
90+
delete json.uploader;
91+
}
9092
return json;
9193
};
9294

93-
let assets;
95+
let results: (any | null)[];
9496
if (!config.input_preserve_order) {
95-
assets = await Promise.all(files.map(uploadFile));
97+
results = await Promise.all(files.map(uploadFile));
9698
} else {
97-
assets = [];
99+
results = [];
98100
for (const path of files) {
99-
assets.push(await uploadFile(path));
101+
results.push(await uploadFile(path));
100102
}
101103
}
104+
105+
const assets = results.filter(Boolean);
102106
setOutput("assets", assets);
103107
}
104108
console.log(`🎉 Release ready at ${rel.html_url}`);

src/util.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export interface Config {
1212
input_body?: string;
1313
input_body_path?: string;
1414
input_files?: string[];
15+
input_overwrite_files?: boolean;
1516
input_draft?: boolean;
1617
input_preserve_order?: boolean;
1718
input_prerelease?: boolean;
@@ -62,6 +63,9 @@ export const parseConfig = (env: Env): Config => {
6263
input_body: env.INPUT_BODY,
6364
input_body_path: env.INPUT_BODY_PATH,
6465
input_files: parseInputFiles(env.INPUT_FILES || ""),
66+
input_overwrite_files: env.INPUT_OVERWRITE_FILES
67+
? env.INPUT_OVERWRITE_FILES == "true"
68+
: undefined,
6569
input_draft: env.INPUT_DRAFT ? env.INPUT_DRAFT === "true" : undefined,
6670
input_preserve_order: env.INPUT_PRESERVE_ORDER
6771
? env.INPUT_PRESERVE_ORDER == "true"

0 commit comments

Comments
 (0)