Skip to content

GitHub target: reduce memory consumption by streaming uploads/downloads #329

Description

@rhcarvalho

The GitHub target should never need to hold full release assets (nor any other potentially large files) in memory.

This issue tracks replacing code that reads full files from disk, downloads arbitrary files from the internet and calculate checksums. All of those steps can be performed with fixed size buffers, consuming less resources and eliminating a failure mode of running out of memory.

See discussion in #328 (comment).

Note: this might require changes to how we use the Octokit library.


Some of the candidates

Reading full files of arbitrary size to memory where we could possibly be stream uploading / calculating checksum:

const file = readFileSync(path);

Calculating MD5 hashes from in-memory bytes where we could be updating the checksum chunk-by-chunk:

craft/src/targets/github.ts

Lines 451 to 453 in 244efd8

private checksumFromData(data: BinaryLike): string {
return createHash('md5').update(data).digest('hex');
}

Downloading arbitrarily large assets from the Internet (into response.data) where we could read chunks and update a checksum:

response = await this.github.request(`GET ${url}`, {

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions