feat: Add support for new ignoreMissing and ignoreOptions options (#63)
* feat: Add ignore_missing and ignore_options * ref: Rename validate.ts to options.ts to be more descriptive * feat: Add stripCommonPrefix option * Update src/options.ts Co-authored-by: Abhijeet Prasad <[email protected]> Co-authored-by: Abhijeet Prasad <[email protected]>
This commit is contained in:
co-authored by
Abhijeet Prasad
parent
a38cf329b4
commit
62ef65f6be
@@ -48,6 +48,8 @@ The following are all _required_.
|
||||
|---|---|---|
|
||||
|`environment`|Set the environment for this release. E.g. "production" or "staging". Omit to skip adding deploy to release.|-|
|
||||
|`finalize`|When false, omit marking the release as finalized and released.|`true`|
|
||||
|`ignore_missing`|When the flag is set and the previous release commit was not found in the repository, will create a release with the default commits count instead of failing the command.|`false`|
|
||||
|`ignore_empty`|When the flag is set, command will not fail and just exit silently if no new commits for a given release have been found.|`false`|
|
||||
|`sourcemaps`|Space-separated list of paths to JavaScript sourcemaps. Omit to skip uploading sourcemaps.|-|
|
||||
|`started_at`|Unix timestamp of the release start date. Omit for current time.|-|
|
||||
|`version`|Identifier that uniquely identifies the releases. _Note: the `refs/tags/` prefix is automatically stripped when `version` is `github.ref`._|<code>${{ github.sha }}</code>|
|
||||
@@ -55,6 +57,7 @@ The following are all _required_.
|
||||
|`set_commits`|Specify whether to set commits for the release. Either "auto" or "skip".|"auto"|
|
||||
|`projects`|Space-separated list of paths of projects. When omitted, falls back to the environment variable `SENTRY_PROJECT` to determine the project.|-|
|
||||
|`url_prefix`|Adds a prefix to source map urls after stripping them.|-|
|
||||
|`strip_common_prefix`|Will remove a common prefix from uploaded filenames. Useful for removing a path that is build-machine-specific.|`false`|
|
||||
|
||||
### Examples
|
||||
- Create a new Sentry release for the `production` environment and upload JavaScript source maps from the `./lib` directory.
|
||||
|
||||
+30
-13
@@ -2,38 +2,52 @@ import {execSync} from 'child_process';
|
||||
import * as path from 'path';
|
||||
import * as process from 'process';
|
||||
import {
|
||||
getShouldFinalize,
|
||||
getBooleanOption,
|
||||
getSourcemaps,
|
||||
getStartedAt,
|
||||
getVersion,
|
||||
getSetCommitsOption,
|
||||
getProjects,
|
||||
getUrlPrefixOption,
|
||||
} from '../src/validate';
|
||||
} from '../src/options';
|
||||
|
||||
describe('validate', () => {
|
||||
describe('options', () => {
|
||||
beforeAll(() => {
|
||||
process.env['MOCK'] = 'true';
|
||||
});
|
||||
|
||||
describe('getShouldFinalize', () => {
|
||||
const errorMessage = 'finalize is not a boolean';
|
||||
describe('getBooleanOption', () => {
|
||||
const option = 'finalize';
|
||||
const defaultValue = true;
|
||||
const errorMessage = `${option} is not a boolean`;
|
||||
|
||||
afterEach(() => {
|
||||
delete process.env['INPUT_FINALIZE'];
|
||||
});
|
||||
|
||||
test('should throw an error when finalize is invalid', async () => {
|
||||
test('should throw an error when option type is not a boolean', () => {
|
||||
process.env['INPUT_FINALIZE'] = 'error';
|
||||
expect(() => getShouldFinalize()).toThrow(errorMessage);
|
||||
expect(() => getBooleanOption(option, defaultValue)).toThrow(
|
||||
errorMessage
|
||||
);
|
||||
});
|
||||
|
||||
test('should return true when finalize is omitted', async () => {
|
||||
expect(getShouldFinalize()).toBe(true);
|
||||
test('should return defaultValue if option is omitted', () => {
|
||||
expect(getBooleanOption(option, defaultValue)).toBe(true);
|
||||
});
|
||||
|
||||
test('should return false when finalize is false', () => {
|
||||
test('should return true when option is true or 1', () => {
|
||||
process.env['INPUT_FINALIZE'] = 'true';
|
||||
expect(getBooleanOption(option, defaultValue)).toBe(true);
|
||||
process.env['INPUT_FINALIZE'] = '1';
|
||||
expect(getBooleanOption(option, defaultValue)).toBe(true);
|
||||
});
|
||||
|
||||
test('should return false when option is false or 0', () => {
|
||||
process.env['INPUT_FINALIZE'] = 'false';
|
||||
expect(getShouldFinalize()).toBe(false);
|
||||
expect(getBooleanOption(option, defaultValue)).toBe(false);
|
||||
process.env['INPUT_FINALIZE'] = '0';
|
||||
expect(getBooleanOption(option, defaultValue)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -121,6 +135,7 @@ describe('validate', () => {
|
||||
expect(await getVersion()).toBe(`prefix-v1.0.0`);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getSetCommitsOption', () => {
|
||||
afterEach(() => {
|
||||
delete process.env['INPUT_SET_COMMITS'];
|
||||
@@ -143,6 +158,7 @@ describe('validate', () => {
|
||||
expect(() => getSetCommitsOption()).toThrow(errorMessage);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getProjects', () => {
|
||||
afterEach(() => {
|
||||
delete process.env['SENTRY_PROJECT'];
|
||||
@@ -167,6 +183,7 @@ describe('validate', () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getUrlPrefixOption', () => {
|
||||
afterEach(() => {
|
||||
delete process.env['URL_PREFIX'];
|
||||
@@ -174,8 +191,8 @@ describe('validate', () => {
|
||||
it('get url prefix', () => {
|
||||
process.env['INPUT_URL_PREFIX'] = 'build';
|
||||
expect(getUrlPrefixOption()).toEqual('build');
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// shows how the runner will run a javascript action with env / stdout protocol
|
||||
|
||||
@@ -11,6 +11,12 @@ inputs:
|
||||
finalize:
|
||||
description: 'When false, omit marking the release as finalized and released.'
|
||||
default: true
|
||||
ignore_missing:
|
||||
description: 'When the flag is set and the previous release commit was not found in the repository, will create a release with the default commits count instead of failing the command.'
|
||||
required: false
|
||||
ignore_empty:
|
||||
description: 'When the flag is set, command will not fail and just exit silently if no new commits for a given release have been found.'
|
||||
required: false
|
||||
started_at:
|
||||
description: 'Unix timestamp of the release start date. Omit for current time.'
|
||||
required: false
|
||||
@@ -29,6 +35,9 @@ inputs:
|
||||
url_prefix:
|
||||
description: 'Adds a prefix to source map urls after stripping them.'
|
||||
required: false
|
||||
strip_common_prefix:
|
||||
description: 'Will remove a common prefix from uploaded filenames. Useful for removing a path that is build-machine-specific.'
|
||||
required: false
|
||||
runs:
|
||||
using: 'docker'
|
||||
image: 'docker://sentryintegrations/sentry-github-action-release:latest'
|
||||
|
||||
+1
-2
@@ -25,8 +25,7 @@
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.2.4",
|
||||
"@sentry/cli": "^1.59.0",
|
||||
"@sentry/types": "^5.17.0"
|
||||
"@sentry/cli": "^1.67.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^26.0.0",
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
import SentryCli, {Releases} from '@sentry/cli';
|
||||
import SentryCli, {SentryCliReleases} from '@sentry/cli';
|
||||
// @ts-ignore
|
||||
import {version} from '../package.json';
|
||||
|
||||
@@ -7,8 +7,8 @@ import {version} from '../package.json';
|
||||
*
|
||||
* When the `MOCK` environment variable is set, stub out network calls.
|
||||
*/
|
||||
let cli: Releases;
|
||||
export const getCLI = (): Releases => {
|
||||
let cli: SentryCliReleases;
|
||||
export const getCLI = (): SentryCliReleases => {
|
||||
// Set the User-Agent string.
|
||||
process.env['SENTRY_PIPELINE'] = `github-action-release/${version}`;
|
||||
|
||||
|
||||
+23
-12
@@ -1,29 +1,39 @@
|
||||
import * as core from '@actions/core';
|
||||
import {getCLI} from './cli';
|
||||
import * as validate from './validate';
|
||||
import * as options from './options';
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
const cli = getCLI();
|
||||
|
||||
// Validate parameters first so we can fail early.
|
||||
validate.checkEnvironmentVariables();
|
||||
const environment = validate.getEnvironment();
|
||||
const sourcemaps = validate.getSourcemaps();
|
||||
const shouldFinalize = validate.getShouldFinalize();
|
||||
const deployStartedAtOption = validate.getStartedAt();
|
||||
const setCommitsOption = validate.getSetCommitsOption();
|
||||
const projects = validate.getProjects();
|
||||
const urlPrefix = validate.getUrlPrefixOption();
|
||||
// Validate options first so we can fail early.
|
||||
options.checkEnvironmentVariables();
|
||||
|
||||
const version = await validate.getVersion();
|
||||
const environment = options.getEnvironment();
|
||||
const sourcemaps = options.getSourcemaps();
|
||||
const shouldFinalize = options.getBooleanOption('finalize', true);
|
||||
const ignoreMissing = options.getBooleanOption('ignore_missing', false);
|
||||
const ignoreEmpty = options.getBooleanOption('ignore_empty', false);
|
||||
const deployStartedAtOption = options.getStartedAt();
|
||||
const setCommitsOption = options.getSetCommitsOption();
|
||||
const projects = options.getProjects();
|
||||
const urlPrefix = options.getUrlPrefixOption();
|
||||
const stripCommonPrefix = options.getBooleanOption(
|
||||
'strip_common_prefix',
|
||||
false
|
||||
);
|
||||
const version = await options.getVersion();
|
||||
|
||||
core.debug(`Version is ${version}`);
|
||||
await cli.new(version, {projects});
|
||||
|
||||
if (setCommitsOption !== 'skip') {
|
||||
core.debug(`Setting commits with option '${setCommitsOption}'`);
|
||||
await cli.setCommits(version, {auto: true});
|
||||
await cli.setCommits(version, {
|
||||
auto: true,
|
||||
ignoreMissing,
|
||||
ignoreEmpty,
|
||||
});
|
||||
}
|
||||
|
||||
if (sourcemaps.length) {
|
||||
@@ -36,6 +46,7 @@ import * as validate from './validate';
|
||||
include: sourcemaps,
|
||||
projects: localProjects,
|
||||
urlPrefix,
|
||||
stripCommonPrefix,
|
||||
};
|
||||
return cli.uploadSourceMaps(version, sourceMapOptions);
|
||||
})
|
||||
|
||||
@@ -9,7 +9,7 @@ import {getCLI} from './cli';
|
||||
export const getVersion = async (): Promise<string> => {
|
||||
const versionOption: string = core.getInput('version');
|
||||
const versionPrefixOption: string = core.getInput('version_prefix');
|
||||
let version = ''
|
||||
let version = '';
|
||||
if (versionOption) {
|
||||
// If the users passes in `${{github.ref}}, then it will have an unwanted prefix.
|
||||
version = versionOption.replace(/^(refs\/tags\/)/, '');
|
||||
@@ -82,17 +82,22 @@ export const getSourcemaps = (): string[] => {
|
||||
};
|
||||
|
||||
/**
|
||||
* Find out from input if we should finalize the release.
|
||||
* Fetch boolean option from input. Throws error if option value is not a boolean.
|
||||
* @param input string
|
||||
* @param defaultValue boolean
|
||||
* @returns boolean
|
||||
*/
|
||||
export const getShouldFinalize = (): boolean => {
|
||||
const finalizeOption = core.getInput('finalize');
|
||||
if (!finalizeOption) {
|
||||
return true;
|
||||
export const getBooleanOption = (
|
||||
input: string,
|
||||
defaultValue: boolean
|
||||
): boolean => {
|
||||
const option = core.getInput(input);
|
||||
if (!option) {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
const finalize = finalizeOption.trim().toLowerCase();
|
||||
switch (finalize) {
|
||||
const value = option.trim().toLowerCase();
|
||||
switch (value) {
|
||||
case 'true':
|
||||
case '1':
|
||||
return true;
|
||||
@@ -102,7 +107,7 @@ export const getShouldFinalize = (): boolean => {
|
||||
return false;
|
||||
}
|
||||
|
||||
throw Error('finalize is not a boolean');
|
||||
throw Error(`${input} is not a boolean`);
|
||||
};
|
||||
|
||||
export const getSetCommitsOption = (): 'auto' | 'skip' => {
|
||||
@@ -159,4 +164,4 @@ export const getProjects = (): string[] => {
|
||||
|
||||
export const getUrlPrefixOption = (): string => {
|
||||
return core.getInput('url_prefix');
|
||||
}
|
||||
};
|
||||
Vendored
-54
@@ -1,54 +0,0 @@
|
||||
declare module '@sentry/cli' {
|
||||
export class Releases {
|
||||
constructor(configFile?: string, options?: {silent?: boolean});
|
||||
new(release: string, options?: {projects: string[]}): Promise<void>;
|
||||
setCommits(
|
||||
release: string,
|
||||
options: {
|
||||
repo?: string;
|
||||
auto?: boolean;
|
||||
commit?: string;
|
||||
previousCommit?: string;
|
||||
}
|
||||
): Promise<void>;
|
||||
finalize(release: string): Promise<void>;
|
||||
proposeVersion(): Promise<string>;
|
||||
uploadSourceMaps(
|
||||
release: string,
|
||||
options: {
|
||||
include: string[];
|
||||
ignore?: string[];
|
||||
ignoreFile?: string;
|
||||
rewrite?: boolean;
|
||||
sourceMapReference?: boolean;
|
||||
stripPrefix?: string[];
|
||||
stripCommonPrefix?: boolean;
|
||||
validate?: boolean;
|
||||
urlPrefix?: string;
|
||||
urlSuffix?: string;
|
||||
ext?: string[];
|
||||
projects?: [string]; //only one project allowed (for now)
|
||||
}
|
||||
): Promise<void>;
|
||||
listDeploys(release: string): Promise<string[]>;
|
||||
newDeploy(
|
||||
release: string,
|
||||
options: {
|
||||
env: string;
|
||||
started?: number;
|
||||
finished?: number;
|
||||
time?: number;
|
||||
name?: string;
|
||||
url?: string;
|
||||
}
|
||||
): Promise<void>;
|
||||
execute(args: string[], live: boolean): Promise<string>;
|
||||
}
|
||||
|
||||
export class SentryCli {
|
||||
constructor(options?: {configFile?: string; silent?: boolean});
|
||||
releases: Releases;
|
||||
}
|
||||
|
||||
export default SentryCli;
|
||||
}
|
||||
@@ -469,22 +469,18 @@
|
||||
"@types/yargs" "^15.0.0"
|
||||
chalk "^4.0.0"
|
||||
|
||||
"@sentry/cli@^1.59.0":
|
||||
version "1.59.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.59.0.tgz#8154c6426a105c6c8a2437db085837aff8e29834"
|
||||
integrity sha512-9nK4uVHW7HIbOwFZNvHRWFJcD+bqjW3kMWK2UUMqQWse0Lf3xM+2o+REGGkk0S69+E4elSiukVjUPTI5aijNlA==
|
||||
"@sentry/cli@^1.67.2":
|
||||
version "1.67.2"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.67.2.tgz#dbb5631cb3637e10298f67915013592cb22f04ff"
|
||||
integrity sha512-lPn0Sffbjg2UmCkHl2iw8pKlqpPhy85mW0za5kz3LEqC9JGUXHo9eSyyCkiRktlemMXKk+DeS/nyFy/LTRUG2Q==
|
||||
dependencies:
|
||||
https-proxy-agent "^5.0.0"
|
||||
mkdirp "^0.5.5"
|
||||
node-fetch "^2.6.0"
|
||||
npmlog "^4.1.2"
|
||||
progress "^2.0.3"
|
||||
proxy-from-env "^1.1.0"
|
||||
|
||||
"@sentry/types@^5.17.0":
|
||||
version "5.19.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.19.0.tgz#30c6a05040b644d90337ef8b50d9d59c0872744d"
|
||||
integrity sha512-NlHLS9mwCEimKUA5vClAwVhXFLsqSF3VJEXU+K61fF6NZx8zfJi/HTrIBtoM4iNSAt9o4XLQatC1liIpBC06tg==
|
||||
|
||||
"@sinonjs/commons@^1.7.0":
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.0.tgz#c8d68821a854c555bba172f3b06959a0039b236d"
|
||||
@@ -764,6 +760,16 @@ ansi-escapes@^4.2.1:
|
||||
dependencies:
|
||||
type-fest "^0.11.0"
|
||||
|
||||
ansi-regex@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
||||
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
|
||||
|
||||
ansi-regex@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
|
||||
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
|
||||
|
||||
ansi-regex@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
|
||||
@@ -805,6 +811,19 @@ anymatch@^3.0.3:
|
||||
normalize-path "^3.0.0"
|
||||
picomatch "^2.0.4"
|
||||
|
||||
aproba@^1.0.3:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
||||
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
|
||||
|
||||
are-we-there-yet@~1.1.2:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
|
||||
integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
|
||||
dependencies:
|
||||
delegates "^1.0.0"
|
||||
readable-stream "^2.0.6"
|
||||
|
||||
argparse@^1.0.7:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
|
||||
@@ -1132,6 +1151,11 @@ co@^4.6.0:
|
||||
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
|
||||
integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
|
||||
|
||||
code-point-at@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
||||
integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
|
||||
|
||||
collect-v8-coverage@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
|
||||
@@ -1186,6 +1210,11 @@ [email protected]:
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
|
||||
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
|
||||
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
|
||||
|
||||
contains-path@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
|
||||
@@ -1203,7 +1232,7 @@ copy-descriptor@^0.1.0:
|
||||
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
|
||||
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
|
||||
|
||||
[email protected]:
|
||||
[email protected], core-util-is@~1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||
@@ -1339,6 +1368,11 @@ delayed-stream@~1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
|
||||
|
||||
delegates@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
|
||||
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
|
||||
|
||||
detect-newline@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
|
||||
@@ -1885,6 +1919,20 @@ functional-red-black-tree@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
|
||||
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
|
||||
|
||||
gauge@~2.7.3:
|
||||
version "2.7.4"
|
||||
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
|
||||
integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
|
||||
dependencies:
|
||||
aproba "^1.0.3"
|
||||
console-control-strings "^1.0.0"
|
||||
has-unicode "^2.0.0"
|
||||
object-assign "^4.1.0"
|
||||
signal-exit "^3.0.0"
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
wide-align "^1.1.0"
|
||||
|
||||
gensync@^1.0.0-beta.1:
|
||||
version "1.0.0-beta.1"
|
||||
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
|
||||
@@ -2000,6 +2048,11 @@ has-symbols@^1.0.0, has-symbols@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
|
||||
integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
|
||||
|
||||
has-unicode@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
|
||||
integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
|
||||
|
||||
has-value@^0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
|
||||
@@ -2123,7 +2176,7 @@ inflight@^1.0.4:
|
||||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2:
|
||||
inherits@2, inherits@~2.0.3:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||
@@ -2228,6 +2281,13 @@ is-extglob@^2.1.1:
|
||||
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
|
||||
|
||||
is-fullwidth-code-point@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
|
||||
integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
|
||||
dependencies:
|
||||
number-is-nan "^1.0.0"
|
||||
|
||||
is-fullwidth-code-point@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
|
||||
@@ -2320,7 +2380,7 @@ is-wsl@^2.1.1:
|
||||
dependencies:
|
||||
is-docker "^2.0.0"
|
||||
|
||||
[email protected], isarray@^1.0.0:
|
||||
[email protected], isarray@^1.0.0, isarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
|
||||
@@ -3198,6 +3258,21 @@ npm-run-path@^4.0.0:
|
||||
dependencies:
|
||||
path-key "^3.0.0"
|
||||
|
||||
npmlog@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
|
||||
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
|
||||
dependencies:
|
||||
are-we-there-yet "~1.1.2"
|
||||
console-control-strings "~1.1.0"
|
||||
gauge "~2.7.3"
|
||||
set-blocking "~2.0.0"
|
||||
|
||||
number-is-nan@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
|
||||
|
||||
nwsapi@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
|
||||
@@ -3208,6 +3283,11 @@ oauth-sign@~0.9.0:
|
||||
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
||||
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
|
||||
|
||||
object-assign@^4.1.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
|
||||
|
||||
object-copy@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
|
||||
@@ -3501,6 +3581,11 @@ pretty-format@^26.1.0:
|
||||
ansi-styles "^4.0.0"
|
||||
react-is "^16.12.0"
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
|
||||
|
||||
progress@^2.0.0, progress@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
|
||||
@@ -3583,6 +3668,19 @@ read-pkg@^5.2.0:
|
||||
parse-json "^5.0.0"
|
||||
type-fest "^0.6.0"
|
||||
|
||||
readable-stream@^2.0.6:
|
||||
version "2.3.7"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
||||
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.3"
|
||||
isarray "~1.0.0"
|
||||
process-nextick-args "~2.0.0"
|
||||
safe-buffer "~5.1.1"
|
||||
string_decoder "~1.1.1"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
regex-not@^1.0.0, regex-not@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
|
||||
@@ -3721,7 +3819,7 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.2:
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
||||
|
||||
safe-buffer@~5.1.1:
|
||||
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||
@@ -3775,7 +3873,7 @@ semver@^6.0.0, semver@^6.3.0:
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
||||
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||
|
||||
set-blocking@^2.0.0:
|
||||
set-blocking@^2.0.0, set-blocking@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
|
||||
@@ -3993,6 +4091,23 @@ string-length@^4.0.1:
|
||||
char-regex "^1.0.2"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
string-width@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
||||
integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
|
||||
dependencies:
|
||||
code-point-at "^1.0.0"
|
||||
is-fullwidth-code-point "^1.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
|
||||
"string-width@^1.0.2 || 2":
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
|
||||
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
|
||||
dependencies:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
string-width@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
|
||||
@@ -4027,6 +4142,27 @@ string.prototype.trimstart@^1.0.1:
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.17.5"
|
||||
|
||||
string_decoder@~1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
||||
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
|
||||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
||||
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
strip-ansi@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
|
||||
integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
|
||||
dependencies:
|
||||
ansi-regex "^3.0.0"
|
||||
|
||||
strip-ansi@^5.1.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
|
||||
@@ -4332,6 +4468,11 @@ use@^3.1.0:
|
||||
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
|
||||
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
|
||||
|
||||
util-deprecate@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
||||
|
||||
uuid@^3.3.2:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
||||
@@ -4444,6 +4585,13 @@ which@^2.0.1, which@^2.0.2:
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wide-align@^1.1.0:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
|
||||
integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
|
||||
dependencies:
|
||||
string-width "^1.0.2 || 2"
|
||||
|
||||
word-wrap@^1.2.3, word-wrap@~1.2.3:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
|
||||
|
||||
Reference in New Issue
Block a user