From a7a3e5595ed7ac519cfdb6bcd87e444d705f7078 Mon Sep 17 00:00:00 2001 From: Hsn723 Date: Sat, 28 Mar 2020 21:28:19 +0900 Subject: [PATCH 1/3] Add dry-run parameter --- README.md | 4 ++++ __tests__/delete.test.ts | 10 +++++++++- __tests__/version/delete-version.test.ts | 22 ++++++++++++++++++++++ action.yml | 6 ++++++ src/delete.ts | 2 +- src/input.ts | 6 +++++- src/main.ts | 3 ++- src/version/delete-version.ts | 11 ++++++++--- 8 files changed, 57 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5a4e23e5..0fe77937 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,10 @@ This action deletes versions of a package from [GitHub Packages](https://github. # If `package-version-ids` is given the token only needs the delete packages scope. # If `package-version-ids` is not given the token needs the delete packages scope and the read packages scope token: + + # Perform a dry-run: only print out actions to be performed without actually deleting anything. + # Defaults to false. + dry-run: ``` # Scenarios diff --git a/__tests__/delete.test.ts b/__tests__/delete.test.ts index 10147e33..78699555 100644 --- a/__tests__/delete.test.ts +++ b/__tests__/delete.test.ts @@ -74,6 +74,13 @@ describe.skip('index tests -- call graphql', () => { } ) }) + + it('deleteVersions test -- dry run', done => { + deleteVersions(getInput({dryRun: true})).subscribe(isSuccess => { + expect(isSuccess).toBe(true) + done() + }) + }) }) const defaultInput: InputParams = { @@ -82,7 +89,8 @@ const defaultInput: InputParams = { repo: 'actions-testing', packageName: 'com.github.trent-j.actions-test', numOldVersionsToDelete: 1, - token: process.env.GITHUB_TOKEN as string + token: process.env.GITHUB_TOKEN as string, + dryRun: false } function getInput(params?: InputParams): Input { diff --git a/__tests__/version/delete-version.test.ts b/__tests__/version/delete-version.test.ts index a34bbbf1..5ebf13b3 100644 --- a/__tests__/version/delete-version.test.ts +++ b/__tests__/version/delete-version.test.ts @@ -11,6 +11,15 @@ describe.skip('delete tests', () => { expect(response).toBe(true) }) + it('deletePackageVersion (dry-run)', async () => { + const response = await deletePackageVersion( + 'MDE0OlBhY2thZ2VWZXJzaW9uNjg5OTU1', + githubToken, + true + ).toPromise() + expect(response).toBe(true) + }) + it('deletePackageVersions', async () => { const response = await deletePackageVersions( [ @@ -22,4 +31,17 @@ describe.skip('delete tests', () => { ).toPromise() expect(response).toBe(true) }) + + it('deletePackageVersions', async () => { + const response = await deletePackageVersions( + [ + 'MDE0OlBhY2thZ2VWZXJzaW9uNjk4Mjc0', + 'MDE0OlBhY2thZ2VWZXJzaW9uNjk4Mjcx', + 'MDE0OlBhY2thZ2VWZXJzaW9uNjk4MjY3' + ], + githubToken, + true + ).toPromise() + expect(response).toBe(true) + }) }) diff --git a/action.yml b/action.yml index 5e62c414..7ff72d1c 100644 --- a/action.yml +++ b/action.yml @@ -43,6 +43,12 @@ inputs: required: false default: ${{ github.token }} + dry-run: + description: > + Only print the versions that will be deleted without actually deleting them. + required: false + default: "false" + runs: using: node12 main: dist/index.js diff --git a/src/delete.ts b/src/delete.ts index 3fbbb024..de067449 100644 --- a/src/delete.ts +++ b/src/delete.ts @@ -36,6 +36,6 @@ export function deleteVersions(input: Input): Observable { } return getVersionIds(input).pipe( - concatMap(ids => deletePackageVersions(ids, input.token)) + concatMap(ids => deletePackageVersions(ids, input.token, input.dryRun)) ) } diff --git a/src/input.ts b/src/input.ts index ddbf6834..0e74bc4f 100644 --- a/src/input.ts +++ b/src/input.ts @@ -5,6 +5,7 @@ export interface InputParams { packageName?: string numOldVersionsToDelete?: number token?: string + dryRun?: boolean } const defaultParams = { @@ -13,7 +14,8 @@ const defaultParams = { repo: '', packageName: '', numOldVersionsToDelete: 0, - token: '' + token: '', + dryRun: false } export class Input { @@ -23,6 +25,7 @@ export class Input { packageName: string numOldVersionsToDelete: number token: string + dryRun: boolean constructor(params?: InputParams) { const validatedParams: Required = {...defaultParams, ...params} @@ -33,6 +36,7 @@ export class Input { this.packageName = validatedParams.packageName this.numOldVersionsToDelete = validatedParams.numOldVersionsToDelete this.token = validatedParams.token + this.dryRun = validatedParams.dryRun } hasOldestVersionQueryInfo(): boolean { diff --git a/src/main.ts b/src/main.ts index cba8d3fd..35e04175 100644 --- a/src/main.ts +++ b/src/main.ts @@ -14,7 +14,8 @@ function getActionInput(): Input { repo: getInput('repo') ? getInput('repo') : context.repo.repo, packageName: getInput('package-name'), numOldVersionsToDelete: Number(getInput('num-old-versions-to-delete')), - token: getInput('token') + token: getInput('token'), + dryRun: Boolean(getInput('dry-run')) }) } diff --git a/src/version/delete-version.ts b/src/version/delete-version.ts index f0ac3b8d..e1d12b0f 100644 --- a/src/version/delete-version.ts +++ b/src/version/delete-version.ts @@ -18,8 +18,12 @@ const mutation = ` export function deletePackageVersion( packageVersionId: string, - token: string + token: string, + dryRun = false ): Observable { + if (dryRun) { + return of(true) + } return from( graphql(mutation, { packageVersionId, @@ -43,7 +47,8 @@ export function deletePackageVersion( export function deletePackageVersions( packageVersionIds: string[], - token: string + token: string, + dryRun = false ): Observable { if (packageVersionIds.length === 0) { console.log('no package version ids found, no versions will be deleted') @@ -51,7 +56,7 @@ export function deletePackageVersions( } const deletes = packageVersionIds.map(id => - deletePackageVersion(id, token).pipe( + deletePackageVersion(id, token, dryRun).pipe( tap(result => { if (result) { console.log(`version with id: ${id}, deleted`) From 411460692617d6cbb5e3589eb743cfa951b78fc4 Mon Sep 17 00:00:00 2001 From: Hsn723 Date: Thu, 16 Jul 2020 22:21:48 +0900 Subject: [PATCH 2/3] fix type error --- src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 35e04175..3ea3f534 100644 --- a/src/main.ts +++ b/src/main.ts @@ -15,7 +15,7 @@ function getActionInput(): Input { packageName: getInput('package-name'), numOldVersionsToDelete: Number(getInput('num-old-versions-to-delete')), token: getInput('token'), - dryRun: Boolean(getInput('dry-run')) + dryRun: getInput('dry-run') === 'true' }) } From 289b0316f6a6a5349aecabd37cfee1a0c8d4c498 Mon Sep 17 00:00:00 2001 From: Hsn723 Date: Thu, 16 Jul 2020 22:25:06 +0900 Subject: [PATCH 3/3] indicate that the log output is from a dry-run --- src/version/delete-version.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/version/delete-version.ts b/src/version/delete-version.ts index e1d12b0f..117f2eab 100644 --- a/src/version/delete-version.ts +++ b/src/version/delete-version.ts @@ -59,9 +59,13 @@ export function deletePackageVersions( deletePackageVersion(id, token, dryRun).pipe( tap(result => { if (result) { - console.log(`version with id: ${id}, deleted`) + console.log( + `version with id: ${id}, deleted ${dryRun ? '(dry-run)' : ''}` + ) } else { - console.log(`version with id: ${id}, not deleted`) + console.log( + `version with id: ${id}, not deleted ${dryRun ? '(dry-run)' : ''}` + ) } }) )