diff --git a/README.md b/README.md index 5608a8ddb..606a53eaf 100644 --- a/README.md +++ b/README.md @@ -517,6 +517,24 @@ Upload Lighthouse results as [action artifacts](https://help.github.com/en/actio uploadArtifacts: true ``` +#### `artifactName` (default: lighthouse-results) + +Filename of the action artifact when using `uploadArtifacts`. + +```yml +artifactName: my-custom-name +``` + +#### `artifactRetentionDays` (default: undefined) + +Number of days the action artifact should be retained for when using `uploadArtifacts`. + +This is based on the [`retention-days`](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts#configuring-a-custom-artifact-retention-period) property from `actions/upload-artifact`, which defaults to 90 days. + +```yml +artifactRetentionDays: 7 +``` + #### `temporaryPublicStorage` (default: false) Upload reports to the [_temporary public storage_](https://github.com/GoogleChrome/lighthouse-ci/blob/master/docs/getting-started.md#collect-lighthouse-results). diff --git a/action.yml b/action.yml index d61e05992..c3efade3f 100644 --- a/action.yml +++ b/action.yml @@ -12,6 +12,8 @@ inputs: artifactName: description: 'Name of the artifact group if using uploadArtifacts. default: lighthouse-results' default: lighthouse-results + artifactRetentionDays: + description: 'Number of days the action artifact should be retained for' temporaryPublicStorage: descripton: 'Opt-in to saving Lighthouse results to temporary public storage' runs: diff --git a/src/config.js b/src/config.js index 66779540c..358d65ec3 100644 --- a/src/config.js +++ b/src/config.js @@ -73,10 +73,11 @@ exports.getInput = function getInputArgs() { serverBaseUrl, serverToken, temporaryPublicStorage, - uploadArtifacts: core.getInput('uploadArtifacts') === 'true' ? true : false, + uploadArtifacts: core.getInput('uploadArtifacts') === 'true', basicAuthUsername: core.getInput('basicAuthUsername') || 'lighthouse', basicAuthPassword: core.getInput('basicAuthPassword'), artifactName: core.getInput('artifactName'), + artifactRetentionDays: core.getInput('artifactRetentionDays') ? parseInt(core.getInput('artifactRetentionDays'), 10) : undefined, } } diff --git a/src/index.js b/src/index.js index df24771a5..617f10802 100644 --- a/src/index.js +++ b/src/index.js @@ -65,7 +65,7 @@ async function main() { if (input.serverToken || input.temporaryPublicStorage || input.uploadArtifacts) { // upload artifacts as soon as collected if (input.uploadArtifacts) { - await uploadArtifacts(resultsPath, input.artifactName) + await uploadArtifacts(resultsPath, input.artifactName, input.artifactRetentionDays) } if (input.serverToken || input.temporaryPublicStorage) { diff --git a/src/utils/artifacts.js b/src/utils/artifacts.js index ba0364d6b..d62df079c 100644 --- a/src/utils/artifacts.js +++ b/src/utils/artifacts.js @@ -2,10 +2,13 @@ const artifact = require('@actions/artifact') const fs = require('fs').promises const { join } = require('path') -/** @param {string} resultsPath */ -exports.uploadArtifacts = async function uploadArtifacts(resultsPath, artifactName = 'lighthouse-results') { +/** + * @param {string} resultsPath + * @param {number} [retentionDays] + */ +exports.uploadArtifacts = async function uploadArtifacts(resultsPath, artifactName = 'lighthouse-results', retentionDays) { const artifactClient = artifact.create() const fileNames = await fs.readdir(resultsPath) const files = fileNames.map((fileName) => join(resultsPath, fileName)) - return artifactClient.uploadArtifact(artifactName, files, resultsPath, { continueOnError: true }) + return artifactClient.uploadArtifact(artifactName, files, resultsPath, { continueOnError: true, retentionDays }) }