Files

375 lines
15 KiB
Markdown
Raw Permalink Normal View History

# Delete Package Versions
2020-01-29 10:13:06 -05:00
2021-12-24 14:10:14 +05:30
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.
2020-01-29 10:13:06 -05:00
### What It Can Do
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
* Create a retention policy (delete all except n most recent pre-release versions)
2021-11-25 11:25:32 +05:30
* Delete all package versions except n most recent versions
* Delete oldest version(s)
2021-11-25 11:25:32 +05:30
* 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 a different repo than the one executing the workflow
2021-11-23 10:28:51 +00:00
* Delete a single version
* Delete multiple versions
* Delete specific version(s)
2020-01-29 10:13:06 -05:00
# Usage
2020-01-29 10:13:06 -05:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
with:
# Can be a single package version id, or a comma separated list of package version ids.
# Defaults to an empty string.
package-version-ids:
2020-07-21 08:13:33 -07:00
# Owner of the repo hosting the package.
# Defaults to the owner of the repo executing the workflow.
# Required if deleting a version from a package hosted in a different repo than the one executing the workflow.
owner:
# Repo hosting the package.
# Defaults to the repo executing the workflow.
# Required if deleting a version from a package hosted in a different repo than the one executing the workflow.
repo:
# Name of the package.
# Defaults to an empty string.
# Required if `package-version-ids` input is not given.
package-name:
# The number of old versions to delete starting from the oldest version.
# Defaults to 1.
num-old-versions-to-delete:
2021-12-24 00:20:21 +05:30
# The number of latest versions to keep.
2021-12-20 16:17:20 +05:30
# This cannot be specified with `num-old-versions-to-delete`. By default, `num-old-versions-to-delete` takes precedence over `min-versions-to-keep`.
2021-12-20 09:45:54 +00:00
# When set to 0, all deletable versions will be deleted.
# When set greater than 0, all deletable package versions except the specified number will be deleted.
2021-11-08 10:09:38 +00:00
min-versions-to-keep:
2021-11-23 10:28:51 +00:00
# The package versions to exclude from deletion.
# Takes regex for the version name as input.
# By default nothing is ignored.
ignore-versions:
# If true it will delete only the pre-release versions.
2021-11-17 17:27:33 +00:00
# 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.
# Defaults to false.
2021-12-20 15:34:15 +05:30
# Cannot be used with `num-old-versions-to-delete` and `ignore-versions`.
delete-only-pre-release-versions:
# The token used to authenticate with GitHub Packages.
# Defaults to github.token.
# Required if deleting a version from a package hosted in a different repo than the one executing the workflow.
# If `package-version-ids` is given the token only needs the delete packages scope.
# If `package-version-ids` is not given the token needs the delete packages scope and the read packages scope
token:
```
2020-01-29 10:13:06 -05:00
2021-12-20 10:00:12 +00:00
# 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
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
- [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 except y latest versions while ignoring particular package versions](#delete-all-except-y-latest-versions-while-ignoring-particular-package-versions)
- [Delete oldest x number of versions while ignoring particular package versions](#delete-oldest-x-number-of-versions-while-ignoring-particular-package-versions)
- [Delete all except y latest versions of a package](#delete-all-except-y-latest-versions-of-a-package)
- [Delete oldest x number of versions of a package](#delete-oldest-x-number-of-versions-of-a-package)
- [Delete oldest version of a package](#delete-oldest-version-of-a-package)
- [Delete a specific version of a package](#delete-a-specific-version-of-a-package)
- [Delete multiple specific versions of a package](#delete-multiple-specific-versions-of-a-package)
2021-11-23 10:28:51 +00:00
### Delete all pre-release versions except y latest pre-release package versions
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
To delete all pre release versions except y latest pre-release package versions in the same repo as the workflow the __package-name__, __min-versions-to-keep__ and __delete-only-pre-release-versions__ inputs are required.
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
__Example__
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
Delete all pre-release package versions except latest 10 in the same repo as the workflow
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
package-name: 'test-package'
min-versions-to-keep: 10
delete-only-pre-release-versions: "true"
```
To delete all pre release versions except y latest pre-release package versions in a different repo than the workflow the __owner__, __repo__, __package-name__, __token__, __min-versions-to-keep__ and __delete-only-pre-release-versions__ inputs are required.
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
The [token][token] needs the delete packages and read packages scope. It is recommended [to store the token as a secret][secret]. In this example the [token][token] was stored as a secret named __GITHUB_PAT__.
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
__Example__
2021-11-23 10:28:51 +00:00
Delete all pre-release package versions except latest 10 in a different repo than the workflow
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
owner: 'github'
repo: 'packages'
package-name: 'test-package'
token: ${{ secrets.GITHUB_PAT }}
min-versions-to-keep: 10
delete-only-pre-release-versions: "true"
```
2021-11-23 10:28:51 +00:00
<br>
2021-11-23 10:28:51 +00:00
### Delete all except y latest versions while ignoring particular package versions
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
To delete all except y latest versions while ignoring particular package versions in the same repo as the workflow the __package-name__, __min-versions-to-keep__ and __ignore-versions__ inputs are required.
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
__Example__
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
Delete all except latest 3 package versions excluding major versions as per semver in the same repo as the workflow
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
package-name: 'test-packae'
min-versions-to-keep: 3
ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'
```
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
To delete all except y latest versions while ignoring particular package versions in a different repo than the workflow the __owner__, __repo__, __package-name__, __token__, __min-versions-to-keep__ and __ignore-versions__ inputs are required.
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
The [token][token] needs the delete packages and read packages scope. It is recommended [to store the token as a secret][secret]. In this example the [token][token] was stored as a secret named __GITHUB_PAT__.
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
__Example__
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
Delete all except latest 3 package versions excluding major versions as per semver in a different repo than the workflow
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
owner: 'github'
repo: 'packages'
package-name: 'test-packae'
token: ${{ secrets.GITHUB_PAT }}
min-versions-to-keep: 3
ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'
```
2021-11-23 10:28:51 +00:00
<br>
2021-11-23 10:28:51 +00:00
### Delete oldest x number of versions while ignoring particular package versions
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
To delete oldest x number of versions while ignoring all the major package versions in the same repo as the workflow the __package-name__, __num-oldest-versions-to-delete__ and __ignore-versions__ inputs are required.
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
There is a possibility if the oldest x number of versions contain ignored package versions, actual package versions to get deleted will be less than x.
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
__Example__
2021-11-23 10:28:51 +00:00
Delete 3 oldest versions excluding major versions as per semver is the same repo as the workflow
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
package-name: 'test-packae'
num-old-versions-to-delete: 3
ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'
```
2021-11-23 10:28:51 +00:00
To delete oldest x number of versions while ignoring all the major package versions in a different repo than the workflow the __owner__, __repo__, __package-name__, __token__, __num-oldest-versions-to-delete__ and __ignore-versions__ inputs are required.
2021-11-23 10:28:51 +00:00
There is a possibility if the oldest x number of versions contain ignored package versions, actual package versions to get deleted will be less than x.
2021-11-23 10:28:51 +00:00
The [token][token] needs the delete packages and read packages scope. It is recommended [to store the token as a secret][secret]. In this example the [token][token] was stored as a secret named __GITHUB_PAT__.
2021-11-23 10:28:51 +00:00
__Example__
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
Delete 3 oldest versions excluding major versions as per semver is a differernt repo than the workflow
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
owner: 'github'
repo: 'packages'
package-name: 'test-packae'
token: ${{ secrets.PAT }}
num-old-versions-to-delete: 3
ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'
```
2021-11-23 10:28:51 +00:00
<br>
2021-11-23 10:28:51 +00:00
### Delete all except y latest versions of a package
2021-11-23 10:28:51 +00:00
To delete all except y latest versions of a package hosted in the same repo as the workflow the __package-name__ and __min-versions-to-keep__ inputs are required.
2021-11-23 10:28:51 +00:00
__Example__
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
Delete all except latest 2 versions of a package hosted in the same repo as the workflow
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
package-name: 'test-package'
min-versions-to-keep: 2
```
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
To delete all except y latest versions of a package hosted in a repo other than the workflow the __owner__, __repo__, __package-name__, __token__ and __min-versions-to-keep__ inputs are required.
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
The [token][token] needs the delete packages and read packages scope. It is recommended [to store the token as a secret][secret]. In this example the [token][token] was stored as a secret named __GITHUB_PAT__.
2021-11-23 10:28:51 +00:00
__Example__
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
Delete all except latest 2 versions of a package hosted in a repo other than the workflow
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
owner: 'github'
repo: 'packages'
package-name: 'test-package'
token: ${{ secrets.PAT }}
min-versions-to-keep: 2
```
2021-11-23 10:28:51 +00:00
<br>
2021-11-23 10:28:51 +00:00
### Delete oldest x number of versions of a package
2021-11-23 10:28:51 +00:00
To delete the oldest x number of versions of a package hosted in the same repo as the workflow the __package-name__, and __num-old-versions-to-delete__ inputs are required.
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
__Example__
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
Delete the oldest 3 version of a package hosted in the same repo as the workflow
2020-01-29 10:13:06 -05:00
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
package-name: 'test-package'
num-old-versions-to-delete: 3
```
2021-11-23 10:28:51 +00:00
To delete the oldest x number of versions of a package hosted in a different repo than the workflow the __owner__, __repo__, __package-name__, __token__ and __num-old-versions-to-delete__ inputs are required.
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
The [token][token] needs the delete packages and read packages scope. It is recommended [to store the token as a secret][secret]. In this example the [token][token] was stored as a secret named __GITHUB_PAT__.
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
__Example__
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
Delete the oldest 3 version of a package hosted in a different repo than the one executing the workflow
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
owner: 'github'
repo: 'packages'
package-name: 'test-package'
num-old-versions-to-delete: 3
token: ${{ secrets.GITHUB_PAT }}
```
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
<br>
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
### Delete oldest version of a package
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
To delete the oldest version of a package that is hosted in the same repo as the workflow the __package-name__ input is required.
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
__Example__
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
package-name: 'test-package'
```
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
To delete the oldest version of a package that is hosted in a different repo than the workflow the __owner__, __repo__, __package-name__, __token__ inputs are required.
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
The [token][token] needs the delete packages and read packages scope. It is recommended [to store the token as a secret][secret]. In this example the [token][token] was stored as a secret named __GITHUB_PAT__.
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
__Example__
2021-11-08 10:09:38 +00:00
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
owner: 'github'
repo: 'packages'
package-name: 'test-package'
token: ${{ secrets.PAT }}
```
2021-11-23 10:28:51 +00:00
<br>
2021-11-23 10:28:51 +00:00
### Delete a specific version of a package
2021-11-23 10:28:51 +00:00
To delete a specific version of a package that is hosted in the same repo as the workflow the __package-version-ids__ input is required.
2021-11-23 10:28:51 +00:00
Package version ids can be retrieved via the [GitHub GraphQL API][api]
2021-11-23 10:28:51 +00:00
__Example__
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3'
```
2021-11-23 10:28:51 +00:00
To delete a specific version of a package that is hosted in a different repo than the workflow the __package-version-ids__ and __token__ inputs are required.
2021-11-17 17:27:33 +00:00
2021-11-23 10:28:51 +00:00
The [token][token] needs the delete packages and read packages scope. It is recommended [to store the token as a secret][secret]. In this example the [token][token] was stored as a secret named __GITHUB_PAT__.
2021-11-17 17:27:33 +00:00
2021-11-23 10:28:51 +00:00
Package version ids can be retrieved via the [GitHub GraphQL API][api]
2021-11-17 17:27:33 +00:00
2021-11-23 10:28:51 +00:00
__Example__
2021-11-17 17:27:33 +00:00
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3'
token: ${{ secrets.PAT }}
```
2021-11-17 17:27:33 +00:00
2021-11-23 10:28:51 +00:00
<br>
2021-11-17 17:27:33 +00:00
2021-11-23 10:28:51 +00:00
### Delete multiple specific versions of a package
2021-11-23 10:28:51 +00:00
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.
2021-11-23 10:28:51 +00:00
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].
2021-11-23 10:28:51 +00:00
__Example__
2021-11-23 10:28:51 +00:00
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
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.
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 [token][token] needs the delete packages and read packages scope. It is recommended [to store the token as a secret][secret]. In this example the [token][token] was stored as a secret named __GITHUB_PAT__.
__Example__
```yaml
2021-11-25 09:33:54 +05:30
- uses: actions/delete-package-versions@v2
2021-11-23 10:28:51 +00:00
with:
package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzQ5, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzUw'
token: ${{ secrets.PAT }}
```
2021-11-08 10:09:38 +00:00
# License
2020-07-21 08:13:33 -07:00
The scripts and documentation in this project are released under the [MIT License](https://github.com/actions/delete-package-versions/blob/main/LICENSE)
[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
[secret]: https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets