mirror of
				https://github.com/docker/setup-qemu-action.git
				synced 2025-10-30 08:40:09 +08:00 
			
		
		
		
	add tests
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									df78eaf547
								
							
						
					
					
						commit
						3ef11caa59
					
				| @ -1 +1,2 @@ | ||||
| /coverage | ||||
| /node_modules | ||||
|  | ||||
| @ -1,11 +1,13 @@ | ||||
| { | ||||
|   "env": { | ||||
|     "node": true, | ||||
|     "es2021": true | ||||
|     "es2021": true, | ||||
|     "jest": true | ||||
|   }, | ||||
|   "extends": [ | ||||
|     "eslint:recommended", | ||||
|     "plugin:@typescript-eslint/recommended", | ||||
|     "plugin:jest/recommended", | ||||
|     "plugin:prettier/recommended" | ||||
|   ], | ||||
|   "parser": "@typescript-eslint/parser", | ||||
| @ -15,6 +17,7 @@ | ||||
|   }, | ||||
|   "plugins": [ | ||||
|     "@typescript-eslint", | ||||
|     "jest", | ||||
|     "prettier" | ||||
|   ] | ||||
| } | ||||
|  | ||||
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,11 +1,6 @@ | ||||
| /.dev | ||||
| node_modules | ||||
| lib | ||||
| 
 | ||||
| # Jetbrains | ||||
| /.idea | ||||
| /*.iml | ||||
| 
 | ||||
| # Rest of the file pulled from https://github.com/github/gitignore/blob/master/Node.gitignore | ||||
| # Logs | ||||
| logs | ||||
|  | ||||
							
								
								
									
										65
									
								
								__tests__/context.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								__tests__/context.test.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,65 @@ | ||||
| import {beforeEach, describe, expect, test} from '@jest/globals'; | ||||
| 
 | ||||
| import * as context from '../src/context'; | ||||
| 
 | ||||
| describe('getInputs', () => { | ||||
|   beforeEach(() => { | ||||
|     process.env = Object.keys(process.env).reduce((object, key) => { | ||||
|       if (!key.startsWith('INPUT_')) { | ||||
|         object[key] = process.env[key]; | ||||
|       } | ||||
|       return object; | ||||
|     }, {}); | ||||
|   }); | ||||
| 
 | ||||
|   // prettier-ignore
 | ||||
|   test.each([ | ||||
|     [ | ||||
|       0, | ||||
|       new Map<string, string>([]), | ||||
|       { | ||||
|         image: 'tonistiigi/binfmt:latest', | ||||
|         platforms: 'all', | ||||
|       } as context.Inputs | ||||
|     ], | ||||
|     [ | ||||
|       1, | ||||
|       new Map<string, string>([ | ||||
|         ['image', 'docker/binfmt:latest'], | ||||
|         ['platforms', 'arm64,riscv64,arm'], | ||||
|       ]), | ||||
|       { | ||||
|         image: 'docker/binfmt:latest', | ||||
|         platforms: 'arm64,riscv64,arm', | ||||
|       } as context.Inputs | ||||
|     ], | ||||
|     [ | ||||
|       2, | ||||
|       new Map<string, string>([ | ||||
|         ['platforms', 'arm64, riscv64, arm '], | ||||
|       ]), | ||||
|       { | ||||
|         image: 'tonistiigi/binfmt:latest', | ||||
|         platforms: 'arm64,riscv64,arm', | ||||
|       } as context.Inputs | ||||
|     ] | ||||
|   ])( | ||||
|     '[%d] given %p as inputs, returns %p', | ||||
|     async (num: number, inputs: Map<string, string>, expected: context.Inputs) => { | ||||
|       inputs.forEach((value: string, name: string) => { | ||||
|         setInput(name, value); | ||||
|       }); | ||||
|       const res = await context.getInputs(); | ||||
|       expect(res).toEqual(expected); | ||||
|     } | ||||
|   ); | ||||
| }); | ||||
| 
 | ||||
| // See: https://github.com/actions/toolkit/blob/master/packages/core/src/core.ts#L67
 | ||||
| function getInputName(name: string): string { | ||||
|   return `INPUT_${name.replace(/ /g, '_').toUpperCase()}`; | ||||
| } | ||||
| 
 | ||||
| function setInput(name: string, value: string): void { | ||||
|   process.env[getInputName(name)] = value; | ||||
| } | ||||
| @ -16,14 +16,14 @@ COPY --from=deps /vendor / | ||||
| 
 | ||||
| FROM deps AS vendor-validate | ||||
| RUN --mount=type=bind,target=.,rw <<EOT | ||||
| set -e | ||||
| git add -A | ||||
| cp -rf /vendor/* . | ||||
| if [ -n "$(git status --porcelain -- yarn.lock)" ]; then | ||||
|   echo >&2 'ERROR: Vendor result differs. Please vendor your package with "docker buildx bake vendor-update"' | ||||
|   git status --porcelain -- yarn.lock | ||||
|   exit 1 | ||||
| fi | ||||
|   set -e | ||||
|   git add -A | ||||
|   cp -rf /vendor/* . | ||||
|   if [ -n "$(git status --porcelain -- yarn.lock)" ]; then | ||||
|     echo >&2 'ERROR: Vendor result differs. Please vendor your package with "docker buildx bake vendor-update"' | ||||
|     git status --porcelain -- yarn.lock | ||||
|     exit 1 | ||||
|   fi | ||||
| EOT | ||||
| 
 | ||||
| FROM deps AS build | ||||
| @ -36,14 +36,14 @@ COPY --from=build /out / | ||||
| 
 | ||||
| FROM build AS build-validate | ||||
| RUN --mount=type=bind,target=.,rw <<EOT | ||||
| set -e | ||||
| git add -A | ||||
| cp -rf /out/* . | ||||
| if [ -n "$(git status --porcelain -- dist)" ]; then | ||||
|   echo >&2 'ERROR: Build result differs. Please build first with "docker buildx bake build"' | ||||
|   git status --porcelain -- dist | ||||
|   exit 1 | ||||
| fi | ||||
|   set -e | ||||
|   git add -A | ||||
|   cp -rf /out/* . | ||||
|   if [ -n "$(git status --porcelain -- dist)" ]; then | ||||
|     echo >&2 'ERROR: Build result differs. Please build first with "docker buildx bake build"' | ||||
|     git status --porcelain -- dist | ||||
|     exit 1 | ||||
|   fi | ||||
| EOT | ||||
| 
 | ||||
| FROM deps AS format | ||||
| @ -59,3 +59,11 @@ FROM deps AS lint | ||||
| RUN --mount=type=bind,target=.,rw \ | ||||
|   --mount=type=cache,target=/src/node_modules \ | ||||
|   yarn run lint | ||||
| 
 | ||||
| FROM deps AS test | ||||
| RUN --mount=type=bind,target=.,rw \ | ||||
|   --mount=type=cache,target=/src/node_modules \ | ||||
|   yarn run test --coverageDirectory=/tmp/coverage | ||||
| 
 | ||||
| FROM scratch AS test-coverage | ||||
| COPY --from=test /tmp/coverage / | ||||
|  | ||||
| @ -45,3 +45,9 @@ target "vendor-validate" { | ||||
|   target = "vendor-validate" | ||||
|   output = ["type=cacheonly"] | ||||
| } | ||||
| 
 | ||||
| target "test" { | ||||
|   dockerfile = "dev.Dockerfile" | ||||
|   target = "test-coverage" | ||||
|   output = ["./coverage"] | ||||
| } | ||||
|  | ||||
							
								
								
									
										29
									
								
								jest.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								jest.config.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| import fs from 'fs'; | ||||
| import os from 'os'; | ||||
| import path from 'path'; | ||||
| 
 | ||||
| const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-setup-qemu-action-')); | ||||
| 
 | ||||
| process.env = Object.assign({}, process.env, { | ||||
|   TEMP: tmpDir, | ||||
|   GITHUB_REPOSITORY: 'docker/setup-qemu-action', | ||||
|   RUNNER_TEMP: path.join(tmpDir, 'runner-temp'), | ||||
|   RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache') | ||||
| }) as { | ||||
|   [key: string]: string; | ||||
| }; | ||||
| 
 | ||||
| module.exports = { | ||||
|   clearMocks: true, | ||||
|   moduleFileExtensions: ['js', 'ts'], | ||||
|   testMatch: ['**/*.test.ts'], | ||||
|   transform: { | ||||
|     '^.+\\.ts$': 'ts-jest' | ||||
|   }, | ||||
|   moduleNameMapper: { | ||||
|     '^csv-parse/sync': '<rootDir>/node_modules/csv-parse/dist/cjs/sync.cjs' | ||||
|   }, | ||||
|   collectCoverageFrom: ['src/**/{!(main.ts),}.ts'], | ||||
|   coveragePathIgnorePatterns: ['lib/', 'node_modules/', '__mocks__/', '__tests__/'], | ||||
|   verbose: true | ||||
| }; | ||||
							
								
								
									
										10
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								package.json
									
									
									
									
									
								
							| @ -4,9 +4,10 @@ | ||||
|   "main": "lib/main.js", | ||||
|   "scripts": { | ||||
|     "build": "ncc build src/main.ts --source-map --minify --license licenses.txt", | ||||
|     "lint": "eslint src/**/*.ts", | ||||
|     "format": "eslint --fix src/**/*.ts", | ||||
|     "all": "yarn run build && yarn run format" | ||||
|     "lint": "eslint src/**/*.ts __tests__/**/*.ts", | ||||
|     "format": "eslint --fix src/**/*.ts __tests__/**/*.ts", | ||||
|     "test": "jest --coverage", | ||||
|     "all": "yarn run build && yarn run format && yarn test" | ||||
|   }, | ||||
|   "repository": { | ||||
|     "type": "git", | ||||
| @ -36,8 +37,11 @@ | ||||
|     "@vercel/ncc": "^0.33.3", | ||||
|     "eslint": "^8.11.0", | ||||
|     "eslint-config-prettier": "^8.5.0", | ||||
|     "eslint-plugin-jest": "^26.1.1", | ||||
|     "eslint-plugin-prettier": "^4.0.0", | ||||
|     "jest": "^27.2.5", | ||||
|     "prettier": "^2.3.1", | ||||
|     "ts-jest": "^27.1.2", | ||||
|     "ts-node": "^10.7.0", | ||||
|     "typescript": "^4.4.4" | ||||
|   } | ||||
|  | ||||
| @ -1,17 +1,21 @@ | ||||
| { | ||||
|   "compilerOptions": { | ||||
|     "esModuleInterop": true, | ||||
|     "target": "es6", | ||||
|     "module": "commonjs", | ||||
|     "strict": true, | ||||
|     "newLine": "lf", | ||||
|     "outDir": "./lib", | ||||
|     "rootDir": "./src", | ||||
|     "esModuleInterop": true, | ||||
|     "forceConsistentCasingInFileNames": true, | ||||
|     "strict": true, | ||||
|     "noImplicitAny": false, | ||||
|     "resolveJsonModule": true, | ||||
|     "useUnknownInCatchVariables": false, | ||||
|   }, | ||||
|   "exclude": [ | ||||
|     "node_modules" | ||||
|     "./__tests__/**/*", | ||||
|     "./lib/**/*", | ||||
|     "node_modules", | ||||
|     "jest.config.ts" | ||||
|   ] | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 CrazyMax
						CrazyMax