Problem / Background
Windows users currently need to manually download and install all-smi from GitHub releases. Registering the package with WinGet (Windows Package Manager) will enable users to install via a simple command:
This aligns with our distribution strategy for other platforms (Ubuntu PPA, Homebrew consideration) and improves discoverability for Windows users.
Proposed Solution
Submit all-smi to the microsoft/winget-pkgs repository by creating the required manifest files and opening a pull request.
Package Information
| Field |
Value |
| PackageIdentifier |
Lablup.AllSmi |
| PackageVersion |
0.14.0 |
| Moniker |
all-smi |
| Publisher |
Lablup Inc. |
| License |
Apache-2.0 |
| Homepage |
https://github.com/lablup/all-smi |
| InstallerUrl |
https://github.com/lablup/all-smi/releases/download/v{version}/all-smi-windows-x86_64.zip |
Implementation Steps
1. Fork and Clone winget-pkgs Repository
gh repo fork microsoft/winget-pkgs --clone
cd winget-pkgs
2. Create Manifest Directory Structure
manifests/
l/
Lablup/
AllSmi/
0.14.0/
Lablup.AllSmi.yaml # Version manifest
Lablup.AllSmi.installer.yaml # Installer manifest
Lablup.AllSmi.locale.en-US.yaml # Locale manifest (default)
3. Create Version Manifest (Lablup.AllSmi.yaml)
PackageIdentifier: Lablup.AllSmi
PackageVersion: 0.14.0
DefaultLocale: en-US
ManifestType: version
ManifestVersion: 1.6.0
4. Create Installer Manifest (Lablup.AllSmi.installer.yaml)
PackageIdentifier: Lablup.AllSmi
PackageVersion: 0.14.0
Platform:
- Windows.Desktop
MinimumOSVersion: 10.0.0.0
InstallerType: zip
NestedInstallerType: portable
NestedInstallerFiles:
- RelativeFilePath: all-smi.exe
PortableCommandAlias: all-smi
Installers:
- Architecture: x64
InstallerUrl: https://github.com/lablup/all-smi/releases/download/v0.14.0/all-smi-windows-x86_64.zip
InstallerSha256: <SHA256_HASH>
ManifestType: installer
ManifestVersion: 1.6.0
Note: The SHA256 hash should be obtained from the .sha256 file in the release or computed locally:
(Get-FileHash -Algorithm SHA256 all-smi-windows-x86_64.zip).Hash
5. Create Locale Manifest (Lablup.AllSmi.locale.en-US.yaml)
PackageIdentifier: Lablup.AllSmi
PackageVersion: 0.14.0
PackageLocale: en-US
Publisher: Lablup Inc.
PublisherUrl: https://www.lablup.com
PublisherSupportUrl: https://github.com/lablup/all-smi/issues
PackageName: all-smi
PackageUrl: https://github.com/lablup/all-smi
License: Apache-2.0
LicenseUrl: https://github.com/lablup/all-smi/blob/main/LICENSE
ShortDescription: Command-line utility for monitoring GPU hardware
Description: |-
all-smi is a unified command-line utility for monitoring GPU and AI accelerator hardware.
It provides real-time metrics including utilization, memory usage, temperature, and power consumption.
Supports NVIDIA GPUs, Apple Silicon, Intel Gaudi, AMD GPUs, and various NPU platforms.
Tags:
- gpu
- nvidia
- monitoring
- hardware
- cli
- gpu-monitor
- nvidia-smi
- system-monitor
Moniker: all-smi
ManifestType: defaultLocale
ManifestVersion: 1.6.0
6. Validate Manifests
# Install winget-create tool
winget install wingetcreate
# Validate manifests
winget validate --manifest manifests/l/Lablup/AllSmi/0.14.0/
7. Test Installation Locally
winget install --manifest manifests/l/Lablup/AllSmi/0.14.0/
8. Submit Pull Request
Create a PR to microsoft/winget-pkgs with:
- Title:
New package: Lablup.AllSmi version 0.14.0
- Description explaining the package and its purpose
- Ensure all automated checks pass
GitHub Action Automation for WinGet PR
This section provides a complete setup for automatically creating WinGet pull requests when new releases are published.
Prerequisites
-
Fork microsoft/winget-pkgs - Required for creating PRs
-
Create GitHub Personal Access Token (PAT):
- Go to GitHub Settings → Developer settings → Personal access tokens → Fine-grained tokens
- Token name:
WINGET_TOKEN
- Repository access: Select
microsoft/winget-pkgs (your fork)
- Permissions required:
- Contents: Read and write
- Pull requests: Read and write
- Metadata: Read-only
-
Add Secret to Repository:
- Go to lablup/all-smi → Settings → Secrets and variables → Actions
- Add new secret:
WINGET_TOKEN with your PAT value
GitHub Action Workflow
Create .github/workflows/winget-publish.yml:
name: Publish to WinGet
on:
release:
types: [published]
jobs:
publish:
# Only run on non-prerelease Windows releases
if: ${{ !github.event.release.prerelease }}
runs-on: windows-latest
steps:
- name: Publish to WinGet
uses: vedantmgoyal9/winget-releaser@v2
with:
# Package identifier in WinGet
identifier: Lablup.AllSmi
# Regex to match the Windows installer asset
installers-regex: 'all-smi-windows-x86_64\.zip$'
# GitHub PAT with access to fork winget-pkgs and create PRs
token: ${{ secrets.WINGET_TOKEN }}
How It Works
- Trigger: When a new release is published on GitHub
- Asset Detection: Finds
all-smi-windows-x86_64.zip using the regex pattern
- Hash Calculation: Automatically downloads and computes SHA256 hash
- Manifest Generation: Creates/updates manifest files in winget-pkgs fork
- PR Creation: Opens a pull request to microsoft/winget-pkgs
Workflow Features
| Feature |
Description |
| Auto version detection |
Extracts version from release tag (e.g., v0.14.0 → 0.14.0) |
| SHA256 auto-calculation |
Downloads asset and computes hash automatically |
| Existing version check |
Skips if version already exists in winget-pkgs |
| PR auto-formatting |
Follows microsoft/winget-pkgs PR conventions |
Advanced Configuration
For more control, use the extended configuration with manual trigger support:
name: Publish to WinGet
on:
release:
types: [published]
workflow_dispatch:
inputs:
release-tag:
description: 'Release tag to publish (e.g., v0.15.0)'
required: true
type: string
jobs:
publish:
if: ${{ !github.event.release.prerelease || github.event_name == 'workflow_dispatch' }}
runs-on: windows-latest
steps:
- name: Publish to WinGet
uses: vedantmgoyal9/winget-releaser@v2
with:
identifier: Lablup.AllSmi
installers-regex: 'all-smi-windows-x86_64\.zip$'
token: ${{ secrets.WINGET_TOKEN }}
release-tag: ${{ inputs.release-tag || github.event.release.tag_name }}
Manual Trigger Support
The workflow_dispatch event allows manual triggering from GitHub Actions UI:
- Go to Actions → "Publish to WinGet"
- Click "Run workflow"
- Enter the release tag (e.g.,
v0.15.0)
- Click "Run workflow"
This is useful for:
- Retrying failed submissions
- Publishing older versions
- Testing the workflow
Troubleshooting
| Issue |
Solution |
| "Resource not accessible by integration" |
PAT lacks required permissions. Regenerate with correct scopes. |
| "Version already exists" |
Normal - package version already in winget-pkgs |
| "No matching assets found" |
Check installers-regex matches your release asset name |
| PR validation fails |
Check manifest schema version and required fields |
Monitoring
After setup, monitor the workflow:
- GitHub Actions tab shows workflow runs
- Check winget-pkgs fork for created branches
- Monitor microsoft/winget-pkgs PRs for your submissions
Acceptance Criteria
First-Time Setup Checklist
Technical Considerations
Portable vs Installer
We are using the portable installation type (zip extraction) since:
- Our release is a standalone executable in a zip file
- No registry entries or complex installation required
- Simpler maintenance and updates
InstallerType Details
For zip files containing a portable executable:
InstallerType: zip - indicates the package is distributed as a zip file
NestedInstallerType: portable - indicates the zip contains a portable app
NestedInstallerFiles - specifies the executable path within the zip
SHA256 Hash Management
Each version update requires:
- Computing SHA256 of the new zip file
- Updating the installer manifest with the new hash
With the GitHub Action automation, this is handled automatically.
Additional Context
Problem / Background
Windows users currently need to manually download and install all-smi from GitHub releases. Registering the package with WinGet (Windows Package Manager) will enable users to install via a simple command:
winget install all-smiThis aligns with our distribution strategy for other platforms (Ubuntu PPA, Homebrew consideration) and improves discoverability for Windows users.
Proposed Solution
Submit all-smi to the microsoft/winget-pkgs repository by creating the required manifest files and opening a pull request.
Package Information
Lablup.AllSmi0.14.0all-smihttps://github.com/lablup/all-smi/releases/download/v{version}/all-smi-windows-x86_64.zipImplementation Steps
1. Fork and Clone winget-pkgs Repository
gh repo fork microsoft/winget-pkgs --clone cd winget-pkgs2. Create Manifest Directory Structure
3. Create Version Manifest (
Lablup.AllSmi.yaml)4. Create Installer Manifest (
Lablup.AllSmi.installer.yaml)Note: The SHA256 hash should be obtained from the
.sha256file in the release or computed locally:5. Create Locale Manifest (
Lablup.AllSmi.locale.en-US.yaml)6. Validate Manifests
7. Test Installation Locally
8. Submit Pull Request
Create a PR to microsoft/winget-pkgs with:
New package: Lablup.AllSmi version 0.14.0GitHub Action Automation for WinGet PR
This section provides a complete setup for automatically creating WinGet pull requests when new releases are published.
Prerequisites
Fork microsoft/winget-pkgs - Required for creating PRs
Create GitHub Personal Access Token (PAT):
WINGET_TOKENmicrosoft/winget-pkgs(your fork)Add Secret to Repository:
WINGET_TOKENwith your PAT valueGitHub Action Workflow
Create
.github/workflows/winget-publish.yml:How It Works
all-smi-windows-x86_64.zipusing the regex patternWorkflow Features
v0.14.0→0.14.0)Advanced Configuration
For more control, use the extended configuration with manual trigger support:
Manual Trigger Support
The
workflow_dispatchevent allows manual triggering from GitHub Actions UI:v0.15.0)This is useful for:
Troubleshooting
installers-regexmatches your release asset nameMonitoring
After setup, monitor the workflow:
Acceptance Criteria
winget validatewinget install --manifestwinget search all-smiafter mergeWINGET_TOKENsecret to repositoryFirst-Time Setup Checklist
WINGET_TOKENsecret to lablup/all-smi repository.github/workflows/winget-publish.ymlTechnical Considerations
Portable vs Installer
We are using the portable installation type (zip extraction) since:
InstallerType Details
For zip files containing a portable executable:
InstallerType: zip- indicates the package is distributed as a zip fileNestedInstallerType: portable- indicates the zip contains a portable appNestedInstallerFiles- specifies the executable path within the zipSHA256 Hash Management
Each version update requires:
With the GitHub Action automation, this is handled automatically.
Additional Context