add delete-only-untagged-versions param (#94)
Add a new boolean parameter to action `delete-only-untagged-versions`. When true, only versions that do not have any tags will be deleted.
This commit is contained in:
@@ -255,6 +255,53 @@ describe('index tests -- call rest', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it('finalIds test - delete only untagged versions with minVersionsToKeep', done => {
|
||||
const numVersions = 50
|
||||
const numTaggedVersions = 20
|
||||
const numUntaggedVersions = numVersions - numTaggedVersions
|
||||
|
||||
const taggedVersions = getMockedVersionsResponse(
|
||||
numTaggedVersions,
|
||||
0,
|
||||
'container',
|
||||
true
|
||||
)
|
||||
const untaggedVersions = getMockedVersionsResponse(
|
||||
numUntaggedVersions,
|
||||
numTaggedVersions,
|
||||
'container',
|
||||
false
|
||||
)
|
||||
const versions = taggedVersions.concat(untaggedVersions)
|
||||
|
||||
let apiCalled = 0
|
||||
|
||||
server.use(
|
||||
rest.get(
|
||||
'https://api.github.com/users/test-owner/packages/container/test-package/versions',
|
||||
(req, res, ctx) => {
|
||||
apiCalled++
|
||||
return res(ctx.status(200), ctx.json(versions))
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
finalIds(
|
||||
getInput({
|
||||
minVersionsToKeep: 10,
|
||||
deleteUntaggedVersions: 'true',
|
||||
packageType: 'container'
|
||||
})
|
||||
).subscribe(ids => {
|
||||
expect(apiCalled).toBe(1)
|
||||
expect(ids.length).toBe(numUntaggedVersions - 10)
|
||||
for (let i = 0; i < numUntaggedVersions - 10; i++) {
|
||||
expect(ids[i]).toBe(untaggedVersions[i].id.toString())
|
||||
}
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
it('finalIds test - no versions deleted if API error even once', done => {
|
||||
const numVersions = RATE_LIMIT * 2
|
||||
let apiCalled = 0
|
||||
|
||||
@@ -77,6 +77,54 @@ describe('get versions tests -- mock rest', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it('getOldestVersions -- success - container tagged versions', done => {
|
||||
const numVersions = 6
|
||||
const numTaggedVersions = 3
|
||||
const numUntaggedVersions = numVersions - numTaggedVersions
|
||||
|
||||
const respTagged = getMockedVersionsResponse(
|
||||
numTaggedVersions,
|
||||
0,
|
||||
'container',
|
||||
true
|
||||
)
|
||||
const respUntagged = getMockedVersionsResponse(
|
||||
numUntaggedVersions,
|
||||
numTaggedVersions,
|
||||
'container',
|
||||
false
|
||||
)
|
||||
const resp = respTagged.concat(respUntagged)
|
||||
|
||||
server.use(
|
||||
rest.get(
|
||||
'https://api.github.com/users/test-owner/packages/container/test-package/versions',
|
||||
(req, res, ctx) => {
|
||||
return res(ctx.status(200), ctx.json(resp))
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
getOldestVersions({numVersions, packageType: 'container'}).subscribe(
|
||||
result => {
|
||||
expect(result.versions.length).toBe(numVersions)
|
||||
for (let i = 0; i < numVersions; i++) {
|
||||
expect(result.versions[i].id).toBe(resp[i].id)
|
||||
expect(result.versions[i].version).toBe(resp[i].name)
|
||||
expect(result.versions[i].created_at).toBe(resp[i].created_at)
|
||||
if (i < numTaggedVersions) {
|
||||
expect(result.versions[i].tagged).toBe(true)
|
||||
} else {
|
||||
expect(result.versions[i].tagged).toBe(false)
|
||||
}
|
||||
}
|
||||
expect(result.paginate).toBe(true)
|
||||
expect(result.totalCount).toBe(numVersions)
|
||||
done()
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
it('getOldestVersions -- paginate is false when fetched versions is less than page size', done => {
|
||||
const numVersions = 5
|
||||
|
||||
|
||||
@@ -2,23 +2,44 @@ import {RestEndpointMethodTypes} from '@octokit/plugin-rest-endpoint-methods/dis
|
||||
|
||||
type GetVersionsResponseData =
|
||||
RestEndpointMethodTypes['packages']['getAllPackageVersionsForPackageOwnedByUser']['response']['data']
|
||||
type PackageType =
|
||||
RestEndpointMethodTypes['packages']['getAllPackageVersionsForPackageOwnedByUser']['parameters']['package_type']
|
||||
|
||||
export function getMockedVersionsResponse(
|
||||
numVersions: number,
|
||||
offset = 0
|
||||
offset = 0,
|
||||
packageType = 'npm',
|
||||
tagged = false
|
||||
): GetVersionsResponseData {
|
||||
const versions: GetVersionsResponseData = []
|
||||
for (let i = 1 + offset; i <= numVersions + offset; ++i) {
|
||||
const created_at = new Date()
|
||||
created_at.setUTCFullYear(2000 + Number(i), 1, 1)
|
||||
versions.push({
|
||||
let version = {
|
||||
id: i,
|
||||
name: `${i}.0.0`,
|
||||
url: '',
|
||||
created_at: created_at.toUTCString(),
|
||||
package_html_url: '',
|
||||
updated_at: ''
|
||||
})
|
||||
updated_at: '',
|
||||
metadata: {
|
||||
package_type: packageType as PackageType
|
||||
}
|
||||
} as GetVersionsResponseData[0]
|
||||
|
||||
if (packageType === 'container' && tagged) {
|
||||
version = {
|
||||
...version,
|
||||
metadata: {
|
||||
package_type: packageType as PackageType,
|
||||
container: {
|
||||
tags: [`latest${i}`] as string[]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
versions.push(version)
|
||||
}
|
||||
return versions
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user