permissions: contents: write name: Release on: release: types: [published] workflow_dispatch: inputs: commit_hash: type: string description: 'The commit hash to build (defaults to the latest commit on the default branch)' required: false default: '' jobs: release-update-repos: runs-on: ubuntu-24.04 name: Release Update Repos steps: - name: 🧰 Checkout uses: actions/checkout@v4 with: path: ImHex - name: 📜 Verify version and set version variable run: | set -x project_version=`cat ImHex/VERSION` tag_version="${{github.event.release.tag_name}}" tag_version="${tag_version:1}" if [ "$project_version" != "$tag_version" ] && [ ! -z "$tag_version" ]; then echo "::warning::$project_version and $tag_version are not the same ! Refusing to populate release" exit 1 fi echo "IMHEX_VERSION=$project_version" >> $GITHUB_ENV - name: 🎫 Create PatternLanguage release uses: ncipollo/release-action@v1 env: RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} if: "${{ env.RELEASE_TOKEN != '' }}" with: tag: ImHex-v${{ env.IMHEX_VERSION }} repo: PatternLanguage token: ${{ secrets.RELEASE_TOKEN }} skipIfReleaseExists: true - name: 🎫 Create ImHex-Patterns release uses: ncipollo/release-action@v1 env: RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} if: "${{ env.RELEASE_TOKEN != '' }}" with: tag: ImHex-v${{ env.IMHEX_VERSION }} repo: ImHex-Patterns token: ${{ secrets.RELEASE_TOKEN }} skipIfReleaseExists: true - name: 🎫 Create imhex-download-sdk release uses: ncipollo/release-action@v1 env: RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} if: "${{ env.RELEASE_TOKEN != '' }}" with: tag: v${{ env.IMHEX_VERSION }} repo: imhex-download-sdk token: ${{ secrets.RELEASE_TOKEN }} skipIfReleaseExists: true release-upload-artifacts: runs-on: ubuntu-24.04 name: Release Upload Artifacts outputs: IMHEX_VERSION: ${{ steps.verify_version.outputs.IMHEX_VERSION }} steps: - name: 🧰 Checkout uses: actions/checkout@v4 with: path: ImHex submodules: recursive - name: 📜 Verify version and set version variable id: verify_version run: | set -x project_version=`cat ImHex/VERSION` tag_version="${{github.event.release.tag_name}}" tag_version="${tag_version:1}" if [ "$project_version" != "$tag_version" ] && [ ! -z "$tag_version" ]; then echo "::warning::$project_version and $tag_version are not the same ! Refusing to populate release" exit 1 fi echo "IMHEX_VERSION=$project_version" >> $GITHUB_ENV echo "IMHEX_VERSION=$project_version" >> $GITHUB_OUTPUT - name: 🗜️ Create tarball from sources with dependencies run: tar --exclude-vcs -czvf Full.Sources.tar.gz ImHex - name: ⬇️ Download artifacts from latest workflow uses: dawidd6/action-download-artifact@v6 with: github_token: ${{ secrets.GITHUB_TOKEN }} workflow: build.yml branch: ${{ github.event.release.target_commitish }} workflow_conclusion: success skip_unpack: true commit: ${{ github.event.inputs.commit_hash }} - name: 🗜️ Unzip files when needed run: | set -x for zipfile in ./*.zip do if [ `zipinfo -1 "$zipfile" | wc -l` -eq 1 ]; then echo "unzipping $zipfile" unzip "$zipfile" rm "$zipfile" else echo "keeping $zipfile zipped" fi done - name: 🟩 Rename artifacts when needed run: | mv "Windows Portable x86_64.zip" imhex-${{ env.IMHEX_VERSION }}-Windows-Portable-x86_64.zip || true mv "Windows Portable arm64.zip" imhex-${{ env.IMHEX_VERSION }}-Windows-Portable-arm64.zip || true mv "Windows Portable NoGPU x86_64.zip" imhex-${{ env.IMHEX_VERSION }}-Windows-Portable-NoGPU-x86_64.zip || true mv "ImHex Web.zip" imhex-${{ env.IMHEX_VERSION }}-Web.zip || true rm artifact.tar || true - name: ⬆️ Upload Unsigned x86_64 Windows Installer uses: actions/upload-artifact@v4 id: upload-installer-x86_64 with: if-no-files-found: error name: Windows Installer x86_64 path: | imhex-*-x86_64.msi - name: ⬆️ Upload Unsigned ARM64 Windows Installer if: false uses: actions/upload-artifact@v4 id: upload-installer-arm64 with: if-no-files-found: error name: Windows Installer ARM64 path: | imhex-*-arm64.msi - name: 🗑️ Delete unsigned installers run: | rm imhex-*-x86_64.msi - name: 🗝️ Sign x86_64 Installer uses: signpath/github-action-submit-signing-request@v1 with: api-token: '${{ secrets.SIGNPATH_API_TOKEN }}' organization-id: 'f605a0e8-86cd-411c-bb6f-e05025afcc33' project-slug: 'ImHex' signing-policy-slug: 'release-signing' github-artifact-id: '${{ steps.upload-installer-x86_64.outputs.artifact-id }}' wait-for-completion: true output-artifact-directory: '.' - name: 🗝️ Sign ARM64 Installer if: false uses: signpath/github-action-submit-signing-request@v1 with: api-token: '${{ secrets.SIGNPATH_API_TOKEN }}' organization-id: 'f605a0e8-86cd-411c-bb6f-e05025afcc33' project-slug: 'ImHex' signing-policy-slug: 'release-signing' github-artifact-id: '${{ steps.upload-installer-arm64.outputs.artifact-id }}' wait-for-completion: true output-artifact-directory: '.' - name: ⬆️ Upload everything to release uses: softprops/action-gh-release@4634c16e79c963813287e889244c50009e7f0981 with: files: '*' release-update-aur: name: Release update AUR package needs: release-upload-artifacts runs-on: ubuntu-24.04 steps: - name: 🧰 Checkout uses: actions/checkout@v4 with: path: ImHex - name: ⬇️ Download artifacts run: | tagname=${GITHUB_REF#refs/tags/} version=${tagname#v} wget https://github.com/WerWolv/ImHex/releases/download/${tagname}/imhex-${version}-ArchLinux-x86_64.pkg.tar.zst - name: ✒️ Prepare PKGBUILD run: | set -x cp ImHex/dist/Arch/PKGBUILD . hash=`md5sum imhex-${{ needs.release-upload-artifacts.outputs.IMHEX_VERSION }}-ArchLinux-x86_64.pkg.tar.zst | cut -d ' ' -f 1` sed -i 's/%version%/${{ needs.release-upload-artifacts.outputs.IMHEX_VERSION }}/g' PKGBUILD sed -i "s/(SKIP)/($hash)/g" PKGBUILD - name: ⬆️ Publish AUR package env: AUR_SSH_PRIVATE_KEY: ${{ secrets.AUR_SSH_PRIVATE_KEY }} if: "${{ env.AUR_SSH_PRIVATE_KEY != '' }}" uses: KSXGitHub/github-actions-deploy-aur@v2 with: pkgname: imhex-bin pkgbuild: ./PKGBUILD commit_username: iTrooz commit_email: itrooz@protonmail.com ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} commit_message: Bump to version ${{ needs.release-upload-artifacts.outputs.IMHEX_VERSION }} ssh_keyscan_types: rsa,ecdsa,ed25519 release-update-winget: name: Release update winget package needs: release-upload-artifacts runs-on: windows-latest steps: - name: ⬇️ Download dependencies shell: pwsh run: | iwr https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe - name: ⬆️ Update winget manifest shell: pwsh env: WINGET_GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} if: "${{ env.WINGET_GITHUB_TOKEN != '' }}" run: | $tagname = $env:GITHUB_REF.Replace("refs/tags/", "") $version = $tagname.Replace("v", "") $url = "https://github.com/WerWolv/ImHex/releases/download/${tagname}/imhex-${version}-Windows-x86_64.msi" .\wingetcreate.exe update WerWolv.ImHex -u $url --version $version if ($version -notmatch "-") { .\wingetcreate.exe submit .\manifests\w\WerWolv\ImHex\${version}\ --token $env:WINGET_GITHUB_TOKEN } release-update-snapstore: name: Release update snapstore package needs: release-upload-artifacts runs-on: ubuntu-24.04 steps: - name: ⬇️ Download artifacts run: | tagname=${GITHUB_REF#refs/tags/} version=${tagname#v} wget https://github.com/WerWolv/ImHex/releases/download/${tagname}/imhex-${version}-x86_64.snap wget https://github.com/WerWolv/ImHex/releases/download/${tagname}/imhex-${version}-arm64.snap - name: ⬆️ Publish x86_64 Snap package continue-on-error: true uses: snapcore/action-publish@v1 env: SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_STORE_LOGIN }} with: snap: imhex-${{ needs.release-upload-artifacts.outputs.IMHEX_VERSION }}-x86_64.snap release: stable - name: ⬆️ Publish arm64 Snap package continue-on-error: true uses: snapcore/action-publish@v1 env: SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_STORE_LOGIN }} with: snap: imhex-${{ needs.release-upload-artifacts.outputs.IMHEX_VERSION }}-arm64.snap release: stable