-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
reorganize upload code in prep for merge logic, add more tests
- Loading branch information
Rob Herley
committed
Jan 22, 2024
1 parent
694cdab
commit 8d531b1
Showing
13 changed files
with
62,279 additions
and
59,618 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,231 @@ | ||
import * as core from '@actions/core' | ||
import * as github from '@actions/github' | ||
import artifact, {ArtifactNotFoundError} from '@actions/artifact' | ||
import {run} from '../src/upload/upload-artifact' | ||
import {Inputs} from '../src/upload/constants' | ||
import * as search from '../src/shared/search' | ||
|
||
const fixtures = { | ||
artifactName: 'artifact-name', | ||
rootDirectory: '/some/artifact/path', | ||
filesToUpload: [ | ||
'/some/artifact/path/file1.txt', | ||
'/some/artifact/path/file2.txt' | ||
] | ||
} | ||
|
||
jest.mock('@actions/github', () => ({ | ||
context: { | ||
repo: { | ||
owner: 'actions', | ||
repo: 'toolkit' | ||
}, | ||
runId: 123, | ||
serverUrl: 'https://github.com' | ||
} | ||
})) | ||
|
||
jest.mock('@actions/core') | ||
|
||
/* eslint-disable no-unused-vars */ | ||
const mockInputs = (overrides?: Partial<{[K in Inputs]?: any}>) => { | ||
const inputs = { | ||
[Inputs.Name]: 'artifact-name', | ||
[Inputs.Path]: '/some/artifact/path', | ||
[Inputs.IfNoFilesFound]: 'warn', | ||
[Inputs.RetentionDays]: 0, | ||
[Inputs.CompressionLevel]: 6, | ||
[Inputs.Overwrite]: false, | ||
...overrides | ||
} | ||
|
||
;(core.getInput as jest.Mock).mockImplementation((name: string) => { | ||
return inputs[name] | ||
}) | ||
;(core.getBooleanInput as jest.Mock).mockImplementation((name: string) => { | ||
return inputs[name] | ||
}) | ||
|
||
return inputs | ||
} | ||
|
||
describe('upload', () => { | ||
beforeEach(async () => { | ||
mockInputs() | ||
|
||
jest.spyOn(search, 'findFilesToUpload').mockResolvedValue({ | ||
filesToUpload: fixtures.filesToUpload, | ||
rootDirectory: fixtures.rootDirectory | ||
}) | ||
|
||
jest.spyOn(artifact, 'uploadArtifact').mockResolvedValue({ | ||
size: 123, | ||
id: 1337 | ||
}) | ||
}) | ||
|
||
it('uploads a single file', async () => { | ||
jest.spyOn(search, 'findFilesToUpload').mockResolvedValue({ | ||
filesToUpload: [fixtures.filesToUpload[0]], | ||
rootDirectory: fixtures.rootDirectory | ||
}) | ||
|
||
await run() | ||
|
||
expect(artifact.uploadArtifact).toHaveBeenCalledWith( | ||
fixtures.artifactName, | ||
[fixtures.filesToUpload[0]], | ||
fixtures.rootDirectory, | ||
{compressionLevel: 6} | ||
) | ||
}) | ||
|
||
it('uploads multiple files', async () => { | ||
await run() | ||
|
||
expect(artifact.uploadArtifact).toHaveBeenCalledWith( | ||
fixtures.artifactName, | ||
fixtures.filesToUpload, | ||
fixtures.rootDirectory, | ||
{compressionLevel: 6} | ||
) | ||
}) | ||
|
||
it('sets outputs', async () => { | ||
await run() | ||
|
||
expect(core.setOutput).toHaveBeenCalledWith('artifact-id', 1337) | ||
expect(core.setOutput).toHaveBeenCalledWith( | ||
'artifact-url', | ||
`${github.context.serverUrl}/${github.context.repo.owner}/${ | ||
github.context.repo.repo | ||
}/actions/runs/${github.context.runId}/artifacts/${1337}` | ||
) | ||
}) | ||
|
||
it('supports custom compression level', async () => { | ||
mockInputs({ | ||
[Inputs.CompressionLevel]: 2 | ||
}) | ||
|
||
await run() | ||
|
||
expect(artifact.uploadArtifact).toHaveBeenCalledWith( | ||
fixtures.artifactName, | ||
fixtures.filesToUpload, | ||
fixtures.rootDirectory, | ||
{compressionLevel: 2} | ||
) | ||
}) | ||
|
||
it('supports custom retention days', async () => { | ||
mockInputs({ | ||
[Inputs.RetentionDays]: 7 | ||
}) | ||
|
||
await run() | ||
|
||
expect(artifact.uploadArtifact).toHaveBeenCalledWith( | ||
fixtures.artifactName, | ||
fixtures.filesToUpload, | ||
fixtures.rootDirectory, | ||
{retentionDays: 7, compressionLevel: 6} | ||
) | ||
}) | ||
|
||
it('supports warn if-no-files-found', async () => { | ||
mockInputs({ | ||
[Inputs.IfNoFilesFound]: 'warn' | ||
}) | ||
|
||
jest.spyOn(search, 'findFilesToUpload').mockResolvedValue({ | ||
filesToUpload: [], | ||
rootDirectory: fixtures.rootDirectory | ||
}) | ||
|
||
await run() | ||
|
||
expect(core.warning).toHaveBeenCalledWith( | ||
`No files were found with the provided path: ${fixtures.rootDirectory}. No artifacts will be uploaded.` | ||
) | ||
}) | ||
|
||
it('supports error if-no-files-found', async () => { | ||
mockInputs({ | ||
[Inputs.IfNoFilesFound]: 'error' | ||
}) | ||
|
||
jest.spyOn(search, 'findFilesToUpload').mockResolvedValue({ | ||
filesToUpload: [], | ||
rootDirectory: fixtures.rootDirectory | ||
}) | ||
|
||
await run() | ||
|
||
expect(core.setFailed).toHaveBeenCalledWith( | ||
`No files were found with the provided path: ${fixtures.rootDirectory}. No artifacts will be uploaded.` | ||
) | ||
}) | ||
|
||
it('supports ignore if-no-files-found', async () => { | ||
mockInputs({ | ||
[Inputs.IfNoFilesFound]: 'ignore' | ||
}) | ||
|
||
jest.spyOn(search, 'findFilesToUpload').mockResolvedValue({ | ||
filesToUpload: [], | ||
rootDirectory: fixtures.rootDirectory | ||
}) | ||
|
||
await run() | ||
|
||
expect(core.info).toHaveBeenCalledWith( | ||
`No files were found with the provided path: ${fixtures.rootDirectory}. No artifacts will be uploaded.` | ||
) | ||
}) | ||
|
||
it('supports overwrite', async () => { | ||
mockInputs({ | ||
[Inputs.Overwrite]: true | ||
}) | ||
|
||
jest.spyOn(artifact, 'deleteArtifact').mockResolvedValue({ | ||
id: 1337 | ||
}) | ||
|
||
await run() | ||
|
||
expect(artifact.uploadArtifact).toHaveBeenCalledWith( | ||
fixtures.artifactName, | ||
fixtures.filesToUpload, | ||
fixtures.rootDirectory, | ||
{compressionLevel: 6} | ||
) | ||
|
||
expect(artifact.deleteArtifact).toHaveBeenCalledWith(fixtures.artifactName) | ||
}) | ||
|
||
it('supports overwrite and continues if not found', async () => { | ||
mockInputs({ | ||
[Inputs.Overwrite]: true | ||
}) | ||
|
||
jest | ||
.spyOn(artifact, 'deleteArtifact') | ||
.mockRejectedValue(new ArtifactNotFoundError('not found')) | ||
|
||
await run() | ||
|
||
expect(artifact.uploadArtifact).toHaveBeenCalledWith( | ||
fixtures.artifactName, | ||
fixtures.filesToUpload, | ||
fixtures.rootDirectory, | ||
{compressionLevel: 6} | ||
) | ||
|
||
expect(artifact.deleteArtifact).toHaveBeenCalledWith(fixtures.artifactName) | ||
expect(core.debug).toHaveBeenCalledWith( | ||
`Skipping deletion of '${fixtures.artifactName}', it does not exist` | ||
) | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.