From 850a4e23663fd05900bac6dc043754b2bc583fc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 16 Feb 2026 06:23:21 +0100 Subject: [PATCH] Github actions fix --- .github/workflows/build.yml | 274 ++++++++++++++++++++++++++++++++-- .github/workflows/deploy.yml | 110 -------------- .github/workflows/version.yml | 188 ----------------------- 3 files changed, 260 insertions(+), 312 deletions(-) delete mode 100644 .github/workflows/deploy.yml delete mode 100644 .github/workflows/version.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 150f69fb2..269724954 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,9 +1,5 @@ name: Build -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - on: push: tags: @@ -26,17 +22,163 @@ permissions: jobs: compute-version: name: Compute version - uses: ./.github/workflows/version.yml - secrets: inherit - - build: - name: Build and test runs-on: windows-latest - needs: compute-version + concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + outputs: + doRelease: ${{ steps.vars.outputs.doRelease }} + verMajor: ${{ steps.vars.outputs.verMajor }} + verMinor: ${{ steps.vars.outputs.verMinor }} + verRelease: ${{ steps.vars.outputs.verRelease }} + verBuild: ${{ steps.vars.outputs.verBuild }} + verRevision: ${{ steps.vars.outputs.verRevision }} + verLong: ${{ steps.vars.outputs.verLong }} + verRaw: ${{ steps.vars.outputs.verRaw }} + verShort: ${{ steps.vars.outputs.verShort }} + verDebug: ${{ steps.vars.outputs.verDebug }} + verOldTag: ${{ steps.vars.outputs.verOldTag }} + verTag: ${{ steps.vars.outputs.verTag }} + verTitle: ${{ steps.vars.outputs.verTitle }} + steps: - name: Checkout - uses: actions/checkout@v3 - + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Compute variables + id: vars + shell: pwsh + run: | + Set-StrictMode -Version Latest + $ErrorActionPreference = 'Stop' + + # Ensure tags exist locally + git fetch --tags --force | Out-Null + + $ref = "${env:GITHUB_REF}" # e.g. refs/tags/version1.2.3 or refs/heads/dev + $refName = "${env:GITHUB_REF_NAME}" # e.g. version1.2.3 or dev + $isTag = $ref.StartsWith("refs/tags/") + $isDev = ($ref -eq "refs/heads/dev") + + $H = (git rev-parse HEAD).Trim() + + function Set-Var([string]$name, [string]$value) { + # For later steps in the SAME job + "$name=$value" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + # For later jobs (job outputs) + "$name=$value" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append + } + + # Defaults + Set-Var "doRelease" "false" + Set-Var "verMajor" "" + Set-Var "verMinor" "" + Set-Var "verRelease" "" + Set-Var "verBuild" "" + Set-Var "verRevision" "" + Set-Var "verLong" "" + Set-Var "verRaw" "" + Set-Var "verShort" "" + Set-Var "verDebug" "" + Set-Var "verOldTag" "" + Set-Var "verTag" "" + Set-Var "verTitle" "" + + + # Case 1: Tag versionX.Y.Z + if ($isTag -and ($refName -match '^version(\d+)\.(\d+)\.(\d+)$')) { + $X = $Matches[1] + $Y = $Matches[2] + $Z = $Matches[3] + + Set-Var "verMajor" $X + Set-Var "verMinor" $Y + Set-Var "verRelease" $Z + Set-Var "verBuild" "0" + Set-Var "verRevision" $H + + $raw = "$X.$Y.$Z" + Set-Var "verRaw" $raw + Set-Var "verShort" $raw + Set-Var "verLong" $raw + + Set-Var "verDebug" "false" + Set-Var "verOldTag" "" + Set-Var "verTag" $refName + + Set-Var "doRelease" "true" + Set-Var "verTitle" "version $raw" + + exit 0 + } + + # Case 2: dev branch + if ($isDev) { + # Find latest nightlyN tag (max N) + $nightlyTags = git tag --list 'nightly*' + $maxN = -1 + foreach ($t in $nightlyTags) { + if ($t -match '^nightly(\d+)$') { + $n = [int]$Matches[1] + if ($n -gt $maxN) { $maxN = $n } + } + } + if ($maxN -lt 0) { $maxN = 0 } # if none exists, start from 0 so M becomes 1 + $M = $maxN + 1 + + # Find latest versionX.Y.Z tag by numeric comparison (major,minor,release) + $versionTags = git tag --list 'version*' + $best = $null + foreach ($t in $versionTags) { + if ($t -match '^version(\d+)\.(\d+)\.(\d+)$') { + $maj = [int]$Matches[1] + $min = [int]$Matches[2] + $rel = [int]$Matches[3] + $obj = [pscustomobject]@{ Tag=$t; Major=$maj; Minor=$min; Release=$rel } + if (-not $best) { + $best = $obj + } else { + if ($obj.Major -gt $best.Major -or + ($obj.Major -eq $best.Major -and $obj.Minor -gt $best.Minor) -or + ($obj.Major -eq $best.Major -and $obj.Minor -eq $best.Minor -and $obj.Release -gt $best.Release)) { + $best = $obj + } + } + } + } + + if (-not $best) { + throw "No versionX.Y.Z tag found. Create at least one version tag (e.g. version1.0.0)." + } + + $X = $best.Major + $Y = $best.Minor + $Z = $best.Release + + Set-Var "verMajor" "$X" + Set-Var "verMinor" "$Y" + Set-Var "verRelease" "$Z" + Set-Var "verBuild" "$M" + Set-Var "verRevision" $H + + Set-Var "verLong" "$X.$Y.$Z nightly build $M" + Set-Var "verRaw" "$X.$Y.$Z" + Set-Var "verShort" "$X.$Y.$Z`_nightly$M" + Set-Var "verDebug" "true" + Set-Var "verOldTag" "nightly$maxN" + + Set-Var "verTag" "nightly$M" + + Set-Var "verTitle" "(PREVIEW) version $X.$Y.$Z nightly $M" + + Set-Var "doRelease" "true" + exit 0 + } + + # Other cases: doRelease stays false + exit 0 - name: Prepare version info property file shell: pwsh run: | @@ -53,7 +195,17 @@ jobs: uses: actions/upload-artifact@v4 with: name: version_properties - path: version.properties + path: version.properties + build: + name: Build and test + runs-on: windows-latest + concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + needs: compute-version + steps: + - name: Checkout + uses: actions/checkout@v3 - name: Set up JDK uses: actions/setup-java@v4 @@ -122,6 +274,9 @@ jobs: exe: name: Generate EXE runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true needs: compute-version if: needs.compute-version.outputs.doRelease == 'true' steps: @@ -267,6 +422,9 @@ jobs: sign_and_msi: name: Code signing, MSI installer runs-on: windows-latest + concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true needs: - compute-version - build @@ -609,6 +767,9 @@ jobs: packages: name: Create packages runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true needs: - compute-version - build @@ -686,4 +847,89 @@ jobs: with: name: packages path: releases - \ No newline at end of file + + deploy: + name: Deploy to GitHub + runs-on: ubuntu-latest + if: needs.compute-version.outputs.doRelease == 'true' + # This one is different from others + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: false + needs: + - compute-version + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up PHP + run: | + sudo apt-get update -y -qq + sudo apt-get install -y -qq php + + - name: Download packages artifact + uses: actions/download-artifact@v4 + with: + name: packages + path: releases/ + + - name: Download lib javadoc artifact + uses: actions/download-artifact@v4 + with: + name: lib_javadoc + path: releases/ + + - name: Generate nightly release description + if: needs.compute-version.outputs.verDebug == 'true' + run: php cicd_scripts/format_release_info.php -filever "${{ needs.compute-version.outputs.verShort }}" Unreleased ${{ needs.compute-version.outputs.verTag }} ./CHANGELOG.md "${{ env.CICD_REPO_SLUG }}" > ./release_notes.md + + - name: Generate release description + if: needs.compute-version.outputs.verDebug == 'false' + run: php cicd_scripts/format_release_info.php -filever "${{ needs.compute-version.outputs.verShort }}" "${{ needs.compute-version.outputs.verShort }}" ${{ needs.compute-version.outputs.verTag }} ./CHANGELOG.md "${{ env.CICD_REPO_SLUG }}" > ./release_notes.md + + - name: Upload release notes artifact + uses: actions/upload-artifact@v4 + with: + name: release_notes + path: ./release_notes.md + + - name: Create tag + if: needs.compute-version.outputs.verDebug == 'true' + run: | + TAG="${{ needs.compute-version.outputs.verTag }}" + git fetch --tags --force + + if git rev-parse "$TAG" >/dev/null 2>&1; then + echo "Tag $TAG already exists -> skipping tag creation." + exit 0 + fi + + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + git tag "$TAG" + git push origin "$TAG" + + - name: Create GitHub Release + upload assets + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ needs.compute-version.outputs.verTag }} + name: ${{ needs.compute-version.outputs.verTitle }} + body_path: ./release_notes.md + preserve_order: true + prerelease: ${{ needs.compute-version.outputs.verDebug == 'true'}} + fail_on_unmatched_files: true + files: | + releases/ffdec_${{ needs.compute-version.outputs.verShort }}.msi + releases/ffdec_${{ needs.compute-version.outputs.verShort }}.zip + releases/ffdec_${{ needs.compute-version.outputs.verShort }}.deb + releases/ffdec_${{ needs.compute-version.outputs.verShort }}.pkg + releases/ffdec_${{ needs.compute-version.outputs.verShort }}_macosx.zip + releases/ffdec_lib_${{ needs.compute-version.outputs.verShort }}.zip + releases/ffdec_lib_javadoc_${{ needs.compute-version.outputs.verShort }}.zip + - name: Remove old nightly + if: needs.compute-version.outputs.verDebug == 'true' + env: + GH_TOKEN: ${{ github.token }} + run: | + gh release delete ${{needs.compute-version.outputs.verOldTag}} --yes --cleanup-tag \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index 9db83e5cf..000000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,110 +0,0 @@ -name: Deploy - -on: - workflow_run: - workflows: - - Build - types: - - completed - branches: - - dev - - master - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: false - -permissions: - contents: write - -env: - CICD_REPO_SLUG: jindrapetrik/jpexs-decompiler - GITHUB_USER: jindrapetrik - GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }} - -jobs: - compute-version: - name: Compute version - uses: ./.github/workflows/version.yml - secrets: inherit - deploy: - name: Deploy to GitHub - runs-on: ubuntu-latest - if: needs.compute-version.outputs.doRelease == 'true' - needs: - - compute-version - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Set up PHP - run: | - sudo apt-get update -y -qq - sudo apt-get install -y -qq php - - - name: Download packages artifact - uses: actions/download-artifact@v4 - with: - name: packages - path: releases/ - - - name: Download lib javadoc artifact - uses: actions/download-artifact@v4 - with: - name: lib_javadoc - path: releases/ - - - name: Generate nightly release description - if: needs.compute-version.outputs.verDebug == 'true' - run: php cicd_scripts/format_release_info.php -filever "${{ needs.compute-version.outputs.verShort }}" Unreleased ${{ needs.compute-version.outputs.verTag }} ./CHANGELOG.md "${{ env.CICD_REPO_SLUG }}" > ./release_notes.md - - - name: Generate release description - if: needs.compute-version.outputs.verDebug == 'false' - run: php cicd_scripts/format_release_info.php -filever "${{ needs.compute-version.outputs.verShort }}" "${{ needs.compute-version.outputs.verShort }}" ${{ needs.compute-version.outputs.verTag }} ./CHANGELOG.md "${{ env.CICD_REPO_SLUG }}" > ./release_notes.md - - - name: Upload release notes artifact - uses: actions/upload-artifact@v4 - with: - name: release_notes - path: ./release_notes.md - - - name: Create tag - if: needs.compute-version.outputs.verDebug == 'true' - run: | - TAG="${{ needs.compute-version.outputs.verTag }}" - git fetch --tags --force - - if git rev-parse "$TAG" >/dev/null 2>&1; then - echo "Tag $TAG already exists -> skipping tag creation." - exit 0 - fi - - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - - git tag "$TAG" - git push origin "$TAG" - - - name: Create GitHub Release + upload assets - uses: softprops/action-gh-release@v2 - with: - tag_name: ${{ needs.compute-version.outputs.verTag }} - name: ${{ needs.compute-version.outputs.verTitle }} - body_path: ./release_notes.md - preserve_order: true - prerelease: ${{ needs.compute-version.outputs.verDebug == 'true'}} - fail_on_unmatched_files: true - files: | - releases/ffdec_${{ needs.compute-version.outputs.verShort }}.msi - releases/ffdec_${{ needs.compute-version.outputs.verShort }}.zip - releases/ffdec_${{ needs.compute-version.outputs.verShort }}.deb - releases/ffdec_${{ needs.compute-version.outputs.verShort }}.pkg - releases/ffdec_${{ needs.compute-version.outputs.verShort }}_macosx.zip - releases/ffdec_lib_${{ needs.compute-version.outputs.verShort }}.zip - releases/ffdec_lib_javadoc_${{ needs.compute-version.outputs.verShort }}.zip - - name: Remove old nightly - if: needs.compute-version.outputs.verDebug == 'true' - env: - GH_TOKEN: ${{ github.token }} - run: | - gh release delete ${{needs.compute-version.outputs.verOldTag}} --yes --cleanup-tag diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml deleted file mode 100644 index ab710ca0e..000000000 --- a/.github/workflows/version.yml +++ /dev/null @@ -1,188 +0,0 @@ -name: Compute version -on: - workflow_call: - outputs: - doRelease: - value: ${{ jobs.compute-version.outputs.doRelease }} - verMajor: - value: ${{ jobs.compute-version.outputs.verMajor }} - verMinor: - value: ${{ jobs.compute-version.outputs.verMinor }} - verRelease: - value: ${{ jobs.compute-version.outputs.verRelease }} - verBuild: - value: ${{ jobs.compute-version.outputs.verBuild }} - verRevision: - value: ${{ jobs.compute-version.outputs.verRevision }} - verLong: - value: ${{ jobs.compute-version.outputs.verLong }} - verRaw: - value: ${{ jobs.compute-version.outputs.verRaw }} - verShort: - value: ${{ jobs.compute-version.outputs.verShort }} - verDebug: - value: ${{ jobs.compute-version.outputs.verDebug }} - verOldTag: - value: ${{ jobs.compute-version.outputs.verOldTag }} - verTag: - value: ${{ jobs.compute-version.outputs.verTag }} - verTitle: - value: ${{ jobs.compute-version.outputs.verTitle }} - -jobs: - compute-version: - name: Main - runs-on: windows-latest - outputs: - doRelease: ${{ steps.vars.outputs.doRelease }} - verMajor: ${{ steps.vars.outputs.verMajor }} - verMinor: ${{ steps.vars.outputs.verMinor }} - verRelease: ${{ steps.vars.outputs.verRelease }} - verBuild: ${{ steps.vars.outputs.verBuild }} - verRevision: ${{ steps.vars.outputs.verRevision }} - verLong: ${{ steps.vars.outputs.verLong }} - verRaw: ${{ steps.vars.outputs.verRaw }} - verShort: ${{ steps.vars.outputs.verShort }} - verDebug: ${{ steps.vars.outputs.verDebug }} - verOldTag: ${{ steps.vars.outputs.verOldTag }} - verTag: ${{ steps.vars.outputs.verTag }} - verTitle: ${{ steps.vars.outputs.verTitle }} - - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Compute variables - id: vars - shell: pwsh - run: | - Set-StrictMode -Version Latest - $ErrorActionPreference = 'Stop' - - # Ensure tags exist locally - git fetch --tags --force | Out-Null - - $ref = "${env:GITHUB_REF}" # e.g. refs/tags/version1.2.3 or refs/heads/dev - $refName = "${env:GITHUB_REF_NAME}" # e.g. version1.2.3 or dev - $isTag = $ref.StartsWith("refs/tags/") - $isDev = ($ref -eq "refs/heads/dev") - - $H = (git rev-parse HEAD).Trim() - - function Set-Var([string]$name, [string]$value) { - # For later steps in the SAME job - "$name=$value" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - # For later jobs (job outputs) - "$name=$value" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append - } - - # Defaults - Set-Var "doRelease" "false" - Set-Var "verMajor" "" - Set-Var "verMinor" "" - Set-Var "verRelease" "" - Set-Var "verBuild" "" - Set-Var "verRevision" "" - Set-Var "verLong" "" - Set-Var "verRaw" "" - Set-Var "verShort" "" - Set-Var "verDebug" "" - Set-Var "verOldTag" "" - Set-Var "verTag" "" - Set-Var "verTitle" "" - - - # Case 1: Tag versionX.Y.Z - if ($isTag -and ($refName -match '^version(\d+)\.(\d+)\.(\d+)$')) { - $X = $Matches[1] - $Y = $Matches[2] - $Z = $Matches[3] - - Set-Var "verMajor" $X - Set-Var "verMinor" $Y - Set-Var "verRelease" $Z - Set-Var "verBuild" "0" - Set-Var "verRevision" $H - - $raw = "$X.$Y.$Z" - Set-Var "verRaw" $raw - Set-Var "verShort" $raw - Set-Var "verLong" $raw - - Set-Var "verDebug" "false" - Set-Var "verOldTag" "" - Set-Var "verTag" $refName - - Set-Var "doRelease" "true" - Set-Var "verTitle" "version $raw" - - exit 0 - } - - # Case 2: dev branch - if ($isDev) { - # Find latest nightlyN tag (max N) - $nightlyTags = git tag --list 'nightly*' - $maxN = -1 - foreach ($t in $nightlyTags) { - if ($t -match '^nightly(\d+)$') { - $n = [int]$Matches[1] - if ($n -gt $maxN) { $maxN = $n } - } - } - if ($maxN -lt 0) { $maxN = 0 } # if none exists, start from 0 so M becomes 1 - $M = $maxN + 1 - - # Find latest versionX.Y.Z tag by numeric comparison (major,minor,release) - $versionTags = git tag --list 'version*' - $best = $null - foreach ($t in $versionTags) { - if ($t -match '^version(\d+)\.(\d+)\.(\d+)$') { - $maj = [int]$Matches[1] - $min = [int]$Matches[2] - $rel = [int]$Matches[3] - $obj = [pscustomobject]@{ Tag=$t; Major=$maj; Minor=$min; Release=$rel } - if (-not $best) { - $best = $obj - } else { - if ($obj.Major -gt $best.Major -or - ($obj.Major -eq $best.Major -and $obj.Minor -gt $best.Minor) -or - ($obj.Major -eq $best.Major -and $obj.Minor -eq $best.Minor -and $obj.Release -gt $best.Release)) { - $best = $obj - } - } - } - } - - if (-not $best) { - throw "No versionX.Y.Z tag found. Create at least one version tag (e.g. version1.0.0)." - } - - $X = $best.Major - $Y = $best.Minor - $Z = $best.Release - - Set-Var "verMajor" "$X" - Set-Var "verMinor" "$Y" - Set-Var "verRelease" "$Z" - Set-Var "verBuild" "$M" - Set-Var "verRevision" $H - - Set-Var "verLong" "$X.$Y.$Z nightly build $M" - Set-Var "verRaw" "$X.$Y.$Z" - Set-Var "verShort" "$X.$Y.$Z`_nightly$M" - Set-Var "verDebug" "true" - Set-Var "verOldTag" "nightly$maxN" - - Set-Var "verTag" "nightly$M" - - Set-Var "verTitle" "(PREVIEW) version $X.$Y.$Z nightly $M" - - Set-Var "doRelease" "true" - exit 0 - } - - # Other cases: doRelease stays false - exit 0