From 1372c613539d1f0173626c64bfba48e09472c59c Mon Sep 17 00:00:00 2001 From: tuankiet2s Date: Sun, 3 Aug 2025 03:45:16 +0700 Subject: [PATCH] Add 'down-on-success' input to action.yml and implement conditional down in post-runner.ts --- action.yml | 4 ++++ src/post-runner.ts | 19 ++++++++++--------- src/services/input.service.ts | 11 ++++++++++- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/action.yml b/action.yml index a2389f4..c878a13 100644 --- a/action.yml +++ b/action.yml @@ -48,6 +48,10 @@ inputs: description: The GitHub token used to create an authenticated client (to fetch the latest version of docker compose). default: ${{ github.token }} required: false + down-on-success: + description: "Whether to down the services on success." + required: false + default: "false" runs: using: node20 diff --git a/src/post-runner.ts b/src/post-runner.ts index f6f3023..85fbaf8 100644 --- a/src/post-runner.ts +++ b/src/post-runner.ts @@ -30,15 +30,16 @@ export async function run(): Promise { loggerService.debug("docker compose logs:\n" + output); - await dockerComposeService.down({ - dockerFlags: inputs.dockerFlags, - composeFiles: inputs.composeFiles, - composeFlags: inputs.composeFlags, - cwd: inputs.cwd, - downFlags: inputs.downFlags, - serviceLogger: loggerService.getServiceLogger(inputs.serviceLogLevel), - }); - + if (inputs.downOnSuccess) { + await dockerComposeService.down({ + dockerFlags: inputs.dockerFlags, + composeFiles: inputs.composeFiles, + composeFlags: inputs.composeFlags, + cwd: inputs.cwd, + downFlags: inputs.downFlags, + serviceLogger: loggerService.getServiceLogger(inputs.serviceLogLevel), + }); + } loggerService.info("docker compose is down"); } catch (error) { setFailed(`${error instanceof Error ? error : JSON.stringify(error)}`); diff --git a/src/services/input.service.ts b/src/services/input.service.ts index eb7f7d4..3f49666 100644 --- a/src/services/input.service.ts +++ b/src/services/input.service.ts @@ -14,6 +14,7 @@ export type Inputs = { composeVersion: string | null; githubToken: string | null; serviceLogLevel: LogLevel; + downOnSuccess: boolean; }; export enum InputNames { @@ -27,6 +28,7 @@ export enum InputNames { ComposeVersion = "compose-version", GithubToken = "github-token", ServiceLogLevel = "services-log-level", + DownOnSuccess = "down-on-success", } export const COMPOSE_VERSION_LATEST = "latest"; @@ -44,6 +46,7 @@ export class InputService { composeVersion: this.getComposeVersion(), githubToken: this.getGithubToken(), serviceLogLevel: this.getServiceLogLevel(), + downOnSuccess: this.getDownOnSuccess(), }; } @@ -124,9 +127,15 @@ export class InputService { const configuredLevel = getInput(InputNames.ServiceLogLevel, { required: false }); if (configuredLevel && !Object.values(LogLevel).includes(configuredLevel as LogLevel)) { throw new Error( - `Invalid service log level "${configuredLevel}". Valid values are: ${Object.values(LogLevel).join(", ")}` + `Invalid service log level "${configuredLevel}". Valid values are: ${Object.values( + LogLevel + ).join(", ")}` ); } return (configuredLevel as LogLevel) || LogLevel.Debug; } + + private getDownOnSuccess(): boolean { + return getInput(InputNames.DownOnSuccess, { required: false }) === "true"; + } }