mirror of
				https://github.com/actions/cache.git
				synced 2025-11-04 07:38:37 +08:00 
			
		
		
		
	Add Eric's e2e test change to get more coverage
This commit is contained in:
		
							parent
							
								
									0232e3178d
								
							
						
					
					
						commit
						3f662ca624
					
				
							
								
								
									
										111
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										111
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							| 
						 | 
					@ -4,51 +4,130 @@ on:
 | 
				
			||||||
  pull_request:
 | 
					  pull_request:
 | 
				
			||||||
    branches:
 | 
					    branches:
 | 
				
			||||||
      - master
 | 
					      - master
 | 
				
			||||||
 | 
					      - releases/**
 | 
				
			||||||
    paths-ignore:
 | 
					    paths-ignore:
 | 
				
			||||||
      - '**.md'
 | 
					      - '**.md'
 | 
				
			||||||
  push:
 | 
					  push:
 | 
				
			||||||
    branches:
 | 
					    branches:
 | 
				
			||||||
      - master
 | 
					      - master
 | 
				
			||||||
 | 
					      - releases/**
 | 
				
			||||||
    paths-ignore:
 | 
					    paths-ignore:
 | 
				
			||||||
      - '**.md'
 | 
					      - '**.md'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  test:
 | 
					  # Build and unit test
 | 
				
			||||||
    name: Test on ${{ matrix.os }}
 | 
					  build:
 | 
				
			||||||
 | 
					 | 
				
			||||||
    strategy:
 | 
					    strategy:
 | 
				
			||||||
      matrix:
 | 
					      matrix:
 | 
				
			||||||
        os: [ubuntu-latest, windows-latest, macOS-latest]
 | 
					        os: [ubuntu-latest, windows-latest, macOS-latest]
 | 
				
			||||||
      fail-fast: false
 | 
					      fail-fast: false
 | 
				
			||||||
 | 
					 | 
				
			||||||
    runs-on: ${{ matrix.os }}
 | 
					    runs-on: ${{ matrix.os }}
 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
    - uses: actions/checkout@v1
 | 
					    - name: Checkout
 | 
				
			||||||
 | 
					      uses: actions/checkout@v2
 | 
				
			||||||
    - uses: actions/setup-node@v1
 | 
					    - name: Setup Node.js
 | 
				
			||||||
 | 
					      uses: actions/setup-node@v1
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        node-version: '12.x'
 | 
					        node-version: '12.x'
 | 
				
			||||||
 | 
					    - name: Determine npm cache directory
 | 
				
			||||||
    - name: Get npm cache directory
 | 
					 | 
				
			||||||
      id: npm-cache
 | 
					      id: npm-cache
 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        echo "::set-output name=dir::$(npm config get cache)"
 | 
					        echo "::set-output name=dir::$(npm config get cache)"
 | 
				
			||||||
 | 
					    - name: Restore npm cache
 | 
				
			||||||
    - uses: actions/cache@v1
 | 
					      uses: actions/cache@v1
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        path: ${{ steps.npm-cache.outputs.dir }}
 | 
					        path: ${{ steps.npm-cache.outputs.dir }}
 | 
				
			||||||
        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
 | 
					        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
 | 
				
			||||||
        restore-keys: |
 | 
					        restore-keys: |
 | 
				
			||||||
          ${{ runner.os }}-node-
 | 
					          ${{ runner.os }}-node-
 | 
				
			||||||
 | 
					 | 
				
			||||||
    - run: npm ci
 | 
					    - run: npm ci
 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: Prettier Format Check
 | 
					    - name: Prettier Format Check
 | 
				
			||||||
      run: npm run format-check
 | 
					      run: npm run format-check
 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: ESLint Check
 | 
					    - name: ESLint Check
 | 
				
			||||||
      run: npm run lint
 | 
					      run: npm run lint
 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: Build & Test
 | 
					    - name: Build & Test
 | 
				
			||||||
      run: npm run 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
 | 
				
			||||||
							
								
								
									
										11
									
								
								__tests__/create-cache-files.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										11
									
								
								__tests__/create-cache-files.sh
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					@ -51,7 +51,7 @@ test("extract GNU tar", async () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await tar.extractTar(archivePath, targetDirectory);
 | 
					        await tar.extractTar(archivePath, targetDirectory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        expect(execMock).toHaveBeenCalledTimes(2);
 | 
					        expect(execMock).toHaveBeenCalledTimes(1);
 | 
				
			||||||
        expect(execMock).toHaveBeenLastCalledWith(`"tar"`, [
 | 
					        expect(execMock).toHaveBeenLastCalledWith(`"tar"`, [
 | 
				
			||||||
            "-xz",
 | 
					            "-xz",
 | 
				
			||||||
            "-f",
 | 
					            "-f",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										30
									
								
								__tests__/verify-cache-files.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								__tests__/verify-cache-files.sh
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -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
 | 
				
			||||||
							
								
								
									
										3
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							| 
						 | 
					@ -3000,6 +3000,7 @@ const exec_1 = __webpack_require__(986);
 | 
				
			||||||
const io = __importStar(__webpack_require__(1));
 | 
					const io = __importStar(__webpack_require__(1));
 | 
				
			||||||
const fs_1 = __webpack_require__(747);
 | 
					const fs_1 = __webpack_require__(747);
 | 
				
			||||||
const path = __importStar(__webpack_require__(622));
 | 
					const path = __importStar(__webpack_require__(622));
 | 
				
			||||||
 | 
					const tar = __importStar(__webpack_require__(943));
 | 
				
			||||||
function isGnuTar() {
 | 
					function isGnuTar() {
 | 
				
			||||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
					    return __awaiter(this, void 0, void 0, function* () {
 | 
				
			||||||
        core.debug("Checking tar --version");
 | 
					        core.debug("Checking tar --version");
 | 
				
			||||||
| 
						 | 
					@ -3026,7 +3027,7 @@ function getTarPath(args) {
 | 
				
			||||||
            if (fs_1.existsSync(systemTar)) {
 | 
					            if (fs_1.existsSync(systemTar)) {
 | 
				
			||||||
                return systemTar;
 | 
					                return systemTar;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else if (yield isGnuTar()) {
 | 
					            else if (yield tar.isGnuTar()) {
 | 
				
			||||||
                args.push("--force-local");
 | 
					                args.push("--force-local");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							| 
						 | 
					@ -2981,6 +2981,7 @@ const exec_1 = __webpack_require__(986);
 | 
				
			||||||
const io = __importStar(__webpack_require__(1));
 | 
					const io = __importStar(__webpack_require__(1));
 | 
				
			||||||
const fs_1 = __webpack_require__(747);
 | 
					const fs_1 = __webpack_require__(747);
 | 
				
			||||||
const path = __importStar(__webpack_require__(622));
 | 
					const path = __importStar(__webpack_require__(622));
 | 
				
			||||||
 | 
					const tar = __importStar(__webpack_require__(943));
 | 
				
			||||||
function isGnuTar() {
 | 
					function isGnuTar() {
 | 
				
			||||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
					    return __awaiter(this, void 0, void 0, function* () {
 | 
				
			||||||
        core.debug("Checking tar --version");
 | 
					        core.debug("Checking tar --version");
 | 
				
			||||||
| 
						 | 
					@ -3007,7 +3008,7 @@ function getTarPath(args) {
 | 
				
			||||||
            if (fs_1.existsSync(systemTar)) {
 | 
					            if (fs_1.existsSync(systemTar)) {
 | 
				
			||||||
                return systemTar;
 | 
					                return systemTar;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else if (yield isGnuTar()) {
 | 
					            else if (yield tar.isGnuTar()) {
 | 
				
			||||||
                args.push("--force-local");
 | 
					                args.push("--force-local");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,7 @@ import { exec } from "@actions/exec";
 | 
				
			||||||
import * as io from "@actions/io";
 | 
					import * as io from "@actions/io";
 | 
				
			||||||
import { existsSync } from "fs";
 | 
					import { existsSync } from "fs";
 | 
				
			||||||
import * as path from "path";
 | 
					import * as path from "path";
 | 
				
			||||||
 | 
					import * as tar from "./tar";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function isGnuTar(): Promise<boolean> {
 | 
					export async function isGnuTar(): Promise<boolean> {
 | 
				
			||||||
    core.debug("Checking tar --version");
 | 
					    core.debug("Checking tar --version");
 | 
				
			||||||
| 
						 | 
					@ -28,7 +29,7 @@ async function getTarPath(args: string[]): Promise<string> {
 | 
				
			||||||
        const systemTar = `${process.env["windir"]}\\System32\\tar.exe`;
 | 
					        const systemTar = `${process.env["windir"]}\\System32\\tar.exe`;
 | 
				
			||||||
        if (existsSync(systemTar)) {
 | 
					        if (existsSync(systemTar)) {
 | 
				
			||||||
            return systemTar;
 | 
					            return systemTar;
 | 
				
			||||||
        } else if (await isGnuTar()) {
 | 
					        } else if (await tar.isGnuTar()) {
 | 
				
			||||||
            args.push("--force-local");
 | 
					            args.push("--force-local");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user