Compare commits
80 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c5e64443ea | ||
|
|
9b1e76ea45 | ||
|
|
37b7aca7eb | ||
|
|
f87b4a0b81 | ||
|
|
6961202f36 | ||
|
|
4eab40be13 | ||
|
|
8701e46f41 | ||
|
|
565ec2459a | ||
|
|
ec4518c513 | ||
|
|
33300d7916 | ||
|
|
e048663cdf | ||
|
|
0e86ee6891 | ||
|
|
a31a43afa6 | ||
|
|
56849b848a | ||
|
|
000223ef3e | ||
|
|
df897cea27 | ||
|
|
b77daeff53 | ||
|
|
7515f7a4f9 | ||
|
|
3e14cd73d4 | ||
|
|
5e4787da1c | ||
|
|
355299fa7d | ||
|
|
5263253279 | ||
|
|
d6bf5f6a97 | ||
|
|
4afcc8f713 | ||
|
|
1472d90599 | ||
|
|
09f7b84634 | ||
|
|
5aa567b6f7 | ||
|
|
1979f24cbb | ||
|
|
6a5e08c48d | ||
|
|
f804442fe4 | ||
|
|
5282013b71 | ||
|
|
4d762a4bc3 | ||
|
|
aac34a9f33 | ||
|
|
406ce0281d | ||
|
|
72cc4b27b0 | ||
|
|
7d188d1776 | ||
|
|
81676df338 | ||
|
|
cfbae0ac37 | ||
|
|
f556b07dce | ||
|
|
8283350471 | ||
|
|
1a7a0291b8 | ||
|
|
38d4003d57 | ||
|
|
bf6c02443a | ||
|
|
e9faf3233c | ||
|
|
9ff1e31776 | ||
|
|
0739cce1e8 | ||
|
|
ef5d9ac398 | ||
|
|
1369f0ca05 | ||
|
|
372546727d | ||
|
|
324039ba0a | ||
|
|
508f6970a5 | ||
|
|
e6a9d9c802 | ||
|
|
21a6c99c5d | ||
|
|
db4d66086a | ||
|
|
c8087bcc70 | ||
|
|
75db2288ca | ||
|
|
cbfc7d9ca3 | ||
|
|
d846be5128 | ||
|
|
15db109d58 | ||
|
|
94d1202726 | ||
|
|
8e78cd925d | ||
|
|
c6b1d83a14 | ||
|
|
b7877514c6 | ||
|
|
370a350353 | ||
|
|
ba58e0e966 | ||
|
|
106b04e076 | ||
|
|
04947a51f3 | ||
|
|
7d96e1e541 | ||
|
|
5003595d8e | ||
|
|
263c5d855a | ||
|
|
36894fd813 | ||
|
|
a22ff2a7c5 | ||
|
|
8c24449b56 | ||
|
|
0994e6c0d2 | ||
|
|
334f20f7fa | ||
|
|
93d3863084 | ||
|
|
e7ecd94635 | ||
|
|
c253b9d27a | ||
|
|
248e3651e3 | ||
|
|
fd4e8f971f |
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"plugins": ["jest", "@typescript-eslint"],
|
"plugins": ["jest", "@typescript-eslint"],
|
||||||
"extends": ["plugin:github/es6"],
|
"extends": ["plugin:github/recommended","plugin:@typescript-eslint/recommended"],
|
||||||
"parser": "@typescript-eslint/parser",
|
"parser": "@typescript-eslint/parser",
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"ecmaVersion": 9,
|
"ecmaVersion": 9,
|
||||||
@@ -17,13 +17,29 @@
|
|||||||
"@typescript-eslint/no-require-imports": "error",
|
"@typescript-eslint/no-require-imports": "error",
|
||||||
"@typescript-eslint/array-type": "error",
|
"@typescript-eslint/array-type": "error",
|
||||||
"@typescript-eslint/await-thenable": "error",
|
"@typescript-eslint/await-thenable": "error",
|
||||||
"@typescript-eslint/ban-ts-ignore": "error",
|
"@typescript-eslint/ban-ts-comment": "error",
|
||||||
"camelcase": "off",
|
"camelcase": "off",
|
||||||
"@typescript-eslint/camelcase": "error",
|
"@typescript-eslint/naming-convention": [
|
||||||
"@typescript-eslint/class-name-casing": "error",
|
"error",
|
||||||
|
{
|
||||||
|
"selector": "class",
|
||||||
|
"format": ["PascalCase"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selector": "interface",
|
||||||
|
"format": ["PascalCase"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selector": "typeProperty",
|
||||||
|
"format": [],
|
||||||
|
"custom": {
|
||||||
|
"regex": "^[A-Z][A-Za-z]*$",
|
||||||
|
"match": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
"@typescript-eslint/explicit-function-return-type": ["error", {"allowExpressions": true}],
|
"@typescript-eslint/explicit-function-return-type": ["error", {"allowExpressions": true}],
|
||||||
"@typescript-eslint/func-call-spacing": ["error", "never"],
|
"@typescript-eslint/func-call-spacing": ["error", "never"],
|
||||||
"@typescript-eslint/generic-type-naming": ["error", "^[A-Z][A-Za-z]*$"],
|
|
||||||
"@typescript-eslint/no-array-constructor": "error",
|
"@typescript-eslint/no-array-constructor": "error",
|
||||||
"@typescript-eslint/no-empty-interface": "error",
|
"@typescript-eslint/no-empty-interface": "error",
|
||||||
"@typescript-eslint/no-explicit-any": "error",
|
"@typescript-eslint/no-explicit-any": "error",
|
||||||
@@ -33,7 +49,7 @@
|
|||||||
"@typescript-eslint/no-misused-new": "error",
|
"@typescript-eslint/no-misused-new": "error",
|
||||||
"@typescript-eslint/no-namespace": "error",
|
"@typescript-eslint/no-namespace": "error",
|
||||||
"@typescript-eslint/no-non-null-assertion": "warn",
|
"@typescript-eslint/no-non-null-assertion": "warn",
|
||||||
"@typescript-eslint/no-object-literal-type-assertion": "error",
|
"@typescript-eslint/consistent-type-assertions": "error",
|
||||||
"@typescript-eslint/no-unnecessary-qualifier": "error",
|
"@typescript-eslint/no-unnecessary-qualifier": "error",
|
||||||
"@typescript-eslint/no-unnecessary-type-assertion": "error",
|
"@typescript-eslint/no-unnecessary-type-assertion": "error",
|
||||||
"@typescript-eslint/no-useless-constructor": "error",
|
"@typescript-eslint/no-useless-constructor": "error",
|
||||||
@@ -41,7 +57,7 @@
|
|||||||
"@typescript-eslint/prefer-for-of": "warn",
|
"@typescript-eslint/prefer-for-of": "warn",
|
||||||
"@typescript-eslint/prefer-function-type": "warn",
|
"@typescript-eslint/prefer-function-type": "warn",
|
||||||
"@typescript-eslint/prefer-includes": "error",
|
"@typescript-eslint/prefer-includes": "error",
|
||||||
"@typescript-eslint/prefer-interface": "error",
|
"@typescript-eslint/consistent-type-definitions": "error",
|
||||||
"@typescript-eslint/prefer-string-starts-ends-with": "error",
|
"@typescript-eslint/prefer-string-starts-ends-with": "error",
|
||||||
"@typescript-eslint/promise-function-async": "error",
|
"@typescript-eslint/promise-function-async": "error",
|
||||||
"@typescript-eslint/require-array-sort-compare": "error",
|
"@typescript-eslint/require-array-sort-compare": "error",
|
||||||
@@ -50,7 +66,10 @@
|
|||||||
"@typescript-eslint/semi": ["error", "never"],
|
"@typescript-eslint/semi": ["error", "never"],
|
||||||
"@typescript-eslint/type-annotation-spacing": "error",
|
"@typescript-eslint/type-annotation-spacing": "error",
|
||||||
"@typescript-eslint/unbound-method": "error",
|
"@typescript-eslint/unbound-method": "error",
|
||||||
"no-console": "off"
|
"no-console": "off",
|
||||||
|
"import/no-unresolved": "off",
|
||||||
|
"sort-imports": "off",
|
||||||
|
"filenames/match-regex": "off"
|
||||||
},
|
},
|
||||||
"env": {
|
"env": {
|
||||||
"node": true,
|
"node": true,
|
||||||
|
|||||||
4
.github/workflows/check-dist.yml
vendored
4
.github/workflows/check-dist.yml
vendored
@@ -24,10 +24,10 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Set Node.js 12.x
|
- name: Set Node.js 16.x
|
||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: 12.x
|
node-version: 16.x
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|||||||
2
.licenses/npm/@actions/core.dep.yml
generated
2
.licenses/npm/@actions/core.dep.yml
generated
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: "@actions/core"
|
name: "@actions/core"
|
||||||
version: 1.6.0
|
version: 1.9.1
|
||||||
type: npm
|
type: npm
|
||||||
summary: Actions core lib
|
summary: Actions core lib
|
||||||
homepage: https://github.com/actions/toolkit/tree/master/packages/core
|
homepage: https://github.com/actions/toolkit/tree/master/packages/core
|
||||||
|
|||||||
2
.licenses/npm/rxjs.dep.yml
generated
2
.licenses/npm/rxjs.dep.yml
generated
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: rxjs
|
name: rxjs
|
||||||
version: 6.5.4
|
version: 6.6.7
|
||||||
type: npm
|
type: npm
|
||||||
summary: Reactive Extensions for modern JavaScript
|
summary: Reactive Extensions for modern JavaScript
|
||||||
homepage: https://github.com/ReactiveX/RxJS
|
homepage: https://github.com/ReactiveX/RxJS
|
||||||
|
|||||||
82
README.md
82
README.md
@@ -1,25 +1,25 @@
|
|||||||
# Delete Package Versions
|
# Delete Package Versions
|
||||||
|
|
||||||
This action deletes versions of a package from [GitHub Packages](https://github.com/features/packages).
|
This action deletes versions of a package from [GitHub Packages](https://github.com/features/packages). This action will only delete a maximum of 99 versions in one run.
|
||||||
|
|
||||||
|
_This action does currently not support deleting packages from the GitHub Container Registry. As the npm registry is about to be migrated to the same new architecture as GHCR, this action won't work for npm soon too (see [#74](https://github.com/actions/delete-package-versions/issues/74))._
|
||||||
|
|
||||||
### What It Can Do
|
### What It Can Do
|
||||||
|
|
||||||
* Create a retention policy (delete all except n most recent pre-release versions)
|
* Create a retention policy (delete all except n most recent pre-release versions)
|
||||||
* Delete all package versions except n most recent versions.
|
* Delete all package versions except n most recent versions
|
||||||
* Delete oldest version(s)
|
* Delete oldest version(s)
|
||||||
* Ignore version(s) from deletion through regex.
|
* Ignore version(s) from deletion through regex
|
||||||
* Delete version(s) of a package that is hosted in the same repo that is executing the workflow
|
* Delete version(s) of a package that is hosted in the same repo that is executing the workflow
|
||||||
* Delete version(s) of a package that is hosted in a different repo than the one executing the workflow
|
* Delete version(s) of a package that is hosted in a different repo than the one executing the workflow
|
||||||
* Delete a single version
|
* Delete a single version
|
||||||
* Delete multiple versions
|
* Delete multiple versions
|
||||||
|
|
||||||
|
|
||||||
* Delete specific version(s)
|
* Delete specific version(s)
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
# Can be a single package version id, or a comma separated list of package version ids.
|
# Can be a single package version id, or a comma separated list of package version ids.
|
||||||
# Defaults to an empty string.
|
# Defaults to an empty string.
|
||||||
@@ -42,14 +42,12 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
|
|
||||||
# The number of old versions to delete starting from the oldest version.
|
# The number of old versions to delete starting from the oldest version.
|
||||||
# Defaults to 1.
|
# Defaults to 1.
|
||||||
# Cannot be more than 100.
|
|
||||||
num-old-versions-to-delete:
|
num-old-versions-to-delete:
|
||||||
|
|
||||||
# The number of latest versions to not delete.
|
# The number of latest versions to keep.
|
||||||
# Defaults to 0.
|
# This cannot be specified with `num-old-versions-to-delete`. By default, `num-old-versions-to-delete` takes precedence over `min-versions-to-keep`.
|
||||||
# When this is set greater than 0 it will delete all deletable package versions except the specified no.
|
# When set to 0, all deletable versions will be deleted.
|
||||||
# `num-old-versions-to-delete` will not be taken into account with this option.
|
# When set greater than 0, all deletable package versions except the specified number will be deleted.
|
||||||
# Cannot be more than 100.
|
|
||||||
min-versions-to-keep:
|
min-versions-to-keep:
|
||||||
|
|
||||||
# The package versions to exclude from deletion.
|
# The package versions to exclude from deletion.
|
||||||
@@ -61,6 +59,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
# The number of pre-release versions to keep can be set by using `min-versions-to-keep` value with this.
|
# The number of pre-release versions to keep can be set by using `min-versions-to-keep` value with this.
|
||||||
# When `min-versions-to-keep` is 0, all pre-release versions get deleted.
|
# When `min-versions-to-keep` is 0, all pre-release versions get deleted.
|
||||||
# Defaults to false.
|
# Defaults to false.
|
||||||
|
# Cannot be used with `num-old-versions-to-delete` and `ignore-versions`.
|
||||||
delete-only-pre-release-versions:
|
delete-only-pre-release-versions:
|
||||||
|
|
||||||
# The token used to authenticate with GitHub Packages.
|
# The token used to authenticate with GitHub Packages.
|
||||||
@@ -71,6 +70,18 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
token:
|
token:
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Valid Input Combinations
|
||||||
|
|
||||||
|
`owner`, `repo`, `package-name` and `token` can be used with the following combinations in a workflow -
|
||||||
|
|
||||||
|
- `num-old-versions-to-delete`
|
||||||
|
- `min-versions-to-keep`
|
||||||
|
- `delete-only-pre-release-versions`
|
||||||
|
- `ignore-versions`
|
||||||
|
- `num-old-versions-to-delete` + `ignore-versions`
|
||||||
|
- `min-versions-to-keep` + `ignore-versions`
|
||||||
|
- `min-versions-to-keep` + `delete-only-pre-release-versions`
|
||||||
|
|
||||||
# Scenarios
|
# Scenarios
|
||||||
|
|
||||||
- [Delete all pre-release versions except y latest pre-release package versions](#delete-all-pre-release-versions-except-y-latest-pre-release-package-versions)
|
- [Delete all pre-release versions except y latest pre-release package versions](#delete-all-pre-release-versions-except-y-latest-pre-release-package-versions)
|
||||||
@@ -92,7 +103,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
Delete all pre-release package versions except latest 10 in the same repo as the workflow
|
Delete all pre-release package versions except latest 10 in the same repo as the workflow
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
package-name: 'test-package'
|
package-name: 'test-package'
|
||||||
min-versions-to-keep: 10
|
min-versions-to-keep: 10
|
||||||
@@ -107,7 +118,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
Delete all pre-release package versions except latest 10 in a different repo than the workflow
|
Delete all pre-release package versions except latest 10 in a different repo than the workflow
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
owner: 'github'
|
owner: 'github'
|
||||||
repo: 'packages'
|
repo: 'packages'
|
||||||
@@ -128,9 +139,9 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
Delete all except latest 3 package versions excluding major versions as per semver in the same repo as the workflow
|
Delete all except latest 3 package versions excluding major versions as per semver in the same repo as the workflow
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
package-name: 'test-packae'
|
package-name: 'test-package'
|
||||||
min-versions-to-keep: 3
|
min-versions-to-keep: 3
|
||||||
ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'
|
ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'
|
||||||
```
|
```
|
||||||
@@ -144,11 +155,11 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
Delete all except latest 3 package versions excluding major versions as per semver in a different repo than the workflow
|
Delete all except latest 3 package versions excluding major versions as per semver in a different repo than the workflow
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
owner: 'github'
|
owner: 'github'
|
||||||
repo: 'packages'
|
repo: 'packages'
|
||||||
package-name: 'test-packae'
|
package-name: 'test-package'
|
||||||
token: ${{ secrets.GITHUB_PAT }}
|
token: ${{ secrets.GITHUB_PAT }}
|
||||||
min-versions-to-keep: 3
|
min-versions-to-keep: 3
|
||||||
ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'
|
ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'
|
||||||
@@ -167,9 +178,9 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
Delete 3 oldest versions excluding major versions as per semver is the same repo as the workflow
|
Delete 3 oldest versions excluding major versions as per semver is the same repo as the workflow
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
package-name: 'test-packae'
|
package-name: 'test-package'
|
||||||
num-old-versions-to-delete: 3
|
num-old-versions-to-delete: 3
|
||||||
ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'
|
ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'
|
||||||
```
|
```
|
||||||
@@ -182,14 +193,14 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
|
|
||||||
__Example__
|
__Example__
|
||||||
|
|
||||||
Delete 3 oldest versions excluding major versions as per semver is a differernt repo than the workflow
|
Delete 3 oldest versions excluding major versions as per semver is a different repo than the workflow
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
owner: 'github'
|
owner: 'github'
|
||||||
repo: 'packages'
|
repo: 'packages'
|
||||||
package-name: 'test-packae'
|
package-name: 'test-package'
|
||||||
token: ${{ secrets.PAT }}
|
token: ${{ secrets.PAT }}
|
||||||
num-old-versions-to-delete: 3
|
num-old-versions-to-delete: 3
|
||||||
ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'
|
ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'
|
||||||
@@ -206,7 +217,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
Delete all except latest 2 versions of a package hosted in the same repo as the workflow
|
Delete all except latest 2 versions of a package hosted in the same repo as the workflow
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
package-name: 'test-package'
|
package-name: 'test-package'
|
||||||
min-versions-to-keep: 2
|
min-versions-to-keep: 2
|
||||||
@@ -221,7 +232,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
Delete all except latest 2 versions of a package hosted in a repo other than the workflow
|
Delete all except latest 2 versions of a package hosted in a repo other than the workflow
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
owner: 'github'
|
owner: 'github'
|
||||||
repo: 'packages'
|
repo: 'packages'
|
||||||
@@ -241,7 +252,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
Delete the oldest 3 version of a package hosted in the same repo as the workflow
|
Delete the oldest 3 version of a package hosted in the same repo as the workflow
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
package-name: 'test-package'
|
package-name: 'test-package'
|
||||||
num-old-versions-to-delete: 3
|
num-old-versions-to-delete: 3
|
||||||
@@ -256,7 +267,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
Delete the oldest 3 version of a package hosted in a different repo than the one executing the workflow
|
Delete the oldest 3 version of a package hosted in a different repo than the one executing the workflow
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
owner: 'github'
|
owner: 'github'
|
||||||
repo: 'packages'
|
repo: 'packages'
|
||||||
@@ -274,7 +285,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
__Example__
|
__Example__
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
package-name: 'test-package'
|
package-name: 'test-package'
|
||||||
```
|
```
|
||||||
@@ -286,7 +297,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
__Example__
|
__Example__
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
owner: 'github'
|
owner: 'github'
|
||||||
repo: 'packages'
|
repo: 'packages'
|
||||||
@@ -305,7 +316,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
__Example__
|
__Example__
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3'
|
package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3'
|
||||||
```
|
```
|
||||||
@@ -319,7 +330,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
__Example__
|
__Example__
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3'
|
package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3'
|
||||||
token: ${{ secrets.PAT }}
|
token: ${{ secrets.PAT }}
|
||||||
@@ -329,19 +340,19 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
|
|
||||||
### Delete multiple specific versions of a package
|
### Delete multiple specific versions of a package
|
||||||
|
|
||||||
To delete multiple specifc versions of a package that is hosted in the same repo as the workflow the __package-version-ids__ input is required.
|
To delete multiple specific versions of a package that is hosted in the same repo as the workflow the __package-version-ids__ input is required.
|
||||||
|
|
||||||
The __package-version-ids__ input should be a comma separated string of package version ids. Package version ids can be retrieved via the [GitHub GraphQL API][api].
|
The __package-version-ids__ input should be a comma separated string of package version ids. Package version ids can be retrieved via the [GitHub GraphQL API][api].
|
||||||
|
|
||||||
__Example__
|
__Example__
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzQ5, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzUw'
|
package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzQ5, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzUw'
|
||||||
```
|
```
|
||||||
|
|
||||||
To delete multiple specifc versions of a package that is hosted in a repo other than the workflow the __package-version-ids__, __token__ inputs are required.
|
To delete multiple specific versions of a package that is hosted in a repo other than the workflow the __package-version-ids__, __token__ inputs are required.
|
||||||
|
|
||||||
The __package-version-ids__ input should be a comma separated string of package version ids. Package version ids can be retrieved via the [GitHub GraphQL API][api].
|
The __package-version-ids__ input should be a comma separated string of package version ids. Package version ids can be retrieved via the [GitHub GraphQL API][api].
|
||||||
|
|
||||||
@@ -350,7 +361,7 @@ This action deletes versions of a package from [GitHub Packages](https://github.
|
|||||||
__Example__
|
__Example__
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/delete-package-versions@v2
|
- uses: actions/delete-package-versions@v3
|
||||||
with:
|
with:
|
||||||
package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzQ5, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzUw'
|
package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzQ5, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzUw'
|
||||||
token: ${{ secrets.PAT }}
|
token: ${{ secrets.PAT }}
|
||||||
@@ -363,3 +374,4 @@ The scripts and documentation in this project are released under the [MIT Licens
|
|||||||
[api]: https://developer.github.com/v4/previews/#github-packages
|
[api]: https://developer.github.com/v4/previews/#github-packages
|
||||||
[token]: https://help.github.com/en/packages/publishing-and-managing-packages/about-github-packages#about-tokens
|
[token]: https://help.github.com/en/packages/publishing-and-managing-packages/about-github-packages#about-tokens
|
||||||
[secret]: https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets
|
[secret]: https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets
|
||||||
|
|
||||||
|
|||||||
@@ -1,37 +1,40 @@
|
|||||||
import {Input, InputParams} from '../src/input'
|
import {Input, InputParams} from '../src/input'
|
||||||
import {deleteVersions, getVersionIds} from '../src/delete'
|
import {deleteVersions, finalIds} from '../src/delete'
|
||||||
|
|
||||||
describe.skip('index tests -- call graphql', () => {
|
describe.skip('index tests -- call graphql', () => {
|
||||||
it('getVersionIds test -- get oldest version', done => {
|
it('finalIds test -- get oldest version', done => {
|
||||||
const numVersions = 1
|
const numVersions = 1
|
||||||
|
|
||||||
getVersionIds(getInput({numOldVersionsToDelete: numVersions})).subscribe(
|
finalIds(getInput({numOldVersionsToDelete: numVersions})).subscribe(ids => {
|
||||||
ids => {
|
expect(ids.length).toBe(numVersions)
|
||||||
expect(ids.length).toBeLessThanOrEqual(numVersions)
|
done()
|
||||||
done()
|
})
|
||||||
}
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('getVersionIds test -- get oldest 3 versions', done => {
|
it.skip('finalIds test -- get oldest 3 versions', done => {
|
||||||
const numVersions = 3
|
const numVersions = 3
|
||||||
|
finalIds(getInput({numOldVersionsToDelete: numVersions})).subscribe(ids => {
|
||||||
getVersionIds(getInput({numOldVersionsToDelete: numVersions})).subscribe(
|
expect(ids.length).toBe(numVersions)
|
||||||
ids => {
|
done()
|
||||||
expect(ids.length).toBeLessThanOrEqual(numVersions)
|
})
|
||||||
done()
|
|
||||||
}
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('getVersionIds test -- supplied package version id', done => {
|
it.skip('finalIds test -- get oldest 110 versions', done => {
|
||||||
|
const numVersions = 110
|
||||||
|
|
||||||
|
finalIds(getInput({numOldVersionsToDelete: numVersions})).subscribe(ids => {
|
||||||
|
expect(ids.length).toBe(99), async () => done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('finalIds test -- supplied package version id', done => {
|
||||||
const suppliedIds = [
|
const suppliedIds = [
|
||||||
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
|
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
|
||||||
'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB',
|
'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB',
|
||||||
'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
|
'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
|
||||||
]
|
]
|
||||||
|
|
||||||
getVersionIds(getInput({packageVersionIds: suppliedIds})).subscribe(ids => {
|
finalIds(getInput({packageVersionIds: suppliedIds})).subscribe(ids => {
|
||||||
expect(ids).toBe(suppliedIds)
|
expect(ids).toBe(suppliedIds)
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
@@ -58,28 +61,28 @@ describe.skip('index tests -- call graphql', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it.skip('deleteVersions test -- delete oldest version', done => {
|
it.skip('deleteVersions test -- delete oldest version', done => {
|
||||||
deleteVersions(
|
deleteVersions(getInput({numOldVersionsToDelete: 1})).subscribe(
|
||||||
getInput({numOldVersionsToDelete: 2, minVersionsToKeep: 1})
|
isSuccess => {
|
||||||
).subscribe(isSuccess => {
|
expect(isSuccess)
|
||||||
expect(isSuccess).toBe(true)
|
},
|
||||||
done()
|
async () => done()
|
||||||
})
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it.skip('deleteVersions test -- delete 3 oldest versions', done => {
|
it.skip('deleteVersions test -- delete 3 oldest versions', done => {
|
||||||
deleteVersions(
|
deleteVersions(getInput({numOldVersionsToDelete: 3})).subscribe(
|
||||||
getInput({numOldVersionsToDelete: 3, minVersionsToKeep: 1})
|
isSuccess => {
|
||||||
).subscribe(isSuccess => {
|
expect(isSuccess)
|
||||||
expect(isSuccess).toBe(true)
|
},
|
||||||
done()
|
async () => done()
|
||||||
})
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('deleteVersions test -- keep 5 versions', done => {
|
it.skip('deleteVersions test -- keep 5 versions', done => {
|
||||||
deleteVersions(getInput({minVersionsToKeep: 5})).subscribe(isSuccess => {
|
deleteVersions(getInput({minVersionsToKeep: 100})).subscribe(isSuccess => {
|
||||||
expect(isSuccess).toBe(true)
|
expect(isSuccess).toBe(true)
|
||||||
done()
|
}),
|
||||||
})
|
async () => done()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -87,9 +90,10 @@ const defaultInput: InputParams = {
|
|||||||
packageVersionIds: [],
|
packageVersionIds: [],
|
||||||
owner: 'namratajha',
|
owner: 'namratajha',
|
||||||
repo: 'only-pkg',
|
repo: 'only-pkg',
|
||||||
packageName: 'onlypkg.maven',
|
packageName: 'only-pkg',
|
||||||
numOldVersionsToDelete: 1,
|
numOldVersionsToDelete: 1,
|
||||||
minVersionsToKeep: 1,
|
minVersionsToKeep: -1,
|
||||||
|
ignoreVersions: RegExp('^$'),
|
||||||
token: process.env.GITHUB_TOKEN as string
|
token: process.env.GITHUB_TOKEN as string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ const githubToken = process.env.GITHUB_TOKEN as string
|
|||||||
describe.skip('delete tests', () => {
|
describe.skip('delete tests', () => {
|
||||||
it('deletePackageVersion', async () => {
|
it('deletePackageVersion', async () => {
|
||||||
const response = await deletePackageVersion(
|
const response = await deletePackageVersion(
|
||||||
'MDE0OlBhY2thZ2VWZXJzaW9uNjg5OTU1',
|
'PV_lADOGReZt84AEI7FzgDSHEI',
|
||||||
githubToken
|
githubToken
|
||||||
).toPromise()
|
).toPromise()
|
||||||
expect(response).toBe(true)
|
expect(response).toBe(true)
|
||||||
@@ -14,9 +14,9 @@ describe.skip('delete tests', () => {
|
|||||||
it('deletePackageVersions', async () => {
|
it('deletePackageVersions', async () => {
|
||||||
const response = await deletePackageVersions(
|
const response = await deletePackageVersions(
|
||||||
[
|
[
|
||||||
'MDE0OlBhY2thZ2VWZXJzaW9uNjk4Mjc0',
|
'PV_lADOGReZt84AEI7FzgDSHDs',
|
||||||
'MDE0OlBhY2thZ2VWZXJzaW9uNjk4Mjcx',
|
'PV_lADOGReZt84AEI7FzgDSHDY',
|
||||||
'MDE0OlBhY2thZ2VWZXJzaW9uNjk4MjY3'
|
'PV_lADOGReZt84AEI7FzgDSHC8'
|
||||||
],
|
],
|
||||||
githubToken
|
githubToken
|
||||||
).toPromise()
|
).toPromise()
|
||||||
|
|||||||
@@ -1,18 +1,15 @@
|
|||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
||||||
// @ts-ignore
|
|
||||||
import {mockOldestQueryResponse} from './graphql.mock'
|
import {mockOldestQueryResponse} from './graphql.mock'
|
||||||
import {
|
import {
|
||||||
getOldestVersions as _getOldestVersions,
|
getOldestVersions as _getOldestVersions,
|
||||||
VersionInfo
|
QueryInfo
|
||||||
} from '../../src/version'
|
} from '../../src/version'
|
||||||
import {Observable} from 'rxjs'
|
import {Observable} from 'rxjs'
|
||||||
|
|
||||||
describe.skip('get versions tests -- call graphql', () => {
|
describe.skip('get versions tests -- call graphql', () => {
|
||||||
it('getOldestVersions -- succeeds', done => {
|
it('getOldestVersions -- succeeds', done => {
|
||||||
const numVersions = 1
|
const numVersions = 1
|
||||||
|
getOldestVersions({numVersions}).subscribe(result => {
|
||||||
getOldestVersions({numVersions}).subscribe(versions => {
|
expect(result.versions.length).toBe(numVersions)
|
||||||
expect(versions.length).toBe(numVersions)
|
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -33,8 +30,8 @@ describe('get versions tests -- mock graphql', () => {
|
|||||||
const numVersions = 5
|
const numVersions = 5
|
||||||
mockOldestQueryResponse(numVersions)
|
mockOldestQueryResponse(numVersions)
|
||||||
|
|
||||||
getOldestVersions({numVersions}).subscribe(versions => {
|
getOldestVersions({numVersions}).subscribe(result => {
|
||||||
expect(versions.length).toBe(numVersions)
|
expect(result.versions.length).toBe(numVersions)
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -45,24 +42,27 @@ interface Params {
|
|||||||
repo?: string
|
repo?: string
|
||||||
packageName?: string
|
packageName?: string
|
||||||
numVersions?: number
|
numVersions?: number
|
||||||
|
startCursor?: string
|
||||||
token?: string
|
token?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultParams = {
|
const defaultParams = {
|
||||||
owner: 'namratajha',
|
owner: 'namratajha',
|
||||||
repo: 'only-pkg',
|
repo: 'test-repo',
|
||||||
packageName: 'onlypkg.maven',
|
packageName: 'test-repo',
|
||||||
numVersions: 3,
|
numVersions: 1,
|
||||||
|
startCursor: '',
|
||||||
token: process.env.GITHUB_TOKEN as string
|
token: process.env.GITHUB_TOKEN as string
|
||||||
}
|
}
|
||||||
|
|
||||||
function getOldestVersions(params?: Params): Observable<VersionInfo[]> {
|
function getOldestVersions(params?: Params): Observable<QueryInfo> {
|
||||||
const p: Required<Params> = {...defaultParams, ...params}
|
const p: Required<Params> = {...defaultParams, ...params}
|
||||||
return _getOldestVersions(
|
return _getOldestVersions(
|
||||||
p.owner,
|
p.owner,
|
||||||
p.repo,
|
p.repo,
|
||||||
p.packageName,
|
p.packageName,
|
||||||
p.numVersions,
|
p.numVersions,
|
||||||
|
p.startCursor,
|
||||||
p.token
|
p.token
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ export function getMockedOldestQueryResponse(
|
|||||||
numVersions: number
|
numVersions: number
|
||||||
): GetVersionsQueryResponse {
|
): GetVersionsQueryResponse {
|
||||||
const versions = []
|
const versions = []
|
||||||
|
numVersions = numVersions < 100 ? numVersions : numVersions
|
||||||
for (let i = 1; i <= numVersions; ++i) {
|
for (let i = 1; i <= numVersions; ++i) {
|
||||||
versions.push({
|
versions.push({
|
||||||
node: {
|
node: {
|
||||||
@@ -28,7 +28,12 @@ export function getMockedOldestQueryResponse(
|
|||||||
node: {
|
node: {
|
||||||
name: 'test',
|
name: 'test',
|
||||||
versions: {
|
versions: {
|
||||||
edges: versions.reverse()
|
totalCount: 200,
|
||||||
|
edges: versions.reverse(),
|
||||||
|
pageInfo: {
|
||||||
|
startCursor: 'AAA',
|
||||||
|
hasPreviousPage: false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -38,12 +43,13 @@ export function getMockedOldestQueryResponse(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function mockOldestQueryResponse(
|
export function mockOldestQueryResponse(numVersions: number): void {
|
||||||
numVersions: number
|
const response = new Promise<GetVersionsQueryResponse>(resolve => {
|
||||||
) {
|
|
||||||
const response = new Promise((resolve) => {
|
|
||||||
resolve(getMockedOldestQueryResponse(numVersions))
|
resolve(getMockedOldestQueryResponse(numVersions))
|
||||||
}) as Promise<GraphQlQueryResponseData>
|
}) as Promise<GraphQlQueryResponseData>
|
||||||
jest.spyOn(Graphql, 'graphql').mockImplementation(
|
jest
|
||||||
(token: string, query: string, parameters: RequestParameters) => response)
|
.spyOn(Graphql, 'graphql')
|
||||||
|
.mockImplementation(
|
||||||
|
(token: string, query: string, parameters: RequestParameters) => response
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,9 +37,10 @@ inputs:
|
|||||||
min-versions-to-keep:
|
min-versions-to-keep:
|
||||||
description: >
|
description: >
|
||||||
Number of versions to keep starting with the latest version
|
Number of versions to keep starting with the latest version
|
||||||
Defaults to 0.
|
By default keeps no version.
|
||||||
|
To delete all versions set this as 0.
|
||||||
required: false
|
required: false
|
||||||
default: "0"
|
default: "-1"
|
||||||
|
|
||||||
ignore-versions:
|
ignore-versions:
|
||||||
description: >
|
description: >
|
||||||
@@ -50,7 +51,7 @@ inputs:
|
|||||||
|
|
||||||
delete-only-pre-release-versions:
|
delete-only-pre-release-versions:
|
||||||
description: >
|
description: >
|
||||||
Deletes only pre-release versions upto. The number of pre-release versions to keep can be specified by min-versions-to-keep.
|
Deletes only pre-release versions. The number of pre-release versions to keep can be specified by min-versions-to-keep.
|
||||||
When this is set num-old-versions-to-delete and ignore-versions will not be taken into account.
|
When this is set num-old-versions-to-delete and ignore-versions will not be taken into account.
|
||||||
By default this is set to false
|
By default this is set to false
|
||||||
required: false
|
required: false
|
||||||
@@ -66,7 +67,7 @@ inputs:
|
|||||||
default: ${{ github.token }}
|
default: ${{ github.token }}
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: node12
|
using: node16
|
||||||
main: dist/index.js
|
main: dist/index.js
|
||||||
|
|
||||||
branding:
|
branding:
|
||||||
|
|||||||
13331
dist/index.js
vendored
13331
dist/index.js
vendored
File diff suppressed because one or more lines are too long
6945
package-lock.json
generated
6945
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
13
package.json
13
package.json
@@ -7,9 +7,10 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"format": "prettier --write **/*.ts",
|
"format": "prettier --write **/*.ts",
|
||||||
"format-check": "prettier --check **/*.ts",
|
"format-check": "prettier --check **/*.ts",
|
||||||
"lint": "eslint src/**/*.ts",
|
"lint": "eslint src/**/*.ts --fix",
|
||||||
|
"lint-check": "eslint src/**/*.ts",
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"build": "npm run format-check && npm run lint && npm run test && tsc",
|
"build": "npm run format-check && npm run lint-check && npm run test && tsc",
|
||||||
"pack": "rm -rf ./lib ./dist && npm run build && ncc build"
|
"pack": "rm -rf ./lib ./dist && npm run build && ncc build"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -24,17 +25,17 @@
|
|||||||
"author": "YourNameOrOrganization",
|
"author": "YourNameOrOrganization",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.6.0",
|
"@actions/core": "^1.9.1",
|
||||||
"@actions/github": "^2.1.1",
|
"@actions/github": "^2.1.1",
|
||||||
"rxjs": "^6.5.4"
|
"rxjs": "^6.5.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^24.0.23",
|
"@types/jest": "^27.4.0",
|
||||||
"@types/node": "^12.7.12",
|
"@types/node": "^12.7.12",
|
||||||
"@typescript-eslint/parser": "^2.8.0",
|
"@typescript-eslint/parser": "^2.8.0",
|
||||||
"@vercel/ncc": "^0.31.1",
|
"@vercel/ncc": "^0.31.1",
|
||||||
"eslint": "^5.16.0",
|
"eslint": "^8.9.0",
|
||||||
"eslint-plugin-github": "^2.0.0",
|
"eslint-plugin-github": "^4.3.5",
|
||||||
"eslint-plugin-jest": "^22.21.0",
|
"eslint-plugin-jest": "^22.21.0",
|
||||||
"jest": "^27.3.1",
|
"jest": "^27.3.1",
|
||||||
"jest-circus": "^27.3.1",
|
"jest-circus": "^27.3.1",
|
||||||
|
|||||||
166
src/delete.ts
166
src/delete.ts
@@ -1,46 +1,130 @@
|
|||||||
import {Input} from './input'
|
import {Input} from './input'
|
||||||
import {Observable, of, throwError} from 'rxjs'
|
import {EMPTY, Observable, of, throwError} from 'rxjs'
|
||||||
import {deletePackageVersions, getOldestVersions} from './version'
|
import {deletePackageVersions, getOldestVersions, VersionInfo} from './version'
|
||||||
import {concatMap, map} from 'rxjs/operators'
|
import {concatMap, map, expand, tap} from 'rxjs/operators'
|
||||||
|
|
||||||
export function getVersionIds(input: Input): Observable<string[]> {
|
const RATE_LIMIT = 99
|
||||||
|
let totalCount = 0
|
||||||
|
|
||||||
|
export function getVersionIds(
|
||||||
|
owner: string,
|
||||||
|
repo: string,
|
||||||
|
packageName: string,
|
||||||
|
numVersions: number,
|
||||||
|
cursor: string,
|
||||||
|
token: string
|
||||||
|
): Observable<VersionInfo[]> {
|
||||||
|
return getOldestVersions(
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
packageName,
|
||||||
|
numVersions,
|
||||||
|
cursor,
|
||||||
|
token
|
||||||
|
).pipe(
|
||||||
|
expand(value =>
|
||||||
|
value.paginate
|
||||||
|
? getOldestVersions(
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
packageName,
|
||||||
|
numVersions,
|
||||||
|
value.cursor,
|
||||||
|
token
|
||||||
|
)
|
||||||
|
: EMPTY
|
||||||
|
),
|
||||||
|
tap(
|
||||||
|
value => (totalCount = totalCount === 0 ? value.totalCount : totalCount)
|
||||||
|
),
|
||||||
|
map(value => value.versions)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function finalIds(input: Input): Observable<string[]> {
|
||||||
if (input.packageVersionIds.length > 0) {
|
if (input.packageVersionIds.length > 0) {
|
||||||
return of(input.packageVersionIds)
|
return of(input.packageVersionIds)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (input.hasOldestVersionQueryInfo()) {
|
if (input.hasOldestVersionQueryInfo()) {
|
||||||
return getOldestVersions(
|
if (input.minVersionsToKeep < 0) {
|
||||||
input.owner,
|
// This code block is when num-old-versions-to-delete is specified.
|
||||||
input.repo,
|
// Setting input.numOldVersionsToDelete is set as minimum of input.numOldVersionsToDelete and RATE_LIMIT
|
||||||
input.packageName,
|
input.numOldVersionsToDelete =
|
||||||
input.numOldVersionsToDelete + input.minVersionsToKeep,
|
input.numOldVersionsToDelete < RATE_LIMIT
|
||||||
input.token
|
? input.numOldVersionsToDelete
|
||||||
).pipe(
|
: RATE_LIMIT
|
||||||
map(versionInfo => {
|
return getVersionIds(
|
||||||
const numberVersionsToDelete =
|
input.owner,
|
||||||
versionInfo.length - input.minVersionsToKeep
|
input.repo,
|
||||||
|
input.packageName,
|
||||||
if (input.minVersionsToKeep > 0) {
|
RATE_LIMIT,
|
||||||
return numberVersionsToDelete <= 0
|
'',
|
||||||
? []
|
input.token
|
||||||
: versionInfo
|
).pipe(
|
||||||
.filter(info => !input.ignoreVersions.test(info.version))
|
// This code block executes on batches of 100 versions starting from oldest
|
||||||
.map(info => info.id)
|
map(value => {
|
||||||
.slice(0, -input.minVersionsToKeep)
|
/*
|
||||||
} else {
|
Here first filter out the versions that are to be ignored.
|
||||||
return numberVersionsToDelete <= 0
|
Then update input.numOldeVersionsToDelete to the no of versions deleted from the next 100 versions batch.
|
||||||
? []
|
*/
|
||||||
: versionInfo
|
value = value.filter(info => !input.ignoreVersions.test(info.version))
|
||||||
.filter(info => !input.ignoreVersions.test(info.version))
|
const temp = input.numOldVersionsToDelete
|
||||||
.map(info => info.id)
|
input.numOldVersionsToDelete =
|
||||||
.slice(0, numberVersionsToDelete)
|
input.numOldVersionsToDelete - value.length <= 0
|
||||||
}
|
? 0
|
||||||
})
|
: input.numOldVersionsToDelete - value.length
|
||||||
)
|
return value.map(info => info.id).slice(0, temp)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
// This code block is when min-versions-to-keep is specified.
|
||||||
|
return getVersionIds(
|
||||||
|
input.owner,
|
||||||
|
input.repo,
|
||||||
|
input.packageName,
|
||||||
|
RATE_LIMIT,
|
||||||
|
'',
|
||||||
|
input.token
|
||||||
|
).pipe(
|
||||||
|
// This code block executes on batches of 100 versions starting from oldest
|
||||||
|
map(value => {
|
||||||
|
/*
|
||||||
|
Here totalCount is the total no of versions in the package.
|
||||||
|
First we update totalCount by removing no of ignored versions from it and also filter them out from value.
|
||||||
|
toDelete is the no of versions that need to be deleted and input.numDeleted is the total no of versions deleted before this batch.
|
||||||
|
We calculate this from total no of versions in the package, the min no of versions to keep and the no of versions we have deleted in earlier batch.
|
||||||
|
Then we update toDelete to not exceed the length of current batch of versions.
|
||||||
|
Now toDelete holds the no of versions to be deleted from the current batch of versions.
|
||||||
|
*/
|
||||||
|
totalCount =
|
||||||
|
totalCount -
|
||||||
|
value.filter(info => input.ignoreVersions.test(info.version)).length
|
||||||
|
value = value.filter(info => !input.ignoreVersions.test(info.version))
|
||||||
|
let toDelete = totalCount - input.minVersionsToKeep - input.numDeleted
|
||||||
|
toDelete = toDelete > value.length ? value.length : toDelete
|
||||||
|
//Checking here if we have any versions to delete and whether we are within the RATE_LIMIT.
|
||||||
|
if (toDelete > 0 && input.numDeleted < RATE_LIMIT) {
|
||||||
|
/*
|
||||||
|
Checking here if we can delete all the versions left in the current batch.
|
||||||
|
input.numDeleted + toDelete should not exceed RATE_LIMIT.
|
||||||
|
If it is exceeding we only delete the no of versions from this batch that are allowed within the RATE_LIMIT.
|
||||||
|
i.e. diff between RATE_LIMIT and versions deleted till now (input.numDeleted)
|
||||||
|
input.numDeleted is updated accordingly.
|
||||||
|
*/
|
||||||
|
if (input.numDeleted + toDelete > RATE_LIMIT) {
|
||||||
|
toDelete = RATE_LIMIT - input.numDeleted
|
||||||
|
input.numDeleted = RATE_LIMIT
|
||||||
|
} else {
|
||||||
|
input.numDeleted = input.numDeleted + toDelete
|
||||||
|
}
|
||||||
|
return value.map(info => info.id).slice(0, toDelete)
|
||||||
|
} else return []
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return throwError(
|
return throwError(
|
||||||
"Could not get packageVersionIds. Explicitly specify using the 'package-version-ids' input or provide the 'package-name' and 'num-old-versions-to-delete' inputs to dynamically retrieve oldest versions"
|
"Could not get packageVersionIds. Explicitly specify using the 'package-version-ids' input"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,14 +133,18 @@ export function deleteVersions(input: Input): Observable<boolean> {
|
|||||||
return throwError('No token found')
|
return throwError('No token found')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (input.numOldVersionsToDelete <= 0) {
|
if (!input.checkInput()) {
|
||||||
|
return throwError('Invalid input combination')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (input.numOldVersionsToDelete <= 0 && input.minVersionsToKeep < 0) {
|
||||||
console.log(
|
console.log(
|
||||||
'Number of old versions to delete input is 0 or less, no versions will be deleted'
|
'Number of old versions to delete input is 0 or less, no versions will be deleted'
|
||||||
)
|
)
|
||||||
return of(true)
|
return of(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
return getVersionIds(input).pipe(
|
const result = finalIds(input)
|
||||||
concatMap(ids => deletePackageVersions(ids, input.token))
|
|
||||||
)
|
return result.pipe(concatMap(ids => deletePackageVersions(ids, input.token)))
|
||||||
}
|
}
|
||||||
|
|||||||
35
src/input.ts
35
src/input.ts
@@ -32,6 +32,7 @@ export class Input {
|
|||||||
ignoreVersions: RegExp
|
ignoreVersions: RegExp
|
||||||
deletePreReleaseVersions: string
|
deletePreReleaseVersions: string
|
||||||
token: string
|
token: string
|
||||||
|
numDeleted: number
|
||||||
|
|
||||||
constructor(params?: InputParams) {
|
constructor(params?: InputParams) {
|
||||||
const validatedParams: Required<InputParams> = {...defaultParams, ...params}
|
const validatedParams: Required<InputParams> = {...defaultParams, ...params}
|
||||||
@@ -45,15 +46,7 @@ export class Input {
|
|||||||
this.ignoreVersions = validatedParams.ignoreVersions
|
this.ignoreVersions = validatedParams.ignoreVersions
|
||||||
this.deletePreReleaseVersions = validatedParams.deletePreReleaseVersions
|
this.deletePreReleaseVersions = validatedParams.deletePreReleaseVersions
|
||||||
this.token = validatedParams.token
|
this.token = validatedParams.token
|
||||||
|
this.numDeleted = 0
|
||||||
if (this.minVersionsToKeep > 0) {
|
|
||||||
this.numOldVersionsToDelete = 100 - this.minVersionsToKeep
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.deletePreReleaseVersions == 'true') {
|
|
||||||
this.numOldVersionsToDelete = 100 - this.minVersionsToKeep
|
|
||||||
this.ignoreVersions = new RegExp('^(0|[1-9]\\d*)((\\.(0|[1-9]\\d*))*)$')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hasOldestVersionQueryInfo(): boolean {
|
hasOldestVersionQueryInfo(): boolean {
|
||||||
@@ -61,9 +54,29 @@ export class Input {
|
|||||||
this.owner &&
|
this.owner &&
|
||||||
this.repo &&
|
this.repo &&
|
||||||
this.packageName &&
|
this.packageName &&
|
||||||
this.numOldVersionsToDelete > 0 &&
|
this.numOldVersionsToDelete >= 0 &&
|
||||||
this.minVersionsToKeep >= 0 &&
|
|
||||||
this.token
|
this.token
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkInput(): boolean {
|
||||||
|
if (
|
||||||
|
this.numOldVersionsToDelete > 1 &&
|
||||||
|
(this.minVersionsToKeep >= 0 || this.deletePreReleaseVersions === 'true')
|
||||||
|
) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.deletePreReleaseVersions === 'true') {
|
||||||
|
this.minVersionsToKeep =
|
||||||
|
this.minVersionsToKeep > 0 ? this.minVersionsToKeep : 0
|
||||||
|
this.ignoreVersions = new RegExp('^(0|[1-9]\\d*)((\\.(0|[1-9]\\d*))*)$')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.minVersionsToKeep >= 0) {
|
||||||
|
this.numOldVersionsToDelete = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
import {from, Observable, merge, throwError, of} from 'rxjs'
|
import {from, Observable, merge, throwError, of} from 'rxjs'
|
||||||
import {catchError, map, tap} from 'rxjs/operators'
|
import {catchError, map, tap} from 'rxjs/operators'
|
||||||
import {GraphQlQueryResponse} from '@octokit/graphql/dist-types/types'
|
|
||||||
import {graphql} from './graphql'
|
import {graphql} from './graphql'
|
||||||
|
|
||||||
|
let deleted = 0
|
||||||
|
|
||||||
export interface DeletePackageVersionMutationResponse {
|
export interface DeletePackageVersionMutationResponse {
|
||||||
deletePackageVersion: {
|
deletePackageVersion: {
|
||||||
success: boolean
|
success: boolean
|
||||||
@@ -10,7 +12,7 @@ export interface DeletePackageVersionMutationResponse {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const mutation = `
|
const mutation = `
|
||||||
mutation deletePackageVersion($packageVersionId: String!) {
|
mutation deletePackageVersion($packageVersionId: ID!) {
|
||||||
deletePackageVersion(input: {packageVersionId: $packageVersionId}) {
|
deletePackageVersion(input: {packageVersionId: $packageVersionId}) {
|
||||||
success
|
success
|
||||||
}
|
}
|
||||||
@@ -20,6 +22,7 @@ export function deletePackageVersion(
|
|||||||
packageVersionId: string,
|
packageVersionId: string,
|
||||||
token: string
|
token: string
|
||||||
): Observable<boolean> {
|
): Observable<boolean> {
|
||||||
|
deleted += 1
|
||||||
return from(
|
return from(
|
||||||
graphql(token, mutation, {
|
graphql(token, mutation, {
|
||||||
packageVersionId,
|
packageVersionId,
|
||||||
@@ -28,12 +31,12 @@ export function deletePackageVersion(
|
|||||||
}
|
}
|
||||||
}) as Promise<DeletePackageVersionMutationResponse>
|
}) as Promise<DeletePackageVersionMutationResponse>
|
||||||
).pipe(
|
).pipe(
|
||||||
catchError((err: GraphQlQueryResponse) => {
|
catchError(err => {
|
||||||
const msg = 'delete version mutation failed.'
|
const msg = 'delete version mutation failed.'
|
||||||
return throwError(
|
return throwError(
|
||||||
err.errors && err.errors.length > 0
|
err.errors && err.errors.length > 0
|
||||||
? `${msg} ${err.errors[0].message}`
|
? `${msg} ${err.errors[0].message}`
|
||||||
: `${msg} verify input parameters are correct`
|
: `${msg} ${err.message} \n${deleted - 1} versions deleted till now.`
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
map(response => response.deletePackageVersion.success)
|
map(response => response.deletePackageVersion.success)
|
||||||
@@ -45,21 +48,18 @@ export function deletePackageVersions(
|
|||||||
token: string
|
token: string
|
||||||
): Observable<boolean> {
|
): Observable<boolean> {
|
||||||
if (packageVersionIds.length === 0) {
|
if (packageVersionIds.length === 0) {
|
||||||
console.log('no package version ids found, no versions will be deleted')
|
|
||||||
return of(true)
|
return of(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
const deletes = packageVersionIds.map(id =>
|
const deletes = packageVersionIds.map(id =>
|
||||||
deletePackageVersion(id, token).pipe(
|
deletePackageVersion(id, token).pipe(
|
||||||
tap(result => {
|
tap(result => {
|
||||||
if (result) {
|
if (!result) {
|
||||||
console.log(`version with id: ${id}, deleted`)
|
|
||||||
} else {
|
|
||||||
console.log(`version with id: ${id}, not deleted`)
|
console.log(`version with id: ${id}, not deleted`)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
console.log(`Total versions deleted till now: ${deleted}`)
|
||||||
return merge(...deletes)
|
return merge(...deletes)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
import {GraphQlQueryResponse} from '@octokit/graphql/dist-types/types'
|
import {GraphQlQueryResponse} from '@octokit/graphql/dist-types/types'
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
import {Observable, from, throwError} from 'rxjs'
|
import {Observable, from, throwError} from 'rxjs'
|
||||||
import {catchError, map} from 'rxjs/operators'
|
import {catchError, map} from 'rxjs/operators'
|
||||||
import {graphql} from './graphql'
|
import {graphql} from './graphql'
|
||||||
@@ -8,6 +10,13 @@ export interface VersionInfo {
|
|||||||
version: string
|
version: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface QueryInfo {
|
||||||
|
versions: VersionInfo[]
|
||||||
|
cursor: string
|
||||||
|
paginate: boolean
|
||||||
|
totalCount: number
|
||||||
|
}
|
||||||
|
|
||||||
export interface GetVersionsQueryResponse {
|
export interface GetVersionsQueryResponse {
|
||||||
repository: {
|
repository: {
|
||||||
packages: {
|
packages: {
|
||||||
@@ -15,7 +24,12 @@ export interface GetVersionsQueryResponse {
|
|||||||
node: {
|
node: {
|
||||||
name: string
|
name: string
|
||||||
versions: {
|
versions: {
|
||||||
|
totalCount: number
|
||||||
edges: {node: VersionInfo}[]
|
edges: {node: VersionInfo}[]
|
||||||
|
pageInfo: {
|
||||||
|
startCursor: string
|
||||||
|
hasPreviousPage: boolean
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}[]
|
}[]
|
||||||
@@ -31,12 +45,43 @@ const query = `
|
|||||||
node {
|
node {
|
||||||
name
|
name
|
||||||
versions(last: $last) {
|
versions(last: $last) {
|
||||||
|
totalCount
|
||||||
edges {
|
edges {
|
||||||
node {
|
node {
|
||||||
id
|
id
|
||||||
version
|
version
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pageInfo {
|
||||||
|
startCursor
|
||||||
|
hasPreviousPage
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
|
||||||
|
const Paginatequery = `
|
||||||
|
query getVersions($owner: String!, $repo: String!, $package: String!, $last: Int!, $before: String!) {
|
||||||
|
repository(owner: $owner, name: $repo) {
|
||||||
|
packages(first: 1, names: [$package]) {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
name
|
||||||
|
versions(last: $last, before: $before) {
|
||||||
|
totalCount
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
id
|
||||||
|
version
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pageInfo{
|
||||||
|
startCursor
|
||||||
|
hasPreviousPage
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,28 +94,53 @@ export function queryForOldestVersions(
|
|||||||
repo: string,
|
repo: string,
|
||||||
packageName: string,
|
packageName: string,
|
||||||
numVersions: number,
|
numVersions: number,
|
||||||
|
startCursor: string,
|
||||||
token: string
|
token: string
|
||||||
): Observable<GetVersionsQueryResponse> {
|
): Observable<GetVersionsQueryResponse> {
|
||||||
return from(
|
if (startCursor === '') {
|
||||||
graphql(token, query, {
|
return from(
|
||||||
owner,
|
graphql(token, query, {
|
||||||
repo,
|
owner,
|
||||||
package: packageName,
|
repo,
|
||||||
last: numVersions,
|
package: packageName,
|
||||||
headers: {
|
last: numVersions,
|
||||||
Accept: 'application/vnd.github.packages-preview+json'
|
headers: {
|
||||||
}
|
Accept: 'application/vnd.github.packages-preview+json'
|
||||||
}) as Promise<GetVersionsQueryResponse>
|
}
|
||||||
).pipe(
|
}) as Promise<GetVersionsQueryResponse>
|
||||||
catchError((err: GraphQlQueryResponse) => {
|
).pipe(
|
||||||
const msg = 'query for oldest version failed.'
|
catchError((err: GraphQlQueryResponse<unknown>) => {
|
||||||
return throwError(
|
const msg = 'query for oldest version failed.'
|
||||||
err.errors && err.errors.length > 0
|
return throwError(
|
||||||
? `${msg} ${err.errors[0].message}`
|
err.errors && err.errors.length > 0
|
||||||
: `${msg} verify input parameters are correct`
|
? `${msg} ${err.errors[0].message}`
|
||||||
)
|
: `${msg} verify input parameters are correct`
|
||||||
})
|
)
|
||||||
)
|
})
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
return from(
|
||||||
|
graphql(token, Paginatequery, {
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
package: packageName,
|
||||||
|
last: numVersions,
|
||||||
|
before: startCursor,
|
||||||
|
headers: {
|
||||||
|
Accept: 'application/vnd.github.packages-preview+json'
|
||||||
|
}
|
||||||
|
}) as Promise<GetVersionsQueryResponse>
|
||||||
|
).pipe(
|
||||||
|
catchError((err: GraphQlQueryResponse<unknown>) => {
|
||||||
|
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(
|
export function getOldestVersions(
|
||||||
@@ -78,34 +148,46 @@ export function getOldestVersions(
|
|||||||
repo: string,
|
repo: string,
|
||||||
packageName: string,
|
packageName: string,
|
||||||
numVersions: number,
|
numVersions: number,
|
||||||
|
startCursor: string,
|
||||||
token: string
|
token: string
|
||||||
): Observable<VersionInfo[]> {
|
): Observable<QueryInfo> {
|
||||||
return queryForOldestVersions(
|
return queryForOldestVersions(
|
||||||
owner,
|
owner,
|
||||||
repo,
|
repo,
|
||||||
packageName,
|
packageName,
|
||||||
numVersions,
|
numVersions,
|
||||||
|
startCursor,
|
||||||
token
|
token
|
||||||
).pipe(
|
).pipe(
|
||||||
map(result => {
|
map(result => {
|
||||||
|
let r: QueryInfo
|
||||||
if (result.repository.packages.edges.length < 1) {
|
if (result.repository.packages.edges.length < 1) {
|
||||||
console.log(
|
console.log(
|
||||||
`package: ${packageName} not found for owner: ${owner} in repo: ${repo}`
|
`package: ${packageName} not found for owner: ${owner} in repo: ${repo}`
|
||||||
)
|
)
|
||||||
return []
|
r = {
|
||||||
|
versions: [] as VersionInfo[],
|
||||||
|
cursor: '',
|
||||||
|
paginate: false,
|
||||||
|
totalCount: 0
|
||||||
|
}
|
||||||
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
const versions = result.repository.packages.edges[0].node.versions.edges
|
const versions = result.repository.packages.edges[0].node.versions.edges
|
||||||
|
const pages = result.repository.packages.edges[0].node.versions.pageInfo
|
||||||
|
const count = result.repository.packages.edges[0].node.versions.totalCount
|
||||||
|
|
||||||
if (versions.length !== numVersions) {
|
r = {
|
||||||
console.log(
|
versions: versions
|
||||||
`number of versions requested was: ${numVersions}, but found: ${versions.length}`
|
.map(value => ({id: value.node.id, version: value.node.version}))
|
||||||
)
|
.reverse(),
|
||||||
|
cursor: pages.startCursor,
|
||||||
|
paginate: pages.hasPreviousPage,
|
||||||
|
totalCount: count
|
||||||
}
|
}
|
||||||
|
|
||||||
return versions
|
return r
|
||||||
.map(value => ({id: value.node.id, version: value.node.version}))
|
|
||||||
.reverse()
|
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||||
import {GitHub} from '@actions/github'
|
import {GitHub} from '@actions/github'
|
||||||
import {GraphQlQueryResponseData} from '@octokit/graphql/dist-types/types'
|
import {GraphQlQueryResponseData} from '@octokit/graphql/dist-types/types'
|
||||||
import {RequestParameters} from '@octokit/types/dist-types/RequestParameters'
|
import {RequestParameters} from '@octokit/types/dist-types/RequestParameters'
|
||||||
|
|||||||
Reference in New Issue
Block a user