mirror of
				https://github.com/docker/login-action.git
				synced 2025-10-31 01:40:11 +08:00 
			
		
		
		
	Merge pull request #593 from crazy-max/update-node20
chore: node 20 as default runtime
This commit is contained in:
		
						commit
						e7ebaec3b4
					
				
							
								
								
									
										3
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | /dist/** | ||||||
|  | /coverage/** | ||||||
|  | /node_modules/** | ||||||
| @ -1,11 +1,12 @@ | |||||||
| { | { | ||||||
|   "env": { |   "env": { | ||||||
|     "node": true, |     "node": true, | ||||||
|     "es2021": true, |     "es6": true, | ||||||
|     "jest": true |     "jest": true | ||||||
|   }, |   }, | ||||||
|   "extends": [ |   "extends": [ | ||||||
|     "eslint:recommended", |     "eslint:recommended", | ||||||
|  |     "plugin:@typescript-eslint/eslint-recommended", | ||||||
|     "plugin:@typescript-eslint/recommended", |     "plugin:@typescript-eslint/recommended", | ||||||
|     "plugin:jest/recommended", |     "plugin:jest/recommended", | ||||||
|     "plugin:prettier/recommended" |     "plugin:prettier/recommended" | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| import {beforeEach, describe, expect, jest, test} from '@jest/globals'; | import {beforeEach, describe, expect, jest, test} from '@jest/globals'; | ||||||
| import {AuthorizationData} from '@aws-sdk/client-ecr'; | import {AuthorizationData} from '@aws-sdk/client-ecr'; | ||||||
|  | 
 | ||||||
| import * as aws from '../src/aws'; | import * as aws from '../src/aws'; | ||||||
| 
 | 
 | ||||||
| describe('isECR', () => { | describe('isECR', () => { | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| import {expect, test} from '@jest/globals'; | import {expect, test} from '@jest/globals'; | ||||||
|  | 
 | ||||||
| import {getInputs} from '../src/context'; | import {getInputs} from '../src/context'; | ||||||
| 
 | 
 | ||||||
| test('with password and username getInputs does not throw error', async () => { | test('with password and username getInputs does not throw error', async () => { | ||||||
|  | |||||||
| @ -1,14 +1,15 @@ | |||||||
| import {expect, jest, test} from '@jest/globals'; | import {expect, jest, test} from '@jest/globals'; | ||||||
| import {loginStandard, logout} from '../src/docker'; |  | ||||||
| import * as path from 'path'; | import * as path from 'path'; | ||||||
| import * as exec from '@actions/exec'; | 
 | ||||||
|  | import {loginStandard, logout} from '../src/docker'; | ||||||
|  | import {Exec} from '@docker/actions-toolkit/lib/exec'; | ||||||
| 
 | 
 | ||||||
| process.env['RUNNER_TEMP'] = path.join(__dirname, 'runner'); | process.env['RUNNER_TEMP'] = path.join(__dirname, 'runner'); | ||||||
| 
 | 
 | ||||||
| test('loginStandard calls exec', async () => { | test('loginStandard calls exec', async () => { | ||||||
|   // eslint-disable-next-line @typescript-eslint/ban-ts-comment
 |   // eslint-disable-next-line @typescript-eslint/ban-ts-comment
 | ||||||
|   // @ts-ignore
 |   // @ts-ignore
 | ||||||
|   const execSpy = jest.spyOn(exec, 'getExecOutput').mockImplementation(async () => { |   const execSpy = jest.spyOn(Exec, 'getExecOutput').mockImplementation(async () => { | ||||||
|     return { |     return { | ||||||
|       exitCode: expect.any(Number), |       exitCode: expect.any(Number), | ||||||
|       stdout: expect.any(Function), |       stdout: expect.any(Function), | ||||||
| @ -32,7 +33,7 @@ test('loginStandard calls exec', async () => { | |||||||
| test('logout calls exec', async () => { | test('logout calls exec', async () => { | ||||||
|   // eslint-disable-next-line @typescript-eslint/ban-ts-comment
 |   // eslint-disable-next-line @typescript-eslint/ban-ts-comment
 | ||||||
|   // @ts-ignore
 |   // @ts-ignore
 | ||||||
|   const execSpy = jest.spyOn(exec, 'getExecOutput').mockImplementation(async () => { |   const execSpy = jest.spyOn(Exec, 'getExecOutput').mockImplementation(async () => { | ||||||
|     return { |     return { | ||||||
|       exitCode: expect.any(Number), |       exitCode: expect.any(Number), | ||||||
|       stdout: expect.any(Function), |       stdout: expect.any(Function), | ||||||
|  | |||||||
| @ -1,65 +0,0 @@ | |||||||
| import {expect, jest, test} from '@jest/globals'; |  | ||||||
| import osm = require('os'); |  | ||||||
| 
 |  | ||||||
| import {main} from '../src/main'; |  | ||||||
| import * as docker from '../src/docker'; |  | ||||||
| import * as stateHelper from '../src/state-helper'; |  | ||||||
| 
 |  | ||||||
| test('errors without username and password', async () => { |  | ||||||
|   jest.spyOn(osm, 'platform').mockImplementation(() => 'linux'); |  | ||||||
|   process.env['INPUT_LOGOUT'] = 'true'; // default value
 |  | ||||||
|   await expect(main()).rejects.toThrow(new Error('Username and password required')); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| test('successful with username and password', async () => { |  | ||||||
|   jest.spyOn(osm, 'platform').mockImplementation(() => 'linux'); |  | ||||||
|   const setRegistrySpy = jest.spyOn(stateHelper, 'setRegistry'); |  | ||||||
|   const setLogoutSpy = jest.spyOn(stateHelper, 'setLogout'); |  | ||||||
|   const dockerSpy = jest.spyOn(docker, 'login').mockImplementation(() => Promise.resolve()); |  | ||||||
| 
 |  | ||||||
|   const username = 'dbowie'; |  | ||||||
|   process.env[`INPUT_USERNAME`] = username; |  | ||||||
| 
 |  | ||||||
|   const password = 'groundcontrol'; |  | ||||||
|   process.env[`INPUT_PASSWORD`] = password; |  | ||||||
| 
 |  | ||||||
|   const ecr = 'auto'; |  | ||||||
|   process.env['INPUT_ECR'] = ecr; |  | ||||||
| 
 |  | ||||||
|   const logout = false; |  | ||||||
|   process.env['INPUT_LOGOUT'] = String(logout); |  | ||||||
| 
 |  | ||||||
|   await main(); |  | ||||||
| 
 |  | ||||||
|   expect(setRegistrySpy).toHaveBeenCalledWith(''); |  | ||||||
|   expect(setLogoutSpy).toHaveBeenCalledWith(logout); |  | ||||||
|   expect(dockerSpy).toHaveBeenCalledWith('', username, password, ecr); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
| test('calls docker login', async () => { |  | ||||||
|   jest.spyOn(osm, 'platform').mockImplementation(() => 'linux'); |  | ||||||
|   const setRegistrySpy = jest.spyOn(stateHelper, 'setRegistry'); |  | ||||||
|   const setLogoutSpy = jest.spyOn(stateHelper, 'setLogout'); |  | ||||||
|   const dockerSpy = jest.spyOn(docker, 'login').mockImplementation(() => Promise.resolve()); |  | ||||||
| 
 |  | ||||||
|   const username = 'dbowie'; |  | ||||||
|   process.env[`INPUT_USERNAME`] = username; |  | ||||||
| 
 |  | ||||||
|   const password = 'groundcontrol'; |  | ||||||
|   process.env[`INPUT_PASSWORD`] = password; |  | ||||||
| 
 |  | ||||||
|   const registry = 'ghcr.io'; |  | ||||||
|   process.env[`INPUT_REGISTRY`] = registry; |  | ||||||
| 
 |  | ||||||
|   const ecr = 'auto'; |  | ||||||
|   process.env['INPUT_ECR'] = ecr; |  | ||||||
| 
 |  | ||||||
|   const logout = true; |  | ||||||
|   process.env['INPUT_LOGOUT'] = String(logout); |  | ||||||
| 
 |  | ||||||
|   await main(); |  | ||||||
| 
 |  | ||||||
|   expect(setRegistrySpy).toHaveBeenCalledWith(registry); |  | ||||||
|   expect(setLogoutSpy).toHaveBeenCalledWith(logout); |  | ||||||
|   expect(dockerSpy).toHaveBeenCalledWith(registry, username, password, ecr); |  | ||||||
| }); |  | ||||||
| @ -26,6 +26,6 @@ inputs: | |||||||
|     required: false |     required: false | ||||||
| 
 | 
 | ||||||
| runs: | runs: | ||||||
|   using: 'node16' |   using: 'node20' | ||||||
|   main: 'dist/index.js' |   main: 'dist/index.js' | ||||||
|   post: 'dist/index.js' |   post: 'dist/index.js' | ||||||
|  | |||||||
| @ -1,8 +1,6 @@ | |||||||
| # syntax=docker/dockerfile:1 | # syntax=docker/dockerfile:1 | ||||||
| 
 | 
 | ||||||
| ARG NODE_VERSION=16 | ARG NODE_VERSION=20 | ||||||
| ARG DOCKER_VERSION=20.10.13 |  | ||||||
| ARG BUILDX_VERSION=0.8.1 |  | ||||||
| 
 | 
 | ||||||
| FROM node:${NODE_VERSION}-alpine AS base | FROM node:${NODE_VERSION}-alpine AS base | ||||||
| RUN apk add --no-cache cpio findutils git | RUN apk add --no-cache cpio findutils git | ||||||
| @ -18,14 +16,14 @@ COPY --from=deps /vendor / | |||||||
| 
 | 
 | ||||||
| FROM deps AS vendor-validate | FROM deps AS vendor-validate | ||||||
| RUN --mount=type=bind,target=.,rw <<EOT | RUN --mount=type=bind,target=.,rw <<EOT | ||||||
| set -e |   set -e | ||||||
| git add -A |   git add -A | ||||||
| cp -rf /vendor/* . |   cp -rf /vendor/* . | ||||||
| if [ -n "$(git status --porcelain -- yarn.lock)" ]; then |   if [ -n "$(git status --porcelain -- yarn.lock)" ]; then | ||||||
|   echo >&2 'ERROR: Vendor result differs. Please vendor your package with "docker buildx bake vendor-update"' |     echo >&2 'ERROR: Vendor result differs. Please vendor your package with "docker buildx bake vendor-update"' | ||||||
|   git status --porcelain -- yarn.lock |     git status --porcelain -- yarn.lock | ||||||
|   exit 1 |     exit 1 | ||||||
| fi |   fi | ||||||
| EOT | EOT | ||||||
| 
 | 
 | ||||||
| FROM deps AS build | FROM deps AS build | ||||||
| @ -38,14 +36,14 @@ COPY --from=build /out / | |||||||
| 
 | 
 | ||||||
| FROM build AS build-validate | FROM build AS build-validate | ||||||
| RUN --mount=type=bind,target=.,rw <<EOT | RUN --mount=type=bind,target=.,rw <<EOT | ||||||
| set -e |   set -e | ||||||
| git add -A |   git add -A | ||||||
| cp -rf /out/* . |   cp -rf /out/* . | ||||||
| if [ -n "$(git status --porcelain -- dist)" ]; then |   if [ -n "$(git status --porcelain -- dist)" ]; then | ||||||
|   echo >&2 'ERROR: Build result differs. Please build first with "docker buildx bake build"' |     echo >&2 'ERROR: Build result differs. Please build first with "docker buildx bake build"' | ||||||
|   git status --porcelain -- dist |     git status --porcelain -- dist | ||||||
|   exit 1 |     exit 1 | ||||||
| fi |   fi | ||||||
| EOT | EOT | ||||||
| 
 | 
 | ||||||
| FROM deps AS format | FROM deps AS format | ||||||
| @ -62,17 +60,12 @@ RUN --mount=type=bind,target=.,rw \ | |||||||
|   --mount=type=cache,target=/src/node_modules \ |   --mount=type=cache,target=/src/node_modules \ | ||||||
|   yarn run lint |   yarn run lint | ||||||
| 
 | 
 | ||||||
| FROM docker:${DOCKER_VERSION} as docker |  | ||||||
| FROM docker/buildx-bin:${BUILDX_VERSION} as buildx |  | ||||||
| 
 |  | ||||||
| FROM deps AS test | FROM deps AS test | ||||||
| ENV RUNNER_TEMP=/tmp/github_runner | ENV RUNNER_TEMP=/tmp/github_runner | ||||||
| ENV RUNNER_TOOL_CACHE=/tmp/github_tool_cache | ENV RUNNER_TOOL_CACHE=/tmp/github_tool_cache | ||||||
| RUN --mount=type=bind,target=.,rw \ | RUN --mount=type=bind,target=.,rw \ | ||||||
|   --mount=type=cache,target=/src/node_modules \ |   --mount=type=cache,target=/src/node_modules \ | ||||||
|   --mount=type=bind,from=docker,source=/usr/local/bin/docker,target=/usr/bin/docker \ |   yarn run test --coverage --coverageDirectory=/tmp/coverage | ||||||
|   --mount=type=bind,from=buildx,source=/buildx,target=/usr/libexec/docker/cli-plugins/docker-buildx \ |  | ||||||
|   yarn run test --coverageDirectory=/tmp/coverage |  | ||||||
| 
 | 
 | ||||||
| FROM scratch AS test-coverage | FROM scratch AS test-coverage | ||||||
| COPY --from=test /tmp/coverage / | COPY --from=test /tmp/coverage / | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/index.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/index.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -15,6 +15,7 @@ process.env = Object.assign({}, process.env, { | |||||||
| 
 | 
 | ||||||
| module.exports = { | module.exports = { | ||||||
|   clearMocks: true, |   clearMocks: true, | ||||||
|  |   testEnvironment: 'node', | ||||||
|   moduleFileExtensions: ['js', 'ts'], |   moduleFileExtensions: ['js', 'ts'], | ||||||
|   testMatch: ['**/*.test.ts'], |   testMatch: ['**/*.test.ts'], | ||||||
|   transform: { |   transform: { | ||||||
|  | |||||||
							
								
								
									
										46
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								package.json
									
									
									
									
									
								
							| @ -4,9 +4,13 @@ | |||||||
|   "main": "lib/main.js", |   "main": "lib/main.js", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "build": "ncc build src/main.ts --source-map --minify --license licenses.txt", |     "build": "ncc build src/main.ts --source-map --minify --license licenses.txt", | ||||||
|     "lint": "eslint src/**/*.ts __tests__/**/*.ts", |     "lint": "yarn run prettier && yarn run eslint", | ||||||
|     "format": "eslint --fix src/**/*.ts __tests__/**/*.ts", |     "format": "yarn run prettier:fix && yarn run eslint:fix", | ||||||
|     "test": "jest --coverage", |     "eslint": "eslint --max-warnings=0 .", | ||||||
|  |     "eslint:fix": "eslint --fix .", | ||||||
|  |     "prettier": "prettier --check \"./**/*.ts\"", | ||||||
|  |     "prettier:fix": "prettier --write \"./**/*.ts\"", | ||||||
|  |     "test": "jest", | ||||||
|     "all": "yarn run build && yarn run format && yarn test" |     "all": "yarn run build && yarn run format && yarn test" | ||||||
|   }, |   }, | ||||||
|   "repository": { |   "repository": { | ||||||
| @ -18,35 +22,29 @@ | |||||||
|     "docker", |     "docker", | ||||||
|     "login" |     "login" | ||||||
|   ], |   ], | ||||||
|   "author": "Docker", |   "author": "Docker Inc.", | ||||||
|   "contributors": [ |   "license": "Apache-2.0", | ||||||
|     { |  | ||||||
|       "name": "CrazyMax", |  | ||||||
|       "url": "https://crazymax.dev" |  | ||||||
|     } |  | ||||||
|   ], |  | ||||||
|   "license": "MIT", |  | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@actions/core": "^1.10.0", |     "@actions/core": "^1.10.0", | ||||||
|     "@aws-sdk/client-ecr": "^3.398.0", |     "@aws-sdk/client-ecr": "^3.398.0", | ||||||
|     "@aws-sdk/client-ecr-public": "^3.398.0", |     "@aws-sdk/client-ecr-public": "^3.398.0", | ||||||
|     "@docker/actions-toolkit": "^0.7.1", |     "@docker/actions-toolkit": "^0.12.0", | ||||||
|     "http-proxy-agent": "^7.0.0", |     "http-proxy-agent": "^7.0.0", | ||||||
|     "https-proxy-agent": "^7.0.1" |     "https-proxy-agent": "^7.0.1" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@types/node": "^16.18.21", |     "@types/node": "^20.5.9", | ||||||
|     "@typescript-eslint/eslint-plugin": "^5.56.0", |     "@typescript-eslint/eslint-plugin": "^6.6.0", | ||||||
|     "@typescript-eslint/parser": "^5.56.0", |     "@typescript-eslint/parser": "^6.6.0", | ||||||
|     "@vercel/ncc": "^0.36.1", |     "@vercel/ncc": "^0.38.0", | ||||||
|     "eslint": "^8.36.0", |     "eslint": "^8.48.0", | ||||||
|     "eslint-config-prettier": "^8.8.0", |     "eslint-config-prettier": "^9.0.0", | ||||||
|     "eslint-plugin-jest": "^27.2.1", |     "eslint-plugin-jest": "^27.2.3", | ||||||
|     "eslint-plugin-prettier": "^4.2.1", |     "eslint-plugin-prettier": "^5.0.0", | ||||||
|     "jest": "^29.5.0", |     "jest": "^29.6.4", | ||||||
|     "prettier": "^2.8.7", |     "prettier": "^3.0.3", | ||||||
|     "ts-jest": "^29.0.5", |     "ts-jest": "^29.1.1", | ||||||
|     "ts-node": "^10.9.1", |     "ts-node": "^10.9.1", | ||||||
|     "typescript": "^4.9.5" |     "typescript": "^5.2.2" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 CrazyMax
						CrazyMax