Komac logoKomac - Another WinGet Manifest Creator Komac banner

![GitHub release (release name instead of tag name)](https://img.shields.io/github/v/release/russellbanks/komac) ![GitHub Repo stars](https://img.shields.io/github/stars/russellbanks/komac) ![Issues](https://img.shields.io/github/issues/russellbanks/Komac) ![License](https://img.shields.io/github/license/russellbanks/Komac) Komac is an advanced CLI designed to create manifests for the [WinGet Community Repository](https://github.com/microsoft/winget-pkgs). Komac is both blazingly fast 🔥 and incredibly low on memory, using just ~3.5MB of memory on my machine. ![Komac-demo](assets/demo.gif) ## Installation Komac is cross-platform and binaries are built for Windows, Linux, and macOS. ### All platforms If you have cargo installed, you can compile Rust for any platform ```bash cargo install --locked komac ``` Komac also supports [cargo-binstall](https://github.com/cargo-bins/cargo-binstall): ```bash cargo binstall komac ``` #### Nightly Nightly releases that are built on every commit are available [here](https://github.com/russellbanks/Komac/releases/tag/nightly). These are useful for debugging or if you want the latest features and fixes. ### Windows Both portable EXEs and installers are available from the [releases](https://github.com/russellbanks/Komac/releases). #### WinGet ```bash winget install komac ``` #### Scoop ```bash scoop install komac ``` ### Linux Portable binaries are available from the [releases](https://github.com/russellbanks/Komac/releases). Debian (`.deb`) and Red Hat (`.rpm`) installers are also available. ### macOS Portable binaries for macOS are available from the [releases](https://github.com/russellbanks/Komac/releases). #### Homebrew ```bash brew install russellbanks/tap/komac ``` ## GitHub Token Komac is currently only able to use a classic token. Whilst Komac can fully create manifests and commit with a fine-grained token, it fails to create a pull request to winget-pkgs. This may change as fine-grained tokens improve. See https://github.com/russellbanks/Komac/issues/310. ### Classic A classic token with the `public_repo` scope. ![firefox_IYiqtsd0Nl](https://github.com/russellbanks/Komac/assets/74878137/fbe4472e-dc53-4caf-ad2b-3bef75c47b07) ## Commands | Command | Description | Usage | |----------------|-----------------------------------------------------------------------------------------------------|----------------------------| | New | Create a package from scratch | `new` | | Update | Update a pre-existing package in winget-pkgs | `update` | | Remove | Remove a version from winget-pkgs | `remove` | | Sync Fork | Syncs your fork of winget-pkgs to [microsoft/winget-pkgs](https://github.com/microsoft/winget-pkgs) | `sync-fork`, `sync` | | Branch Cleanup | Deletes branches that have had a merged or closed pull request to winget-pkgs | `cleanup` | | List Versions | Lists all the versions for a given package | `list-versions`, `list` | | Analyse | Analyses a file and outputs information about it. Useful for debugging | `analyse` | | Token update | Update stored GitHub OAuth token | `token update` | | Token remove | Delete stored GitHub OAuth token | `token remove` | | Complete | Outputs an autocompletion script for the given shell | `complete`, `autocomplete` | ### Update an existing package with a new version ``` komac update Package.Identifier --version 1.2.3 --urls https://www.firstUrl.com https://www.secondUrl.com --submit ``` | Parameter | Usage | Notes | |--------------------------------------|-----------------------------------|------------------------------------------------------------| | Package Identifier | `komac update Package.Identifier` | | | Version | `--version` | | | URLs | `--urls` | URLs are delimited by a space | | Automatically submit | `--submit` | | | Token (if one is not already stored) | `--token` | Komac will check for a `GITHUB_TOKEN` environment variable | ## Komac vs other tools 🏆 While other manifest creation tools have made a solid foundation for the manifests in winget-pkgs, they development pace is notably slow and lacks the advanced detection capabilities that come with Komac. | | Komac | WingetCreate | YamlCreate | |------------------------------------------|:------:|:------------:|:--------------------------------------------------------------:| | Parameters | ✅ | ✅ | ❌ | | Download progress bar & ETA | ✅ | ❌ | ❌ | | Fully cross-platform | ✅ | ❌ | Limited | | Works without Git | ✅ | ✅ | ❌ | | Full Inno Setup value retrieval | ✅ | ❌ | ❌ | | Full MSI value retrieval | ✅ | Partial | Partial | | Linux & macOS MSI support | ✅ | ❌ | ❌ | | Full MSIX value retrieval | ✅ | Partial | Partial - https://github.com/Trenly/winget-pkgs/issues/180 | | Get information from GitHub | ✅ | ✅ | ❌ | | Formatted GitHub release notes retrieval | ✅ | ❌ | ❌ | | Release date identification | ✅ | ❌ | ❌ | | No telemetry | ✅ | ⭕ [^1] | ✅ | | Fully standalone (w/o winget-pkgs clone) | ✅ | ✅ | ❌ | | Inno setup detection | ✅ [^2] | ✅ | ✅ [^3] | | Nullsoft detection | ✅ [^2] | ✅ | ✅ [^3] | | Burn installer detection | ✅ [^2] | ✅ | Opt-in feature (not enabled by default due to slow processing) | | Programming Language | Rust | C# | PowerShell | [^1]: Telemetry is enabled by default in WingetCreate. Use `wingetcreate settings` to manually disable telemetry. [^2]: There is much more accurate detection for Inno, Nullsoft, and Burn installers since Komac v2. [^3]: The logic for this was contributed by me :) Check [issues](https://github.com/Trenly/winget-pkgs/issues?q=is:issue+author:russellbanks) that I've opened to request this feature for YamlCreate. ## Usage with GitHub Actions: [WinGet Releaser](https://github.com/vedantmgoyal9/winget-releaser) 🌟 WinGet Releaser is a GitHub Action that invokes Komac, passing in your release's URLs. This completely automates publishing to WinGet. ### Example 📝 ```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 token: ${{ secrets.WINGET_TOKEN }} # installers-regex: '\.exe$' # Only .exe files ``` ### Alternative actions 🔄 - Run Komac manually: [michidk/run-komac](https://github.com/michidk/run-komac) - Automate releases for external repositories: [michidk/winget-updater](https://github.com/michidk/winget-updater) ## How can I support Komac? ❤️ - 🤝 Sponsor this project through [GitHub Sponsors](https://github.com/sponsors/russellbanks) - ⭐ Star this project! :) - 🧑‍💻 Use Komac and [create an issue](https://github.com/russellbanks/Komac/issues/new) for feature requests or bugs. ## Star History ⭐ Star History Chart ## License [![GNU GPLv3 Logo](https://www.gnu.org/graphics/gplv3-127x51.png)](http://www.gnu.org/licenses/gpl-3.0.en.html) Komac is Free Software: You can use, study share and improve it at your will. Specifically you can redistribute and/or modify it under the terms of the [GNU General Public License](http://www.gnu.org/licenses/gpl-3.0.en.html) as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.