From e73aee77b1700a3f406b06735af87d9530b22c12 Mon Sep 17 00:00:00 2001 From: Namrata Jha Date: Wed, 17 Nov 2021 06:52:13 +0000 Subject: [PATCH] allow min pre release versions to be set --- README.md | 16 +++++++++------- action.yml | 7 ++++--- dist/index.js | 29 ++++++++++++++++++++--------- src/delete.ts | 22 ++++++++++++++++------ src/input.ts | 5 +++-- src/main.ts | 4 +++- 6 files changed, 55 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 57b5721..9b9c586 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ This action deletes versions of a package from [GitHub Packages](https://github. * Delete version(s) of a package that is hosted in a different repo than the one executing the workflow * Specify a minimum number of latest package versions to not get deleted. * Ignore some versions based on name and delete remaining versions. -* Delete all pre-release versions +* Delete only pre-release versions # Usage @@ -43,14 +43,15 @@ This action deletes versions of a package from [GitHub Packages](https://github. num-old-versions-to-delete: # The min number of latest versions to never delete. - # Defaults to 1. + # Defaults to 0. min-versions-to-keep: # The package versions to ignore exclude from deletion. # By default nothing is ignored" ignore-versions: - # If true it will delete all the pre-release versions upto 100 at once. + # If true it will delete only the pre-release versions. + # The number of pre-release versions to kep can be set by using `min-versions-to-keep` value with this. # Defaults to false. delete-only-pre-release-versions: @@ -75,7 +76,7 @@ This action deletes versions of a package from [GitHub Packages](https://github. - [Delete oldest x number of versions and keeping y latest versions of a package hosted in the same repo as the workflow](#delete-oldest-x-number-of-versions-and-keeping-y-latest-versions-of-a-package-hosted-in-the-same-repo-as-the-workflow) - [Delete oldest x number of versions and keeping y latest versions of a package hosted in a different repo than the workflow](#delete-oldest-x-number-of-versions-and-keeping-y-latest-versions-of-a-package-hosted-in-a-different-repo-than-the-workflow) - [Delete oldest x number of versions while ignoring particular package versions in the same repo as the workflow](#delete-oldest-x-number-of-versions-while-ignoring-particular-package-versions-in-the-same-repo-as-the-workflow) - - [Delete all pre-release package versions in the same repo as the workflow](#delete-all-pre-release-package-versions-in-the-same-repo-as-the-workflow) + - [Delete only pre-release package versions except x no of pre-release package versions in the same repo as the workflow](#delete-only-pre-release-package-versions-except-x-no-of-pre-release-package-versions-in-the-same-repo-as-the-workflow) ### Delete a specific version of a package hosted in the same repo as the workflow @@ -279,18 +280,19 @@ Delete 3 oldest versions excluding major versions as per semver is the same repo ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$' ``` -### Delete all pre-release package versions in the same repo as the workflow +### Delete only pre-release package versions except x no of pre-release package versions in the same repo as the workflow -To delete all pre release package versions in the same repo as the workflow the __package-name__ and __delete-only-pre-release-versions__ inputs are required. +To delete all pre release package versions except x no of pre-release package versions in the same repo as the workflow the __package-name__ and __delete-only-pre-release-versions__ inputs are required. __Example__ -Delete all pre-release package versions in the same repo as the workflow +Delete all pre-release package versions except latest 10 in the same repo as the workflow ```yaml - uses: actions/delete-package-versions@v1 with: package-name: 'test-package' + min-versions-to-keep: 10 delete-only-pre-release-versions: "true" ``` diff --git a/action.yml b/action.yml index 669a780..7f21c6f 100644 --- a/action.yml +++ b/action.yml @@ -37,8 +37,9 @@ inputs: min-versions-to-keep: description: > Number of versions to keep starting with the latest version + Defaults to 0. required: false - default: "1" + default: "0" ignore-versions: description: > @@ -49,8 +50,8 @@ inputs: delete-only-pre-release-versions: description: > - Deletes all the pre-release versions upto 100. - When this is set min-versions-to-keep, num-old-versions-to-delete and ignore-versions will not be taken into account. + Deletes only pre-release versions upto. The number of pre-release versions to keep can be specified by min-versions-to-keep. + When this is set num-old-versions-to-delete and ignore-versions will not be taken into account. By default this is set to false required: false default: "false" diff --git a/dist/index.js b/dist/index.js index 5298f39..85ef7ff 100644 --- a/dist/index.js +++ b/dist/index.js @@ -34,12 +34,22 @@ function getVersionIds(input) { if (input.hasOldestVersionQueryInfo()) { return version_1.getOldestVersions(input.owner, input.repo, input.packageName, input.numOldVersionsToDelete + input.minVersionsToKeep, input.token).pipe(operators_1.map(versionInfo => { const numberVersionsToDelete = versionInfo.length - input.minVersionsToKeep; - return numberVersionsToDelete <= 0 - ? [] - : versionInfo - .filter(info => !input.ignoreVersions.test(info.version)) - .map(info => info.id) - .slice(0, numberVersionsToDelete); + if (input.deletePreReleaseVersions == 'true') { + return numberVersionsToDelete <= 0 + ? [] + : versionInfo + .filter(info => !input.ignoreVersions.test(info.version)) + .map(info => info.id) + .slice(0, -input.minVersionsToKeep); + } + else { + return numberVersionsToDelete <= 0 + ? [] + : versionInfo + .filter(info => !input.ignoreVersions.test(info.version)) + .map(info => info.id) + .slice(0, numberVersionsToDelete); + } })); } return rxjs_1.throwError("Could not get packageVersionIds. Explicitly specify using the 'package-version-ids' input or provide the 'package-name' and 'num-old-versions-to-delete' inputs to dynamically retrieve oldest versions"); @@ -91,8 +101,9 @@ class Input { this.deletePreReleaseVersions = validatedParams.deletePreReleaseVersions; this.token = validatedParams.token; if (this.deletePreReleaseVersions == 'true') { - this.numOldVersionsToDelete = 100; - this.minVersionsToKeep = 0; + this.numOldVersionsToDelete = 100 - this.minVersionsToKeep; + this.minVersionsToKeep = + this.minVersionsToKeep > 0 ? this.minVersionsToKeep : 1; this.ignoreVersions = new RegExp('^(0|[1-9]\\d*)((\\.(0|[1-9]\\d*))*)$'); } } @@ -40322,7 +40333,7 @@ function getActionInput() { numOldVersionsToDelete: Number(core_1.getInput('num-old-versions-to-delete')), minVersionsToKeep: Number(core_1.getInput('min-versions-to-keep')), ignoreVersions: RegExp(core_1.getInput('ignore-versions')), - deletePreReleaseVersions: core_1.getInput('delete-only-pre-release-versions'), + deletePreReleaseVersions: core_1.getInput('delete-only-pre-release-versions').toLowerCase(), token: core_1.getInput('token') }); } diff --git a/src/delete.ts b/src/delete.ts index 18cacce..5ea8f94 100644 --- a/src/delete.ts +++ b/src/delete.ts @@ -19,12 +19,22 @@ export function getVersionIds(input: Input): Observable { map(versionInfo => { const numberVersionsToDelete = versionInfo.length - input.minVersionsToKeep - return numberVersionsToDelete <= 0 - ? [] - : versionInfo - .filter(info => !input.ignoreVersions.test(info.version)) - .map(info => info.id) - .slice(0, numberVersionsToDelete) + + if (input.deletePreReleaseVersions == 'true') { + return numberVersionsToDelete <= 0 + ? [] + : versionInfo + .filter(info => !input.ignoreVersions.test(info.version)) + .map(info => info.id) + .slice(0, -input.minVersionsToKeep) + } else { + return numberVersionsToDelete <= 0 + ? [] + : versionInfo + .filter(info => !input.ignoreVersions.test(info.version)) + .map(info => info.id) + .slice(0, numberVersionsToDelete) + } }) ) } diff --git a/src/input.ts b/src/input.ts index 59043ed..f8ce796 100644 --- a/src/input.ts +++ b/src/input.ts @@ -47,8 +47,9 @@ export class Input { this.token = validatedParams.token if (this.deletePreReleaseVersions == 'true') { - this.numOldVersionsToDelete = 100 - this.minVersionsToKeep = 0 + this.numOldVersionsToDelete = 100 - this.minVersionsToKeep + this.minVersionsToKeep = + this.minVersionsToKeep > 0 ? this.minVersionsToKeep : 1 this.ignoreVersions = new RegExp('^(0|[1-9]\\d*)((\\.(0|[1-9]\\d*))*)$') } } diff --git a/src/main.ts b/src/main.ts index 48a98d6..2905ad0 100644 --- a/src/main.ts +++ b/src/main.ts @@ -16,7 +16,9 @@ function getActionInput(): Input { numOldVersionsToDelete: Number(getInput('num-old-versions-to-delete')), minVersionsToKeep: Number(getInput('min-versions-to-keep')), ignoreVersions: RegExp(getInput('ignore-versions')), - deletePreReleaseVersions: getInput('delete-only-pre-release-versions'), + deletePreReleaseVersions: getInput( + 'delete-only-pre-release-versions' + ).toLowerCase(), token: getInput('token') }) }