mirror of
				https://github.com/actions/cache.git
				synced 2025-10-31 11:48:38 +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
	 Aiqiao Yan
						Aiqiao Yan