diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index f6c5448..629953d 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -4,51 +4,130 @@ on: pull_request: branches: - master + - releases/** paths-ignore: - '**.md' push: branches: - master + - releases/** paths-ignore: - '**.md' jobs: - test: - name: Test on ${{ matrix.os }} - + # Build and unit test + build: strategy: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] fail-fast: false - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v1 - - - uses: actions/setup-node@v1 + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v1 with: node-version: '12.x' - - - name: Get npm cache directory + - name: Determine npm cache directory id: npm-cache run: | echo "::set-output name=dir::$(npm config get cache)" - - - uses: actions/cache@v1 + - name: Restore npm cache + uses: actions/cache@v1 with: path: ${{ steps.npm-cache.outputs.dir }} key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - - run: npm ci - - name: Prettier Format Check run: npm run format-check - - name: ESLint Check run: npm run lint - - name: Build & Test run: npm run test + + # End to end save and restore + test-save: + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + fail-fast: false + runs-on: ${{ matrix.os }} + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Generate files + shell: bash + run: __tests__/create-cache-files.sh ${{ runner.os }} + - name: Save cache + uses: ./ + with: + key: test-${{ runner.os }}-${{ github.run_id }} + path: test-cache + test-restore: + needs: test-save + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + fail-fast: false + runs-on: ${{ matrix.os }} + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Restore cache + uses: ./ + with: + key: test-${{ runner.os }}-${{ github.run_id }} + path: test-cache + - name: Verify cache + shell: bash + run: __tests__/verify-cache-files.sh ${{ runner.os }} + + # End to end with proxy + test-proxy-save: + runs-on: ubuntu-latest + container: + image: ubuntu:latest + options: --dns 127.0.0.1 + services: + squid-proxy: + image: datadog/squid:latest + ports: + - 3128:3128 + env: + https_proxy: http://squid-proxy:3128 + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Generate files + run: __tests__/create-cache-files.sh proxy + - name: Save cache + uses: ./ + with: + key: test-proxy-${{ github.run_id }} + path: test-cache + test-proxy-restore: + needs: test-proxy-save + runs-on: ubuntu-latest + container: + image: ubuntu:latest + options: --dns 127.0.0.1 + services: + squid-proxy: + image: datadog/squid:latest + ports: + - 3128:3128 + env: + https_proxy: http://squid-proxy:3128 + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Restore cache + uses: ./ + with: + key: test-proxy-${{ github.run_id }} + path: test-cache + - name: Verify cache + run: __tests__/verify-cache-files.sh proxy \ No newline at end of file diff --git a/__tests__/create-cache-files.sh b/__tests__/create-cache-files.sh new file mode 100755 index 0000000..885a5f2 --- /dev/null +++ b/__tests__/create-cache-files.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +# Validate args +prefix="$1" +if [ -z "$prefix" ]; then + echo "Must supply prefix argument" + exit 1 +fi + +mkdir test-cache +echo "$prefix $GITHUB_RUN_ID" > test-cache/test-file.txt \ No newline at end of file diff --git a/__tests__/tar.test.ts b/__tests__/tar.test.ts index d5d9b62..6de03c3 100644 --- a/__tests__/tar.test.ts +++ b/__tests__/tar.test.ts @@ -51,7 +51,7 @@ test("extract GNU tar", async () => { await tar.extractTar(archivePath, targetDirectory); - expect(execMock).toHaveBeenCalledTimes(2); + expect(execMock).toHaveBeenCalledTimes(1); expect(execMock).toHaveBeenLastCalledWith(`"tar"`, [ "-xz", "-f", diff --git a/__tests__/verify-cache-files.sh b/__tests__/verify-cache-files.sh new file mode 100755 index 0000000..c7b75ae --- /dev/null +++ b/__tests__/verify-cache-files.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +# Validate args +prefix="$1" +if [ -z "$prefix" ]; then + echo "Must supply prefix argument" + exit 1 +fi + +# Sanity check GITHUB_RUN_ID defined +if [ -z "$GITHUB_RUN_ID" ]; then + echo "GITHUB_RUN_ID not defined" + exit 1 +fi + +# Verify file exists +file="test-cache/test-file.txt" +echo "Checking for $file" +if [ ! -e $file ]; then + echo "File does not exist" + exit 1 +fi + +# Verify file content +content="$(cat $file)" +echo "File content:\n$content" +if [ -z "$(echo $content | grep --fixed-strings "$prefix $GITHUB_RUN_ID")" ]; then + echo "Unexpected file content" + exit 1 +fi \ No newline at end of file diff --git a/dist/restore/index.js b/dist/restore/index.js index c90f729..b5e894b 100644 --- a/dist/restore/index.js +++ b/dist/restore/index.js @@ -3000,6 +3000,7 @@ const exec_1 = __webpack_require__(986); const io = __importStar(__webpack_require__(1)); const fs_1 = __webpack_require__(747); const path = __importStar(__webpack_require__(622)); +const tar = __importStar(__webpack_require__(943)); function isGnuTar() { return __awaiter(this, void 0, void 0, function* () { core.debug("Checking tar --version"); @@ -3026,7 +3027,7 @@ function getTarPath(args) { if (fs_1.existsSync(systemTar)) { return systemTar; } - else if (yield isGnuTar()) { + else if (yield tar.isGnuTar()) { args.push("--force-local"); } } diff --git a/dist/save/index.js b/dist/save/index.js index 76c820c..a90a6e4 100644 --- a/dist/save/index.js +++ b/dist/save/index.js @@ -2981,6 +2981,7 @@ const exec_1 = __webpack_require__(986); const io = __importStar(__webpack_require__(1)); const fs_1 = __webpack_require__(747); const path = __importStar(__webpack_require__(622)); +const tar = __importStar(__webpack_require__(943)); function isGnuTar() { return __awaiter(this, void 0, void 0, function* () { core.debug("Checking tar --version"); @@ -3007,7 +3008,7 @@ function getTarPath(args) { if (fs_1.existsSync(systemTar)) { return systemTar; } - else if (yield isGnuTar()) { + else if (yield tar.isGnuTar()) { args.push("--force-local"); } } diff --git a/src/tar.ts b/src/tar.ts index dde9b61..00bed5a 100644 --- a/src/tar.ts +++ b/src/tar.ts @@ -3,6 +3,7 @@ import { exec } from "@actions/exec"; import * as io from "@actions/io"; import { existsSync } from "fs"; import * as path from "path"; +import * as tar from "./tar"; export async function isGnuTar(): Promise { core.debug("Checking tar --version"); @@ -28,7 +29,7 @@ async function getTarPath(args: string[]): Promise { const systemTar = `${process.env["windir"]}\\System32\\tar.exe`; if (existsSync(systemTar)) { return systemTar; - } else if (await isGnuTar()) { + } else if (await tar.isGnuTar()) { args.push("--force-local"); } }