mirror of
https://github.com/gradle/actions.git
synced 2025-08-23 10:21:28 +08:00
Consolidate error processing in actions
This commit is contained in:
parent
1c25312b02
commit
ba79f71e36
@ -1,5 +1,3 @@
|
|||||||
import * as core from '@actions/core'
|
|
||||||
|
|
||||||
import * as setupGradle from '../setup-gradle'
|
import * as setupGradle from '../setup-gradle'
|
||||||
import * as gradle from '../execution/gradle'
|
import * as gradle from '../execution/gradle'
|
||||||
import * as dependencyGraph from '../dependency-graph'
|
import * as dependencyGraph from '../dependency-graph'
|
||||||
@ -14,6 +12,7 @@ import {
|
|||||||
setActionId
|
setActionId
|
||||||
} from '../configuration'
|
} from '../configuration'
|
||||||
import {saveDeprecationState} from '../deprecation-collector'
|
import {saveDeprecationState} from '../deprecation-collector'
|
||||||
|
import {handleMainActionError} from '../errors'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The main entry point for the action, called by Github Actions for the step.
|
* The main entry point for the action, called by Github Actions for the step.
|
||||||
@ -56,10 +55,7 @@ export async function run(): Promise<void> {
|
|||||||
|
|
||||||
saveDeprecationState()
|
saveDeprecationState()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
core.setFailed(String(error))
|
handleMainActionError(error)
|
||||||
if (error instanceof Error && error.stack) {
|
|
||||||
core.info(error.stack)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Explicit process.exit() to prevent waiting for hanging promises.
|
// Explicit process.exit() to prevent waiting for hanging promises.
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
import * as core from '@actions/core'
|
|
||||||
import * as setupGradle from '../setup-gradle'
|
import * as setupGradle from '../setup-gradle'
|
||||||
|
|
||||||
import {CacheConfig, SummaryConfig} from '../configuration'
|
import {CacheConfig, SummaryConfig} from '../configuration'
|
||||||
import {PostActionJobFailure} from '../errors'
|
import {handlePostActionError} from '../errors'
|
||||||
|
|
||||||
// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
|
// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
|
||||||
// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
|
// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
|
||||||
// throw an uncaught exception. Instead of failing this action, just warn.
|
// throw an uncaught exception. Instead of failing this action, just warn.
|
||||||
process.on('uncaughtException', e => handleFailure(e))
|
process.on('uncaughtException', e => handlePostActionError(e))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The post-execution entry point for the action, called by Github Actions after completing all steps for the Job.
|
* The post-execution entry point for the action, called by Github Actions after completing all steps for the Job.
|
||||||
@ -16,22 +15,11 @@ export async function run(): Promise<void> {
|
|||||||
try {
|
try {
|
||||||
await setupGradle.complete(new CacheConfig(), new SummaryConfig())
|
await setupGradle.complete(new CacheConfig(), new SummaryConfig())
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error instanceof PostActionJobFailure) {
|
handlePostActionError(error)
|
||||||
core.setFailed(String(error))
|
|
||||||
} else {
|
|
||||||
handleFailure(error)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Explicit process.exit() to prevent waiting for promises left hanging by `@actions/cache` on save.
|
// Explicit process.exit() to prevent waiting for promises left hanging by `@actions/cache` on save.
|
||||||
process.exit()
|
process.exit()
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleFailure(error: unknown): void {
|
|
||||||
core.warning(`Unhandled error in Gradle post-action - job will continue: ${error}`)
|
|
||||||
if (error instanceof Error && error.stack) {
|
|
||||||
core.info(error.stack)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
run()
|
run()
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import * as core from '@actions/core'
|
||||||
|
|
||||||
export class PostActionJobFailure extends Error {
|
export class PostActionJobFailure extends Error {
|
||||||
constructor(error: unknown) {
|
constructor(error: unknown) {
|
||||||
if (error instanceof Error) {
|
if (error instanceof Error) {
|
||||||
@ -9,3 +11,31 @@ export class PostActionJobFailure extends Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function handleMainActionError(error: unknown): void {
|
||||||
|
if (error instanceof AggregateError) {
|
||||||
|
core.setFailed(`Multiple errors returned`)
|
||||||
|
for (const err of error.errors) {
|
||||||
|
core.error(`Error ${error.errors.indexOf(err)}: ${err.message}`)
|
||||||
|
if (err.stack) {
|
||||||
|
core.info(err.stack)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
core.setFailed(String(error))
|
||||||
|
if (error instanceof Error && error.stack) {
|
||||||
|
core.info(error.stack)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function handlePostActionError(error: unknown): void {
|
||||||
|
if (error instanceof PostActionJobFailure) {
|
||||||
|
core.setFailed(String(error))
|
||||||
|
} else {
|
||||||
|
core.warning(`Unhandled error in Gradle post-action - job will continue: ${error}`)
|
||||||
|
if (error instanceof Error && error.stack) {
|
||||||
|
core.info(error.stack)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
import * as core from '@actions/core'
|
|
||||||
|
|
||||||
import * as setupGradle from '../setup-gradle'
|
import * as setupGradle from '../setup-gradle'
|
||||||
import * as gradle from '../execution/gradle'
|
import * as gradle from '../execution/gradle'
|
||||||
import * as dependencyGraph from '../dependency-graph'
|
import * as dependencyGraph from '../dependency-graph'
|
||||||
@ -12,6 +10,7 @@ import {
|
|||||||
setActionId
|
setActionId
|
||||||
} from '../configuration'
|
} from '../configuration'
|
||||||
import {recordDeprecation, saveDeprecationState} from '../deprecation-collector'
|
import {recordDeprecation, saveDeprecationState} from '../deprecation-collector'
|
||||||
|
import {handleMainActionError} from '../errors'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The main entry point for the action, called by Github Actions for the step.
|
* The main entry point for the action, called by Github Actions for the step.
|
||||||
@ -41,10 +40,7 @@ export async function run(): Promise<void> {
|
|||||||
|
|
||||||
saveDeprecationState()
|
saveDeprecationState()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
core.setFailed(String(error))
|
handleMainActionError(error)
|
||||||
if (error instanceof Error && error.stack) {
|
|
||||||
core.info(error.stack)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Explicit process.exit() to prevent waiting for hanging promises.
|
// Explicit process.exit() to prevent waiting for hanging promises.
|
||||||
|
@ -1,15 +1,14 @@
|
|||||||
import * as core from '@actions/core'
|
|
||||||
import * as setupGradle from '../setup-gradle'
|
import * as setupGradle from '../setup-gradle'
|
||||||
import * as dependencyGraph from '../dependency-graph'
|
import * as dependencyGraph from '../dependency-graph'
|
||||||
|
|
||||||
import {CacheConfig, DependencyGraphConfig, SummaryConfig} from '../configuration'
|
import {CacheConfig, DependencyGraphConfig, SummaryConfig} from '../configuration'
|
||||||
import {PostActionJobFailure} from '../errors'
|
import {handlePostActionError} from '../errors'
|
||||||
import {emitDeprecationWarnings, restoreDeprecationState} from '../deprecation-collector'
|
import {emitDeprecationWarnings, restoreDeprecationState} from '../deprecation-collector'
|
||||||
|
|
||||||
// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
|
// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
|
||||||
// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
|
// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
|
||||||
// throw an uncaught exception. Instead of failing this action, just warn.
|
// throw an uncaught exception. Instead of failing this action, just warn.
|
||||||
process.on('uncaughtException', e => handleFailure(e))
|
process.on('uncaughtException', e => handlePostActionError(e))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The post-execution entry point for the action, called by Github Actions after completing all steps for the Job.
|
* The post-execution entry point for the action, called by Github Actions after completing all steps for the Job.
|
||||||
@ -24,22 +23,11 @@ export async function run(): Promise<void> {
|
|||||||
await dependencyGraph.complete(new DependencyGraphConfig())
|
await dependencyGraph.complete(new DependencyGraphConfig())
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error instanceof PostActionJobFailure) {
|
handlePostActionError(error)
|
||||||
core.setFailed(String(error))
|
|
||||||
} else {
|
|
||||||
handleFailure(error)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Explicit process.exit() to prevent waiting for promises left hanging by `@actions/cache` on save.
|
// Explicit process.exit() to prevent waiting for promises left hanging by `@actions/cache` on save.
|
||||||
process.exit()
|
process.exit()
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleFailure(error: unknown): void {
|
|
||||||
core.warning(`Unhandled error in Gradle post-action - job will continue: ${error}`)
|
|
||||||
if (error instanceof Error && error.stack) {
|
|
||||||
core.info(error.stack)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
run()
|
run()
|
||||||
|
@ -2,6 +2,7 @@ import * as path from 'path'
|
|||||||
import * as core from '@actions/core'
|
import * as core from '@actions/core'
|
||||||
|
|
||||||
import * as validate from './validate'
|
import * as validate from './validate'
|
||||||
|
import {handleMainActionError} from '../errors'
|
||||||
|
|
||||||
export async function run(): Promise<void> {
|
export async function run(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
@ -22,16 +23,7 @@ export async function run(): Promise<void> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error instanceof AggregateError) {
|
handleMainActionError(error)
|
||||||
core.setFailed(`Multiple errors returned`)
|
|
||||||
for (const err of error.errors) {
|
|
||||||
core.error(`Error ${error.errors.indexOf(err)}: ${err.message}`)
|
|
||||||
}
|
|
||||||
} else if (error instanceof Error) {
|
|
||||||
core.setFailed(error.message)
|
|
||||||
} else {
|
|
||||||
core.setFailed(`Unknown object was thrown: ${error}`)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user