Skip to content

Commit 5aa567b

Browse files
authored
Merge pull request #58 from actions/improve-existing-action
Allow deletion beyond last 100 packages
2 parents 8e78cd9 + 1979f24 commit 5aa567b

12 files changed

+550
-224
lines changed

README.md

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Delete Package Versions
22

3-
This action deletes versions of a package from [GitHub Packages](https://github.com/features/packages).
3+
This action deletes versions of a package from [GitHub Packages](https://github.com/features/packages) except ghcr packages. This action will only delete a maximum of 99 versions in one run.
44

55
### What It Can Do
66

@@ -12,8 +12,6 @@ This action deletes versions of a package from [GitHub Packages](https://github.
1212
* Delete version(s) of a package that is hosted in a different repo than the one executing the workflow
1313
* Delete a single version
1414
* Delete multiple versions
15-
16-
1715
* Delete specific version(s)
1816

1917
# Usage
@@ -42,14 +40,12 @@ This action deletes versions of a package from [GitHub Packages](https://github.
4240

4341
# The number of old versions to delete starting from the oldest version.
4442
# Defaults to 1.
45-
# Cannot be more than 100.
4643
num-old-versions-to-delete:
4744

48-
# The number of latest versions to not delete.
49-
# Defaults to 0.
50-
# When this is set greater than 0 it will delete all deletable package versions except the specified no.
51-
# This takes precedence over `num-old-versions-to-delete`.
52-
# Cannot be more than 100.
45+
# The number of latest versions to keep.
46+
# This cannot be specified with `num-old-versions-to-delete`. By default, `num-old-versions-to-delete` takes precedence over `min-versions-to-keep`.
47+
# When set to 0, all deletable versions will be deleted.
48+
# When set greater than 0, all deletable package versions except the specified number will be deleted.
5349
min-versions-to-keep:
5450

5551
# The package versions to exclude from deletion.
@@ -61,6 +57,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
6157
# The number of pre-release versions to keep can be set by using `min-versions-to-keep` value with this.
6258
# When `min-versions-to-keep` is 0, all pre-release versions get deleted.
6359
# Defaults to false.
60+
# Cannot be used with `num-old-versions-to-delete` and `ignore-versions`.
6461
delete-only-pre-release-versions:
6562

6663
# The token used to authenticate with GitHub Packages.
@@ -71,6 +68,18 @@ This action deletes versions of a package from [GitHub Packages](https://github.
7168
token:
7269
```
7370
71+
# Valid Input Combinations
72+
73+
`owner`, `repo`, `package-name` and `token` can be used with the following combinations in a workflow -
74+
75+
- `num-old-versions-to-delete`
76+
- `min-versions-to-keep`
77+
- `delete-only-pre-release-versions`
78+
- `ignore-versions`
79+
- `num-old-versions-to-delete` + `ignore-versions`
80+
- `min-versions-to-keep` + `ignore-versions`
81+
- `min-versions-to-keep` + `delete-only-pre-release-versions`
82+
7483
# Scenarios
7584

7685
- [Delete all pre-release versions except y latest pre-release package versions](#delete-all-pre-release-versions-except-y-latest-pre-release-package-versions)

__tests__/delete.test.ts

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,40 @@
11
import {Input, InputParams} from '../src/input'
2-
import {deleteVersions, getVersionIds} from '../src/delete'
2+
import {deleteVersions, finalIds} from '../src/delete'
33

44
describe.skip('index tests -- call graphql', () => {
5-
it('getVersionIds test -- get oldest version', done => {
5+
it('finalIds test -- get oldest version', done => {
66
const numVersions = 1
77

8-
getVersionIds(getInput({numOldVersionsToDelete: numVersions})).subscribe(
9-
ids => {
10-
expect(ids.length).toBeLessThanOrEqual(numVersions)
11-
done()
12-
}
13-
)
8+
finalIds(getInput({numOldVersionsToDelete: numVersions})).subscribe(ids => {
9+
expect(ids.length).toBe(numVersions)
10+
done()
11+
})
1412
})
1513

16-
it('getVersionIds test -- get oldest 3 versions', done => {
14+
it.skip('finalIds test -- get oldest 3 versions', done => {
1715
const numVersions = 3
16+
finalIds(getInput({numOldVersionsToDelete: numVersions})).subscribe(ids => {
17+
expect(ids.length).toBe(numVersions)
18+
done()
19+
})
20+
})
1821

19-
getVersionIds(getInput({numOldVersionsToDelete: numVersions})).subscribe(
20-
ids => {
21-
expect(ids.length).toBeLessThanOrEqual(numVersions)
22-
done()
23-
}
24-
)
22+
it.skip('finalIds test -- get oldest 110 versions', done => {
23+
const numVersions = 110
24+
25+
finalIds(getInput({numOldVersionsToDelete: numVersions})).subscribe(ids => {
26+
expect(ids.length).toBe(99), async () => done()
27+
})
2528
})
2629

27-
it('getVersionIds test -- supplied package version id', done => {
30+
it('finalIds test -- supplied package version id', done => {
2831
const suppliedIds = [
2932
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
3033
'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB',
3134
'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
3235
]
3336

34-
getVersionIds(getInput({packageVersionIds: suppliedIds})).subscribe(ids => {
37+
finalIds(getInput({packageVersionIds: suppliedIds})).subscribe(ids => {
3538
expect(ids).toBe(suppliedIds)
3639
done()
3740
})
@@ -58,38 +61,39 @@ describe.skip('index tests -- call graphql', () => {
5861
})
5962

6063
it.skip('deleteVersions test -- delete oldest version', done => {
61-
deleteVersions(
62-
getInput({numOldVersionsToDelete: 2, minVersionsToKeep: 1})
63-
).subscribe(isSuccess => {
64-
expect(isSuccess).toBe(true)
65-
done()
66-
})
64+
deleteVersions(getInput({numOldVersionsToDelete: 1})).subscribe(
65+
isSuccess => {
66+
expect(isSuccess)
67+
},
68+
async () => done()
69+
)
6770
})
6871

6972
it.skip('deleteVersions test -- delete 3 oldest versions', done => {
70-
deleteVersions(
71-
getInput({numOldVersionsToDelete: 3, minVersionsToKeep: 1})
72-
).subscribe(isSuccess => {
73-
expect(isSuccess).toBe(true)
74-
done()
75-
})
73+
deleteVersions(getInput({numOldVersionsToDelete: 3})).subscribe(
74+
isSuccess => {
75+
expect(isSuccess)
76+
},
77+
async () => done()
78+
)
7679
})
7780

78-
it('deleteVersions test -- keep 5 versions', done => {
79-
deleteVersions(getInput({minVersionsToKeep: 5})).subscribe(isSuccess => {
81+
it.skip('deleteVersions test -- keep 5 versions', done => {
82+
deleteVersions(getInput({minVersionsToKeep: 100})).subscribe(isSuccess => {
8083
expect(isSuccess).toBe(true)
81-
done()
82-
})
84+
}),
85+
async () => done()
8386
})
8487
})
8588

8689
const defaultInput: InputParams = {
8790
packageVersionIds: [],
8891
owner: 'namratajha',
8992
repo: 'only-pkg',
90-
packageName: 'onlypkg.maven',
93+
packageName: 'only-pkg',
9194
numOldVersionsToDelete: 1,
92-
minVersionsToKeep: 1,
95+
minVersionsToKeep: -1,
96+
ignoreVersions: RegExp('^$'),
9397
token: process.env.GITHUB_TOKEN as string
9498
}
9599

__tests__/version/delete-version.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const githubToken = process.env.GITHUB_TOKEN as string
55
describe.skip('delete tests', () => {
66
it('deletePackageVersion', async () => {
77
const response = await deletePackageVersion(
8-
'MDE0OlBhY2thZ2VWZXJzaW9uNjg5OTU1',
8+
'PV_lADOGReZt84AEI7FzgDSHEI',
99
githubToken
1010
).toPromise()
1111
expect(response).toBe(true)
@@ -14,9 +14,9 @@ describe.skip('delete tests', () => {
1414
it('deletePackageVersions', async () => {
1515
const response = await deletePackageVersions(
1616
[
17-
'MDE0OlBhY2thZ2VWZXJzaW9uNjk4Mjc0',
18-
'MDE0OlBhY2thZ2VWZXJzaW9uNjk4Mjcx',
19-
'MDE0OlBhY2thZ2VWZXJzaW9uNjk4MjY3'
17+
'PV_lADOGReZt84AEI7FzgDSHDs',
18+
'PV_lADOGReZt84AEI7FzgDSHDY',
19+
'PV_lADOGReZt84AEI7FzgDSHC8'
2020
],
2121
githubToken
2222
).toPromise()

__tests__/version/get-version.test.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
1-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
2-
// @ts-ignore
31
import {mockOldestQueryResponse} from './graphql.mock'
42
import {
53
getOldestVersions as _getOldestVersions,
6-
VersionInfo
4+
QueryInfo
75
} from '../../src/version'
86
import {Observable} from 'rxjs'
97

108
describe.skip('get versions tests -- call graphql', () => {
119
it('getOldestVersions -- succeeds', done => {
1210
const numVersions = 1
13-
14-
getOldestVersions({numVersions}).subscribe(versions => {
15-
expect(versions.length).toBe(numVersions)
11+
getOldestVersions({numVersions}).subscribe(result => {
12+
expect(result.versions.length).toBe(numVersions)
1613
done()
1714
})
1815
})
@@ -33,8 +30,8 @@ describe('get versions tests -- mock graphql', () => {
3330
const numVersions = 5
3431
mockOldestQueryResponse(numVersions)
3532

36-
getOldestVersions({numVersions}).subscribe(versions => {
37-
expect(versions.length).toBe(numVersions)
33+
getOldestVersions({numVersions}).subscribe(result => {
34+
expect(result.versions.length).toBe(numVersions)
3835
done()
3936
})
4037
})
@@ -45,24 +42,27 @@ interface Params {
4542
repo?: string
4643
packageName?: string
4744
numVersions?: number
45+
startCursor?: string
4846
token?: string
4947
}
5048

5149
const defaultParams = {
5250
owner: 'namratajha',
53-
repo: 'only-pkg',
54-
packageName: 'onlypkg.maven',
55-
numVersions: 3,
51+
repo: 'test-repo',
52+
packageName: 'test-repo',
53+
numVersions: 1,
54+
startCursor: '',
5655
token: process.env.GITHUB_TOKEN as string
5756
}
5857

59-
function getOldestVersions(params?: Params): Observable<VersionInfo[]> {
58+
function getOldestVersions(params?: Params): Observable<QueryInfo> {
6059
const p: Required<Params> = {...defaultParams, ...params}
6160
return _getOldestVersions(
6261
p.owner,
6362
p.repo,
6463
p.packageName,
6564
p.numVersions,
65+
p.startCursor,
6666
p.token
6767
)
6868
}

__tests__/version/graphql.mock.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export function getMockedOldestQueryResponse(
1010
numVersions: number
1111
): GetVersionsQueryResponse {
1212
const versions = []
13-
13+
numVersions = numVersions < 100 ? numVersions : numVersions
1414
for (let i = 1; i <= numVersions; ++i) {
1515
versions.push({
1616
node: {
@@ -28,7 +28,12 @@ export function getMockedOldestQueryResponse(
2828
node: {
2929
name: 'test',
3030
versions: {
31-
edges: versions.reverse()
31+
totalCount: 200,
32+
edges: versions.reverse(),
33+
pageInfo: {
34+
startCursor: 'AAA',
35+
hasPreviousPage: false
36+
}
3237
}
3338
}
3439
}
@@ -38,12 +43,13 @@ export function getMockedOldestQueryResponse(
3843
}
3944
}
4045

41-
export function mockOldestQueryResponse(
42-
numVersions: number
43-
) {
44-
const response = new Promise((resolve) => {
46+
export function mockOldestQueryResponse(numVersions: number): void {
47+
const response = new Promise<GetVersionsQueryResponse>(resolve => {
4548
resolve(getMockedOldestQueryResponse(numVersions))
4649
}) as Promise<GraphQlQueryResponseData>
47-
jest.spyOn(Graphql, 'graphql').mockImplementation(
48-
(token: string, query: string, parameters: RequestParameters) => response)
50+
jest
51+
.spyOn(Graphql, 'graphql')
52+
.mockImplementation(
53+
(token: string, query: string, parameters: RequestParameters) => response
54+
)
4955
}

action.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ inputs:
3737
min-versions-to-keep:
3838
description: >
3939
Number of versions to keep starting with the latest version
40-
Defaults to 0.
40+
By default keeps no version.
41+
To delete all versions set this as 0.
4142
required: false
42-
default: "0"
43+
default: "-1"
4344

4445
ignore-versions:
4546
description: >
@@ -50,7 +51,7 @@ inputs:
5051

5152
delete-only-pre-release-versions:
5253
description: >
53-
Deletes only pre-release versions upto. The number of pre-release versions to keep can be specified by min-versions-to-keep.
54+
Deletes only pre-release versions. The number of pre-release versions to keep can be specified by min-versions-to-keep.
5455
When this is set num-old-versions-to-delete and ignore-versions will not be taken into account.
5556
By default this is set to false
5657
required: false

0 commit comments

Comments
 (0)