1
0
mirror of https://github.com/tw93/Mole.git synced 2026-03-22 20:50:06 +00:00
Files
Mole/RELEASE.md
2026-03-21 19:22:49 +08:00

10 KiB

Mole Windows - Release Guide

This guide explains how to build and publish Mole for Windows package managers.

Prerequisites

Required Tools

  1. PowerShell 5.1+

    • Already included in Windows 10/11
    • Verify: $PSVersionTable.PSVersion
  2. Go 1.21+

  3. Git

Optional Tools (for specific build types)

  1. WiX Toolset (for MSI installer)

    choco install wixtoolset
    # Or download from: https://wixtoolset.org/
    
  2. PS2EXE (for standalone EXE)

    Install-Module ps2exe -Scope CurrentUser
    

Build Commands

Quick Start - Build Everything

# Build portable ZIP and checksums
.\scripts\build-release.ps1

# Optionally build MSI (requires WiX)
.\scripts\build-msi.ps1

# Optionally build standalone EXE (requires PS2EXE)
.\scripts\build-exe.ps1

Build Options

# Specify version explicitly
.\scripts\build-release.ps1 -Version "1.2.3"

# Skip running tests
.\scripts\build-release.ps1 -SkipTests

# Show help
.\scripts\build-release.ps1 -ShowHelp

Release Artifacts

After building, the release/ directory will contain:

release/
├── mole-1.0.0-x64.zip          # Portable archive (required)
├── mole-1.0.0-x64.msi          # MSI installer (optional)
├── mole-1.0.0-x64.exe          # Standalone EXE (optional)
└── SHA256SUMS.txt               # Checksums for verification

Publishing to Package Managers

1. WinGet (Highest Priority)

Requirements:

  • GitHub release with ZIP or MSI
  • SHA256 hash
  • Fork of microsoft/winget-pkgs

Steps:

  1. Create GitHub release:

    # Tag the release
    git tag v1.0.0
    git push origin v1.0.0
    
    # Or use GitHub CLI
    gh release create v1.0.0 `
      release/mole-1.0.0-x64.zip `
      release/SHA256SUMS.txt `
      --title "Mole v1.0.0" `
      --notes "Release notes here"
    
  2. Install winget-create:

    winget install Microsoft.WingetCreate
    
  3. Generate manifests:

    # For new package
    wingetcreate new `
      --token YOUR_GITHUB_TOKEN `
      --urls https://github.com/bhadraagada/mole/releases/download/v1.0.0/mole-1.0.0-x64.zip
    
    # For updates
    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
    
  4. Manually submit (alternative):

    # Fork 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 template manifests (see templates/ below)
    # Then commit and create PR
    git add manifests/b/bhadraagada/mole/
    git commit -m "New package: bhadraagada.mole version 1.0.0"
    git push
    
    # Create PR to microsoft/winget-pkgs
    

WinGet Manifest Template:

Create these files in manifests/b/bhadraagada/mole/1.0.0/:

bhadraagada.mole.yaml:

PackageIdentifier: bhadraagada.mole
PackageVersion: 1.0.0
DefaultLocale: en-US
ManifestType: version
ManifestVersion: 1.4.0

bhadraagada.mole.locale.en-US.yaml:

PackageIdentifier: bhadraagada.mole
PackageVersion: 1.0.0
PackageLocale: en-US
Publisher: Mole Project
PublisherUrl: https://github.com/bhadraagada/mole
PublisherSupportUrl: https://github.com/bhadraagada/mole/issues
PackageName: Mole
PackageUrl: https://github.com/bhadraagada/mole
License: MIT
LicenseUrl: https://github.com/bhadraagada/mole/blob/windows/LICENSE
ShortDescription: Deep clean and optimize your Windows system
Description: |
  All-in-one toolkit combining CCleaner, IObit Uninstaller, WinDirStat, 
  and Task Manager functionality for comprehensive Windows system 
  optimization and cleanup.
Moniker: mole
Tags:
  - cleanup
  - optimizer
  - maintenance
  - disk-space
  - uninstaller
  - system-tools
ManifestType: defaultLocale
ManifestVersion: 1.4.0

bhadraagada.mole.installer.yaml:

PackageIdentifier: bhadraagada.mole
PackageVersion: 1.0.0
InstallerLocale: en-US
MinimumOSVersion: 10.0.0.0
InstallerType: zip
NestedInstallerType: portable
NestedInstallerFiles:
  - RelativeFilePath: mole.ps1
    PortableCommandAlias: mole
Installers:
  - Architecture: x64
    InstallerUrl: https://github.com/bhadraagada/mole/releases/download/v1.0.0/mole-1.0.0-x64.zip
    InstallerSha256: YOUR_SHA256_HERE
ManifestType: installer
ManifestVersion: 1.4.0

2. Chocolatey

Requirements:

  • Chocolatey account
  • .nuspec manifest
  • PowerShell install/uninstall scripts

Steps:

  1. Register at https://community.chocolatey.org/

  2. Create package structure:

    mkdir chocolatey
    cd chocolatey
    
  3. Create mole.nuspec:

    <?xml version="1.0" encoding="utf-8"?>
    <package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
      <metadata>
        <id>mole</id>
        <version>1.0.0</version>
        <title>Mole</title>
        <authors>Mole Project</authors>
        <owners>bhadraagada</owners>
        <licenseUrl>https://github.com/bhadraagada/mole/blob/windows/LICENSE</licenseUrl>
        <projectUrl>https://github.com/bhadraagada/mole</projectUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Deep clean and optimize your Windows system. All-in-one toolkit for system maintenance.</description>
        <summary>Windows system cleanup and optimization tool</summary>
        <releaseNotes>https://github.com/bhadraagada/mole/releases</releaseNotes>
        <copyright>MIT License</copyright>
        <tags>cleanup optimization disk-space uninstaller maintenance</tags>
        <packageSourceUrl>https://github.com/bhadraagada/mole</packageSourceUrl>
        <docsUrl>https://github.com/bhadraagada/mole/blob/windows/README.md</docsUrl>
        <bugTrackerUrl>https://github.com/bhadraagada/mole/issues</bugTrackerUrl>
      </metadata>
      <files>
        <file src="tools\**" target="tools" />
      </files>
    </package>
    
  4. Create tools/chocolateyinstall.ps1:

    $ErrorActionPreference = 'Stop'
    
    $packageName = 'mole'
    $url64 = 'https://github.com/bhadraagada/mole/releases/download/v1.0.0/mole-1.0.0-x64.zip'
    $checksum64 = 'YOUR_SHA256_HERE'
    $checksumType = 'sha256'
    $toolsDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
    
    Install-ChocolateyZipPackage `
      -PackageName $packageName `
      -Url64bit $url64 `
      -UnzipLocation $toolsDir `
      -Checksum64 $checksum64 `
      -ChecksumType64 $checksumType
    
    # Add to PATH
    $installDir = Join-Path $toolsDir "mole-1.0.0-x64"
    Install-ChocolateyPath -PathToInstall $installDir -PathType 'User'
    
    Write-Host "Mole has been installed successfully!"
    Write-Host "Run 'mole' to get started"
    
  5. Create tools/chocolateyuninstall.ps1:

    $ErrorActionPreference = 'Stop'
    
    $toolsDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
    $installDir = Join-Path $toolsDir "mole-1.0.0-x64"
    
    # Remove from PATH
    Uninstall-ChocolateyPath -PathToUninstall $installDir -PathType 'User'
    
    Write-Host "Mole has been uninstalled"
    
  6. Build and push:

    # Test locally first
    choco pack
    choco install mole -source . -y
    
    # Push to Chocolatey
    choco apikey --key YOUR_API_KEY --source https://push.chocolatey.org/
    choco push mole.1.0.0.nupkg --source https://push.chocolatey.org/
    

3. Scoop (Easiest!)

Requirements:

  • Fork of ScoopInstaller/Main
  • Simple JSON manifest

Steps:

  1. Fork https://github.com/ScoopInstaller/Main

  2. Create bucket/mole.json:

    {
      "version": "1.0.0",
      "description": "Deep clean and optimize your Windows system",
      "homepage": "https://github.com/bhadraagada/mole",
      "license": "MIT",
      "url": "https://github.com/bhadraagada/mole/releases/download/v1.0.0/mole-1.0.0-x64.zip",
      "hash": "sha256:YOUR_SHA256_HERE",
      "extract_dir": "mole-1.0.0-x64",
      "bin": "mole.ps1",
      "shortcuts": [
        [
          "mole.ps1",
          "Mole"
        ]
      ],
      "checkver": {
        "github": "https://github.com/bhadraagada/mole"
      },
      "autoupdate": {
        "url": "https://github.com/bhadraagada/mole/releases/download/v$version/mole-$version-x64.zip"
      }
    }
    
  3. Submit PR:

    git clone https://github.com/YOUR_USERNAME/Main scoop-main
    cd scoop-main
    
    # Add manifest
    copy path\to\mole.json bucket\
    
    # Commit and push
    git add bucket/mole.json
    git commit -m "mole: Add version 1.0.0"
    git push
    
    # Create PR to ScoopInstaller/Main
    

Automated Releases (GitHub Actions)

The repository includes a GitHub Actions workflow for automated releases.

Trigger a release:

# Push a version tag
git tag v1.0.0
git push origin v1.0.0

# The workflow will automatically:
# 1. Run tests
# 2. Build release artifacts
# 3. Create GitHub release
# 4. Upload ZIP and checksums

Manual trigger:

Go to Actions → Build Windows Release → Run workflow

Testing Releases Locally

# Extract ZIP
Expand-Archive release/mole-1.0.0-x64.zip -DestinationPath test-install

# Test installation
cd test-install/mole-1.0.0-x64
powershell -ExecutionPolicy Bypass -File .\install.ps1

# Verify mole works
mole --version
mole clean --dry-run

# Test MSI (if built)
msiexec /i release/mole-1.0.0-x64.msi /qn

Verification

Users can verify downloads using SHA256SUMS.txt:

# Download the release and checksums
$hash = (Get-FileHash mole-1.0.0-x64.zip).Hash
$expected = (Get-Content SHA256SUMS.txt | Select-String "mole-1.0.0-x64.zip").Line.Split()[0]

if ($hash -eq $expected) {
    Write-Host "✓ Checksum verified!" -ForegroundColor Green
} else {
    Write-Host "✗ Checksum mismatch!" -ForegroundColor Red
}

Troubleshooting

Build fails with "Go not found"

Install Go from https://golang.org/dl/ and restart PowerShell

WiX build fails

Ensure WiX Toolset is installed and in PATH:

choco install wixtoolset

Tests fail

Run tests manually to debug:

.\scripts\test.ps1

GitHub Actions workflow fails

Check the logs in the Actions tab. Common issues:

  • Missing secrets (GITHUB_TOKEN is automatic)
  • Wrong branch/tag format
  • Test failures

Support