Skip to content

Publish new releases of your application to the Windows Package Manager easily.

License

Notifications You must be signed in to change notification settings

vedantmgoyal9/winget-releaser

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

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Logo WinGet Releaser (GitHub Action)

GitHub contributors (via allcontributors.org) GitHub issues GitHub release (latest by date) GitHub Repo stars GitHub Badge

Publish new releases of your application to the Windows Package Manager easily.

pr-example-screenshot

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.

Getting Started πŸš€

Important

At least 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.

  1. You will need to create a classic Personal Access Token (PAT) with public_repo scope. New fine-grained PATs aren't supported by the action. Review #172 for information.

  2. Fork microsoft/winget-pkgs under the same account/organization as the project's repository. If you are forking winget-pkgs on a different account (e.g. bot/personal account), you can use the fork-user input to specify the username of the account where the fork is present.

    • Ensure that the fork is up-to-date with the upstream. You can use Pull App which keeps your fork up-to-date via automated pull requests.
  3. Add the action to your workflow file (e.g. .github/workflows/<name>.yml).

Important

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.

Note

In case you're pinning the action to a commit hash, you'll need to update the hash frequently to get the latest features & bug fixes. Therefore, it is highly recommended to setup dependabot auto-updates for your repository. Check out keeping your actions up to date with Dependabot for guidance on how to do this. (Yes, it also supports updating actions pinned to a commit hash!)

Examples πŸ“

Workflow with the minimal configuration Workflow with a filter to only publish .exe files 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:
      - uses: vedantmgoyal9/winget-releaser@main
        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: vedantmgoyal9/winget-releaser@main
        with:
          identifier: Package.Identifier
          installers-regex: '\.exe$' # Only .exe files
          token: ${{ secrets.WINGET_TOKEN }}
name: Publish to WinGet
on:
  release:
    types: [released]
jobs:
  publish:
    runs-on: windows-latest
    steps:
      - name: Publish X to WinGet
        uses: vedantmgoyal9/winget-releaser@main
        with:
          identifier: Package.Identifier<X>
          installers-regex: '\.exe$' # Only .exe files
          token: ${{ secrets.WINGET_TOKEN }}
      - name: Publish Y to WinGet
        uses: vedantmgoyal9/winget-releaser@main
        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 '^.*/ '
          "version=$VERSION" >> $env:GITHUB_OUTPUT
        shell: pwsh
      - uses: vedantmgoyal9/winget-releaser@main
        with:
          identifier: Package.Identifier
          version: ${{ steps.get-version.outputs.version }}
          token: ${{ secrets.WINGET_TOKEN }}

Configuration Options βš’οΈ

  • identifier: The package identifier of the package to be updated in the WinGet Community Repository.

    • Required: βœ…
    • Example: identifier: Publisher.Package # Microsoft.Excel
  • version: The PackageVersion of the package you want to release.

    • Required: ❌ (defaults to tag, excluding v prefix: v1.0.0 -> 1.0.0)
    • Example: version: ${{ github.event.release.tag_name }} # For tags without the 'v' prefix
  • installers-regex: A regular expression to match the installers from the release artifacts which are to be published to Windows Package Manager (WinGet).

    • Required: ❌ (Default value: .(exe|msi|msix|appx)(bundle){0,1}$)
    • Example: installers-regex: '\.exe$' # All EXE's
  • max-versions-to-keep: The maximum number of versions of the package to keep in the WinGet Community Repository. If after the current release, the number of versions exceeds this limit, the oldest version will be deleted.

    • Required: ❌ (Default value: 0 - unlimited)
    • Example: max-versions-to-keep: 5 # keep only the latest 5 versions
  • release-tag: The GitHub release tag of the release you want to publish to Windows Package Manager (WinGet).

    • Required: ❌ (Default value: ${{ github.event.release.tag_name || github.ref_name }})
    • Example: release-tag: ${{ inputs.version }} # workflow_dispatch input 'version'
  • token: The GitHub token with which the action will authenticate with GitHub API and create a pull request on the WinGet Community Repository. The token should have a public_repo scope.

    • Required: βœ…
    • Example: token: ${{ secrets.WINGET_TOKEN }} # Repository secret called 'WINGET_TOKEN'

Warning

Do not directly put the token in the action. Instead, create a repository secret containing the token and use that in the workflow. Refer to using encrypted secrets in a workflow for more information.

  • fork-user: The GitHub username of the user where a fork of winget-pkgs is present. This fork will be used to create the pull request.
    • Required: ❌ (Default value: ${{ github.repository_owner }} # repository owner)
    • Example: fork-user: dotnet-winget-bot # for example purposes only

πŸš€ Integrating with Komac logo - Supercharging WinGet Releaser

The action uses Komac under the hood to create manifests and publish them to the Windows Package Manager Community Repository because of its unique capability to update installer URLs with respect to architecture, installer type, scope, etc.

I'm grateful to Russell Banks, the creator of Komac, for creating such an amazing & wonderful winget manifest creator, which is the core of this action. Again, it is because of Komac that the action can now be used on any platform (Windows, Linux, macOS) and not just Windows (as it was before).

🌟 Stargazers over time πŸ‘€

Stargazers over time

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Baptiste Augrain
Baptiste Augrain

πŸ’» πŸ€” πŸ›
Chaoqun
Chaoqun

πŸ›
Christian Brabandt
Christian Brabandt

πŸ›
CodeDoctor
CodeDoctor

πŸ›
Doug P
Doug P

πŸ›
Eric Trenkel
Eric Trenkel

πŸ’΅ πŸ›
Fndroid
Fndroid

πŸ’΅
Frans van Dorsselaer
Frans van Dorsselaer

πŸ€” πŸ›
Gerardo Grignoli
Gerardo Grignoli

πŸ“– πŸ›
James Alickolli
James Alickolli

πŸ€”
Justin M. Keyes
Justin M. Keyes

πŸ€”
Kei Touge
Kei Touge

πŸ›
LP
LP

πŸ›
Linda_pp
Linda_pp

πŸ›
Marc Auberer
Marc Auberer

πŸ›
Maxim
Maxim

πŸ›
Michael Lohr
Michael Lohr

πŸ“–
Miles Yucht
Miles Yucht

πŸ›
Piotr Chabelski
Piotr Chabelski

πŸ›
Russell Banks
Russell Banks

πŸ€” πŸ“–
ST-DDT
ST-DDT

πŸ“– πŸ€”
Tim Brinkley
Tim Brinkley

πŸ› πŸ’΅
Tom Payne
Tom Payne

πŸ›
Vedant
Vedant

πŸ’»
igoogolx
igoogolx

πŸ› πŸ’»
ilike2burnthing
ilike2burnthing

πŸ›
isaak654
isaak654

πŸ›
maforget
maforget

πŸ›
repolevedavaj
repolevedavaj

πŸ›
sitiom
sitiom

πŸ“– πŸ› πŸ’»

This project follows the all-contributors specification. Contributions of any kind welcome!