https://github.com/vedantmgoyal9/winget-releaser
Publish new releases of your application to the Windows Package Manager easily.
https://github.com/vedantmgoyal9/winget-releaser
actions github-actions hacktoberfest windows winget
Last synced: 10 days ago
JSON representation
Publish new releases of your application to the Windows Package Manager easily.
- Host: GitHub
- URL: https://github.com/vedantmgoyal9/winget-releaser
- Owner: vedantmgoyal9
- License: agpl-3.0
- Created: 2022-06-17T13:14:20.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-10-07T13:06:18.000Z (6 months ago)
- Last Synced: 2024-10-29T14:33:31.885Z (6 months ago)
- Topics: actions, github-actions, hacktoberfest, windows, winget
- Homepage: https://docs.bittu.eu.org/docs/winget-releaser-playground
- Size: 793 KB
- Stars: 164
- Watchers: 5
- Forks: 22
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
- awesome - vedantmgoyal2009/winget-releaser - Publish new releases of your application to the Windows Package Manager easily. (windows)
README
WinGet Releaser (GitHub Action)
![GitHub contributors (via allcontributors.org)][github-all-contributors-badge]
![GitHub issues][github-issues-badge]
![GitHub release (latest by date)][github-release-badge]
![GitHub Repo stars][github-repo-stars-badge]
![GitHub][github-license-badge]
[![Badge]()][playground-link]Publish new releases of your application to the Windows Package Manager easily.
![pr-example-screenshot][pr-screenshot-image]
Creating WinGet manifests and submitting them at [WinGet Community Repository][winget-pkgs-repo] for every release of
your application can be tedious 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 and published to WinGet.## Getting Started 🚀
> [!IMPORTANT]
> At least **one** version of your package should already be present in the [Windows Package Manager Community Repository][winget-pkgs-repo].
> 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 https://github.com/vedantmgoyal9/winget-releaser/issues/172 for information.
2. Fork [microsoft/winget-pkgs][winget-pkgs-repo] under the same account/organization as the project's repository. If you are forking [winget-pkgs][winget-pkgs-repo] 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.
3. Add the action to your workflow file (e.g. `.github/workflows/.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][dependabot-setup-guide] 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```yaml
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 }}
``````yaml
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 }}
``````yaml
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
installers-regex: '\.exe$' # Only .exe files
token: ${{ secrets.WINGET_TOKEN }}
- name: Publish Y to WinGet
uses: vedantmgoyal9/winget-releaser@main
with:
identifier: Package.Identifier
installers-regex: '\.msi$' # Only .msi files
token: ${{ secrets.WINGET_TOKEN }}
``````yaml
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 ⚒️
| Option | Description | Notes |
|---|---|---|
| `identifier` **(Mandatory)** | The `PackageIdentifier` of the app in WinGet. | **Example**: `Microsoft.PowerToys` |
| `version` (Optional) | The `PackageVersion` of the application. | **Default**: Release tag, excluding `v` prefix
(e.g. `v1.0.0` -> `1.0.0`)
**Example**: `${{ github.event.release.tag_name }} # For tags without the 'v' prefix` |
| `installers-regex` (Optional) | A **Reg**ular **Ex**pression to match Windows installers/binaries from GitHub release artifacts. | **Default**: `.(exe\|msi\|msix\|appx)(bundle){0,1}$`
**Example**: `\.exe$` (All files ending with .exe) |
| `max-versions-to-keep` (Optional) | The maximum number of versions of the package to keep in WinGet. If after the current release, the number of versions exceeds this limit, the oldest version will be deleted. | **Default**: `0` (unlimited)
**Example**: `3` (latest 3 versions only) |
| `release-tag` (Optional) | The tag of the GitHub release you want to publish to Windows Package Manager (WinGet). | **Default**: `${{ github.event.release.tag_name \|\| github.ref_name }}`
**Example**: `release-tag: ${{ inputs.version }} # workflow_dispatch input 'version'` |
| `fork-user` (Optional) | The GitHub user where [winget-pkgs][winget-pkgs-repo] fork is present. This fork will be used to create PR at [WinGet Community Repository][winget-pkgs-repo]. | **Default**: `${{ github.repository_owner }} # repository owner`
**Example**: `dotnet-winget-bot` |
| `token` **(Mandatory)** | GitHub token to create PR at [winget-pkgs][winget-pkgs-repo]. **The token should have a `public_repo` scope.** | **Example**: `token: ${{ secrets.WINGET_TOKEN }} # Repository secret called 'WINGET_TOKEN'` |
| `release-notes-url` (Optional) | URL to package version's release notes. | **Default**: GitHub release page
**Example**: `release-notes-url: https://example.com/release-notes/${{ github.event.release.tag_name }}` |> [!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][gh-encrypted-secrets] for more information.🚀 Integrating with
- Supercharging WinGet Releaser
The action uses [Komac][komac-repo] under the hood to create manifests and publish them to the [Windows Package Manager Community Repository][winget-pkgs-repo] because of its unique capability to update installer URLs with respect to architecture, installer type, scope, etc.
I'm grateful to [Russell Banks][russellbanks-github-profile], 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 👀
[](https://starchart.cc/vedantmgoyal9/winget-releaser)
## Contributors ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Baptiste Augrain
💻 🤔 🐛
Chaoqun
🐛
Christian Brabandt
🐛
CodeDoctor
🐛
Doug P
🐛
Eric Trenkel
💵 🐛
Fndroid
💵
Frans van Dorsselaer
🤔 🐛
Gerardo Grignoli
📖 🐛
James Alickolli
🤔
Justin M. Keyes
🤔
Kei Touge
🐛
LP
🐛
Linda_pp
🐛
Marc Auberer
🐛
Maxim
🐛
Michael Lohr
📖
Miles Yucht
🐛
Piotr Chabelski
🐛
Russell Banks
🤔 📖
ST-DDT
📖 🤔
Tim Brinkley
🐛 💵
Tom Payne
🐛
UnownPlain
💻 🤔
Vedant
💻
igoogolx
🐛 💻
ilike2burnthing
🐛
isaak654
🐛
maforget
🐛
repolevedavaj
🐛
sitiom
📖 🐛 💻
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification.
Contributions of any kind welcome![playground-link]: https://docs.bittu.eu.org/docs/winget-releaser-playground
[dependabot-setup-guide]: https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot#example-dependabotyml-file-for-github-actions
[github-all-contributors-badge]: https://img.shields.io/github/all-contributors/vedantmgoyal9/winget-releaser/main?logo=opensourceinitiative&logoColor=white
[github-issues-badge]: https://img.shields.io/github/issues/vedantmgoyal9/winget-releaser?logo=target
[github-release-badge]: https://img.shields.io/github/v/release/vedantmgoyal9/winget-releaser?logo=github
[github-repo-stars-badge]: https://img.shields.io/github/stars/vedantmgoyal9/winget-releaser?logo=githubsponsors
[github-license-badge]: https://img.shields.io/github/license/vedantmgoyal9/winget-releaser?logo=gnu
[pr-screenshot-image]: https://github.com/vedantmgoyal9/winget-releaser/blob/main/.github/pull-request-by-action-example.png
[winget-pkgs-repo]: https://github.com/microsoft/winget-pkgs
[komac-repo]: https://github.com/russellbanks/komac
[russellbanks-github-profile]: https://github.com/russellbanks
[gh-encrypted-secrets]: https://docs.github.com/en/actions/security-guides/encrypted-secrets#using-encrypted-secrets-in-a-workflow