From 8c3a64de3249f11f3b58ecf6b85e53b2f8398e90 Mon Sep 17 00:00:00 2001 From: Anupam <83457710+s-anupam@users.noreply.github.com> Date: Thu, 9 Mar 2023 15:31:35 +0530 Subject: [PATCH] Improve `delete-only-untagged-versions` flag and minor bug fix (#97) Improve `delete-only-untagged-versions` flag and minor bug fix --- README.md | 2 ++ action.yml | 2 ++ dist/index.js | 15 ++++++++++++--- src/delete.ts | 3 +++ src/input.ts | 13 ++++++++++--- 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e8a9fdb..4e40bd4 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,8 @@ This action deletes versions of a package from [GitHub Packages](https://github. - `num-old-versions-to-delete` + `ignore-versions` - `min-versions-to-keep` + `ignore-versions` - `min-versions-to-keep` + `delete-only-pre-release-versions` + - `delete-only-untagged-versions` + - `min-versions-to-keep` + `delete-only-untagged-versions` # Scenarios diff --git a/action.yml b/action.yml index 1bf23e2..789a96e 100644 --- a/action.yml +++ b/action.yml @@ -58,6 +58,8 @@ inputs: delete-only-untagged-versions: description: > Deletes only untagged versions in case of a container package. Does not work for other package types. + The number of untagged versions to keep can be specified by min-versions-to-keep. + When this is set num-old-versions-to-delete 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 89172a5..a2729f7 100644 --- a/dist/index.js +++ b/dist/index.js @@ -31,6 +31,9 @@ function finalIds(input) { (0, operators_1.map)(value => { // we need to delete oldest versions first value.sort((a, b) => { + if (a.created_at === b.created_at) { + return a.id - b.id; + } return (new Date(a.created_at).getTime() - new Date(b.created_at).getTime()); }); /* @@ -116,8 +119,13 @@ class Input { this.token); } checkInput() { + if (this.packageType.toLowerCase() !== 'container') { + this.deleteUntaggedVersions = 'false'; + } if (this.numOldVersionsToDelete > 1 && - (this.minVersionsToKeep >= 0 || this.deletePreReleaseVersions === 'true')) { + (this.minVersionsToKeep >= 0 || + this.deletePreReleaseVersions === 'true' || + this.deleteUntaggedVersions === 'true')) { return false; } if (this.packageType === '' || this.packageName === '') { @@ -128,8 +136,9 @@ class Input { this.minVersionsToKeep > 0 ? this.minVersionsToKeep : 0; this.ignoreVersions = new RegExp('^(0|[1-9]\\d*)((\\.(0|[1-9]\\d*))*)$'); } - if (this.packageType.toLowerCase() !== 'container') { - this.deleteUntaggedVersions = 'false'; + if (this.deleteUntaggedVersions === 'true') { + this.minVersionsToKeep = + this.minVersionsToKeep > 0 ? this.minVersionsToKeep : 0; } if (this.minVersionsToKeep >= 0) { this.numOldVersionsToDelete = 0; diff --git a/src/delete.ts b/src/delete.ts index b5410e3..4eb953f 100644 --- a/src/delete.ts +++ b/src/delete.ts @@ -63,6 +63,9 @@ export function finalIds(input: Input): Observable { map(value => { // we need to delete oldest versions first value.sort((a, b) => { + if (a.created_at === b.created_at) { + return a.id - b.id + } return ( new Date(a.created_at).getTime() - new Date(b.created_at).getTime() ) diff --git a/src/input.ts b/src/input.ts index e71e258..d05e069 100644 --- a/src/input.ts +++ b/src/input.ts @@ -63,9 +63,15 @@ export class Input { } checkInput(): boolean { + if (this.packageType.toLowerCase() !== 'container') { + this.deleteUntaggedVersions = 'false' + } + if ( this.numOldVersionsToDelete > 1 && - (this.minVersionsToKeep >= 0 || this.deletePreReleaseVersions === 'true') + (this.minVersionsToKeep >= 0 || + this.deletePreReleaseVersions === 'true' || + this.deleteUntaggedVersions === 'true') ) { return false } @@ -80,8 +86,9 @@ export class Input { this.ignoreVersions = new RegExp('^(0|[1-9]\\d*)((\\.(0|[1-9]\\d*))*)$') } - if (this.packageType.toLowerCase() !== 'container') { - this.deleteUntaggedVersions = 'false' + if (this.deleteUntaggedVersions === 'true') { + this.minVersionsToKeep = + this.minVersionsToKeep > 0 ? this.minVersionsToKeep : 0 } if (this.minVersionsToKeep >= 0) {