Release to Chocolatey #4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release to Chocolatey | |
| on: | |
| workflow_dispatch: # Manual trigger only | |
| push: | |
| tags: | |
| - "v[0-9]*" # Trigger on version tags like v1.0.0 | |
| jobs: | |
| release-chocolatey: | |
| runs-on: windows-2025 | |
| environment: chocolatey_release | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Download and extract release | |
| id: get_version | |
| run: | | |
| $RELEASE_VERSION = "0.1.1" | |
| Invoke-WebRequest -Uri "https://github.com/IvanIsCoding/celq/releases/download/v0.1.1/celq-x86_64-pc-windows-msvc.zip" -OutFile celq.zip | |
| Expand-Archive celq.zip -DestinationPath . | |
| echo "VERSION=$RELEASE_VERSION" >> $env:GITHUB_OUTPUT | |
| echo "Release version: $RELEASE_VERSION" | |
| shell: pwsh | |
| - name: Check if version is pre-release | |
| id: check_prerelease | |
| run: | | |
| $VERSION = "${{ steps.get_version.outputs.VERSION }}" | |
| if ($VERSION -match "(alpha|beta|rc)") { | |
| echo "IS_PRERELEASE=true" >> $env:GITHUB_OUTPUT | |
| echo "Detected pre-release version: $VERSION" | |
| } else { | |
| echo "IS_PRERELEASE=false" >> $env:GITHUB_OUTPUT | |
| echo "Detected stable version: $VERSION" | |
| } | |
| shell: pwsh | |
| - name: Prepare Chocolatey package structure | |
| if: steps.check_prerelease.outputs.IS_PRERELEASE == 'false' | |
| run: | | |
| mkdir tools | |
| copy target\x86_64-pc-windows-msvc\release\celq.exe tools\ | |
| copy LICENSE-MIT tools\LICENSE.txt | |
| shell: cmd | |
| - name: Calculate SHA256 and template VERIFICATION.txt | |
| if: steps.check_prerelease.outputs.IS_PRERELEASE == 'false' | |
| run: | | |
| $hash = (CertUtil -hashfile tools\celq.exe SHA256 | Select-Object -Index 1).Trim() | |
| $content = Get-Content choco\VERIFICATION.txt -Raw | |
| $content = $content -replace "CELQ_SHA256_EXE", $hash | |
| $content | Set-Content VERIFICATION.txt -Encoding UTF8 -NoNewline | |
| echo "SHA256: $hash" | |
| shell: pwsh | |
| - name: Import GPG key | |
| if: steps.check_prerelease.outputs.IS_PRERELEASE == 'false' | |
| uses: crazy-max/ghaction-import-gpg@v6 | |
| with: | |
| gpg_private_key: ${{ secrets.CHOCO_GPG_PRIVATE_KEY }} | |
| passphrase: ${{ secrets.CHOCO_GPG_PASSPHRASE }} | |
| - name: Clearsign VERIFICATION.txt | |
| if: steps.check_prerelease.outputs.IS_PRERELEASE == 'false' | |
| run: | | |
| gpg --clearsign --armor --output VERIFICATION.txt.asc VERIFICATION.txt | |
| Move-Item VERIFICATION.txt.asc tools\VERIFICATION.txt | |
| shell: pwsh | |
| - name: Upload VERIFICATION.txt artifact | |
| if: steps.check_prerelease.outputs.IS_PRERELEASE == 'false' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: verification-file | |
| path: tools/VERIFICATION.txt | |
| - name: Template nuspec file | |
| if: steps.check_prerelease.outputs.IS_PRERELEASE == 'false' | |
| run: | | |
| $content = Get-Content choco\celq.nuspec -Raw | |
| $content = $content -replace "CELQ_VERSION_PLACEHOLDER", "${{ steps.get_version.outputs.VERSION }}" | |
| $content | Set-Content celq.nuspec -Encoding UTF8 | |
| shell: pwsh | |
| - name: Create Chocolatey package | |
| if: steps.check_prerelease.outputs.IS_PRERELEASE == 'false' | |
| run: choco pack celq.nuspec |