From 0d118dea3374683db5798d1d30856615442b1b5f Mon Sep 17 00:00:00 2001 From: Konrad Pabjan Date: Wed, 29 Jul 2020 13:25:47 +0200 Subject: [PATCH] Add support for tilde expansion --- .github/workflows/test.yml | 18 +++++++++++++----- dist/index.js | 9 ++++++--- src/download-artifact.ts | 12 +++++++++--- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 18d9fb9..3eea7de 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -68,16 +68,24 @@ jobs: name: 'Artifact-A' path: some/new/path + # Test downloading an artifact using tilde expansion + - name: Download artifact A + uses: ./ + with: + name: 'Artifact-A' + path: ~/some/path/with/a/tilde + - name: Verify successful download run: | - $file = "some/new/path/file-A.txt" - if(!(Test-Path -path $file)) + $file1 = "some/new/path/file-A.txt" + $file2 = "~/some/path/with/a/tilde/file-A.txt" + if(!(Test-Path -path $file1) -or !(Test-Path -path $file2)) { - Write-Error "Expected file does not exist" + Write-Error "Expected files do not exist" } - if(!((Get-Content $file) -ceq "Lorem ipsum dolor sit amet")) + if(!((Get-Content $file1) -ceq "Lorem ipsum dolor sit amet") -or !((Get-Content $file2) -ceq "Lorem ipsum dolor sit amet")) { - Write-Error "File contents of downloaded artifact are incorrect" + Write-Error "File contents of downloaded artifacts are incorrect" } shell: pwsh diff --git a/dist/index.js b/dist/index.js index 15e1e91..7b154b3 100644 --- a/dist/index.js +++ b/dist/index.js @@ -6634,6 +6634,7 @@ var __importStar = (this && this.__importStar) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); const core = __importStar(__webpack_require__(470)); const artifact = __importStar(__webpack_require__(214)); +const os = __importStar(__webpack_require__(87)); const path_1 = __webpack_require__(622); const constants_1 = __webpack_require__(694); function run() { @@ -6641,12 +6642,14 @@ function run() { try { const name = core.getInput(constants_1.Inputs.Name, { required: false }); const path = core.getInput(constants_1.Inputs.Path, { required: false }); + // resolve tilde expansion + const resolvedPath = path_1.resolve(path.replace('~', os.homedir)); const artifactClient = artifact.create(); if (!name) { // download all artifacts core.info('No artifact name specified, downloading all artifacts'); core.info('Creating an extra directory for each artifact that is being downloaded'); - const downloadResponse = yield artifactClient.downloadAllArtifacts(path); + const downloadResponse = yield artifactClient.downloadAllArtifacts(resolvedPath); core.info(`There were ${downloadResponse.length} artifacts downloaded`); for (const artifact of downloadResponse) { core.info(`Artifact ${artifact.artifactName} was downloaded to ${artifact.downloadPath}`); @@ -6658,12 +6661,12 @@ function run() { const downloadOptions = { createArtifactFolder: false }; - const downloadResponse = yield artifactClient.downloadArtifact(name, path, downloadOptions); + const downloadResponse = yield artifactClient.downloadArtifact(name, resolvedPath, downloadOptions); core.info(`Artifact ${downloadResponse.artifactName} was downloaded to ${downloadResponse.downloadPath}`); } // output the directory that the artifact(s) was/were downloaded to // if no path is provided, an empty string resolves to the current working directory - core.setOutput(constants_1.Outputs.DownloadPath, path_1.resolve(path)); + core.setOutput(constants_1.Outputs.DownloadPath, resolvedPath); core.info('Artifact download has finished successfully'); } catch (err) { diff --git a/src/download-artifact.ts b/src/download-artifact.ts index f24656a..ab698d2 100644 --- a/src/download-artifact.ts +++ b/src/download-artifact.ts @@ -1,5 +1,6 @@ import * as core from '@actions/core' import * as artifact from '@actions/artifact' +import * as os from 'os' import {resolve} from 'path' import {Inputs, Outputs} from './constants' @@ -8,6 +9,9 @@ async function run(): Promise { const name = core.getInput(Inputs.Name, {required: false}) const path = core.getInput(Inputs.Path, {required: false}) + // resolve tilde expansion + const resolvedPath = resolve(path.replace('~', os.homedir)) + const artifactClient = artifact.create() if (!name) { // download all artifacts @@ -15,7 +19,9 @@ async function run(): Promise { core.info( 'Creating an extra directory for each artifact that is being downloaded' ) - const downloadResponse = await artifactClient.downloadAllArtifacts(path) + const downloadResponse = await artifactClient.downloadAllArtifacts( + resolvedPath + ) core.info(`There were ${downloadResponse.length} artifacts downloaded`) for (const artifact of downloadResponse) { core.info( @@ -30,7 +36,7 @@ async function run(): Promise { } const downloadResponse = await artifactClient.downloadArtifact( name, - path, + resolvedPath, downloadOptions ) core.info( @@ -39,7 +45,7 @@ async function run(): Promise { } // output the directory that the artifact(s) was/were downloaded to // if no path is provided, an empty string resolves to the current working directory - core.setOutput(Outputs.DownloadPath, resolve(path)) + core.setOutput(Outputs.DownloadPath, resolvedPath) core.info('Artifact download has finished successfully') } catch (err) { core.setFailed(err.message)