Merge remote-tracking branch 'origin/retry-on-snapshot-warnings' into juxtin/dr-snaps-pre-launch
This commit is contained in:
@@ -26,7 +26,9 @@ const defaultConfig: ConfigurationOptions = {
|
|||||||
deny_licenses: [],
|
deny_licenses: [],
|
||||||
deny_packages: [],
|
deny_packages: [],
|
||||||
deny_groups: [],
|
deny_groups: [],
|
||||||
comment_summary_in_pr: true
|
comment_summary_in_pr: true,
|
||||||
|
retry_on_snapshot_warnings: true,
|
||||||
|
retry_on_snapshot_warnings_timeout: 120
|
||||||
}
|
}
|
||||||
|
|
||||||
const changesWithEmptyManifests: Changes = [
|
const changesWithEmptyManifests: Changes = [
|
||||||
|
|||||||
@@ -53,6 +53,14 @@ inputs:
|
|||||||
deny-groups:
|
deny-groups:
|
||||||
description: A comma-separated list of package URLs for group(s)/namespace(s) to deny (e.g. "pkg:npm/express, pkg:pip/pycrypto")
|
description: A comma-separated list of package URLs for group(s)/namespace(s) to deny (e.g. "pkg:npm/express, pkg:pip/pycrypto")
|
||||||
required: false
|
required: false
|
||||||
|
retry-on-snapshot-warnings:
|
||||||
|
description: Whether to retry on snapshot warnings
|
||||||
|
required: false
|
||||||
|
default: true
|
||||||
|
retry-on-snapshot-warnings-timeout:
|
||||||
|
description: How many seconds before bailing on retries
|
||||||
|
required: false
|
||||||
|
default: 120
|
||||||
runs:
|
runs:
|
||||||
using: 'node16'
|
using: 'node16'
|
||||||
main: 'dist/index.js'
|
main: 'dist/index.js'
|
||||||
|
|||||||
+51
-8
@@ -266,7 +266,7 @@ function compare({ owner, repo, baseRef, headRef }) {
|
|||||||
let snapshot_warnings = '';
|
let snapshot_warnings = '';
|
||||||
const changes = yield octo.paginate({
|
const changes = yield octo.paginate({
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
url: '/repos/{owner}/{repo}/dependency-graph/compare/{basehead}',
|
url: '/repos/{owner}/{repo}/dependency-graph/compare/{basehead}?includes_dependency_snapshots=true',
|
||||||
owner,
|
owner,
|
||||||
repo,
|
repo,
|
||||||
basehead: `${baseRef}...${headRef}`
|
basehead: `${baseRef}...${headRef}`
|
||||||
@@ -564,17 +564,47 @@ const git_refs_1 = __nccwpck_require__(1086);
|
|||||||
const utils_1 = __nccwpck_require__(918);
|
const utils_1 = __nccwpck_require__(918);
|
||||||
const comment_pr_1 = __nccwpck_require__(5842);
|
const comment_pr_1 = __nccwpck_require__(5842);
|
||||||
const deny_1 = __nccwpck_require__(2134);
|
const deny_1 = __nccwpck_require__(2134);
|
||||||
|
function delay(ms) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function getComparison(baseRef, headRef, retryOpts) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const comparison = yield dependencyGraph.compare({
|
||||||
|
owner: github.context.repo.owner,
|
||||||
|
repo: github.context.repo.repo,
|
||||||
|
baseRef,
|
||||||
|
headRef
|
||||||
|
});
|
||||||
|
if (comparison.snapshot_warnings.trim() !== '') {
|
||||||
|
core.info(comparison.snapshot_warnings);
|
||||||
|
if (retryOpts !== undefined) {
|
||||||
|
if (retryOpts.retryUntil < Date.now()) {
|
||||||
|
core.info(`Retry timeout exceeded. Proceeding...`);
|
||||||
|
return comparison;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
core.info(`Retrying in ${retryOpts.retryDelay} seconds...`);
|
||||||
|
yield delay(retryOpts.retryDelay * 1000);
|
||||||
|
return getComparison(baseRef, headRef, retryOpts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return comparison;
|
||||||
|
});
|
||||||
|
}
|
||||||
function run() {
|
function run() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
const config = yield (0, config_1.readConfig)();
|
const config = yield (0, config_1.readConfig)();
|
||||||
const refs = (0, git_refs_1.getRefs)(config, github.context);
|
const refs = (0, git_refs_1.getRefs)(config, github.context);
|
||||||
const comparison = yield dependencyGraph.compare({
|
const comparison = yield getComparison(refs.base, refs.head, config.retry_on_snapshot_warnings
|
||||||
owner: github.context.repo.owner,
|
? {
|
||||||
repo: github.context.repo.repo,
|
retryUntil: Date.now() + config.retry_on_snapshot_warnings_timeout * 1000,
|
||||||
baseRef: refs.base,
|
retryDelay: 10
|
||||||
headRef: refs.head
|
}
|
||||||
});
|
: undefined);
|
||||||
const changes = comparison.changes;
|
const changes = comparison.changes;
|
||||||
const snapshot_warnings = comparison.snapshot_warnings;
|
const snapshot_warnings = comparison.snapshot_warnings;
|
||||||
if (!changes) {
|
if (!changes) {
|
||||||
@@ -818,6 +848,8 @@ exports.ConfigurationOptionsSchema = z
|
|||||||
config_file: z.string().optional(),
|
config_file: z.string().optional(),
|
||||||
base_ref: z.string().optional(),
|
base_ref: z.string().optional(),
|
||||||
head_ref: z.string().optional(),
|
head_ref: z.string().optional(),
|
||||||
|
retry_on_snapshot_warnings: z.boolean().default(true),
|
||||||
|
retry_on_snapshot_warnings_timeout: z.number().default(120),
|
||||||
comment_summary_in_pr: z
|
comment_summary_in_pr: z
|
||||||
.union([
|
.union([
|
||||||
z.preprocess(val => (val === 'true' ? true : val === 'false' ? false : val), z.boolean()),
|
z.preprocess(val => (val === 'true' ? true : val === 'false' ? false : val), z.boolean()),
|
||||||
@@ -47960,6 +47992,8 @@ function readInlineConfig() {
|
|||||||
const base_ref = getOptionalInput('base-ref');
|
const base_ref = getOptionalInput('base-ref');
|
||||||
const head_ref = getOptionalInput('head-ref');
|
const head_ref = getOptionalInput('head-ref');
|
||||||
const comment_summary_in_pr = getOptionalInput('comment-summary-in-pr');
|
const comment_summary_in_pr = getOptionalInput('comment-summary-in-pr');
|
||||||
|
const retry_on_snapshot_warnings = getOptionalBoolean('retry-on-snapshot-warnings');
|
||||||
|
const retry_on_snapshot_warnings_timeout = getOptionalNumber('retry-on-snapshot-warnings-timeout');
|
||||||
validatePURL(allow_dependencies_licenses);
|
validatePURL(allow_dependencies_licenses);
|
||||||
validateLicenses('allow-licenses', allow_licenses);
|
validateLicenses('allow-licenses', allow_licenses);
|
||||||
validateLicenses('deny-licenses', deny_licenses);
|
validateLicenses('deny-licenses', deny_licenses);
|
||||||
@@ -47976,10 +48010,17 @@ function readInlineConfig() {
|
|||||||
vulnerability_check,
|
vulnerability_check,
|
||||||
base_ref,
|
base_ref,
|
||||||
head_ref,
|
head_ref,
|
||||||
comment_summary_in_pr
|
comment_summary_in_pr,
|
||||||
|
retry_on_snapshot_warnings,
|
||||||
|
retry_on_snapshot_warnings_timeout
|
||||||
};
|
};
|
||||||
return Object.fromEntries(Object.entries(keys).filter(([_, value]) => value !== undefined));
|
return Object.fromEntries(Object.entries(keys).filter(([_, value]) => value !== undefined));
|
||||||
}
|
}
|
||||||
|
function getOptionalNumber(name) {
|
||||||
|
const value = core.getInput(name);
|
||||||
|
const parsed = z.string().regex(/^\d+$/).transform(Number).safeParse(value);
|
||||||
|
return parsed.success ? parsed.data : undefined;
|
||||||
|
}
|
||||||
function getOptionalBoolean(name) {
|
function getOptionalBoolean(name) {
|
||||||
const value = core.getInput(name);
|
const value = core.getInput(name);
|
||||||
return value.length > 0 ? core.getBooleanInput(name) : undefined;
|
return value.length > 0 ? core.getBooleanInput(name) : undefined;
|
||||||
@@ -48263,6 +48304,8 @@ exports.ConfigurationOptionsSchema = z
|
|||||||
config_file: z.string().optional(),
|
config_file: z.string().optional(),
|
||||||
base_ref: z.string().optional(),
|
base_ref: z.string().optional(),
|
||||||
head_ref: z.string().optional(),
|
head_ref: z.string().optional(),
|
||||||
|
retry_on_snapshot_warnings: z.boolean().default(true),
|
||||||
|
retry_on_snapshot_warnings_timeout: z.number().default(120),
|
||||||
comment_summary_in_pr: z
|
comment_summary_in_pr: z
|
||||||
.union([
|
.union([
|
||||||
z.preprocess(val => (val === 'true' ? true : val === 'false' ? false : val), z.boolean()),
|
z.preprocess(val => (val === 'true' ? true : val === 'false' ? false : val), z.boolean()),
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -30,7 +30,9 @@ const defaultConfig: ConfigurationOptions = {
|
|||||||
'pkg:pip/certifi',
|
'pkg:pip/certifi',
|
||||||
'pkg:pip/[email protected]'
|
'pkg:pip/[email protected]'
|
||||||
],
|
],
|
||||||
comment_summary_in_pr: 'never'
|
comment_summary_in_pr: true,
|
||||||
|
retry_on_snapshot_warnings: true,
|
||||||
|
retry_on_snapshot_warnings_timeout: 120
|
||||||
}
|
}
|
||||||
|
|
||||||
const tmpDir = path.resolve(__dirname, '../tmp')
|
const tmpDir = path.resolve(__dirname, '../tmp')
|
||||||
|
|||||||
+15
-1
@@ -41,6 +41,12 @@ function readInlineConfig(): ConfigurationOptionsPartial {
|
|||||||
const base_ref = getOptionalInput('base-ref')
|
const base_ref = getOptionalInput('base-ref')
|
||||||
const head_ref = getOptionalInput('head-ref')
|
const head_ref = getOptionalInput('head-ref')
|
||||||
const comment_summary_in_pr = getOptionalInput('comment-summary-in-pr')
|
const comment_summary_in_pr = getOptionalInput('comment-summary-in-pr')
|
||||||
|
const retry_on_snapshot_warnings = getOptionalBoolean(
|
||||||
|
'retry-on-snapshot-warnings'
|
||||||
|
)
|
||||||
|
const retry_on_snapshot_warnings_timeout = getOptionalNumber(
|
||||||
|
'retry-on-snapshot-warnings-timeout'
|
||||||
|
)
|
||||||
|
|
||||||
validatePURL(allow_dependencies_licenses)
|
validatePURL(allow_dependencies_licenses)
|
||||||
validateLicenses('allow-licenses', allow_licenses)
|
validateLicenses('allow-licenses', allow_licenses)
|
||||||
@@ -59,7 +65,9 @@ function readInlineConfig(): ConfigurationOptionsPartial {
|
|||||||
vulnerability_check,
|
vulnerability_check,
|
||||||
base_ref,
|
base_ref,
|
||||||
head_ref,
|
head_ref,
|
||||||
comment_summary_in_pr
|
comment_summary_in_pr,
|
||||||
|
retry_on_snapshot_warnings,
|
||||||
|
retry_on_snapshot_warnings_timeout
|
||||||
}
|
}
|
||||||
|
|
||||||
return Object.fromEntries(
|
return Object.fromEntries(
|
||||||
@@ -67,6 +75,12 @@ function readInlineConfig(): ConfigurationOptionsPartial {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getOptionalNumber(name: string): number | undefined {
|
||||||
|
const value = core.getInput(name)
|
||||||
|
const parsed = z.string().regex(/^\d+$/).transform(Number).safeParse(value)
|
||||||
|
return parsed.success ? parsed.data : undefined
|
||||||
|
}
|
||||||
|
|
||||||
function getOptionalBoolean(name: string): boolean | undefined {
|
function getOptionalBoolean(name: string): boolean | undefined {
|
||||||
const value = core.getInput(name)
|
const value = core.getInput(name)
|
||||||
return value.length > 0 ? core.getBooleanInput(name) : undefined
|
return value.length > 0 ? core.getBooleanInput(name) : undefined
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ export async function compare({
|
|||||||
const changes = await octo.paginate(
|
const changes = await octo.paginate(
|
||||||
{
|
{
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
url: '/repos/{owner}/{repo}/dependency-graph/compare/{basehead}',
|
url: '/repos/{owner}/{repo}/dependency-graph/compare/{basehead}?includes_dependency_snapshots=true',
|
||||||
owner,
|
owner,
|
||||||
repo,
|
repo,
|
||||||
basehead: `${baseRef}...${headRef}`
|
basehead: `${baseRef}...${headRef}`
|
||||||
|
|||||||
+48
-6
@@ -18,18 +18,60 @@ import {groupDependenciesByManifest} from './utils'
|
|||||||
import {commentPr} from './comment-pr'
|
import {commentPr} from './comment-pr'
|
||||||
import {getDeniedChanges} from './deny'
|
import {getDeniedChanges} from './deny'
|
||||||
|
|
||||||
|
async function delay(ms: number): Promise<void> {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms))
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getComparison(
|
||||||
|
baseRef: string,
|
||||||
|
headRef: string,
|
||||||
|
retryOpts?: {
|
||||||
|
retryUntil: number
|
||||||
|
retryDelay: number
|
||||||
|
}
|
||||||
|
): ReturnType<typeof dependencyGraph.compare> {
|
||||||
|
const comparison = await dependencyGraph.compare({
|
||||||
|
owner: github.context.repo.owner,
|
||||||
|
repo: github.context.repo.repo,
|
||||||
|
baseRef,
|
||||||
|
headRef
|
||||||
|
})
|
||||||
|
|
||||||
|
if (comparison.snapshot_warnings.trim() !== '') {
|
||||||
|
core.info(comparison.snapshot_warnings)
|
||||||
|
if (retryOpts !== undefined) {
|
||||||
|
if (retryOpts.retryUntil < Date.now()) {
|
||||||
|
core.info(`Retry timeout exceeded. Proceeding...`)
|
||||||
|
return comparison
|
||||||
|
} else {
|
||||||
|
core.info(`Retrying in ${retryOpts.retryDelay} seconds...`)
|
||||||
|
await delay(retryOpts.retryDelay * 1000)
|
||||||
|
return getComparison(baseRef, headRef, retryOpts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return comparison
|
||||||
|
}
|
||||||
|
|
||||||
async function run(): Promise<void> {
|
async function run(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
const config = await readConfig()
|
const config = await readConfig()
|
||||||
|
|
||||||
const refs = getRefs(config, github.context)
|
const refs = getRefs(config, github.context)
|
||||||
|
|
||||||
const comparison = await dependencyGraph.compare({
|
const comparison = await getComparison(
|
||||||
owner: github.context.repo.owner,
|
refs.base,
|
||||||
repo: github.context.repo.repo,
|
refs.head,
|
||||||
baseRef: refs.base,
|
config.retry_on_snapshot_warnings
|
||||||
headRef: refs.head
|
? {
|
||||||
})
|
retryUntil:
|
||||||
|
Date.now() + config.retry_on_snapshot_warnings_timeout * 1000,
|
||||||
|
retryDelay: 10
|
||||||
|
}
|
||||||
|
: undefined
|
||||||
|
)
|
||||||
|
|
||||||
const changes = comparison.changes
|
const changes = comparison.changes
|
||||||
const snapshot_warnings = comparison.snapshot_warnings
|
const snapshot_warnings = comparison.snapshot_warnings
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ export const ConfigurationOptionsSchema = z
|
|||||||
config_file: z.string().optional(),
|
config_file: z.string().optional(),
|
||||||
base_ref: z.string().optional(),
|
base_ref: z.string().optional(),
|
||||||
head_ref: z.string().optional(),
|
head_ref: z.string().optional(),
|
||||||
|
retry_on_snapshot_warnings: z.boolean().default(true),
|
||||||
|
retry_on_snapshot_warnings_timeout: z.number().default(120),
|
||||||
comment_summary_in_pr: z
|
comment_summary_in_pr: z
|
||||||
.union([
|
.union([
|
||||||
z.preprocess(
|
z.preprocess(
|
||||||
|
|||||||
Reference in New Issue
Block a user