Skip to content

Commit

Permalink
feat: read the release assets asynchronously (#552)
Browse files Browse the repository at this point in the history
Previously all assets were being read synchronously into memory, making
the action unsuitable for releasing very large assets. Because the
client library allows stream body inputs (it just forwards it to the
underlying `fetch` implementation), just do it.

The idea is also suggested by @enumag in
#353 (comment).

Fixes: #353

Signed-off-by: WANG Xuerui <[email protected]>
  • Loading branch information
xen0n authored Dec 11, 2024
1 parent 9e35a64 commit 64f1fa1
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 6 deletions.
5 changes: 2 additions & 3 deletions __tests__/github.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
//import * as assert from "assert";
//const assert = require('assert');
import * as assert from "assert";
import { text } from "stream/consumers";
import { mimeOrDefault, asset } from "../src/github";

describe("github", () => {
Expand All @@ -19,7 +18,7 @@ describe("github", () => {
assert.equal(name, "bar.txt");
assert.equal(mime, "text/plain");
assert.equal(size, 10);
assert.equal(data.toString(), "release me");
assert.equal(await text(data), "release me");
});
});
});
6 changes: 3 additions & 3 deletions src/github.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { GitHub } from "@actions/github/lib/utils";
import { Config, isTag, releaseBody, alignAssetName } from "./util";
import { statSync, readFileSync } from "fs";
import { createReadStream, statSync, type ReadStream } from "fs";
import { getType } from "mime";
import { basename } from "path";

Expand All @@ -10,7 +10,7 @@ export interface ReleaseAsset {
name: string;
mime: string;
size: number;
data: Buffer;
data: ReadStream;
}

export interface Release {
Expand Down Expand Up @@ -145,7 +145,7 @@ export const asset = (path: string): ReleaseAsset => {
name: basename(path),
mime: mimeOrDefault(path),
size: statSync(path).size,
data: readFileSync(path),
data: createReadStream(path, "binary"),
};
};

Expand Down

0 comments on commit 64f1fa1

Please sign in to comment.