From 2ceb43c4ecf199e670d6126c6629bed17a788582 Mon Sep 17 00:00:00 2001 From: bokuweb Date: Sun, 26 May 2024 14:03:21 +0900 Subject: [PATCH] feat: Support retention days --- dist/action.yml | 3 +++ src/config.ts | 3 +++ src/push.ts | 24 +++++++++++++++++++++++- src/service.ts | 1 + 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/dist/action.yml b/dist/action.yml index 8a8dd362..6ecd39c9 100644 --- a/dist/action.yml +++ b/dist/action.yml @@ -47,6 +47,9 @@ inputs: outdated-comment-action: description: "The option to handle outdated comments. `none` by default." required: false + retention-days: + description: "This option allows you to specify the duration for which images are stored in the branch. If not specified, the default is 30 days." + required: false runs: using: "node20" main: "lib/index.js" diff --git a/src/config.ts b/src/config.ts index 1106c4e7..0f92c4b2 100644 --- a/src/config.ts +++ b/src/config.ts @@ -18,6 +18,7 @@ export interface Config { reportFilePath: string | null; commentReportFormat: 'raw' | 'summarized'; outdatedCommentAction: 'none' | 'minimize'; + retentionDays: number; } const validateGitHubToken = (githubToken: string | undefined) => { @@ -116,6 +117,7 @@ export const getConfig = (): Config => { const matchingThreshold = getNumberInput('matching-threshold') ?? 0; const thresholdRate = getNumberInput('threshold-rate') ?? 0; const thresholdPixel = getNumberInput('threshold-pixel') ?? 0; + const retentionDays = getNumberInput('threshold-pixel') ?? 30; validateMatchingThreshold(matchingThreshold); validateThresholdRate(thresholdRate); const targetHash = core.getInput('target-hash') || null; @@ -146,5 +148,6 @@ export const getConfig = (): Config => { reportFilePath, commentReportFormat, outdatedCommentAction, + retentionDays, }; }; diff --git a/src/push.ts b/src/push.ts index dd68c3ac..6ebfa784 100644 --- a/src/push.ts +++ b/src/push.ts @@ -44,7 +44,6 @@ import { log } from './logger'; import { CompareOutput } from './compare'; import { workspace } from './path'; import * as constants from './constants'; -import { rejects } from 'assert'; import { backOff } from 'exponential-backoff'; export type PushImagesInput = { @@ -54,6 +53,7 @@ export type PushImagesInput = { branch: string; targetDir: string; env: EnvironmentVariables; + retentionDays: number; // commitName?: string; // commitEmail?: string; }; @@ -197,6 +197,28 @@ export const pushImages = async (input: PushImagesInput) => { } } + /* delete expired directories */ + try { + const retention = input.retentionDays * 24 * 60 * 60 * 1000; + const files = await fs.readdir(REPO_TEMP); + for (const fileOrDir of files) { + const p = path.join(REPO_TEMP, fileOrDir); + if ((await fs.stat(p)).isDirectory()) { + const day = fileOrDir.split('-')[0]; + if (day) { + const now = new Date().getTime(); + const target = new Date(day).getTime(); + if (now - target > retention) { + log.info(`delete dir ${fileOrDir}`); + await fs.rmdir(p, { recursive: true }); + } + } + } + } + } catch (e) { + log.error('Failed to delete directories', e); + } + const destDir = input.targetDir; // Make sure the destination sourceDir exists diff --git a/src/service.ts b/src/service.ts index 023186d8..57c39858 100644 --- a/src/service.ts +++ b/src/service.ts @@ -212,6 +212,7 @@ export const run = async ({ env: process.env, // commitName: undefined, // commitEmail: undefined, + retentionDays: config.retentionDays, }); } }