Skip to content

Commit d5f028c

Browse files
richardddricharddavisonchenrui333
authored
feature: preserve upload order (#500)
* Preserve upload order * Update README.md * Fix typings and add a test * fmt code Signed-off-by: Rui Chen <[email protected]> --------- Signed-off-by: Rui Chen <[email protected]> Co-authored-by: Richard Davison <[email protected]> Co-authored-by: Rui Chen <[email protected]>
1 parent 98daca2 commit d5f028c

File tree

5 files changed

+43
-15
lines changed

5 files changed

+43
-15
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ The following are optional as `step.with` keys
183183
| `body_path` | String | Path to load text communicating notable changes in this release |
184184
| `draft` | Boolean | Indicator of whether or not this release is a draft |
185185
| `prerelease` | Boolean | Indicator of whether or not is a prerelease |
186+
| `preserve_order` | Boolean | Indicator of whether order of files should be preserved when uploading assets |
186187
| `files` | String | Newline-delimited globs of paths to assets to upload for release |
187188
| `name` | String | Name of the release. defaults to tag name |
188189
| `tag_name` | String | Name of a tag. defaults to `github.ref` |

__tests__/util.test.ts

+13
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ describe("util", () => {
4747
input_body_path: undefined,
4848
input_draft: false,
4949
input_prerelease: false,
50+
input_preserve_order: undefined,
5051
input_files: [],
5152
input_name: undefined,
5253
input_tag_name: undefined,
@@ -68,6 +69,7 @@ describe("util", () => {
6869
input_body_path: "__tests__/release.txt",
6970
input_draft: false,
7071
input_prerelease: false,
72+
input_preserve_order: undefined,
7173
input_files: [],
7274
input_name: undefined,
7375
input_tag_name: undefined,
@@ -89,6 +91,7 @@ describe("util", () => {
8991
input_body_path: "__tests__/release.txt",
9092
input_draft: false,
9193
input_prerelease: false,
94+
input_preserve_order: undefined,
9295
input_files: [],
9396
input_name: undefined,
9497
input_tag_name: undefined,
@@ -122,6 +125,7 @@ describe("util", () => {
122125
input_body_path: undefined,
123126
input_draft: undefined,
124127
input_prerelease: undefined,
128+
input_preserve_order: undefined,
125129
input_files: [],
126130
input_name: undefined,
127131
input_tag_name: undefined,
@@ -149,6 +153,7 @@ describe("util", () => {
149153
input_draft: undefined,
150154
input_prerelease: undefined,
151155
input_files: [],
156+
input_preserve_order: undefined,
152157
input_name: undefined,
153158
input_tag_name: undefined,
154159
input_fail_on_unmatched_files: false,
@@ -174,6 +179,7 @@ describe("util", () => {
174179
input_draft: undefined,
175180
input_prerelease: undefined,
176181
input_files: [],
182+
input_preserve_order: undefined,
177183
input_name: undefined,
178184
input_tag_name: undefined,
179185
input_fail_on_unmatched_files: false,
@@ -199,6 +205,7 @@ describe("util", () => {
199205
input_body_path: undefined,
200206
input_draft: undefined,
201207
input_prerelease: undefined,
208+
input_preserve_order: undefined,
202209
input_files: [],
203210
input_name: undefined,
204211
input_tag_name: undefined,
@@ -216,6 +223,7 @@ describe("util", () => {
216223
parseConfig({
217224
INPUT_DRAFT: "false",
218225
INPUT_PRERELEASE: "true",
226+
INPUT_PRESERVE_ORDER: "true",
219227
GITHUB_TOKEN: "env-token",
220228
INPUT_TOKEN: "input-token",
221229
}),
@@ -228,6 +236,7 @@ describe("util", () => {
228236
input_body_path: undefined,
229237
input_draft: false,
230238
input_prerelease: true,
239+
input_preserve_order: true,
231240
input_files: [],
232241
input_name: undefined,
233242
input_tag_name: undefined,
@@ -255,6 +264,7 @@ describe("util", () => {
255264
input_body_path: undefined,
256265
input_draft: false,
257266
input_prerelease: true,
267+
input_preserve_order: undefined,
258268
input_files: [],
259269
input_name: undefined,
260270
input_tag_name: undefined,
@@ -281,6 +291,7 @@ describe("util", () => {
281291
input_body_path: undefined,
282292
input_draft: false,
283293
input_prerelease: true,
294+
input_preserve_order: undefined,
284295
input_files: [],
285296
input_name: undefined,
286297
input_tag_name: undefined,
@@ -306,6 +317,7 @@ describe("util", () => {
306317
input_body_path: undefined,
307318
input_draft: undefined,
308319
input_prerelease: undefined,
320+
input_preserve_order: undefined,
309321
input_files: [],
310322
input_name: undefined,
311323
input_tag_name: undefined,
@@ -331,6 +343,7 @@ describe("util", () => {
331343
input_body_path: undefined,
332344
input_draft: undefined,
333345
input_prerelease: undefined,
346+
input_preserve_order: undefined,
334347
input_files: [],
335348
input_name: undefined,
336349
input_tag_name: undefined,

action.yml

+3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ inputs:
2121
prerelease:
2222
description: "Identify the release as a prerelease. Defaults to false"
2323
required: false
24+
preserve_order:
25+
description: "Preserver the order of the artifacts when uploading"
26+
required: false
2427
files:
2528
description: "Newline-delimited list of path globs for asset files to upload"
2629
required: false

src/main.ts

+22-15
Original file line numberDiff line numberDiff line change
@@ -73,21 +73,28 @@ async function run() {
7373
}
7474
}
7575
const currentAssets = rel.assets;
76-
const assets = await Promise.all(
77-
files.map(async (path) => {
78-
const json = await upload(
79-
config,
80-
gh,
81-
uploadUrl(rel.upload_url),
82-
path,
83-
currentAssets,
84-
);
85-
delete json.uploader;
86-
return json;
87-
}),
88-
).catch((error) => {
89-
throw error;
90-
});
76+
77+
const uploadFile = async (path) => {
78+
const json = await upload(
79+
config,
80+
gh,
81+
uploadUrl(rel.upload_url),
82+
path,
83+
currentAssets,
84+
);
85+
delete json.uploader;
86+
return json;
87+
};
88+
89+
let assets;
90+
if (!config.input_preserve_order) {
91+
assets = await Promise.all(files.map(uploadFile));
92+
} else {
93+
assets = [];
94+
for (const path of files) {
95+
assets.push(await uploadFile(path));
96+
}
97+
}
9198
setOutput("assets", assets);
9299
}
93100
console.log(`🎉 Release ready at ${rel.html_url}`);

src/util.ts

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export interface Config {
1313
input_body_path?: string;
1414
input_files?: string[];
1515
input_draft?: boolean;
16+
input_preserve_order?: boolean;
1617
input_prerelease?: boolean;
1718
input_fail_on_unmatched_files?: boolean;
1819
input_target_commitish?: string;
@@ -62,6 +63,9 @@ export const parseConfig = (env: Env): Config => {
6263
input_body_path: env.INPUT_BODY_PATH,
6364
input_files: parseInputFiles(env.INPUT_FILES || ""),
6465
input_draft: env.INPUT_DRAFT ? env.INPUT_DRAFT === "true" : undefined,
66+
input_preserve_order: env.INPUT_PRESERVE_ORDER
67+
? env.INPUT_PRESERVE_ORDER == "true"
68+
: undefined,
6569
input_prerelease: env.INPUT_PRERELEASE
6670
? env.INPUT_PRERELEASE == "true"
6771
: undefined,

0 commit comments

Comments
 (0)