RevitLookup WinGet Publishing
The release pipeline updates already-registered WinGet packages on its own: PublishWinGetModule submits a new version for every Revit year through Komac, skipping prereleases and any package not yet registered.
The only manual step is the first release of a new Revit-year identifier, which microsoft/winget-pkgs requires a human to create.
This skill covers that one-time registration and the follow-up that hands the package back to CI.
When to use
- Adding a brand-new
LookupFoundation.RevitLookup.{year}package tomicrosoft/winget-pkgs(for example the first.2028release).
When not to use
- A version bump of an existing Revit-year package —
PublishWinGetModulesubmits that automatically on release.
Workflow
Step 1: Confirm the prerequisites
- The
lookup-foundation-botGitHub account, or a maintainer fork ofmicrosoft/winget-pkgs. - A classic Personal Access Token with the
public_reposcope from that account;microsoft/winget-pkgsrejects fine-grained tokens. - Komac installed locally (
winget install RussellBanks.Komac). - A signed, public GitHub Release for the new Revit year that already contains the SingleUser and MultiUser
.msiinstallers (produced by thepack/publishpipeline).
Step 2: Submit the new package with komac new
Run from PowerShell, substituting the year, version, and installer URLs.
$env:GITHUB_TOKEN = "<lookup-foundation-bot PAT>"
komac new LookupFoundation.RevitLookup.2028 `
--version 2028.0.0 `
--urls https://github.com/lookup-foundation/RevitLookup/releases/download/2028.0.0/RevitLookup-2028.0.0-SingleUser.msi `
https://github.com/lookup-foundation/RevitLookup/releases/download/2028.0.0/RevitLookup-2028.0.0-MultiUser.msi `
--publisher "Lookup Foundation" `
--package-name "RevitLookup 2028" `
--license MIT
Keep the identifier exactly LookupFoundation.RevitLookup.{year}; the pipeline derives it as LookupFoundation.RevitLookup. plus the Revit year and matches installers by the -{version}- fragment in the file name.
Step 3: Register the year in the repo after the pull request merges
Append the identifier to both WinGet DSC files under .config/winget/, using ensure: Present in configuration.winget and ensure: Absent in configuration-uninstall.winget.
- resource: Microsoft.WinGet.DSC/WinGetPackage
directives:
description: RevitLookup for Autodesk Revit 2028
settings:
id: LookupFoundation.RevitLookup.2028
source: winget
ensure: Present
Then confirm the Revit year is present in build/appsettings.json under Build.Versions; PublishWinGetModule iterates over it.
Step 4: Verify the handoff to CI
On the next release, PublishWinGetModule syncs the fork with its upstream, finds the now-registered package with komac list-versions, builds the asset URLs from the GitHub release, and submits the update; no further komac new is needed for that year.
A package that is still unregistered logs a warning and is skipped, which is the signal the manual step has not completed.
Validation
- The new identifier is exactly
LookupFoundation.RevitLookup.{year}. - The submission used a classic PAT with
public_reposcope and pointed at a signed public release containing both.msiinstallers. - The identifier was appended to
configuration.winget(ensure: Present) andconfiguration-uninstall.winget(ensure: Absent). - The Revit year appears in
build/appsettings.jsonunderBuild.Versions. - The next CI release updates the package automatically, with no not-registered warning.
Common Pitfalls
| Pitfall | Correct approach |
|---|---|
Running komac new for an existing package |
Only the first release of a Revit year is manual; CI updates the rest. |
| Using a fine-grained PAT | microsoft/winget-pkgs requires a classic PAT with public_repo. |
| Forgetting the DSC config after the PR merges | Append the id to both .config/winget files, Present and Absent. |
Omitting the year from build/appsettings.json |
Add it to Build.Versions for the pipeline to iterate the package. |
| A deviating identifier | Keep LookupFoundation.RevitLookup.{year}; the pipeline derives and matches on it. |