Fixes #357 Use a read stream for artifacts.
Some checks failed
Test / check_pr (push) Has been cancelled
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:
@@ -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 contentLength = 42
|
||||||
|
const fakeReadStream = {}
|
||||||
|
|
||||||
jest.mock('fs', () => {
|
jest.mock('fs', () => {
|
||||||
return {
|
return {
|
||||||
readFileSync: () => fileContents,
|
createReadStream: () => fakeReadStream,
|
||||||
statSync: () => { return { size: contentLength } }
|
statSync: () => {
|
||||||
|
return {size: contentLength}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -33,6 +35,6 @@ describe("Artifact", () => {
|
|||||||
|
|
||||||
it('reads artifact', () => {
|
it('reads artifact', () => {
|
||||||
const artifact = new Artifact('some/artifact')
|
const artifact = new Artifact('some/artifact')
|
||||||
expect(artifact.readFile()).toBe(fileContents)
|
expect(artifact.readFile()).toBe(fakeReadStream)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -7,7 +7,7 @@ const artifacts = [
|
|||||||
new Artifact('a/art1'),
|
new Artifact('a/art1'),
|
||||||
new Artifact('b/art2')
|
new Artifact('b/art2')
|
||||||
]
|
]
|
||||||
const fileContents = Buffer.from('artful facts', 'utf-8')
|
const fakeReadStream = {}
|
||||||
const contentLength = 42
|
const contentLength = 42
|
||||||
const releaseId = 100
|
const releaseId = 100
|
||||||
const url = 'http://api.example.com'
|
const url = 'http://api.example.com'
|
||||||
@@ -19,7 +19,7 @@ const uploadMock = jest.fn()
|
|||||||
jest.mock('fs', () => {
|
jest.mock('fs', () => {
|
||||||
return {
|
return {
|
||||||
promises: {},
|
promises: {},
|
||||||
readFileSync: () => fileContents,
|
createReadStream: () => fakeReadStream,
|
||||||
statSync: () => {
|
statSync: () => {
|
||||||
return {size: contentLength}
|
return {size: contentLength}
|
||||||
}
|
}
|
||||||
@@ -42,9 +42,9 @@ describe('ArtifactUploader', () => {
|
|||||||
|
|
||||||
expect(uploadMock).toBeCalledTimes(2)
|
expect(uploadMock).toBeCalledTimes(2)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
|
||||||
|
|
||||||
expect(deleteMock).toBeCalledTimes(0)
|
expect(deleteMock).toBeCalledTimes(0)
|
||||||
})
|
})
|
||||||
@@ -58,15 +58,15 @@ describe('ArtifactUploader', () => {
|
|||||||
|
|
||||||
expect(uploadMock).toBeCalledTimes(5)
|
expect(uploadMock).toBeCalledTimes(5)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
|
||||||
|
|
||||||
expect(deleteMock).toBeCalledTimes(0)
|
expect(deleteMock).toBeCalledTimes(0)
|
||||||
})
|
})
|
||||||
@@ -81,9 +81,9 @@ describe('ArtifactUploader', () => {
|
|||||||
|
|
||||||
expect(uploadMock).toBeCalledTimes(2)
|
expect(uploadMock).toBeCalledTimes(2)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
|
||||||
|
|
||||||
expect(deleteMock).toBeCalledTimes(2)
|
expect(deleteMock).toBeCalledTimes(2)
|
||||||
expect(deleteMock).toBeCalledWith(1)
|
expect(deleteMock).toBeCalledWith(1)
|
||||||
@@ -100,9 +100,9 @@ describe('ArtifactUploader', () => {
|
|||||||
|
|
||||||
expect(uploadMock).toBeCalledTimes(2)
|
expect(uploadMock).toBeCalledTimes(2)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
|
||||||
|
|
||||||
expect(deleteMock).toBeCalledTimes(0)
|
expect(deleteMock).toBeCalledTimes(0)
|
||||||
})
|
})
|
||||||
@@ -116,13 +116,13 @@ describe('ArtifactUploader', () => {
|
|||||||
|
|
||||||
expect(uploadMock).toBeCalledTimes(4)
|
expect(uploadMock).toBeCalledTimes(4)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
|
||||||
|
|
||||||
expect(deleteMock).toBeCalledTimes(0)
|
expect(deleteMock).toBeCalledTimes(0)
|
||||||
})
|
})
|
||||||
@@ -164,9 +164,9 @@ describe('ArtifactUploader', () => {
|
|||||||
|
|
||||||
expect(uploadMock).toBeCalledTimes(2)
|
expect(uploadMock).toBeCalledTimes(2)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art1', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art1', releaseId)
|
||||||
expect(uploadMock)
|
expect(uploadMock)
|
||||||
.toBeCalledWith(url, contentLength, 'raw', fileContents, 'art2', releaseId)
|
.toBeCalledWith(url, contentLength, 'raw', fakeReadStream, 'art2', releaseId)
|
||||||
|
|
||||||
expect(deleteMock).toBeCalledTimes(0)
|
expect(deleteMock).toBeCalledTimes(0)
|
||||||
})
|
})
|
||||||
|
|||||||
2
dist/index.js
vendored
2
dist/index.js
vendored
@@ -205,7 +205,7 @@ class Artifact {
|
|||||||
return (0, fs_1.statSync)(this.path).size;
|
return (0, fs_1.statSync)(this.path).size;
|
||||||
}
|
}
|
||||||
readFile() {
|
readFile() {
|
||||||
return (0, fs_1.readFileSync)(this.path);
|
return (0, fs_1.createReadStream)(this.path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.Artifact = Artifact;
|
exports.Artifact = Artifact;
|
||||||
|
|||||||
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
|||||||
import { basename } from "path";
|
import { basename } from "path";
|
||||||
import { readFileSync, statSync } from "fs";
|
import {createReadStream, readFileSync, ReadStream, statSync} from "fs";
|
||||||
|
|
||||||
export class Artifact {
|
export class Artifact {
|
||||||
readonly contentType: string
|
readonly contentType: string
|
||||||
@@ -16,7 +16,7 @@ export class Artifact {
|
|||||||
return statSync(this.path).size
|
return statSync(this.path).size
|
||||||
}
|
}
|
||||||
|
|
||||||
readFile(): Buffer {
|
readFile(): ReadStream {
|
||||||
return readFileSync(this.path)
|
return createReadStream(this.path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user