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": { | ||||
|     "node": true, | ||||
|     "es2021": true, | ||||
|     "es6": true, | ||||
|     "jest": true | ||||
|   }, | ||||
|   "extends": [ | ||||
|     "eslint:recommended", | ||||
|     "plugin:@typescript-eslint/eslint-recommended", | ||||
|     "plugin:@typescript-eslint/recommended", | ||||
|     "plugin:jest/recommended", | ||||
|     "plugin:prettier/recommended" | ||||
|  | ||||
| @ -1,5 +1,6 @@ | ||||
| import {beforeEach, describe, expect, jest, test} from '@jest/globals'; | ||||
| import {AuthorizationData} from '@aws-sdk/client-ecr'; | ||||
| 
 | ||||
| import * as aws from '../src/aws'; | ||||
| 
 | ||||
| describe('isECR', () => { | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| import {expect, test} from '@jest/globals'; | ||||
| 
 | ||||
| import {getInputs} from '../src/context'; | ||||
| 
 | ||||
| test('with password and username getInputs does not throw error', async () => { | ||||
|  | ||||
| @ -1,14 +1,15 @@ | ||||
| import {expect, jest, test} from '@jest/globals'; | ||||
| import {loginStandard, logout} from '../src/docker'; | ||||
| 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'); | ||||
| 
 | ||||
| test('loginStandard calls exec', async () => { | ||||
|   // eslint-disable-next-line @typescript-eslint/ban-ts-comment
 | ||||
|   // @ts-ignore
 | ||||
|   const execSpy = jest.spyOn(exec, 'getExecOutput').mockImplementation(async () => { | ||||
|   const execSpy = jest.spyOn(Exec, 'getExecOutput').mockImplementation(async () => { | ||||
|     return { | ||||
|       exitCode: expect.any(Number), | ||||
|       stdout: expect.any(Function), | ||||
| @ -32,7 +33,7 @@ test('loginStandard calls exec', async () => { | ||||
| test('logout calls exec', async () => { | ||||
|   // eslint-disable-next-line @typescript-eslint/ban-ts-comment
 | ||||
|   // @ts-ignore
 | ||||
|   const execSpy = jest.spyOn(exec, 'getExecOutput').mockImplementation(async () => { | ||||
|   const execSpy = jest.spyOn(Exec, 'getExecOutput').mockImplementation(async () => { | ||||
|     return { | ||||
|       exitCode: expect.any(Number), | ||||
|       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 | ||||
| 
 | ||||
| runs: | ||||
|   using: 'node16' | ||||
|   using: 'node20' | ||||
|   main: 'dist/index.js' | ||||
|   post: 'dist/index.js' | ||||
|  | ||||
| @ -1,8 +1,6 @@ | ||||
| # syntax=docker/dockerfile:1 | ||||
| 
 | ||||
| ARG NODE_VERSION=16 | ||||
| ARG DOCKER_VERSION=20.10.13 | ||||
| ARG BUILDX_VERSION=0.8.1 | ||||
| ARG NODE_VERSION=20 | ||||
| 
 | ||||
| FROM node:${NODE_VERSION}-alpine AS base | ||||
| RUN apk add --no-cache cpio findutils git | ||||
| @ -62,17 +60,12 @@ RUN --mount=type=bind,target=.,rw \ | ||||
|   --mount=type=cache,target=/src/node_modules \ | ||||
|   yarn run lint | ||||
| 
 | ||||
| FROM docker:${DOCKER_VERSION} as docker | ||||
| FROM docker/buildx-bin:${BUILDX_VERSION} as buildx | ||||
| 
 | ||||
| FROM deps AS test | ||||
| ENV RUNNER_TEMP=/tmp/github_runner | ||||
| ENV RUNNER_TOOL_CACHE=/tmp/github_tool_cache | ||||
| RUN --mount=type=bind,target=.,rw \ | ||||
|   --mount=type=cache,target=/src/node_modules \ | ||||
|   --mount=type=bind,from=docker,source=/usr/local/bin/docker,target=/usr/bin/docker \ | ||||
|   --mount=type=bind,from=buildx,source=/buildx,target=/usr/libexec/docker/cli-plugins/docker-buildx \ | ||||
|   yarn run test --coverageDirectory=/tmp/coverage | ||||
|   yarn run test --coverage --coverageDirectory=/tmp/coverage | ||||
| 
 | ||||
| FROM scratch AS test-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 = { | ||||
|   clearMocks: true, | ||||
|   testEnvironment: 'node', | ||||
|   moduleFileExtensions: ['js', 'ts'], | ||||
|   testMatch: ['**/*.test.ts'], | ||||
|   transform: { | ||||
|  | ||||
							
								
								
									
										46
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								package.json
									
									
									
									
									
								
							| @ -4,9 +4,13 @@ | ||||
|   "main": "lib/main.js", | ||||
|   "scripts": { | ||||
|     "build": "ncc build src/main.ts --source-map --minify --license licenses.txt", | ||||
|     "lint": "eslint src/**/*.ts __tests__/**/*.ts", | ||||
|     "format": "eslint --fix src/**/*.ts __tests__/**/*.ts", | ||||
|     "test": "jest --coverage", | ||||
|     "lint": "yarn run prettier && yarn run eslint", | ||||
|     "format": "yarn run prettier:fix && yarn run eslint:fix", | ||||
|     "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" | ||||
|   }, | ||||
|   "repository": { | ||||
| @ -18,35 +22,29 @@ | ||||
|     "docker", | ||||
|     "login" | ||||
|   ], | ||||
|   "author": "Docker", | ||||
|   "contributors": [ | ||||
|     { | ||||
|       "name": "CrazyMax", | ||||
|       "url": "https://crazymax.dev" | ||||
|     } | ||||
|   ], | ||||
|   "license": "MIT", | ||||
|   "author": "Docker Inc.", | ||||
|   "license": "Apache-2.0", | ||||
|   "dependencies": { | ||||
|     "@actions/core": "^1.10.0", | ||||
|     "@aws-sdk/client-ecr": "^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", | ||||
|     "https-proxy-agent": "^7.0.1" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@types/node": "^16.18.21", | ||||
|     "@typescript-eslint/eslint-plugin": "^5.56.0", | ||||
|     "@typescript-eslint/parser": "^5.56.0", | ||||
|     "@vercel/ncc": "^0.36.1", | ||||
|     "eslint": "^8.36.0", | ||||
|     "eslint-config-prettier": "^8.8.0", | ||||
|     "eslint-plugin-jest": "^27.2.1", | ||||
|     "eslint-plugin-prettier": "^4.2.1", | ||||
|     "jest": "^29.5.0", | ||||
|     "prettier": "^2.8.7", | ||||
|     "ts-jest": "^29.0.5", | ||||
|     "@types/node": "^20.5.9", | ||||
|     "@typescript-eslint/eslint-plugin": "^6.6.0", | ||||
|     "@typescript-eslint/parser": "^6.6.0", | ||||
|     "@vercel/ncc": "^0.38.0", | ||||
|     "eslint": "^8.48.0", | ||||
|     "eslint-config-prettier": "^9.0.0", | ||||
|     "eslint-plugin-jest": "^27.2.3", | ||||
|     "eslint-plugin-prettier": "^5.0.0", | ||||
|     "jest": "^29.6.4", | ||||
|     "prettier": "^3.0.3", | ||||
|     "ts-jest": "^29.1.1", | ||||
|     "ts-node": "^10.9.1", | ||||
|     "typescript": "^4.9.5" | ||||
|     "typescript": "^5.2.2" | ||||
|   } | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 CrazyMax
						CrazyMax