Add allow-not-found input in case artifact does not exist

This commit is contained in:
Christopher Roemheld 2024-02-20 15:16:51 +01:00
parent d0ce8fd116
commit 3421aafe77
4 changed files with 56 additions and 28 deletions

View file

@ -17,6 +17,10 @@ inputs:
If false, the downloaded artifacts will be extracted into individual named directories within the specified path.'
required: false
default: 'false'
allow-not-found:
description: 'If an artifact was not found, do not cause the action to fail.'
required: false
default: 'false'
github-token:
description: 'The GitHub token used to authenticate with the GitHub API.
This is required when downloading artifacts from a different repository or from a different workflow run.

27
dist/index.js vendored
View file

@ -120473,6 +120473,7 @@ var Inputs;
Inputs["RunID"] = "run-id";
Inputs["Pattern"] = "pattern";
Inputs["MergeMultiple"] = "merge-multiple";
Inputs["AllowNotFound"] = "allow-not-found";
})(Inputs || (exports.Inputs = Inputs = {}));
var Outputs;
(function (Outputs) {
@ -120546,7 +120547,10 @@ function run() {
repository: core.getInput(constants_1.Inputs.Repository, { required: false }),
runID: parseInt(core.getInput(constants_1.Inputs.RunID, { required: false })),
pattern: core.getInput(constants_1.Inputs.Pattern, { required: false }),
mergeMultiple: core.getBooleanInput(constants_1.Inputs.MergeMultiple, { required: false })
mergeMultiple: core.getBooleanInput(constants_1.Inputs.MergeMultiple, {
required: false
}),
allowNotFound: core.getBooleanInput(constants_1.Inputs.AllowNotFound, { required: false })
};
if (!inputs.path) {
inputs.path = process.env['GITHUB_WORKSPACE'] || process.cwd();
@ -120555,7 +120559,7 @@ function run() {
inputs.path = inputs.path.replace('~', os.homedir());
}
const isSingleArtifactDownload = !!inputs.name;
const resolvedPath = path.resolve(inputs.path);
let resolvedPath = path.resolve(inputs.path);
core.debug(`Resolved path is ${resolvedPath}`);
const options = {};
if (inputs.token) {
@ -120573,12 +120577,23 @@ function run() {
let artifacts = [];
if (isSingleArtifactDownload) {
core.info(`Downloading single artifact`);
const { artifact: targetArtifact } = yield artifact_1.default.getArtifact(inputs.name, options);
const targetArtifact = yield artifact_1.default
.getArtifact(inputs.name, options)
.catch(() => null);
if (!targetArtifact) {
throw new Error(`Artifact '${inputs.name}' not found`);
const message = `Artifact '${inputs.name}' not found`;
if (!inputs.allowNotFound) {
throw new Error(message);
}
else {
core.warning(message);
resolvedPath = '';
}
}
else {
core.debug(`Found named artifact '${inputs.name}' (ID: ${targetArtifact.artifact.id}, Size: ${targetArtifact.artifact.size})`);
artifacts = [targetArtifact.artifact];
}
core.debug(`Found named artifact '${inputs.name}' (ID: ${targetArtifact.id}, Size: ${targetArtifact.size})`);
artifacts = [targetArtifact];
}
else {
const listArtifactResponse = yield artifact_1.default.listArtifacts(Object.assign({ latest: true }, options));

View file

@ -5,7 +5,8 @@ export enum Inputs {
Repository = 'repository',
RunID = 'run-id',
Pattern = 'pattern',
MergeMultiple = 'merge-multiple'
MergeMultiple = 'merge-multiple',
AllowNotFound = 'allow-not-found'
}
export enum Outputs {

View file

@ -23,7 +23,10 @@ async function run(): Promise<void> {
repository: core.getInput(Inputs.Repository, {required: false}),
runID: parseInt(core.getInput(Inputs.RunID, {required: false})),
pattern: core.getInput(Inputs.Pattern, {required: false}),
mergeMultiple: core.getBooleanInput(Inputs.MergeMultiple, {required: false})
mergeMultiple: core.getBooleanInput(Inputs.MergeMultiple, {
required: false
}),
allowNotFound: core.getBooleanInput(Inputs.AllowNotFound, {required: false})
}
if (!inputs.path) {
@ -35,7 +38,7 @@ async function run(): Promise<void> {
}
const isSingleArtifactDownload = !!inputs.name
const resolvedPath = path.resolve(inputs.path)
let resolvedPath = path.resolve(inputs.path)
core.debug(`Resolved path is ${resolvedPath}`)
const options: FindOptions = {}
@ -60,20 +63,25 @@ async function run(): Promise<void> {
if (isSingleArtifactDownload) {
core.info(`Downloading single artifact`)
const {artifact: targetArtifact} = await artifactClient.getArtifact(
inputs.name,
options
)
const targetArtifact = await artifactClient
.getArtifact(inputs.name, options)
.catch(() => null)
if (!targetArtifact) {
throw new Error(`Artifact '${inputs.name}' not found`)
const message = `Artifact '${inputs.name}' not found`
if (!inputs.allowNotFound) {
throw new Error(message)
} else {
core.warning(message)
resolvedPath = ''
}
} else {
core.debug(
`Found named artifact '${inputs.name}' (ID: ${targetArtifact.artifact.id}, Size: ${targetArtifact.artifact.size})`
)
artifacts = [targetArtifact.artifact]
}
core.debug(
`Found named artifact '${inputs.name}' (ID: ${targetArtifact.id}, Size: ${targetArtifact.size})`
)
artifacts = [targetArtifact]
} else {
const listArtifactResponse = await artifactClient.listArtifacts({
latest: true,