delete package versions action v1

This commit is contained in:
Trent Jones
2020-02-29 12:56:23 -06:00
parent 91c0d1036c
commit 4e192c30d8
19 changed files with 38087 additions and 336 deletions
+66
View File
@@ -0,0 +1,66 @@
import {from, Observable, merge, throwError, of} from 'rxjs'
import {graphql} from '@octokit/graphql'
import {catchError, map, tap} from 'rxjs/operators'
import {GraphQlQueryResponse} from '@octokit/graphql/dist-types/types'
export interface DeletePackageVersionMutationResponse {
deletePackageVersion: {
success: boolean
}
}
const mutation = `
mutation deletePackageVersion($packageVersionId: String!) {
deletePackageVersion(input: {packageVersionId: $packageVersionId}) {
success
}
}`
export function deletePackageVersion(
packageVersionId: string,
token: string
): Observable<boolean> {
return from(
graphql(mutation, {
packageVersionId,
headers: {
authorization: `token ${token}`,
Accept: 'application/vnd.github.package-deletes-preview+json'
}
}) as Promise<DeletePackageVersionMutationResponse>
).pipe(
catchError((err: GraphQlQueryResponse) => {
const msg = 'delete version mutation failed.'
return throwError(
err.errors && err.errors.length > 0
? `${msg} ${err.errors[0].message}`
: `${msg} verify input parameters are correct`
)
}),
map(response => response.deletePackageVersion.success)
)
}
export function deletePackageVersions(
packageVersionIds: string[],
token: string
): Observable<boolean> {
if (packageVersionIds.length === 0) {
console.log('no package version ids found, no versions will be deleted')
return of(true)
}
const deletes = packageVersionIds.map(id =>
deletePackageVersion(id, token).pipe(
tap(result => {
if (result) {
console.log(`version with id: ${id}, deleted`)
} else {
console.log(`version with id: ${id}, not deleted`)
}
})
)
)
return merge(...deletes)
}
+111
View File
@@ -0,0 +1,111 @@
import {graphql} from '@octokit/graphql'
import {GraphQlQueryResponse} from '@octokit/graphql/dist-types/types'
import {Observable, from, throwError} from 'rxjs'
import {catchError, map} from 'rxjs/operators'
export interface VersionInfo {
id: string
version: string
}
export interface GetVersionsQueryResponse {
repository: {
packages: {
edges: {
node: {
name: string
versions: {
edges: {node: VersionInfo}[]
}
}
}[]
}
}
}
const query = `
query getVersions($owner: String!, $repo: String!, $package: String!, $last: Int!) {
repository(owner: $owner, name: $repo) {
packages(first: 1, names: [$package]) {
edges {
node {
name
versions(last: $last) {
edges {
node {
id
version
}
}
}
}
}
}
}
}`
export function queryForOldestVersions(
owner: string,
repo: string,
packageName: string,
numVersions: number,
token: string
): Observable<GetVersionsQueryResponse> {
return from(
graphql(query, {
owner,
repo,
package: packageName,
last: numVersions,
headers: {
authorization: `token ${token}`,
Accept: 'application/vnd.github.packages-preview+json'
}
}) as Promise<GetVersionsQueryResponse>
).pipe(
catchError((err: GraphQlQueryResponse) => {
const msg = 'query for oldest version failed.'
return throwError(
err.errors && err.errors.length > 0
? `${msg} ${err.errors[0].message}`
: `${msg} verify input parameters are correct`
)
})
)
}
export function getOldestVersions(
owner: string,
repo: string,
packageName: string,
numVersions: number,
token: string
): Observable<VersionInfo[]> {
return queryForOldestVersions(
owner,
repo,
packageName,
numVersions,
token
).pipe(
map(result => {
if (result.repository.packages.edges.length < 1) {
throwError(
`package: ${packageName} not found for owner: ${owner} in repo: ${repo}`
)
}
const versions = result.repository.packages.edges[0].node.versions.edges
if (versions.length !== numVersions) {
console.log(
`number of versions requested was: ${numVersions}, but found: ${versions.length}`
)
}
return versions
.map(value => ({id: value.node.id, version: value.node.version}))
.reverse()
})
)
}
+2
View File
@@ -0,0 +1,2 @@
export * from './get-versions'
export * from './delete-version'