Skip to content

actions/delete-package-versions

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

Delete Package Versions

This action deletes versions of a package from GitHub Packages. This action will only delete a maximum of 100 versions in one run.

What It Can Do

  • Create a retention policy (delete all except n most recent pre-release versions)
  • Delete all package versions except n most recent versions
  • Delete oldest version(s)
  • Ignore version(s) from deletion through regex
  • Delete version(s) of a package that is hosted from a repo having access to package
  • Delete version(s) of a package that is hosted from a repo not having access to package
  • Delete a single version
  • Delete multiple versions
  • Delete specific version(s)

Usage

- uses: actions/delete-package-versions@v5
  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:

  # Owner of the package.
  # Defaults to the owner of the repo executing the workflow.
  # Required if deleting a version from a package hosted in a different org than the one executing the workflow.
  owner:

  # Name of the package.
  # Required
  package-name:

  # Type of the package. Can be one of docker (v4 or older), container (v5 or newer), maven, npm, nuget, or rubygems.
  # Required
  package-type:

  # The number of old versions to delete starting from the oldest version.
  # Defaults to 1.
  num-old-versions-to-delete:

  # The number of latest versions to keep.
  # This cannot be specified with `num-old-versions-to-delete`. By default, `min-versions-to-keep` takes precedence over `num-old-versions-to-delete`.
  # 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.
  min-versions-to-keep:

  # The package versions to exclude from deletion.
  # Takes regex for the version name as input.
  # By default nothing is ignored. This is ignored when `delete-only-pre-release-versions` is true
  ignore-versions:

  # If true it will delete only the pre-release versions.
  # 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.
  # Cannot be used with `num-old-versions-to-delete` and `ignore-versions`.
  delete-only-pre-release-versions:

  # If true it will delete only the untagged versions in case of container package.
  # Does not work for other package types and will be ignored.
  # The number of untagged versions to keep can be set by using `min-versions-to-keep` value with this.
  # When `min-versions-to-keep` is 0, all untagged versions get deleted.
  # Defaults to false.
  # Cannot be used with `num-old-versions-to-delete`.
  delete-only-untagged-versions:

  # The token used to authenticate with GitHub Packages.
  # Defaults to github.token.
  # Required if the repo running the workflow does not have access to delete the package.
  #   For rubygems and maven package, repo has access if package is hosted in the same repo as the workflow.
  #   For container, npm and nuget package, repo has access if assigned **Admin** role under Package Settings > Manage Actions Access.
  #   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:

Valid Input Combinations

owner, package-name, package-type 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
  • delete-only-untagged-versions
  • min-versions-to-keep + delete-only-untagged-versions

Scenarios

  • Delete Package Versions

  • Usage

  • Valid Input Combinations

  • Scenarios

  • License

    Delete all pre-release versions except y latest pre-release package versions

    To delete all pre release versions except y latest pre-release package versions, the package-name, min-versions-to-keep and delete-only-pre-release-versions inputs are required.

    Example

    Delete all pre-release package versions except latest 10

    - uses: actions/delete-package-versions@v5
      with: 
        package-name: 'test-package'
        package-type: 'npm'
        min-versions-to-keep: 10
        delete-only-pre-release-versions: "true"

    To delete all pre release versions except y latest pre-release package versions from a repo not having access to package, the owner, package-name, token, min-versions-to-keep and delete-only-pre-release-versions inputs are required.

    Example

    Delete all pre-release package versions except latest 10 from a repo not having access to package

    - uses: actions/delete-package-versions@v5
      with: 
        owner: 'github'
        package-name: 'test-package'
        package-type: 'npm'
        token: ${{ secrets.GITHUB_PAT }}
        min-versions-to-keep: 10
        delete-only-pre-release-versions: "true"

    Delete all untagged container versions except y latest untagged versions

    To delete all untagged versions of a container package except y latest untagged versions, the package-name, package-type, min-versions-to-keep and delete-only-untagged-versions inputs are required. package-type must be container for this scenario.

    Example

    Delete all untagged versions except latest 10

    - uses: actions/delete-package-versions@v5
      with: 
        package-name: 'test-package'
        package-type: 'container'
        min-versions-to-keep: 10
        delete-only-untagged-versions: 'true'

    Delete all except y latest versions while ignoring particular package versions

    To delete all except y latest versions while ignoring particular package versions, the package-name, min-versions-to-keep and ignore-versions inputs are required.

    Example

    Delete all except latest 3 package versions excluding major versions as per semver

    - uses: actions/delete-package-versions@v5
      with: 
        package-name: 'test-package'
        package-type: 'npm'
        min-versions-to-keep: 3
        ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'

    To delete all except y latest versions while ignoring particular package versions from a repo not having access to package, the owner, package-name, token, min-versions-to-keep and ignore-versions inputs are required.

    The token needs the delete packages and read packages scope. It is recommended to store the token as a secret. In this example the token was stored as a secret named GITHUB_PAT.

    Example

    Delete all except latest 3 package versions excluding major versions as per semver from a repo not having access to package

    - uses: actions/delete-package-versions@v5
      with: 
        owner: 'github'
        package-name: 'test-package'
        package-type: 'npm'
        token: ${{ secrets.GITHUB_PAT }}
        min-versions-to-keep: 3
        ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'

    Delete oldest x number of versions while ignoring particular package versions

    To delete oldest x number of versions while ignoring all the major package versions, the package-name, num-oldest-versions-to-delete and ignore-versions inputs are required.

    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.

    Example

    Delete 3 oldest versions excluding major versions as per semver

    - uses: actions/delete-package-versions@v5
      with: 
        package-name: 'test-package'
        package-type: 'npm'
        num-old-versions-to-delete: 3
        ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'

    To delete oldest x number of versions while ignoring all the major package versions from a repo not having access to package, the owner, package-name, token, num-oldest-versions-to-delete and ignore-versions inputs are required.

    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.

    Example

    Delete 3 oldest versions excluding major versions as per semver from a repo not having access to package

    - uses: actions/delete-package-versions@v5
      with: 
        owner: 'github'
        package-name: 'test-package'
        package-type: 'npm'
        token: ${{ secrets.PAT }}
        num-old-versions-to-delete: 3
        ignore-versions: '^(0|[1-9]\\d*)\\.0\\.0$'

    Delete all except y latest versions of a package

    To delete all except y latest versions of a package hosted, the package-name and min-versions-to-keep inputs are required.

    Example

    Delete all except latest 2 versions of a package hosted

    - uses: actions/delete-package-versions@v5
      with:
        package-name: 'test-package'
        package-type: 'npm'
        min-versions-to-keep: 2

    To delete all except y latest versions of a package hosted from a repo not having access to package, the owner, package-name, token and min-versions-to-keep inputs are required.

    The token needs the delete packages and read packages scope. It is recommended to store the token as a secret. In this example the token was stored as a secret named GITHUB_PAT.

    Example

    Delete all except latest 2 versions of a package hosted from a repo not having access to package

    - uses: actions/delete-package-versions@v5
      with:
        owner: 'github'
        package-name: 'test-package'
        package-type: 'npm'
        token: ${{ secrets.PAT }}
        min-versions-to-keep: 2

    Delete oldest x number of versions of a package

    To delete the oldest x number of versions of a package hosted, the package-name, and num-old-versions-to-delete inputs are required.

    Example

    Delete the oldest 3 version of a package hosted

    - uses: actions/delete-package-versions@v5
      with:
        package-name: 'test-package'
        package-type: 'npm'
        num-old-versions-to-delete: 3

    To delete the oldest x number of versions of a package hosted from a repo not having access to package, the owner, package-name, token and num-old-versions-to-delete inputs are required.

    The token needs the delete packages and read packages scope. It is recommended to store the token as a secret. In this example the token was stored as a secret named GITHUB_PAT.

    Example

    Delete the oldest 3 version of a package hosted from a repo not having access to package

    - uses: actions/delete-package-versions@v5
      with:
        owner: 'github'
        package-name: 'test-package'
        package-type: 'npm'
        num-old-versions-to-delete: 3
        token: ${{ secrets.GITHUB_PAT }}

    Delete oldest version of a package

    To delete the oldest version of a package that is hosted, the package-name input is required.

    Example

    - uses: actions/delete-package-versions@v5
      with:
        package-name: 'test-package'
        package-type: 'npm'

    To delete the oldest version of a package that is hosted from a repo not having access to package, the owner, package-name, token inputs are required.

    Example

    - uses: actions/delete-package-versions@v5
      with:
        owner: 'github'
        package-name: 'test-package'
        package-type: 'npm'
        token: ${{ secrets.PAT }}

    Delete a specific version of a package

    To delete a specific version of a package that is hosted, the package-version-ids input is required.

    Package version ids can be retrieved via the GitHub REST API

    Example

    - uses: actions/delete-package-versions@v5
      with:
        package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3'
        package-name: 'test-package'
        package-type: 'npm'

    To delete a specific version of a package that is hosted from a repo not having access to package, the package-version-ids and token inputs are required.

    Package version ids can be retrieved via the GitHub REST API

    Example

    - uses: actions/delete-package-versions@v5
      with:
        package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3'
        package-name: 'test-package'
        package-type: 'npm'
        token: ${{ secrets.PAT }}

    Delete multiple specific versions of a package

    To delete multiple specific versions of a package that is hosted, 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 REST API.

    Example

    - uses: actions/delete-package-versions@v5
      with:
        package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzQ5, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzUw'
        package-name: 'test-package'
        package-type: 'npm'

    To delete multiple specific versions of a package that is hosted from a repo not having access to package, 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 REST API.

    Example

    - uses: actions/delete-package-versions@v5
      with:
        package-version-ids: 'MDE0OlBhY2thZ2VWZXJzaW9uOTcyMDY3, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzQ5, MDE0OlBhY2thZ2VWZXJzaW9uOTcyMzUw'
        package-name: 'test-package'
        package-type: 'npm'
        token: ${{ secrets.PAT }}

License

The scripts and documentation in this project are released under the MIT License