mirror of
https://github.com/docker/login-action.git
synced 2025-08-18 01:59:53 +08:00
Compare commits
26 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
f054a8b539 | ||
|
0644d98afe | ||
|
9e433e18cf | ||
|
39efbd2c12 | ||
|
4608add020 | ||
|
4fd5d8ead6 | ||
|
e2346b6971 | ||
|
2051808c83 | ||
|
7c220e1b8d | ||
|
f4cae19820 | ||
|
e5ad366574 | ||
|
45bc0ebd6b | ||
|
79068f5240 | ||
|
8e670da7a1 | ||
|
76901a9025 | ||
|
31f1bb4610 | ||
|
28eb30dcb6 | ||
|
03b00fbeba | ||
|
5934fe3407 | ||
|
3cba154eb7 | ||
|
986a54f35b | ||
|
fdb725ed4b | ||
|
bab7dcbf29 | ||
|
c0d23108f7 | ||
|
c902ecc709 | ||
|
b612a76a31 |
4
.github/dependabot.yml
vendored
4
.github/dependabot.yml
vendored
@@ -4,8 +4,6 @@ updates:
|
|||||||
directory: "/"
|
directory: "/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
time: "06:00"
|
|
||||||
timezone: "Europe/Paris"
|
|
||||||
labels:
|
labels:
|
||||||
- ":game_die: dependencies"
|
- ":game_die: dependencies"
|
||||||
- ":robot: bot"
|
- ":robot: bot"
|
||||||
@@ -13,8 +11,6 @@ updates:
|
|||||||
directory: "/"
|
directory: "/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
time: "06:00"
|
|
||||||
timezone: "Europe/Paris"
|
|
||||||
allow:
|
allow:
|
||||||
- dependency-type: "production"
|
- dependency-type: "production"
|
||||||
labels:
|
labels:
|
||||||
|
35
.github/workflows/ci.yml
vendored
35
.github/workflows/ci.yml
vendored
@@ -28,6 +28,27 @@ jobs:
|
|||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
logout:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
logout:
|
||||||
|
- false
|
||||||
|
- true
|
||||||
|
steps:
|
||||||
|
-
|
||||||
|
name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
-
|
||||||
|
name: Login to GitHub Container Registry
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.repository_owner }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
logout: ${{ matrix.logout }}
|
||||||
|
|
||||||
dind:
|
dind:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
@@ -143,20 +164,6 @@ jobs:
|
|||||||
username: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
username: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
|
||||||
github-package:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
-
|
|
||||||
name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
-
|
|
||||||
name: Login to GitHub Package Registry
|
|
||||||
uses: ./
|
|
||||||
with:
|
|
||||||
registry: docker.pkg.github.com
|
|
||||||
username: ${{ github.repository_owner }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
github-container:
|
github-container:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
29
README.md
29
README.md
@@ -14,7 +14,6 @@ ___
|
|||||||
|
|
||||||
* [Usage](#usage)
|
* [Usage](#usage)
|
||||||
* [Docker Hub](#docker-hub)
|
* [Docker Hub](#docker-hub)
|
||||||
* [GitHub Packages Docker Registry](#github-packages-docker-registry)
|
|
||||||
* [GitHub Container Registry](#github-container-registry)
|
* [GitHub Container Registry](#github-container-registry)
|
||||||
* [GitLab](#gitlab)
|
* [GitLab](#gitlab)
|
||||||
* [Azure Container Registry (ACR)](#azure-container-registry-acr)
|
* [Azure Container Registry (ACR)](#azure-container-registry-acr)
|
||||||
@@ -54,34 +53,6 @@ jobs:
|
|||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
```
|
```
|
||||||
|
|
||||||
### GitHub Packages Docker Registry
|
|
||||||
|
|
||||||
> :warning: GitHub Packages Docker Registry (aka `docker.pkg.github.com`) **is deprecated** and will sunset early next
|
|
||||||
> year. It's strongly advised to [migrate to GitHub Container Registry](https://docs.github.com/en/packages/getting-started-with-github-container-registry/migrating-to-github-container-registry-for-docker-images)
|
|
||||||
> instead.
|
|
||||||
|
|
||||||
You can configure the Docker client to use [GitHub Packages to publish and retrieve docker images](https://docs.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages).
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
name: ci
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
login:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
-
|
|
||||||
name: Login to GitHub Packages Docker Registry
|
|
||||||
uses: docker/login-action@v1
|
|
||||||
with:
|
|
||||||
registry: docker.pkg.github.com
|
|
||||||
username: ${{ github.repository_owner }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
```
|
|
||||||
|
|
||||||
### GitHub Container Registry
|
### GitHub Container Registry
|
||||||
|
|
||||||
To use the [GitHub Container Registry](https://docs.github.com/en/packages/getting-started-with-github-container-registry),
|
To use the [GitHub Container Registry](https://docs.github.com/en/packages/getting-started-with-github-container-registry),
|
||||||
|
@@ -5,6 +5,7 @@ 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 () => {
|
||||||
process.env['INPUT_USERNAME'] = 'dbowie';
|
process.env['INPUT_USERNAME'] = 'dbowie';
|
||||||
process.env['INPUT_PASSWORD'] = 'groundcontrol';
|
process.env['INPUT_PASSWORD'] = 'groundcontrol';
|
||||||
|
process.env['INPUT_LOGOUT'] = 'true';
|
||||||
expect(() => {
|
expect(() => {
|
||||||
getInputs();
|
getInputs();
|
||||||
}).not.toThrowError();
|
}).not.toThrowError();
|
||||||
|
@@ -7,9 +7,14 @@ import * as exec from '@actions/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 () => {
|
||||||
const execSpy: jest.SpyInstance = jest.spyOn(exec, 'exec');
|
const execSpy: jest.SpyInstance = jest.spyOn(exec, 'getExecOutput');
|
||||||
// don't let exec try to actually run the commands
|
execSpy.mockImplementation(() =>
|
||||||
execSpy.mockImplementation(() => {});
|
Promise.resolve({
|
||||||
|
exitCode: expect.any(Number),
|
||||||
|
stdout: expect.any(Function),
|
||||||
|
stderr: expect.any(Function)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
const username: string = 'dbowie';
|
const username: string = 'dbowie';
|
||||||
const password: string = 'groundcontrol';
|
const password: string = 'groundcontrol';
|
||||||
@@ -20,30 +25,25 @@ test('loginStandard calls exec', async () => {
|
|||||||
expect(execSpy).toHaveBeenCalledWith(`docker`, ['login', '--password-stdin', '--username', username, registry], {
|
expect(execSpy).toHaveBeenCalledWith(`docker`, ['login', '--password-stdin', '--username', username, registry], {
|
||||||
input: Buffer.from(password),
|
input: Buffer.from(password),
|
||||||
silent: true,
|
silent: true,
|
||||||
ignoreReturnCode: true,
|
ignoreReturnCode: true
|
||||||
listeners: expect.objectContaining({
|
|
||||||
stdout: expect.any(Function),
|
|
||||||
stderr: expect.any(Function)
|
|
||||||
})
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('logout calls exec', async () => {
|
test('logout calls exec', async () => {
|
||||||
const execSpy: jest.SpyInstance = jest.spyOn(exec, 'exec');
|
const execSpy: jest.SpyInstance = jest.spyOn(exec, 'getExecOutput');
|
||||||
// don't let exec try to actually run the commands
|
execSpy.mockImplementation(() =>
|
||||||
execSpy.mockImplementation(() => {});
|
Promise.resolve({
|
||||||
|
exitCode: expect.any(Number),
|
||||||
|
stdout: expect.any(Function),
|
||||||
|
stderr: expect.any(Function)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
const registry: string = 'https://ghcr.io';
|
const registry: string = 'https://ghcr.io';
|
||||||
|
|
||||||
await logout(registry);
|
await logout(registry);
|
||||||
|
|
||||||
expect(execSpy).toHaveBeenCalledWith(`docker`, ['logout', registry], {
|
expect(execSpy).toHaveBeenCalledWith(`docker`, ['logout', registry], {
|
||||||
silent: false,
|
ignoreReturnCode: true
|
||||||
ignoreReturnCode: true,
|
|
||||||
input: Buffer.from(''),
|
|
||||||
listeners: expect.objectContaining({
|
|
||||||
stdout: expect.any(Function),
|
|
||||||
stderr: expect.any(Function)
|
|
||||||
})
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -10,6 +10,8 @@ test('errors without username and password', async () => {
|
|||||||
const platSpy = jest.spyOn(osm, 'platform');
|
const platSpy = jest.spyOn(osm, 'platform');
|
||||||
platSpy.mockImplementation(() => 'linux');
|
platSpy.mockImplementation(() => 'linux');
|
||||||
|
|
||||||
|
process.env['INPUT_LOGOUT'] = 'true'; // default value
|
||||||
|
|
||||||
const coreSpy: jest.SpyInstance = jest.spyOn(core, 'setFailed');
|
const coreSpy: jest.SpyInstance = jest.spyOn(core, 'setFailed');
|
||||||
|
|
||||||
await run();
|
await run();
|
||||||
@@ -32,10 +34,13 @@ test('successful with username and password', async () => {
|
|||||||
const password: string = 'groundcontrol';
|
const password: string = 'groundcontrol';
|
||||||
process.env[`INPUT_PASSWORD`] = password;
|
process.env[`INPUT_PASSWORD`] = password;
|
||||||
|
|
||||||
|
const logout: boolean = false;
|
||||||
|
process.env['INPUT_LOGOUT'] = String(logout);
|
||||||
|
|
||||||
await run();
|
await run();
|
||||||
|
|
||||||
expect(setRegistrySpy).toHaveBeenCalledWith('');
|
expect(setRegistrySpy).toHaveBeenCalledWith('');
|
||||||
expect(setLogoutSpy).toHaveBeenCalledWith('');
|
expect(setLogoutSpy).toHaveBeenCalledWith(logout);
|
||||||
expect(dockerSpy).toHaveBeenCalledWith('', username, password);
|
expect(dockerSpy).toHaveBeenCalledWith('', username, password);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -57,8 +62,8 @@ test('calls docker login', async () => {
|
|||||||
const registry: string = 'ghcr.io';
|
const registry: string = 'ghcr.io';
|
||||||
process.env[`INPUT_REGISTRY`] = registry;
|
process.env[`INPUT_REGISTRY`] = registry;
|
||||||
|
|
||||||
const logout: string = 'true';
|
const logout: boolean = true;
|
||||||
process.env['INPUT_LOGOUT'] = logout;
|
process.env['INPUT_LOGOUT'] = String(logout);
|
||||||
|
|
||||||
await run();
|
await run();
|
||||||
|
|
||||||
|
1600
dist/index.js
generated
vendored
1600
dist/index.js
generated
vendored
File diff suppressed because it is too large
Load Diff
@@ -27,10 +27,10 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.2.6",
|
"@actions/core": "^1.4.0",
|
||||||
"@actions/exec": "^1.0.4",
|
"@actions/exec": "^1.1.0",
|
||||||
"@actions/io": "^1.0.2",
|
"@actions/io": "^1.1.1",
|
||||||
"semver": "^7.3.2"
|
"semver": "^7.3.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^26.0.3",
|
"@types/jest": "^26.0.3",
|
||||||
|
25
src/aws.ts
25
src/aws.ts
@@ -1,6 +1,6 @@
|
|||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
|
import * as exec from '@actions/exec';
|
||||||
import * as io from '@actions/io';
|
import * as io from '@actions/io';
|
||||||
import * as execm from './exec';
|
|
||||||
|
|
||||||
const ecrRegistryRegex = /^(([0-9]{12})\.dkr\.ecr\.(.+)\.amazonaws\.com(.cn)?)(\/([^:]+)(:.+)?)?$/;
|
const ecrRegistryRegex = /^(([0-9]{12})\.dkr\.ecr\.(.+)\.amazonaws\.com(.cn)?)(\/([^:]+)(:.+)?)?$/;
|
||||||
|
|
||||||
@@ -43,15 +43,20 @@ export const getCLI = async (): Promise<string> => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const execCLI = async (args: string[]): Promise<string> => {
|
export const execCLI = async (args: string[]): Promise<string> => {
|
||||||
return execm.exec(await getCLI(), args, true).then(res => {
|
return exec
|
||||||
if (res.stderr != '' && !res.success) {
|
.getExecOutput(await getCLI(), args, {
|
||||||
throw new Error(res.stderr);
|
ignoreReturnCode: true,
|
||||||
} else if (res.stderr != '') {
|
silent: true
|
||||||
return res.stderr.trim();
|
})
|
||||||
} else {
|
.then(res => {
|
||||||
return res.stdout.trim();
|
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||||
}
|
throw new Error(res.stderr.trim());
|
||||||
});
|
} else if (res.stderr.length > 0) {
|
||||||
|
return res.stderr.trim();
|
||||||
|
} else {
|
||||||
|
return res.stdout.trim();
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getCLIVersion = async (): Promise<string> => {
|
export const getCLIVersion = async (): Promise<string> => {
|
||||||
|
@@ -4,7 +4,7 @@ export interface Inputs {
|
|||||||
registry: string;
|
registry: string;
|
||||||
username: string;
|
username: string;
|
||||||
password: string;
|
password: string;
|
||||||
logout: string;
|
logout: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getInputs(): Inputs {
|
export function getInputs(): Inputs {
|
||||||
@@ -12,6 +12,6 @@ export function getInputs(): Inputs {
|
|||||||
registry: core.getInput('registry'),
|
registry: core.getInput('registry'),
|
||||||
username: core.getInput('username'),
|
username: core.getInput('username'),
|
||||||
password: core.getInput('password'),
|
password: core.getInput('password'),
|
||||||
logout: core.getInput('logout')
|
logout: core.getBooleanInput('logout')
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import * as core from '@actions/core';
|
|
||||||
import * as aws from './aws';
|
import * as aws from './aws';
|
||||||
import * as execm from './exec';
|
import * as core from '@actions/core';
|
||||||
|
import * as exec from '@actions/exec';
|
||||||
|
|
||||||
export async function login(registry: string, username: string, password: string): Promise<void> {
|
export async function login(registry: string, username: string, password: string): Promise<void> {
|
||||||
if (await aws.isECR(registry)) {
|
if (await aws.isECR(registry)) {
|
||||||
@@ -11,11 +11,15 @@ export async function login(registry: string, username: string, password: string
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function logout(registry: string): Promise<void> {
|
export async function logout(registry: string): Promise<void> {
|
||||||
await execm.exec('docker', ['logout', registry], false).then(res => {
|
await exec
|
||||||
if (res.stderr != '' && !res.success) {
|
.getExecOutput('docker', ['logout', registry], {
|
||||||
core.warning(res.stderr);
|
ignoreReturnCode: true
|
||||||
}
|
})
|
||||||
});
|
.then(res => {
|
||||||
|
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||||
|
core.warning(res.stderr.trim());
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function loginStandard(registry: string, username: string, password: string): Promise<void> {
|
export async function loginStandard(registry: string, username: string, password: string): Promise<void> {
|
||||||
@@ -32,12 +36,18 @@ export async function loginStandard(registry: string, username: string, password
|
|||||||
} else {
|
} else {
|
||||||
core.info(`Logging into Docker Hub...`);
|
core.info(`Logging into Docker Hub...`);
|
||||||
}
|
}
|
||||||
await execm.exec('docker', loginArgs, true, password).then(res => {
|
await exec
|
||||||
if (res.stderr != '' && !res.success) {
|
.getExecOutput('docker', loginArgs, {
|
||||||
throw new Error(res.stderr);
|
ignoreReturnCode: true,
|
||||||
}
|
silent: true,
|
||||||
core.info(`Login Succeeded!`);
|
input: Buffer.from(password)
|
||||||
});
|
})
|
||||||
|
.then(res => {
|
||||||
|
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||||
|
throw new Error(res.stderr.trim());
|
||||||
|
}
|
||||||
|
core.info(`Login Succeeded!`);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function loginECR(registry: string, username: string, password: string): Promise<void> {
|
export async function loginECR(registry: string, username: string, password: string): Promise<void> {
|
||||||
@@ -60,15 +70,20 @@ export async function loginECR(registry: string, username: string, password: str
|
|||||||
|
|
||||||
core.info(`Logging into ${registry}...`);
|
core.info(`Logging into ${registry}...`);
|
||||||
loginCmds.forEach((loginCmd, index) => {
|
loginCmds.forEach((loginCmd, index) => {
|
||||||
execm.exec(loginCmd, [], true).then(res => {
|
exec
|
||||||
if (res.stderr != '' && !res.success) {
|
.getExecOutput(loginCmd, [], {
|
||||||
throw new Error(res.stderr);
|
ignoreReturnCode: true,
|
||||||
}
|
silent: true
|
||||||
if (loginCmds.length > 1) {
|
})
|
||||||
core.info(`Login Succeeded! (${index}/${loginCmds.length})`);
|
.then(res => {
|
||||||
} else {
|
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||||
core.info('Login Succeeded!');
|
throw new Error(res.stderr.trim());
|
||||||
}
|
}
|
||||||
});
|
if (loginCmds.length > 1) {
|
||||||
|
core.info(`Login Succeeded! (${index}/${loginCmds.length})`);
|
||||||
|
} else {
|
||||||
|
core.info('Login Succeeded!');
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
40
src/exec.ts
40
src/exec.ts
@@ -1,40 +0,0 @@
|
|||||||
import * as actionsExec from '@actions/exec';
|
|
||||||
import {ExecOptions} from '@actions/exec';
|
|
||||||
|
|
||||||
export interface ExecResult {
|
|
||||||
success: boolean;
|
|
||||||
stdout: string;
|
|
||||||
stderr: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const exec = async (
|
|
||||||
command: string,
|
|
||||||
args: string[] = [],
|
|
||||||
silent: boolean,
|
|
||||||
stdin?: string
|
|
||||||
): Promise<ExecResult> => {
|
|
||||||
let stdout: string = '';
|
|
||||||
let stderr: string = '';
|
|
||||||
|
|
||||||
const options: ExecOptions = {
|
|
||||||
silent: silent,
|
|
||||||
ignoreReturnCode: true,
|
|
||||||
input: Buffer.from(stdin || '')
|
|
||||||
};
|
|
||||||
options.listeners = {
|
|
||||||
stdout: (data: Buffer) => {
|
|
||||||
stdout += data.toString();
|
|
||||||
},
|
|
||||||
stderr: (data: Buffer) => {
|
|
||||||
stderr += data.toString();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const returnCode: number = await actionsExec.exec(command, args, options);
|
|
||||||
|
|
||||||
return {
|
|
||||||
success: returnCode === 0,
|
|
||||||
stdout: stdout.trim(),
|
|
||||||
stderr: stderr.trim()
|
|
||||||
};
|
|
||||||
};
|
|
@@ -8,7 +8,7 @@ export function setRegistry(registry: string) {
|
|||||||
core.saveState('registry', registry);
|
core.saveState('registry', registry);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setLogout(logout: string) {
|
export function setLogout(logout: boolean) {
|
||||||
core.saveState('logout', logout);
|
core.saveState('logout', logout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
46
yarn.lock
46
yarn.lock
@@ -2,22 +2,22 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
"@actions/core@^1.2.6":
|
"@actions/core@^1.4.0":
|
||||||
version "1.2.6"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.2.6.tgz#a78d49f41a4def18e88ce47c2cac615d5694bf09"
|
resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.4.0.tgz#cf2e6ee317e314b03886adfeb20e448d50d6e524"
|
||||||
integrity sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA==
|
integrity sha512-CGx2ilGq5i7zSLgiiGUtBCxhRRxibJYU6Fim0Q1Wg2aQL2LTnF27zbqZOrxfvFQ55eSBW0L8uVStgtKMpa0Qlg==
|
||||||
|
|
||||||
"@actions/exec@^1.0.4":
|
"@actions/exec@^1.1.0":
|
||||||
version "1.0.4"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-1.0.4.tgz#99d75310e62e59fc37d2ee6dcff6d4bffadd3a5d"
|
resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-1.1.0.tgz#53441d968e56d2fec69ad3f15773d4d94e01162c"
|
||||||
integrity sha512-4DPChWow9yc9W3WqEbUj8Nr86xkpyE29ZzWjXucHItclLbEW6jr80Zx4nqv18QL6KK65+cifiQZXvnqgTV6oHw==
|
integrity sha512-LImpN9AY0J1R1mEYJjVJfSZWU4zYOlEcwSTgPve1rFQqK5AwrEs6uWW5Rv70gbDIQIAUwI86z6B+9mPK4w9Sbg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@actions/io" "^1.0.1"
|
"@actions/io" "^1.0.1"
|
||||||
|
|
||||||
"@actions/io@^1.0.1", "@actions/io@^1.0.2":
|
"@actions/io@^1.0.1", "@actions/io@^1.1.1":
|
||||||
version "1.0.2"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.0.2.tgz#2f614b6e69ce14d191180451eb38e6576a6e6b27"
|
resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.1.1.tgz#4a157406309e212ab27ed3ae30e8c1d641686a66"
|
||||||
integrity sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg==
|
integrity sha512-Qi4JoKXjmE0O67wAOH6y0n26QXhMKMFo7GD/4IXNVcrtLjUlGjGuVys6pQgwF3ArfGTQu0XpqaNr0YhED2RaRA==
|
||||||
|
|
||||||
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4":
|
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4":
|
||||||
version "7.10.4"
|
version "7.10.4"
|
||||||
@@ -2483,6 +2483,13 @@ lru-cache@^4.1.5:
|
|||||||
pseudomap "^1.0.2"
|
pseudomap "^1.0.2"
|
||||||
yallist "^2.1.2"
|
yallist "^2.1.2"
|
||||||
|
|
||||||
|
lru-cache@^6.0.0:
|
||||||
|
version "6.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
|
||||||
|
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
|
||||||
|
dependencies:
|
||||||
|
yallist "^4.0.0"
|
||||||
|
|
||||||
make-dir@^3.0.0:
|
make-dir@^3.0.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
|
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
|
||||||
@@ -3100,10 +3107,12 @@ saxes@^5.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||||
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||||
|
|
||||||
semver@7.x, semver@^7.3.2:
|
semver@7.x, semver@^7.3.2, semver@^7.3.5:
|
||||||
version "7.3.2"
|
version "7.3.5"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
|
||||||
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
|
integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
|
||||||
|
dependencies:
|
||||||
|
lru-cache "^6.0.0"
|
||||||
|
|
||||||
semver@^6.0.0, semver@^6.3.0:
|
semver@^6.0.0, semver@^6.3.0:
|
||||||
version "6.3.0"
|
version "6.3.0"
|
||||||
@@ -3742,6 +3751,11 @@ yallist@^2.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
|
||||||
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
|
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
|
||||||
|
|
||||||
|
yallist@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||||
|
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||||
|
|
||||||
yargs-parser@18.x, yargs-parser@^18.1.2:
|
yargs-parser@18.x, yargs-parser@^18.1.2:
|
||||||
version "18.1.3"
|
version "18.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
|
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
|
||||||
|
Reference in New Issue
Block a user