2020-02-29 19:33:20 -06:00
|
|
|
import {from, Observable, merge, throwError, of} from 'rxjs'
|
2021-12-23 09:46:46 +00:00
|
|
|
import {catchError, map, tap} from 'rxjs/operators'
|
2022-12-28 16:33:42 +05:30
|
|
|
import {Octokit} from '@octokit/rest'
|
2022-12-29 15:35:31 +05:30
|
|
|
import {RestEndpointMethodTypes} from '@octokit/plugin-rest-endpoint-methods/dist-types/generated/parameters-and-response-types'
|
2020-02-29 19:33:20 -06:00
|
|
|
|
2021-12-22 19:09:58 +00:00
|
|
|
let deleted = 0
|
2022-12-30 13:10:17 +00:00
|
|
|
type PackageType =
|
|
|
|
|
RestEndpointMethodTypes['packages']['getAllPackageVersionsForPackageOwnedByUser']['parameters']['package_type']
|
2020-02-29 19:33:20 -06:00
|
|
|
|
|
|
|
|
export function deletePackageVersion(
|
|
|
|
|
packageVersionId: string,
|
2022-12-28 16:33:42 +05:30
|
|
|
owner: string,
|
|
|
|
|
packageName: string,
|
|
|
|
|
packageType: string,
|
2020-02-29 19:33:20 -06:00
|
|
|
token: string
|
|
|
|
|
): Observable<boolean> {
|
2022-12-28 16:33:42 +05:30
|
|
|
const octokit = new Octokit({
|
2023-03-02 19:56:14 +05:30
|
|
|
auth: token,
|
|
|
|
|
baseUrl: process.env.GITHUB_API_URL || 'https://api.github.com'
|
2022-12-28 12:56:30 +00:00
|
|
|
})
|
|
|
|
|
const package_version_id = +packageVersionId
|
2022-12-29 15:35:31 +05:30
|
|
|
const package_type: PackageType = packageType as PackageType
|
2021-12-22 19:09:58 +00:00
|
|
|
deleted += 1
|
2022-12-28 16:33:42 +05:30
|
|
|
|
2020-02-29 19:33:20 -06:00
|
|
|
return from(
|
2022-12-28 16:33:42 +05:30
|
|
|
octokit.rest.packages.deletePackageVersionForUser({
|
2022-12-29 15:35:31 +05:30
|
|
|
package_type,
|
2022-12-28 16:33:42 +05:30
|
|
|
package_name: packageName,
|
|
|
|
|
username: owner,
|
2022-12-28 12:56:30 +00:00
|
|
|
package_version_id
|
2022-12-28 16:33:42 +05:30
|
|
|
})
|
2020-02-29 19:33:20 -06:00
|
|
|
).pipe(
|
2021-12-23 09:46:46 +00:00
|
|
|
catchError(err => {
|
2022-12-28 16:33:42 +05:30
|
|
|
const msg = 'delete version API failed.'
|
2020-02-29 19:33:20 -06:00
|
|
|
return throwError(
|
|
|
|
|
err.errors && err.errors.length > 0
|
|
|
|
|
? `${msg} ${err.errors[0].message}`
|
2021-12-23 13:01:35 +00:00
|
|
|
: `${msg} ${err.message} \n${deleted - 1} versions deleted till now.`
|
2020-02-29 19:33:20 -06:00
|
|
|
)
|
|
|
|
|
}),
|
2022-12-28 16:33:42 +05:30
|
|
|
map(response => response.status === 204)
|
2020-02-29 19:33:20 -06:00
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function deletePackageVersions(
|
|
|
|
|
packageVersionIds: string[],
|
2022-12-28 16:33:42 +05:30
|
|
|
owner: string,
|
|
|
|
|
packageName: string,
|
|
|
|
|
packageType: string,
|
2020-02-29 19:33:20 -06:00
|
|
|
token: string
|
|
|
|
|
): Observable<boolean> {
|
|
|
|
|
if (packageVersionIds.length === 0) {
|
|
|
|
|
return of(true)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const deletes = packageVersionIds.map(id =>
|
2022-12-28 16:33:42 +05:30
|
|
|
deletePackageVersion(id, owner, packageName, packageType, token).pipe(
|
2020-02-29 19:33:20 -06:00
|
|
|
tap(result => {
|
2021-12-23 13:01:35 +00:00
|
|
|
if (!result) {
|
2020-02-29 19:33:20 -06:00
|
|
|
console.log(`version with id: ${id}, not deleted`)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
)
|
|
|
|
|
)
|
2021-12-23 13:01:35 +00:00
|
|
|
console.log(`Total versions deleted till now: ${deleted}`)
|
2020-02-29 19:33:20 -06:00
|
|
|
return merge(...deletes)
|
|
|
|
|
}
|