184 lines
6.9 KiB
YAML
184 lines
6.9 KiB
YAML
name: Winget Submit
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
workflow_call:
|
|
inputs:
|
|
tag:
|
|
description: Release tag to submit, for example v0.9.6
|
|
required: true
|
|
type: string
|
|
secrets:
|
|
WINGET_CREATE_GITHUB_TOKEN:
|
|
required: true
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: Release tag to submit, for example v0.9.6
|
|
required: true
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: winget-submit-${{ github.event_name == 'release' && github.event.release.tag_name || inputs.tag }}
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
submit:
|
|
if: github.event_name != 'release' || startsWith(github.event.release.tag_name, 'v')
|
|
runs-on: windows-latest
|
|
|
|
env:
|
|
PACKAGE_ID: Hanselman.PeekDesktop
|
|
APP_NAME: PeekDesktop
|
|
COMMAND_ALIAS: peekdesktop
|
|
WINGET_CREATE_GITHUB_TOKEN: ${{ secrets.WINGET_CREATE_GITHUB_TOKEN }}
|
|
GH_TOKEN: ${{ github.token }}
|
|
|
|
steps:
|
|
- name: Resolve release
|
|
shell: pwsh
|
|
run: |
|
|
$tag = if ("${{ github.event_name }}" -eq "release") {
|
|
"${{ github.event.release.tag_name }}"
|
|
} else {
|
|
"${{ inputs.tag }}"
|
|
}
|
|
|
|
if ([string]::IsNullOrWhiteSpace($tag)) {
|
|
throw "A release tag is required."
|
|
}
|
|
|
|
if (!$tag.StartsWith("v", [StringComparison]::OrdinalIgnoreCase)) {
|
|
throw "Release tag '$tag' must start with v."
|
|
}
|
|
|
|
$version = $tag.TrimStart("v")
|
|
"TAG=$tag" >> $env:GITHUB_ENV
|
|
"VERSION=$version" >> $env:GITHUB_ENV
|
|
"RELEASE_URL=https://github.com/${{ github.repository }}/releases/tag/$tag" >> $env:GITHUB_ENV
|
|
|
|
- name: Download release assets
|
|
shell: pwsh
|
|
run: |
|
|
$baseUrl = "https://github.com/${{ github.repository }}/releases/download/$env:TAG"
|
|
$assets = @(
|
|
@{ Name = "$env:APP_NAME-$env:TAG-win-x64.zip"; EnvName = "X64_SHA256" },
|
|
@{ Name = "$env:APP_NAME-$env:TAG-win-arm64.zip"; EnvName = "ARM64_SHA256" }
|
|
)
|
|
|
|
New-Item -ItemType Directory -Path ".winget-assets" -Force | Out-Null
|
|
foreach ($asset in $assets) {
|
|
$url = "$baseUrl/$($asset.Name)"
|
|
$path = Join-Path ".winget-assets" $asset.Name
|
|
Invoke-WebRequest -Uri $url -OutFile $path
|
|
|
|
$file = Get-Item $path
|
|
if ($file.Length -le 0) {
|
|
throw "Downloaded asset '$($asset.Name)' is empty."
|
|
}
|
|
|
|
$hash = (Get-FileHash -Algorithm SHA256 -Path $path).Hash
|
|
"$($asset.EnvName)=$hash" >> $env:GITHUB_ENV
|
|
}
|
|
|
|
- name: Create manifest
|
|
shell: pwsh
|
|
run: |
|
|
$manifestRoot = Join-Path "winget-manifest" "manifests/h/Hanselman/PeekDesktop/$env:VERSION"
|
|
New-Item -ItemType Directory -Path $manifestRoot -Force | Out-Null
|
|
|
|
$release = gh release view $env:TAG --repo $env:GITHUB_REPOSITORY --json publishedAt | ConvertFrom-Json
|
|
$releaseDate = ([DateTime]$release.publishedAt).ToUniversalTime().ToString("yyyy-MM-dd")
|
|
$baseUrl = "https://github.com/$env:GITHUB_REPOSITORY/releases/download/$env:TAG"
|
|
$x64Url = "$baseUrl/$env:APP_NAME-$env:TAG-win-x64.zip"
|
|
$arm64Url = "$baseUrl/$env:APP_NAME-$env:TAG-win-arm64.zip"
|
|
|
|
@"
|
|
# yaml-language-server: `$schema=https://aka.ms/winget-manifest.version.1.10.0.schema.json
|
|
|
|
PackageIdentifier: $env:PACKAGE_ID
|
|
PackageVersion: $env:VERSION
|
|
DefaultLocale: en-US
|
|
ManifestType: version
|
|
ManifestVersion: 1.10.0
|
|
"@ -replace "^[ \t]{10}", "" | Set-Content -Path (Join-Path $manifestRoot "$env:PACKAGE_ID.yaml") -Encoding utf8NoBOM
|
|
|
|
@"
|
|
# yaml-language-server: `$schema=https://aka.ms/winget-manifest.defaultLocale.1.10.0.schema.json
|
|
|
|
PackageIdentifier: $env:PACKAGE_ID
|
|
PackageVersion: $env:VERSION
|
|
PackageLocale: en-US
|
|
Publisher: Scott Hanselman
|
|
PublisherUrl: https://www.hanselman.com/
|
|
PublisherSupportUrl: https://github.com/$env:GITHUB_REPOSITORY/issues
|
|
Author: Scott Hanselman
|
|
PackageName: PeekDesktop
|
|
PackageUrl: https://github.com/$env:GITHUB_REPOSITORY
|
|
License: MIT
|
|
LicenseUrl: https://github.com/$env:GITHUB_REPOSITORY/blob/main/LICENSE
|
|
Copyright: Copyright (c) 2026 Scott Hanselman
|
|
ShortDescription: Click desktop wallpaper or taskbar space to reveal your desktop.
|
|
Description: PeekDesktop brings macOS Sonoma-style click-to-reveal-desktop behavior to Windows, with tray options for desktop clicks, taskbar clicks, double-click activation, and Explorer or fly-away peek styles.
|
|
Moniker: peekdesktop
|
|
Tags:
|
|
- desktop
|
|
- productivity
|
|
- show-desktop
|
|
- taskbar
|
|
- windows
|
|
ReleaseNotesUrl: $env:RELEASE_URL
|
|
ManifestType: defaultLocale
|
|
ManifestVersion: 1.10.0
|
|
"@ -replace "^[ \t]{10}", "" | Set-Content -Path (Join-Path $manifestRoot "$env:PACKAGE_ID.locale.en-US.yaml") -Encoding utf8NoBOM
|
|
|
|
@"
|
|
# yaml-language-server: `$schema=https://aka.ms/winget-manifest.installer.1.10.0.schema.json
|
|
|
|
PackageIdentifier: $env:PACKAGE_ID
|
|
PackageVersion: $env:VERSION
|
|
InstallerType: zip
|
|
NestedInstallerType: portable
|
|
UpgradeBehavior: uninstallPrevious
|
|
Commands:
|
|
- $env:COMMAND_ALIAS
|
|
Installers:
|
|
- Architecture: x64
|
|
NestedInstallerFiles:
|
|
- RelativeFilePath: PeekDesktop.exe
|
|
PortableCommandAlias: $env:COMMAND_ALIAS
|
|
InstallerUrl: $x64Url
|
|
InstallerSha256: $env:X64_SHA256
|
|
- Architecture: arm64
|
|
NestedInstallerFiles:
|
|
- RelativeFilePath: PeekDesktop.exe
|
|
PortableCommandAlias: $env:COMMAND_ALIAS
|
|
InstallerUrl: $arm64Url
|
|
InstallerSha256: $env:ARM64_SHA256
|
|
ManifestType: installer
|
|
ManifestVersion: 1.10.0
|
|
ReleaseDate: $releaseDate
|
|
"@ -replace "^[ \t]{10}", "" | Set-Content -Path (Join-Path $manifestRoot "$env:PACKAGE_ID.installer.yaml") -Encoding utf8NoBOM
|
|
|
|
"MANIFEST_ROOT=$manifestRoot" >> $env:GITHUB_ENV
|
|
|
|
- name: Download WingetCreate
|
|
shell: pwsh
|
|
run: Invoke-WebRequest https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe
|
|
|
|
- name: Submit manifest
|
|
shell: pwsh
|
|
run: |
|
|
if ([string]::IsNullOrWhiteSpace($env:WINGET_CREATE_GITHUB_TOKEN)) {
|
|
throw "Set the WINGET_CREATE_GITHUB_TOKEN repository secret before submitting Winget manifests."
|
|
}
|
|
|
|
.\wingetcreate.exe submit `
|
|
--prtitle "New version: $env:PACKAGE_ID version $env:VERSION" `
|
|
--token $env:WINGET_CREATE_GITHUB_TOKEN `
|
|
--no-open `
|
|
$env:MANIFEST_ROOT
|