diff --git a/.github/workflows/artcraft-macos-publish.yml b/.github/workflows/artcraft-macos-publish.yml index 63484b6a75..59ca9a9532 100644 --- a/.github/workflows/artcraft-macos-publish.yml +++ b/.github/workflows/artcraft-macos-publish.yml @@ -10,6 +10,13 @@ on: # This workflow creates Universal macOS builds with signing certificate support. # On each push to the release branches it will create or update a GitHub release, build your app, and upload the artifacts to the release. +# One release build per branch at a time. A run in progress is never cancelled, because it may +# already have created or uploaded to the draft release. If more pushes arrive while one runs, +# GitHub keeps only the newest as pending, so the next build is of the latest commit. +concurrency: + group: macos-release-${{ github.ref }} + cancel-in-progress: false + jobs: publish-artcraft: permissions: @@ -28,6 +35,8 @@ jobs: # args: '' runs-on: ${{ matrix.platform }} + # Successful builds took 10-22 min (2026-04 to 2026-11). + timeout-minutes: 60 steps: - uses: actions/checkout@v7 diff --git a/.github/workflows/artcraft-windows-publish.yml b/.github/workflows/artcraft-windows-publish.yml index e814bb8216..cb07d151a7 100644 --- a/.github/workflows/artcraft-windows-publish.yml +++ b/.github/workflows/artcraft-windows-publish.yml @@ -10,6 +10,13 @@ on: # This workflow creates Windows builds. # On each push to the release branches it will create or update a GitHub release, build your app, and upload the artifacts to the release. +# One release build per branch at a time. A run in progress is never cancelled, because it may +# already have created or uploaded to the draft release. If more pushes arrive while one runs, +# GitHub keeps only the newest as pending, so the next build is of the latest commit. +concurrency: + group: windows-release-${{ github.ref }} + cancel-in-progress: false + jobs: publish-artcraft-windows: permissions: @@ -23,6 +30,8 @@ jobs: args: '' runs-on: ${{ matrix.platform }} + # Successful builds took 17-36 min (2026-04 to 2026-11); one hung run used the full 6-hour default. + timeout-minutes: 90 steps: - uses: actions/checkout@v7