Fixes #357 Use a read stream for artifacts.
Some checks failed
Test / check_pr (push) Has been cancelled

This seems to be safe since octokit mentions ReadableStreams in their fetcher wrapper & tests: https://github.com/octokit/request.js/blob/main/src/fetch-wrapper.ts#L44
(and also it seems to work when I test it).
This commit is contained in:
Nick Cipollo
2023-08-24 08:37:01 -04:00
parent 2d19fb459b
commit 6c75be85e5
5 changed files with 31 additions and 29 deletions

View File

@@ -1,12 +1,14 @@
import { Artifact } from "../src/Artifact";
import {Artifact} from "../src/Artifact";
const fileContents = Buffer.from('artful facts', 'utf-8')
const contentLength = 42
const fakeReadStream = {}
jest.mock('fs', () => {
return {
readFileSync: () => fileContents,
statSync: () => { return { size: contentLength } }
createReadStream: () => fakeReadStream,
statSync: () => {
return {size: contentLength}
}
};
})
@@ -33,6 +35,6 @@ describe("Artifact", () => {
it('reads artifact', () => {
const artifact = new Artifact('some/artifact')
expect(artifact.readFile()).toBe(fileContents)
expect(artifact.readFile()).toBe(fakeReadStream)
})
})

View File

@@ -7,7 +7,7 @@ const artifacts = [
new Artifact('a/art1'),
new Artifact('b/art2')
]
const fileContents = Buffer.from('artful facts', 'utf-8')
const fakeReadStream = {}
const contentLength = 42
const releaseId = 100
const url = 'http://api.example.com'
@@ -19,7 +19,7 @@ const uploadMock = jest.fn()
jest.mock('fs', () => {
return {
promises: {},
readFileSync: () => fileContents,
createReadStream: () => fakeReadStream,
statSync: () => {
return {size: contentLength}
}
@@ -42,9 +42,9 @@ describe('ArtifactUploader', () => {
expect(uploadMock).toBeCalledTimes(2)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
expect(deleteMock).toBeCalledTimes(0)
})
@@ -58,15 +58,15 @@ describe('ArtifactUploader', () => {
expect(uploadMock).toBeCalledTimes(5)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
expect(deleteMock).toBeCalledTimes(0)
})
@@ -81,9 +81,9 @@ describe('ArtifactUploader', () => {
expect(uploadMock).toBeCalledTimes(2)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
expect(deleteMock).toBeCalledTimes(2)
expect(deleteMock).toBeCalledWith(1)
@@ -100,9 +100,9 @@ describe('ArtifactUploader', () => {
expect(uploadMock).toBeCalledTimes(2)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
expect(deleteMock).toBeCalledTimes(0)
})
@@ -116,13 +116,13 @@ describe('ArtifactUploader', () => {
expect(uploadMock).toBeCalledTimes(4)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
expect(deleteMock).toBeCalledTimes(0)
})
@@ -164,9 +164,9 @@ describe('ArtifactUploader', () => {
expect(uploadMock).toBeCalledTimes(2)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
expect(uploadMock)
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
expect(deleteMock).toBeCalledTimes(0)
})

2
dist/index.js vendored
View File

@@ -205,7 +205,7 @@ class Artifact {
return (0, fs_1.statSync)(this.path).size;
}
readFile() {
return (0, fs_1.readFileSync)(this.path);
return (0, fs_1.createReadStream)(this.path);
}
}
exports.Artifact = Artifact;

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
import { basename } from "path";
import { readFileSync, statSync } from "fs";
import {createReadStream, readFileSync, ReadStream, statSync} from "fs";
export class Artifact {
readonly contentType: string
@@ -16,7 +16,7 @@ export class Artifact {
return statSync(this.path).size
}
readFile(): Buffer {
return readFileSync(this.path)
readFile(): ReadStream {
return createReadStream(this.path)
}
}