Publish new releases of your application to the Windows Package Manager easily.
Creating manifests and pull requests for every release of your application can be time-consuming and error-prone.
WinGet Releaser allows you to automate this process, with pull requests that are trusted amongst the community, often expediting the amount of time it takes for a submission to be reviewed.
-
Atleast one version of your package should already be present in the Windows Package Manager Community Repository. The action will use that version as a base to create manifests for new versions of the package.
-
You will need to create a classic Personal Access Token (PAT) with
public_repo
scope. New fine-grained PATs can't access GitHub's GraphQL API, so they aren't supported by this action. Refer to cli/cli#6680 for more information.
- Fork the winget-pkgs repository under the same account/organization as your repository on which you want to use this action. Ensure that the fork is up-to-date with the upstream repository. You can do this using one of the following methods:
- Give
workflow
permission to the token you created in Step 1. This will allow the action to automatically update your fork with the upstream repository. - You can use Pull App which keeps your fork up-to-date with the upstream repository via automated pull requests.
- Add the action to your workflow file (e.g.
.github/workflows/<name>.yml
). Some quick & important points to note:
- The action can only be run on Windows runners, so the job must run on
windows-latest
. - The action will only work when the release is published (not a draft), because the release assets (binaries) aren't available publicly until the release is published.
Workflow with the minimal configuration | Workflow with a filter to only publish .exe files |
---|---|
name: Publish to WinGet
on:
release:
types: [released]
jobs:
publish:
# Action can only be run on windows
runs-on: windows-latest
steps:
- uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: Package.Identifier
max-versions-to-keep: 5 # keep only latest 5 versions
token: ${{ secrets.WINGET_TOKEN }} |
name: Publish to WinGet
on:
release:
types: [released]
jobs:
publish:
runs-on: windows-latest
steps:
- uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: Package.Identifier
installers-regex: '\.exe$' # Only .exe files
token: ${{ secrets.WINGET_TOKEN }} |
Workflow to publish multiple packages | Workflow with implementation of custom package version |
name: Publish to WinGet
on:
release:
types: [released]
jobs:
publish:
runs-on: windows-latest
steps:
- name: Publish X to WinGet
uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: Package.Identifier<X>
installers-regex: '\.exe$' # Only .exe files
token: ${{ secrets.WINGET_TOKEN }}
- name: Publish Y to WinGet
uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: Package.Identifier<Y>
installers-regex: '\.msi$' # Only .msi files
token: ${{ secrets.WINGET_TOKEN }} |
name: Publish to WinGet
on:
release:
types: [released]
jobs:
publish:
runs-on: windows-latest
steps:
- name: Get version
id: get-version
run: |
# Finding the version from release name
$VERSION="${{ github.event.release.name }}" -replace '^.*/ '
echo "::set-output name=version::$VERSION"
shell: pwsh
- uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: Package.Identifier
version: ${{ steps.get-version.outputs.version }}
token: ${{ secrets.WINGET_TOKEN }} |
- Required: ✅
The package identifier of the package to be updated in the Windows Package Manager Community Repository.
identifier: Publisher.Package # Microsoft.Excel
- Required: ❌ (defaults to tag, excluding
v
prefix:v1.0.0
->1.0.0
)
The PackageVersion
of the package you want to release.
version: ${{ github.event.release.tag_name }} # For tags without the 'v' prefix
- Required: ❌ (Default value:
.(exe|msi|msix|appx)(bundle){0,1}$
)
A regular expression to match the installers from the release artifacts which are to be published to Windows Package Manager (WinGet).
installers-regex: '\.exe$'
# Some common regular expressions include:
## '\.msi$' -> All MSI's
## '\.exe$' -> All EXE's
## '\.(exe|msi)' -> All EXE's and MSI's
## '\.zip$' -> All ZIP's
- Required: ❌ (Default value:
0
- unlimited)
The maximum number of versions of the package to keep in the Windows Package Manager Community Repository repository. If after the current release, the number of versions exceeds this limit, the oldest version will be deleted.
max-versions-to-keep: 5 # keep only the latest 5 versions
- Required: ❌ (Default value:
${{ github.event.release.tag_name || github.ref_name }}
)
The GitHub release tag of the release you want to publish to Windows Package Manager (WinGet).
release-tag: ${{ inputs.version }} # workflow_dispatch input `version`
- Required: ✅
The GitHub token with which the action will authenticate with GitHub API and create a pull request on the Windows Package Manager Community Repository repository.
token: ${{ secrets.WINGET_TOKEN }} # Repository secret called 'WINGET_TOKEN'
Note Do not directly put the token in the action. Instead, create a repository secret containing the token and use that in the workflow. See using encrypted secrets in a workflow for more details.
- Required: ❌ (Default value:
${{ github.repository_owner }} # repository owner
)
This is the GitHub username of the user where the fork of Windows Package Manager Community Repository is present. This fork will be used to create the pull request.
fork-user: dotnet-winget-bot # for example purposes only
Thanks goes to these wonderful people (emoji key):
Baptiste Augrain 💻 🤔 🐛 |
Christian Brabandt 🐛 |
CodeDoctor 🐛 |
Eric Trenkel 💵 🐛 |
Fndroid 💵 |
Gerardo Grignoli 📖 |
Kei Touge 🐛 |
Maxim 🐛 |
Russell Banks 🤔 📖 |
Tim Brinkley 🐛 💵 |
Vedant 💻 |
sitiom 📖 🐛 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!