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.' If false, the downloaded artifacts will be extracted into individual named directories within the specified path.'
required: false required: false
default: '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: github-token:
description: 'The GitHub token used to authenticate with the GitHub API. 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. 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["RunID"] = "run-id";
Inputs["Pattern"] = "pattern"; Inputs["Pattern"] = "pattern";
Inputs["MergeMultiple"] = "merge-multiple"; Inputs["MergeMultiple"] = "merge-multiple";
Inputs["AllowNotFound"] = "allow-not-found";
})(Inputs || (exports.Inputs = Inputs = {})); })(Inputs || (exports.Inputs = Inputs = {}));
var Outputs; var Outputs;
(function (Outputs) { (function (Outputs) {
@ -120546,7 +120547,10 @@ function run() {
repository: core.getInput(constants_1.Inputs.Repository, { required: false }), repository: core.getInput(constants_1.Inputs.Repository, { required: false }),
runID: parseInt(core.getInput(constants_1.Inputs.RunID, { required: false })), runID: parseInt(core.getInput(constants_1.Inputs.RunID, { required: false })),
pattern: core.getInput(constants_1.Inputs.Pattern, { 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) { if (!inputs.path) {
inputs.path = process.env['GITHUB_WORKSPACE'] || process.cwd(); inputs.path = process.env['GITHUB_WORKSPACE'] || process.cwd();
@ -120555,7 +120559,7 @@ function run() {
inputs.path = inputs.path.replace('~', os.homedir()); inputs.path = inputs.path.replace('~', os.homedir());
} }
const isSingleArtifactDownload = !!inputs.name; const isSingleArtifactDownload = !!inputs.name;
const resolvedPath = path.resolve(inputs.path); let resolvedPath = path.resolve(inputs.path);
core.debug(`Resolved path is ${resolvedPath}`); core.debug(`Resolved path is ${resolvedPath}`);
const options = {}; const options = {};
if (inputs.token) { if (inputs.token) {
@ -120573,12 +120577,23 @@ function run() {
let artifacts = []; let artifacts = [];
if (isSingleArtifactDownload) { if (isSingleArtifactDownload) {
core.info(`Downloading single artifact`); 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) { 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 { else {
const listArtifactResponse = yield artifact_1.default.listArtifacts(Object.assign({ latest: true }, options)); const listArtifactResponse = yield artifact_1.default.listArtifacts(Object.assign({ latest: true }, options));

View file

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

View file

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