mirror of
https://github.com/tw93/Mole.git
synced 2026-02-05 01:34:42 +00:00
* feat: Add Windows package manager publishing infrastructure (#343) - Add comprehensive release build scripts: - build-release.ps1: Creates portable ZIP + SHA256 checksums - build-exe.ps1: Standalone executable builder (PS2EXE) - build-msi.ps1: MSI installer builder (WiX Toolset) - Add GitHub Actions workflow: - Automated builds on version tags - Runs tests before building - Auto-creates GitHub releases with artifacts - Add package manager manifests: - WinGet: Complete manifests ready for microsoft/winget-pkgs - Chocolatey: Full package with install/uninstall scripts - Scoop: JSON manifest ready for submission - Add comprehensive documentation: - RELEASE.md: Complete guide for building and publishing - Package-specific READMEs with submission instructions - ISSUE-343-SUMMARY.md: Quick reference and next steps Successfully tested: Built mole-1.0.0-x64.zip (5 MB) with SHA256 checksums Addresses #343 * chore: update contributors [skip ci] * fix: Support uppercase V and -windows suffix in release workflow * fix: Remove duplicate parameter definitions in clean, optimize, and purge commands - bin/clean.ps1: Remove duplicate System, GameMedia, DebugMode, Whitelist params - bin/optimize.ps1: Remove duplicate DebugMode param - bin/purge.ps1: Remove duplicate DebugMode and Paths params These duplicates were causing parser errors in tests. * fix: Update test regex to match --dry-run format in help text The help output shows --dry-run (kebab-case) but test was checking for DryRun (PascalCase). Updated regex to accept both formats. * fix: Handle Pester 5.x result object properties correctly Pester 5.x uses different property names (Passed.Count, Failed.Count) instead of PassedCount, FailedCount. Added fallback logic to support both formats. * fix: Simplify Pester result parsing with better fallback logic Since Pester already prints test results, just check for failures and assume success if we can't parse the result object. This handles different Pester versions more gracefully. * feat: Add MSI and EXE builds to release workflow - Install WiX Toolset for MSI creation - Install PS2EXE module for standalone EXE - Build all three formats: ZIP, MSI, EXE - MSI and EXE builds marked optional (continue-on-error) - Upload all artifacts to GitHub release - Update release notes with installation instructions for all formats - Add SHA256 verification instructions for each format * fix: Resolve MSI and EXE build failures MSI build fix: - Use UTF8 without BOM for temp WXS file to avoid XML parsing errors - WiX compiler requires clean UTF8 encoding without byte order mark EXE build fix: - Remove hashtable iteration that modified collection during enumeration - Exclude null iconFile parameter from ps2exe params instead of removing it - Prevents 'Collection was modified' exception * fix: Properly handle encoding and version format for MSI and EXE builds MSI fix: - Use System.IO.File.ReadAllText/WriteAllText for consistent UTF8 without BOM - Prevents XML parsing errors in WiX compiler EXE fix: - Extract numeric version only (strip '-windows' suffix) for ps2exe - ps2exe requires version in format n.n.n.n (numeric only) - Fallback to 1.0.0.0 if version parsing fails * fix: Use WriteAllBytes to ensure no BOM in MSI WXS file - Convert string to UTF8 bytes manually - Write bytes directly to file - This guarantees no byte order mark is added - Prevents WiX XML parsing error at position 7 * fix: Read WXS source as bytes to completely avoid BOM issues - Read source file as raw bytes - Convert bytes to string using UTF8Encoding without BOM - Replace version in string - Convert back to bytes and write - This completely avoids PowerShell's Get-Content BOM handling * chore: Simplify release workflow - remove MSI build, minimal release notes - Remove MSI build steps (has persistent BOM/encoding issues) - Remove WiX Toolset installation - Simplify release notes to bare minimum - Focus on ZIP and EXE artifacts only --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
WinGet Package for Mole
Quick Submission Guide
1. Prerequisites
- GitHub account
- GitHub release with ZIP file
winget-createtool (optional but recommended)
2. Install WinGet Create Tool (Recommended)
# Install via WinGet
winget install Microsoft.WingetCreate
# Or download from GitHub
# https://github.com/microsoft/winget-create/releases
3a. Automated Submission (Recommended)
# For new package
wingetcreate new `
--urls https://github.com/bhadraagada/mole/releases/download/v1.0.0/mole-1.0.0-x64.zip `
--version 1.0.0
# For updates (after first approval)
wingetcreate update bhadraagada.mole `
--urls https://github.com/bhadraagada/mole/releases/download/v1.0.0/mole-1.0.0-x64.zip `
--version 1.0.0 `
--submit
3b. Manual Submission
-
Fork microsoft/winget-pkgs
# On GitHub: Fork https://github.com/microsoft/winget-pkgs git clone https://github.com/YOUR_USERNAME/winget-pkgs cd winget-pkgs -
Create manifest directory
mkdir -p manifests\b\bhadraagada\mole\1.0.0 -
Copy manifests
Copy-Item packaging\winget\*.yaml manifests\b\bhadraagada\mole\1.0.0\ -
Update checksums
- Edit
bhadraagada.mole.installer.yaml - Update
InstallerSha256with your build's SHA256 - Update
InstallerUrlwith correct version
- Edit
-
Commit and push
git add manifests\b\bhadraagada\mole\ git commit -m "New package: bhadraagada.mole version 1.0.0" git push -
Create Pull Request
- Go to: https://github.com/microsoft/winget-pkgs/compare
- Select your fork and branch
- Create PR with title:
New package: bhadraagada.mole version 1.0.0
Manifest Files
WinGet requires 3 manifest files:
1. Version Manifest (bhadraagada.mole.yaml)
- Package identifier
- Version number
- Default locale
2. Locale Manifest (bhadraagada.mole.locale.en-US.yaml)
- Package metadata (name, description, publisher)
- URLs (homepage, license, documentation)
- Tags and categories
- Release notes
3. Installer Manifest (bhadraagada.mole.installer.yaml)
- Download URLs
- SHA256 checksums
- Installer type
- Architecture
- Minimum OS version
Validation
Before submitting, validate manifests:
# Install WinGet validation tool
winget install Microsoft.WingetCreate
# Validate manifests
winget validate --manifest manifests\b\bhadraagada\mole\1.0.0
Review Process
-
Auto-checks: Automated validation runs immediately
- Manifest format
- URL accessibility
- Checksum verification
- Malware scan
-
Human Review: Maintainers review (~1-2 weeks)
- First-time packages reviewed more carefully
- Subsequent updates often auto-approved
-
Approval: Package becomes available via WinGet
Updating for New Releases
When releasing v1.0.1:
# Option A: Using wingetcreate (easy)
wingetcreate update bhadraagada.mole `
--urls https://github.com/bhadraagada/mole/releases/download/v1.0.1/mole-1.0.1-x64.zip `
--version 1.0.1 `
--submit
# Option B: Manual
# 1. Create new directory: manifests\b\bhadraagada\mole\1.0.1
# 2. Copy and update manifests
# 3. Submit PR with title: "Update: bhadraagada.mole version 1.0.1"
Testing Before Submission
Test installation locally:
# Add local source
winget source add --name local file://C:\path\to\manifests
# Install from local
winget install bhadraagada.mole --source local
# Test functionality
mole --version
# Remove local source
winget source remove local
Common Issues
"URL not accessible"
- Ensure GitHub release is public
- Wait a few minutes after creating release
- Test URL in browser
"Checksum mismatch"
- Regenerate:
(Get-FileHash mole-1.0.0-x64.zip).Hash - Ensure lowercase in manifest
- Verify no extra spaces
"Manifest validation failed"
- Run
winget validate --manifest path\to\manifest - Check YAML indentation (use spaces, not tabs)
- Ensure all required fields present
"Installer type not supported"
- Use
zipwithNestedInstallerType: portablefor ZIP archives - Consider creating MSI for better integration
Best Practices
- Use semantic versioning: 1.0.0, 1.0.1, 1.1.0
- Tag releases properly: v1.0.0 (with 'v' prefix)
- Keep manifests updated: Update within days of releases
- Add detailed descriptions: Help users understand the tool
- Include release notes: Document changes clearly
Migration to MSI (Optional Future Enhancement)
WinGet works better with MSI installers:
InstallerType: msi
Installers:
- Architecture: x64
InstallerUrl: https://github.com/bhadraagada/mole/releases/download/v1.0.0/mole-1.0.0-x64.msi
InstallerSha256: <MSI_SHA256>
ProductCode: '{GUID-HERE}'
Benefits:
- Better Windows integration
- Automatic PATH configuration
- Add/Remove Programs integration
- Silent installation support
Resources
- WinGet Repository: https://github.com/microsoft/winget-pkgs
- Submission Guide: https://github.com/microsoft/winget-pkgs/wiki/Submitting-Packages
- Manifest Schema: https://github.com/microsoft/winget-cli/blob/master/schemas/JSON/manifests/v1.4.0/manifest.version.1.4.0.json
- WinGet Create: https://github.com/microsoft/winget-create
- Validation: https://github.com/microsoft/winget-cli
Support
- WinGet Issues: https://github.com/microsoft/winget-cli/issues
- Package Issues: https://github.com/microsoft/winget-pkgs/issues
- Discussions: https://github.com/microsoft/winget-cli/discussions