diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0a84d141..15ca0911 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -945,81 +945,3 @@ jobs: else echo "note: AUR_SSH_PRIVATE_KEY not set; skipping automated AUR publish" fi - - - # ------------------------------------------------------------- Chocolatey - # - # Its own job, on a Windows runner, because `choco pack` and `choco push` - # need Chocolatey itself. scripts/update-choco.sh bumps packaging/choco to - # the release (version, x64 + ARM64 installer URLs and their SHA256s from - # the freshly built installers), packs it and pushes the .nupkg to the - # community repository. It then opens a pull request carrying that bump so - # packageSourceUrl on main matches what the moderators see: main cannot be - # pushed directly, its ruleset requires the CI status checks. - publish-choco: - name: Publish to Chocolatey - runs-on: windows-latest - needs: [verify-version, release] - if: github.ref_type == 'tag' && needs.verify-version.outputs.prerelease == 'false' - permissions: - contents: write - pull-requests: write - env: - VERSION: ${{ needs.verify-version.outputs.version }} - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Download Windows installers - uses: actions/download-artifact@v4 - with: - pattern: hydra-windows-* - path: dist - merge-multiple: true - - - name: Bump, pack and push package - shell: bash - env: - CHOCO_API_KEY: ${{ secrets.CHOCO_API_KEY }} - run: | - set -euo pipefail - if [ -z "${CHOCO_API_KEY:-}" ]; then - echo "note: CHOCO_API_KEY not set; skipping Chocolatey publish" - echo "published=false" >> "$GITHUB_OUTPUT" - exit 0 - fi - ls -lh dist/ - scripts/update-choco.sh "$VERSION" dist --push - echo "published=true" >> "$GITHUB_OUTPUT" - id: push - - # The bump is re-applied on top of origin/main rather than carried - # over from the tag's tree, so the PR only ever touches the four - # values that changed. Force-push, since a re-run of the release - # recreates the same branch. - - name: Open pull request with the package bump - if: steps.push.outputs.published == 'true' - shell: bash - env: - GH_TOKEN: ${{ github.token }} - run: | - set -euo pipefail - BRANCH="chore/choco-v${VERSION}" - git checkout -- packaging/choco - git fetch origin main - git checkout -B "$BRANCH" origin/main - scripts/update-choco.sh "$VERSION" dist - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git add packaging/choco - if git diff --staged --quiet; then - echo "main already carries the Chocolatey bump for v${VERSION}" - exit 0 - fi - git commit -m "chore(choco): bump to v${VERSION}" - git push --force origin "$BRANCH" - if [ -z "$(gh pr list --head "$BRANCH" --base main --state open --json number --jq '.[].number')" ]; then - gh pr create --base main --head "$BRANCH" \ - --title "chore(choco): bump to v${VERSION}" \ - --body "Chocolatey package bumped to v${VERSION} by the release workflow: version, x64 + ARM64 installer URLs and SHA256 checksums in \`packaging/choco\`. The matching \`hydra-download-manager.${VERSION}.nupkg\` was pushed to the community repository." - fi diff --git a/packaging/choco/ReadMe.md b/packaging/choco/ReadMe.md deleted file mode 100644 index 9294398d..00000000 --- a/packaging/choco/ReadMe.md +++ /dev/null @@ -1,133 +0,0 @@ -## Summary -How do I create packages? See https://docs.chocolatey.org/en-us/create/create-packages - -If you are submitting packages to the community feed (https://community.chocolatey.org) -always try to ensure you have read, understood and adhere to the create -packages wiki link above. - -## Automatic Packaging Updates? -Consider making this package an automatic package, for the best -maintainability over time. Read up at https://docs.chocolatey.org/en-us/create/automatic-packages - -## Shim Generation -Any executables you include in the package or download (but don't call -install against using the built-in functions) will be automatically shimmed. - -This means those executables will automatically be included on the path. -Shim generation runs whether the package is self-contained or uses automation -scripts. - -By default, these are considered console applications. - -If the application is a GUI, you should create an empty file next to the exe -named 'name.exe.gui' e.g. 'bob.exe' would need a file named 'bob.exe.gui'. -See https://docs.chocolatey.org/en-us/create/create-packages#how-do-i-set-up-shims-for-applications-that-have-a-gui - -If you want to ignore the executable, create an empty file next to the exe -named 'name.exe.ignore' e.g. 'bob.exe' would need a file named -'bob.exe.ignore'. -See https://docs.chocolatey.org/en-us/create/create-packages#how-do-i-exclude-executables-from-getting-shims - -## Self-Contained? -If you have a self-contained package, you can remove the automation scripts -entirely and just include the executables, they will automatically get shimmed, -which puts them on the path. Ensure you have the legal right to distribute -the application though. See https://docs.chocolatey.org/en-us/information/legal. - -You should read up on the Shim Generation section to familiarize yourself -on what to do with GUI applications and/or ignoring shims. - -## Automation Scripts -You have a powerful use of Chocolatey, as you are using PowerShell. So you -can do just about anything you need. Choco has some very handy built-in -functions that you can use, these are sometimes called the helpers. - -### Built-In Functions -https://docs.chocolatey.org/en-us/create/functions - -A note about a couple: -* Get-ToolsLocation - used to get you the 'tools' root, which by default is set to 'c:\tools', not the chocolateyInstall bin folder - see https://docs.chocolatey.org/en-us/create/functions/get-toolslocation -* Install-BinFile - used for non-exe files - executables are automatically shimmed... - see https://docs.chocolatey.org/en-us/create/functions/install-binfile -* Uninstall-BinFile - used for non-exe files - executables are automatically shimmed - see https://docs.chocolatey.org/en-us/create/functions/uninstall-binfile - -### Getting package specific information -Use the package parameters pattern - see https://docs.chocolatey.org/en-us/guides/create/parse-packageparameters-argument - -### Need to mount an ISO? -https://docs.chocolatey.org/en-us/guides/create/mount-an-iso-in-chocolatey-package - -### Environment Variables -Chocolatey makes a number of environment variables available (You can access any of these with $env:TheVariableNameBelow): - - * TEMP/TMP - Overridden to the CacheLocation, but may be the same as the original TEMP folder - * ChocolateyInstall - Top level folder where Chocolatey is installed - * chocolateyPackageName - The name of the package, equivalent to the `` field in the nuspec - * chocolateyPackageTitle - The title of the package, equivalent to the `` field in the nuspec - * chocolateyPackageVersion - The normalized version of the package, equivalent to a normalized edition of the `<version />` field in the nuspec - * chocolateyPackageFolder - The top level location of the package folder - the folder where Chocolatey has downloaded and extracted the NuGet package, typically `C:\ProgramData\chocolatey\lib\packageName`. - -#### Advanced Environment Variables -The following are more advanced settings: - - * chocolateyPackageParameters - Parameters to use with packaging, not the same as install arguments (which are passed directly to the native installer). Based on `--package-parameters`. - * CHOCOLATEY_VERSION - The version of Choco you normally see. Use if you are 'lighting' things up based on choco version. Otherwise take a dependency on the specific version you need. - * chocolateyForceX86 = If available and set to 'true', then user has requested 32bit version. Automatically handled in built in Choco functions. - * OS_PLATFORM - Like Windows, macOS, Linux. - * OS_VERSION - The version of OS, like 10.0 something something for Windows. - * OS_NAME - The reported name of the OS. - * USER_NAME = The user name - * USER_DOMAIN = The user domain name (could also be local computer name) - * IS_PROCESSELEVATED = Is the process elevated? - * IS_SYSTEM = Is the user the system account? - * IS_REMOTEDESKTOP = Is the user in a terminal services session? - * ChocolateyToolsLocation - formerly 'ChocolateyBinRoot' ('ChocolateyBinRoot' will be removed with Chocolatey v2.0.0), this is where tools being installed outside of Chocolatey packaging will go. - -#### Set By Options and Configuration -Some environment variables are set based on options that are passed, configuration and/or features that are turned on: - - * ChocolateyEnvironmentDebug - Was `--debug` passed? If using the built-in PowerShell host, this is always true (but only logs debug messages to console if `--debug` was passed) - * ChocolateyEnvironmentVerbose - Was `--verbose` passed? If using the built-in PowerShell host, this is always true (but only logs verbose messages to console if `--verbose` was passed). - * ChocolateyExitOnRebootDetected - Are we exiting on a detected reboot? Set by ` --exit-when-reboot-detected` or the feature `exitOnRebootDetected` - * ChocolateyForce - Was `--force` passed? - * chocolateyForceX86 - Was `-x86` passed? - * chocolateyRequestTimeout - How long before a web request will time out. Set by config `webRequestTimeoutSeconds` - * chocolateyResponseTimeout - How long to wait for a download to complete? Set by config `commandExecutionTimeoutSeconds` - * ChocolateyPowerShellHost - Are we using the built-in PowerShell host? Set by `--use-system-powershell` or the feature `powershellHost` - -#### Business Edition Variables - - * ChocolateyInstallArgumentsSensitive - Encrypted arguments passed from command line `--install-arguments-sensitive` that are not logged anywhere. - * ChocolateyPackageParametersSensitive - Package parameters passed from command line `--package-parameters-sensitive` that are not logged anywhere. - * ChocolateyLicensedVersion - What version is the licensed edition on? - * ChocolateyLicenseType - What edition / type of the licensed edition is installed? - * USER_CONTEXT - The original user context - different when self-service is used (Licensed) - -#### Experimental Environment Variables -The following are experimental or use not recommended: - - * OS_IS64BIT = This may not return correctly - it may depend on the process the app is running under - * CHOCOLATEY_VERSION_PRODUCT = the version of Choco that may match CHOCOLATEY_VERSION but may be different - based on git describe - * IS_ADMIN = Is the user an administrator? But doesn't tell you if the process is elevated. - * IS_REMOTE = Is the user in a remote session? - -#### Not Useful Or Anti-Pattern If Used - - * chocolateyInstallOverride = Not for use in package automation scripts. Based on `--override-arguments` being passed. - * chocolateyInstallArguments = The installer arguments meant for the native installer. You should use chocolateyPackageParameters instead. Based on `--install-arguments` being passed. - * ChocolateyIgnoreChecksums - Was `--ignore-checksums` passed or the feature `checksumFiles` turned off? - * ChocolateyAllowEmptyChecksums - Was `--allow-empty-checksums` passed or the feature `allowEmptyChecksums` turned on? - * ChocolateyAllowEmptyChecksumsSecure - Was `--allow-empty-checksums-secure` passed or the feature `allowEmptyChecksumsSecure` turned on? - * chocolateyChecksum32 - Was `--download-checksum` passed? - * chocolateyChecksumType32 - Was `--download-checksum-type` passed? - * chocolateyChecksum64 - Was `--download-checksum-x64` passed? - * chocolateyChecksumType64 - Was `--download-checksum-type-x64` passed? - * ChocolateyExitCode - The exit code of the script that just ran - usually set by `Set-PowerShellExitCode` - * ChocolateyLastPathUpdate - Set by Chocolatey as part of install, but not used for anything in particular in packaging. - * chocolateyProxyLocation - The explicit proxy location as set in the configuration `proxy` - * ChocolateyDownloadCache - Use available download cache? Set by `--skip-download-cache`, `--use-download-cache`, or feature `downloadCache` - * chocolateyProxyBypassList - Explicitly set locations to ignore in configuration `proxyBypassList` - * chocolateyProxyBypassOnLocal - Should the proxy bypass on local connections? Set based on configuration `proxyBypassOnLocal` - * http_proxy - Set by original `http_proxy` passthrough, or same as `chocolateyProxyLocation` if explicitly set. - * https_proxy - Set by original `https_proxy` passthrough, or same as `chocolateyProxyLocation` if explicitly set. - * no_proxy - Set by original `no_proxy` passthrough, or same as `chocolateyProxyBypassList` if explicitly set. - diff --git a/packaging/choco/_TODO.txt b/packaging/choco/_TODO.txt deleted file mode 100644 index 50bca03a..00000000 --- a/packaging/choco/_TODO.txt +++ /dev/null @@ -1,131 +0,0 @@ -TODO - -1. Determine Package Use: - - Organization? Internal Use? - You are not subject to distribution - rights when you keep everything internal. Put the binaries directly - into the tools directory (as long as total nupkg size is under 1GB). - When bigger, look to use from a share or download binaries from an - internal location. Embedded binaries makes for the most reliable use - of Chocolatey. Use `$fileLocation` (`$file`/`$file64`) and - `Install-ChocolateyInstallPackage`/`Get-ChocolateyUnzip` in - tools\chocolateyInstall.ps1. - - You can also choose to download from internal urls, see the next - section, but ignore whether you have distribution rights or not, it - doesn't apply. Under no circumstances should download from the - internet, it is completely unreliable. See - https://docs.chocolatey.org/en-us/community-repository/community-packages-disclaimer - to understand the limitations of a publicly available repository. - - Community Repository? - Have Distribution Rights? - If you are the software vendor OR the software EXPLICITLY allows - redistribution and the total nupkg size will be under 200MB, you - have the option to embed the binaries directly into the package to - provide the most reliable install experience. Put the binaries - directly into the tools folder, use `$fileLocation` (`$file`/ - `$file64`) and `Install-ChocolateyInstallPackage`/ - `Get-ChocolateyUnzip` in tools\chocolateyInstall.ps1. Additionally, - fill out the LICENSE and VERIFICATION file (see 3 below and those - files for specifics). - - NOTE: You can choose to download binaries at runtime, but be sure - the download location will remain stable. See the next section. - - Do Not Have Distribution Rights? - - Note: Packages built this way cannot be 100% reliable, but it's a - constraint of publicly available packages and there is little - that can be done to change that. See - https://docs.chocolatey.org/en-us/community-repository/community-packages-disclaimer - to better understand the limitations of a publicly available - repository. - Download Location is Publicly Available? - You will need to download the runtime files from their official - location at runtime. Use `$url`/`$url64` and - `Install-ChocolateyPackage`/`Install-ChocolateyZipPackage` in - tools\chocolateyInstall.ps1. - Download Location is Not Publicly Available? - Stop here, you can't push this to the community repository. You - can ask the vendor for permission to embed, then include a PDF of - that signed permission directly in the package. Otherwise you - will need to seek alternate locations to non-publicly host the - package. - Download Location Is Same For All Versions? - You still need to point to those urls, but you may wish to set up - something like Automatic Updater (AU) so that when a new version - of the software becomes available, the new package version - automatically gets pushed up to the community repository. See - https://docs.chocolatey.org/en-us/create/automatic-packages#automatic-updater-au - -2. Determine Package Type: - -- Installer Package - contains an installer (everything in template is - geared towards this type of package) -- Zip Package - downloads or embeds and unpacks archives, may unpack - and run an installer using `Install-ChocolateyInstallPackage` as a - secondary step. -- Portable Package - Contains runtime binaries (or unpacks them as a - zip package) - cannot require administrative permissions to install - or use -- Config Package - sets config like files, registry keys, etc -- Extension Package - Packages that add PowerShell functions to - Chocolatey - https://docs.chocolatey.org/en-us/features/extensions -- Template Package - Packages that add templates like this for `choco - new -t=name` - https://docs.chocolatey.org/en-us/guides/create/create-custom-package-templates -- Other - there are other types of packages as well, these are the main - package types seen in the wild - -3. Fill out the package contents: - -- tools\chocolateyBeforeModify.ps1 - remove if you have no processes - or services to shut down before upgrade/uninstall -- tools\LICENSE.txt / tools\VERIFICATION.txt - Remove if you are not - embedding binaries. Keep and fill out if you are embedding binaries - in the package AND pushing to the community repository, even if you - are the author of software. The file becomes easier to fill out - (does not require changes each version) if you are the software - vendor. If you are building packages for internal use (organization, - etc), you don't need these files as you are not subject to - distribution rights internally. -- tools\chocolateyUninstall.ps1 - remove if autouninstaller can - automatically uninstall and you have nothing additional to do during - uninstall -- Readme.txt - delete this file once you have read over and used - anything you've needed from here -- nuspec - fill this out, then clean out all the comments (you may wish - to leave the headers for the package vs software metadata) -- tools\chocolateyInstall.ps1 - instructions in next section. - -4. ChocolateyInstall.ps1: - -- For embedded binaries - use `$fileLocation` (`$file`/`$file64`) and - `Install-ChocolateyInstallPackage`/ `Get-ChocolateyUnzip`. -- Downloading binaries at runtime - use `$url`/`$url64` and - `Install-ChocolateyPackage` / `Install-ChocolateyZipPackage`. -- Other needs (creating files, setting registry keys), use regular - PowerShell to do so or see if there is a function already defined: - https://docs.chocolatey.org/en-us/create/functions -- There may also be functions available in extension packages, see - https://community.chocolatey.org/packages?q=id%3A.extension for examples and - availability. -- Clean out the comments and sections you are not using. - -5. Test the package to ensure install/uninstall work appropriately. - There is a test environment you can use for this - - https://github.com/chocolatey/chocolatey-test-environment - -6. Learn more about Chocolatey packaging - go through the workshop at - https://github.com/chocolatey/chocolatey-workshop - You will learn about - - General packaging - - Customizing package behavior at runtime (package parameters) - - Extension packages - - Custom packaging templates - - Setting up an internal Chocolatey.Server repository - - Adding and using internal repositories - - Reporting - - Advanced packaging techniques when installers are not friendly to - automation - -7. Delete this file. diff --git a/packaging/choco/hydra-download-manager.nuspec b/packaging/choco/hydra-download-manager.nuspec deleted file mode 100644 index 56038f94..00000000 --- a/packaging/choco/hydra-download-manager.nuspec +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd"> - <metadata> - <!-- Package Info --> - <id>hydra-download-manager</id> - <version>0.4.1</version> - <packageSourceUrl>https://github.com/ja7ad/hydra/tree/main/packaging/choco</packageSourceUrl> - <owners>ja7ad</owners> - - <!-- Software Specific Info --> - <title>Hydra Download Manager - Javad Rajabzadeh - https://github.com/ja7ad/hydra - https://raw.githubusercontent.com/ja7ad/hydra/refs/heads/main/docs/logo.png - https://github.com/ja7ad/hydra/blob/main/LICENSE - false - https://github.com/ja7ad/hydra/blob/main/README.md - https://github.com/ja7ad/hydra/issues - hydra download-manager accelerator network cli gui rust - Multi-connection download accelerator and manager written in Rust - - https://github.com/ja7ad/hydra/releases/tag/v0.4.1 - - - - - \ No newline at end of file diff --git a/packaging/choco/tools/LICENSE.txt b/packaging/choco/tools/LICENSE.txt deleted file mode 100644 index 523aa0d9..00000000 --- a/packaging/choco/tools/LICENSE.txt +++ /dev/null @@ -1,19 +0,0 @@ -From: https://github.com/ja7ad/hydra/blob/main/LICENSE - -GNU GENERAL PUBLIC LICENSE -Version 3, 29 June 2007 - -Copyright (C) 2026 Javad Rajabzadeh - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . \ No newline at end of file diff --git a/packaging/choco/tools/VERIFICATION.txt b/packaging/choco/tools/VERIFICATION.txt deleted file mode 100644 index e9011864..00000000 --- a/packaging/choco/tools/VERIFICATION.txt +++ /dev/null @@ -1,21 +0,0 @@ -VERIFICATION -Verification is intended to assist the Chocolatey moderators and community -in verifying that this package's contents are trustworthy. - -The package maintainer is the author of Hydra. The binaries are downloaded directly from the official upstream GitHub releases: -https://github.com/ja7ad/hydra/releases/tag/v0.4.1 - -1. Download the installers from the official GitHub Release assets: - - x64: https://github.com/ja7ad/hydra/releases/download/v0.4.1/hydra-0.4.1-windows-x64-setup.exe - - ARM64: https://github.com/ja7ad/hydra/releases/download/v0.4.1/hydra-0.4.1-windows-arm64-setup.exe - -2. Verify the SHA256 checksums in PowerShell: - Get-FileHash -Algorithm SHA256 .\hydra-0.4.1-windows-x64-setup.exe - Get-FileHash -Algorithm SHA256 .\hydra-0.4.1-windows-arm64-setup.exe - -3. Compare the results with the expected values below, which are the same - ones pinned in 'tools/chocolateyinstall.ps1': - - x64: F595A13FC771F4695368452C9A208FE32A7465B9C57502E602E745F5162BAF2B - - ARM64: 347E2F01774E3AEE16B2DF461F01E9DBF63925FFD51BB2307A2DF8B4A4542E91 - -The release's SHA256SUMS.txt asset lists the same checksums for every file. diff --git a/packaging/choco/tools/chocolateybeforemodify.ps1 b/packaging/choco/tools/chocolateybeforemodify.ps1 deleted file mode 100644 index 542a8223..00000000 --- a/packaging/choco/tools/chocolateybeforemodify.ps1 +++ /dev/null @@ -1,4 +0,0 @@ -$ErrorActionPreference = 'Stop' - -# Terminate running Hydra processes to prevent file locks during upgrade/uninstall -Get-Process -Name 'hydra', 'hydra-gui' -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue \ No newline at end of file diff --git a/packaging/choco/tools/chocolateyinstall.ps1 b/packaging/choco/tools/chocolateyinstall.ps1 deleted file mode 100644 index 03d60d9e..00000000 --- a/packaging/choco/tools/chocolateyinstall.ps1 +++ /dev/null @@ -1,26 +0,0 @@ -$ErrorActionPreference = 'Stop' - -$packageArgs = @{ - packageName = 'hydra-download-manager' - fileType = 'exe' - # NSIS installer (see scripts/windows/hydra-installer.nsi): the silent - # switch is an uppercase /S. Inno Setup switches like /VERYSILENT are - # ignored by NSIS, which leaves the wizard on screen and hangs the install. - # /S selects the installer's defaults: app, IPC host, CLI + PATH, browser - # extensions, Start-menu and desktop shortcuts. Skip the desktop shortcut - # with: choco install hydra-download-manager --install-arguments="'/NODESKTOP'" - silentArgs = '/S' - validExitCodes = @(0) - - # x64 (AMD64 / Intel) - url64 = 'https://github.com/ja7ad/hydra/releases/download/v0.4.1/hydra-0.4.1-windows-x64-setup.exe' - checksum64 = 'F595A13FC771F4695368452C9A208FE32A7465B9C57502E602E745F5162BAF2B' - checksumType64 = 'sha256' - - # ARM64 - url64arm = 'https://github.com/ja7ad/hydra/releases/download/v0.4.1/hydra-0.4.1-windows-arm64-setup.exe' - checksum64arm = '347E2F01774E3AEE16B2DF461F01E9DBF63925FFD51BB2307A2DF8B4A4542E91' - checksumType64arm = 'sha256' -} - -Install-ChocolateyPackage @packageArgs \ No newline at end of file diff --git a/packaging/choco/tools/chocolateyuninstall.ps1 b/packaging/choco/tools/chocolateyuninstall.ps1 deleted file mode 100644 index 59068199..00000000 --- a/packaging/choco/tools/chocolateyuninstall.ps1 +++ /dev/null @@ -1,25 +0,0 @@ -$ErrorActionPreference = 'Stop' - -$packageArgs = @{ - packageName = 'hydra-download-manager' - softwareName = 'Hydra*' - fileType = 'exe' - silentArgs = '/S' - validExitCodes = @(0) -} - -[array]$key = Get-UninstallRegistryKey -SoftwareName $packageArgs['softwareName'] - -if ($key.Count -eq 1) { - $key | ForEach-Object { - $packageArgs['file'] = "$($_.UninstallString)" - Uninstall-ChocolateyPackage @packageArgs - } -} elseif ($key.Count -eq 0) { - Write-Warning "$($packageArgs['packageName']) has already been uninstalled by other means." -} elseif ($key.Count -gt 1) { - Write-Warning "$($key.Count) matches found!" - Write-Warning "To prevent accidental data loss, no programs will be uninstalled." - Write-Warning "Please alert package maintainer the following keys were matched:" - $key | ForEach-Object { Write-Warning "- $($_.DisplayName)" } -} \ No newline at end of file diff --git a/scripts/update-choco.sh b/scripts/update-choco.sh deleted file mode 100755 index bcccb791..00000000 --- a/scripts/update-choco.sh +++ /dev/null @@ -1,151 +0,0 @@ -#!/usr/bin/env bash -# Copyright (C) 2026 Javad Rajabzadeh -# SPDX-License-Identifier: GPL-3.0-or-later -# -# Bump the Chocolatey package (packaging/choco) to a release: version, -# x64 / ARM64 installer download URLs and their SHA256 checksums, then -# optionally `choco pack` it and push it to the community repository. -# -# scripts/update-choco.sh [vX.Y.Z] [DIST_DIR] [--pack] [--push] -# -# VERSION defaults to the workspace version in Cargo.toml. -# DIST_DIR directory holding hydra-X.Y.Z-windows-{x64,arm64}-setup.exe -# and/or SHA256SUMS.txt (default: dist). When neither is there -# the installers are downloaded from the GitHub release and -# hashed locally, so the script also works after the fact. -# --pack run `choco pack` into $CHOCO_OUT (default: dist/choco). -# --push pack, then `choco push` to https://push.chocolatey.org/ using -# $CHOCO_API_KEY. -# -# Files rewritten: -# packaging/choco/hydra-download-manager.nuspec , -# packaging/choco/tools/chocolateyinstall.ps1 url64*, checksum64* -# packaging/choco/tools/VERIFICATION.txt URLs and checksums -# -set -euo pipefail - -REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" -cd "$REPO_ROOT" - -VERSION="" -DIST="" -PACK=false -PUSH=false -for arg in "$@"; do - case "$arg" in - --pack) PACK=true ;; - --push) PACK=true; PUSH=true ;; - -h|--help) sed -n '5,25p' "$0"; exit 0 ;; - -*) echo "error: unknown option $arg" >&2; exit 2 ;; - *) - if [ -z "$VERSION" ]; then VERSION="$arg" - elif [ -z "$DIST" ]; then DIST="$arg" - else echo "error: unexpected argument $arg" >&2; exit 2 - fi ;; - esac -done -if [ -z "$VERSION" ]; then - VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -1) -fi -VERSION="${VERSION#v}" -DIST="${DIST:-dist}" -CHOCO_DIR="$REPO_ROOT/packaging/choco" -CHOCO_OUT="${CHOCO_OUT:-$REPO_ROOT/dist/choco}" -RELEASE_BASE="https://github.com/ja7ad/hydra/releases/download/v${VERSION}" -NUSPEC="$CHOCO_DIR/hydra-download-manager.nuspec" -INSTALL_PS1="$CHOCO_DIR/tools/chocolateyinstall.ps1" -VERIFICATION="$CHOCO_DIR/tools/VERIFICATION.txt" - -echo "Updating Chocolatey package for version ${VERSION}..." - -# Print the SHA256 of hydra-VERSION-windows-ARCH-setup.exe, taken from the -# local file, from SHA256SUMS.txt, or from the published release asset. -asset_sha256() { - local asset="hydra-${VERSION}-windows-$1-setup.exe" - local sha="" - if [ -f "$DIST/$asset" ]; then - sha=$(sha256sum "$DIST/$asset" | awk '{print $1}') - elif [ -f "$DIST/SHA256SUMS.txt" ]; then - sha=$(grep -E " ${asset}\$" "$DIST/SHA256SUMS.txt" | awk '{print $1}' || true) - fi - if [ -z "$sha" ]; then - echo " $asset not in $DIST; downloading from the release" >&2 - local tmp - tmp=$(mktemp) - curl -fsSL --retry 3 -o "$tmp" "$RELEASE_BASE/$asset" - sha=$(sha256sum "$tmp" | awk '{print $1}') - rm -f "$tmp" - fi - [[ "$sha" =~ ^[0-9a-f]{64}$ ]] || { echo "error: no SHA256 for $asset" >&2; exit 1; } - # Chocolatey conventionally lists checksums in upper case. - echo "$sha" | tr '[:lower:]' '[:upper:]' -} - -X64_URL="$RELEASE_BASE/hydra-${VERSION}-windows-x64-setup.exe" -ARM64_URL="$RELEASE_BASE/hydra-${VERSION}-windows-arm64-setup.exe" -X64_SHA=$(asset_sha256 x64) -ARM64_SHA=$(asset_sha256 arm64) -echo " x64: $X64_SHA" -echo " arm64: $ARM64_SHA" - -# nuspec: version and release notes link -perl -pi -e "s{[^<]*}{${VERSION}}" "$NUSPEC" -perl -pi -e "s{[^<]*}{https://github.com/ja7ad/hydra/releases/tag/v${VERSION}}" "$NUSPEC" - -# chocolateyinstall.ps1: keep the comments, replace only the quoted values -perl -pi -e "s{^(\s*url64\s*=\s*)'[^']*'}{\$1'${X64_URL}'}" "$INSTALL_PS1" -perl -pi -e "s{^(\s*checksum64\s*=\s*)'[^']*'}{\$1'${X64_SHA}'}" "$INSTALL_PS1" -perl -pi -e "s{^(\s*url64arm\s*=\s*)'[^']*'}{\$1'${ARM64_URL}'}" "$INSTALL_PS1" -perl -pi -e "s{^(\s*checksum64arm\s*=\s*)'[^']*'}{\$1'${ARM64_SHA}'}" "$INSTALL_PS1" - -# VERIFICATION.txt is regenerated whole; it is prose, not a template -cat > "$VERIFICATION" <&2; exit 1; } -done -grep -qF "${VERSION}" "$NUSPEC" || { echo "error: $NUSPEC version not updated" >&2; exit 1; } -echo "==> packaging/choco bumped to ${VERSION}" - -if [ "$PACK" = true ]; then - command -v choco >/dev/null 2>&1 || { - echo "error: choco not found; --pack/--push need Chocolatey (Windows)" >&2 - exit 1 - } - mkdir -p "$CHOCO_OUT" - NUPKG="$CHOCO_OUT/hydra-download-manager.${VERSION}.nupkg" - rm -f "$NUPKG" - choco pack "$NUSPEC" --outputdirectory "$CHOCO_OUT" - [ -f "$NUPKG" ] || { echo "error: $NUPKG was not produced" >&2; exit 1; } - echo "==> Packed $NUPKG" -fi - -if [ "$PUSH" = true ]; then - [ -n "${CHOCO_API_KEY:-}" ] || { echo "error: CHOCO_API_KEY is not set" >&2; exit 1; } - choco push "$NUPKG" --source https://push.chocolatey.org/ --api-key "$CHOCO_API_KEY" - echo "==> Pushed hydra-download-manager ${VERSION} to the Chocolatey community repository" -fi