From 805f324a8896d9bfb65ca8821483d0d339eda91c Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 11 Sep 2026 17:34:51 +0000 Subject: [PATCH 1/8] ci: add E2E staging workflow for iOS Add .github/workflows/e2e-staging.yml that runs staging E2E matrix separately from the main e2e-tests.yml merge gate. Triggers: - schedule: 04:00 UTC daily (after migration cron) - workflow_dispatch: with e2e_branch input for custom branch - pull_request: for self-testing this PR Staging shards: - @multi_address_2 - @pubky - @transfer_1|@transfer_max Features: - Reuses build-staging and e2e-branch patterns from e2e-tests.yml - BACKEND=regtest for staging environment - 3 retry attempts with simulator reset before attempt 3 - Slack failure notification to #bitkit-staging-nightly Refs: synonymdev/bitkit-e2e-tests#221 Co-authored-by: piotr-iohk --- .github/workflows/e2e-staging.yml | 279 ++++++++++++++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 .github/workflows/e2e-staging.yml diff --git a/.github/workflows/e2e-staging.yml b/.github/workflows/e2e-staging.yml new file mode 100644 index 000000000..7b2d380ac --- /dev/null +++ b/.github/workflows/e2e-staging.yml @@ -0,0 +1,279 @@ +name: E2E Staging (iOS) + +on: + workflow_dispatch: + inputs: + e2e_branch: + description: "Branch of synonymdev/bitkit-e2e-tests to use (main | default-feature-branch | custom branch name)" + required: false + default: "default-feature-branch" + schedule: + - cron: "0 4 * * *" + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + +env: + TERM: xterm-256color + FORCE_COLOR: 1 + GIT_LFS_SKIP_SMUDGE: "1" + SIMULATOR_NAME: "iPhone 17" + IOS_VERSION: "26.2" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build-staging: + if: github.event.pull_request.draft == false + runs-on: macos-latest + + steps: + - name: Checkout + uses: actions/checkout@v7 + + - name: Set up Xcode + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: "26.2" + + - name: System Information + run: | + echo "=== System Information ===" + echo "macOS Version:" + sw_vers + echo "" + echo "Xcode Version:" + xcodebuild -version + + - name: Install xcbeautify + run: | + brew install xcbeautify + + - name: Cache Swift Package Manager + uses: actions/cache@v6 + with: + path: | + ~/Library/Caches/org.swift.swiftpm + ~/Library/org.swift.swiftpm + Bitkit.xcodeproj/project.xcworkspace/xcshareddata/swiftpm + key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }} + + - name: Install dependencies + run: | + echo "⏱️ Starting dependency resolution at $(date)" + xcodebuild -resolvePackageDependencies -onlyUsePackageVersionsFromResolvedFile | xcbeautify + echo "✅ Dependencies resolved at $(date)" + + - name: Pre-start simulator + run: | + echo "⏱️ Starting simulator at $(date)" + xcrun simctl boot "${{ env.SIMULATOR_NAME }}" || true + echo "✅ Simulator started at $(date)" + + - name: Build iOS app (regtest) + env: + GITHUB_ACTOR: ${{ github.actor }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GEO: false + E2E_BACKEND: network + E2E_NETWORK: regtest + run: | + echo "=== Building iOS app (regtest) ===" + echo "Using simulator: ${{ env.SIMULATOR_NAME }} (iOS ${{ env.IOS_VERSION }})" + + if xcodebuild -showsdks | grep -q "iOS Simulator"; then + echo "✅ iOS Simulator platform already installed" + else + echo "⚙️ iOS Simulator platform not found — downloading..." + xcodebuild -downloadPlatform iOS + fi + + xcodebuild -workspace Bitkit.xcodeproj/project.xcworkspace \ + -scheme Bitkit \ + -configuration Debug \ + -destination "platform=iOS Simulator,name=${{ env.SIMULATOR_NAME }},OS=${{ env.IOS_VERSION }}" \ + -derivedDataPath DerivedData \ + SWIFT_ACTIVE_COMPILATION_CONDITIONS='DEBUG E2E_BUILD' \ + -allowProvisioningUpdates \ + build + + - name: Prepare app for E2E tests (regtest) + run: | + mkdir -p e2e-app + cp -r DerivedData/Build/Products/Debug-iphonesimulator/Bitkit.app e2e-app/bitkit.app + + - name: Upload iOS app (regtest) + uses: actions/upload-artifact@v7 + with: + name: bitkit-e2e-ios-staging_${{ github.run_number }} + path: e2e-app/ + + e2e-branch: + if: github.event.pull_request.draft == false + uses: synonymdev/bitkit-e2e-tests/.github/workflows/determine-e2e-branch.yml@main + with: + app_branch: ${{ github.head_ref || github.ref_name }} + e2e_branch_input: ${{ github.event.inputs.e2e_branch || 'default-feature-branch' }} + + e2e-tests-staging: + if: github.event.pull_request.draft == false + runs-on: macos-latest + timeout-minutes: 90 + needs: [build-staging, e2e-branch] + + strategy: + fail-fast: false + matrix: + shard: + - { name: multi_address_2, grep: "@multi_address_2" } + - { name: pubky, grep: "@pubky" } + - { name: transfer_staging, grep: "@transfer_1|@transfer_max" } + + name: e2e-tests-staging - ${{ matrix.shard.name }} + + env: + BACKEND: regtest + + steps: + - name: Show selected E2E branch + env: + E2E_BRANCH: ${{ needs.e2e-branch.outputs.branch }} + run: echo $E2E_BRANCH + + - name: Clone E2E tests + uses: actions/checkout@v7 + with: + repository: synonymdev/bitkit-e2e-tests + path: bitkit-e2e-tests + ref: ${{ needs.e2e-branch.outputs.branch }} + + - name: Download iOS app (regtest) + uses: actions/download-artifact@v8 + with: + name: bitkit-e2e-ios-staging_${{ github.run_number }} + path: bitkit-e2e-tests/aut + + - name: List iOS app directory contents + run: ls -l bitkit-e2e-tests/aut + + - name: Setup Node.js + uses: actions/setup-node@v7 + with: + node-version: 22 + + - name: Cache npm cache + uses: actions/cache@v6 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies + working-directory: bitkit-e2e-tests + run: npm ci + + - name: Install ffmpeg + run: | + echo "Installing ffmpeg with Homebrew..." + brew install ffmpeg + echo "ffmpeg version: $(ffmpeg -version | head -1)" + + - name: Boot Simulator + run: | + echo "Erasing simulator..." + xcrun simctl erase "${{ env.SIMULATOR_NAME }}" || true + + echo "Booting simulator..." + xcrun simctl boot "${{ env.SIMULATOR_NAME }}" || true + + echo "Waiting for boot status..." + xcrun simctl bootstatus "${{ env.SIMULATOR_NAME }}" -b + + echo "Opening Simulator app to ensure UI is ready..." + open -a Simulator + + echo "Waiting for simulator to fully initialize..." + sleep 30 + + echo "Verifying simulator state..." + xcrun simctl list devices booted + + - name: Run E2E Tests 1 (${{ matrix.shard.name }}) + continue-on-error: true + id: test1 + working-directory: bitkit-e2e-tests + run: ./ci_run_ios.sh --mochaOpts.grep '${{ matrix.shard.grep }}' + env: + SIMULATOR_NAME: ${{ env.SIMULATOR_NAME }} + SIMULATOR_OS_VERSION: ${{ env.IOS_VERSION }} + RECORD_VIDEO: true + ATTEMPT: 1 + + - name: Run E2E Tests 2 (${{ matrix.shard.name }}) + continue-on-error: true + if: steps.test1.outcome != 'success' + id: test2 + working-directory: bitkit-e2e-tests + run: ./ci_run_ios.sh --mochaOpts.grep "${{ matrix.shard.grep }}" + env: + SIMULATOR_NAME: ${{ env.SIMULATOR_NAME }} + SIMULATOR_OS_VERSION: ${{ env.IOS_VERSION }} + RECORD_VIDEO: true + ATTEMPT: 2 + + - name: Reset iOS Simulator before attempt 3 + if: steps.test1.outcome != 'success' && steps.test2.outcome != 'success' + run: | + echo "🔁 Resetting iOS simulator before attempt 3..." + xcrun simctl shutdown all || true + xcrun simctl erase "${{ env.SIMULATOR_NAME }}" || true + xcrun simctl boot "${{ env.SIMULATOR_NAME }}" || true + xcrun simctl bootstatus "${{ env.SIMULATOR_NAME }}" -b + open -a Simulator + sleep 15 + xcrun simctl list devices booted + + - name: Run E2E Tests 3 (${{ matrix.shard.name }}) + if: steps.test1.outcome != 'success' && steps.test2.outcome != 'success' + id: test3 + working-directory: bitkit-e2e-tests + run: ./ci_run_ios.sh --mochaOpts.grep "${{ matrix.shard.grep }}" + env: + SIMULATOR_NAME: ${{ env.SIMULATOR_NAME }} + SIMULATOR_OS_VERSION: ${{ env.IOS_VERSION }} + RECORD_VIDEO: true + ATTEMPT: 3 + + - name: Upload E2E Artifacts (${{ matrix.shard.name }}) + if: failure() + uses: actions/upload-artifact@v7 + with: + name: e2e-artifacts-staging_${{ matrix.shard.name }}_${{ github.run_number }} + path: bitkit-e2e-tests/artifacts/ + + notify-failure: + if: always() && github.event_name != 'pull_request' && needs.e2e-tests-staging.result == 'failure' + runs-on: ubuntu-latest + needs: [e2e-tests-staging] + + steps: + - name: Notify Slack on failure + uses: slackapi/slack-github-action@v2.1.0 + with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL_STAGING }} + webhook-type: incoming-webhook + payload: | + { + "text": "🚨 E2E Staging (iOS) failed", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "🚨 *E2E Staging (iOS) failed*\n\n*Workflow:* ${{ github.workflow }}\n*Run:* <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|#${{ github.run_number }}>\n*Branch:* `${{ github.ref_name }}`\n*Triggered by:* ${{ github.event_name }}" + } + } + ] + } From bec6e4c481d7996861774df16a9ed2083b0ff17b Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 11 Sep 2026 19:04:10 +0000 Subject: [PATCH 2/8] ci: fix notify-failure to catch all job failures and pin Slack action - P1: notify-failure now depends on build-staging, e2e-branch, and e2e-tests-staging; fires if any fails on schedule/workflow_dispatch - P2: pin slackapi/slack-github-action to SHA b0fa283ad8fea605de13dc3f449259339835fc52 (v2.1.0) Co-authored-by: piotr-iohk --- .github/workflows/e2e-staging.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e-staging.yml b/.github/workflows/e2e-staging.yml index 7b2d380ac..13eb5ab4b 100644 --- a/.github/workflows/e2e-staging.yml +++ b/.github/workflows/e2e-staging.yml @@ -254,13 +254,18 @@ jobs: path: bitkit-e2e-tests/artifacts/ notify-failure: - if: always() && github.event_name != 'pull_request' && needs.e2e-tests-staging.result == 'failure' + if: >- + always() && + github.event_name != 'pull_request' && + (needs.build-staging.result == 'failure' || + needs.e2e-branch.result == 'failure' || + needs.e2e-tests-staging.result == 'failure') runs-on: ubuntu-latest - needs: [e2e-tests-staging] + needs: [build-staging, e2e-branch, e2e-tests-staging] steps: - name: Notify Slack on failure - uses: slackapi/slack-github-action@v2.1.0 + uses: slackapi/slack-github-action@b0fa283ad8fea605de13dc3f449259339835fc52 with: webhook: ${{ secrets.SLACK_WEBHOOK_URL_STAGING }} webhook-type: incoming-webhook From 7347c70e4cd1969e874a86ce4a86ba043eda7261 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 11 Sep 2026 20:54:46 +0000 Subject: [PATCH 3/8] ci: remove pull_request trigger and transfer_staging shard from e2e-staging - Remove pull_request trigger (keep only schedule and workflow_dispatch) - Remove transfer_staging shard (@transfer_1|@transfer_max) from matrix - Remove draft PR checks (no longer needed without PR trigger) - Simplify notify-failure condition (keep build-staging/e2e-branch/e2e-tests-staging coverage) Transfers deferred to PR B. Co-authored-by: piotr-iohk --- .github/workflows/e2e-staging.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.github/workflows/e2e-staging.yml b/.github/workflows/e2e-staging.yml index 13eb5ab4b..67bb91bc9 100644 --- a/.github/workflows/e2e-staging.yml +++ b/.github/workflows/e2e-staging.yml @@ -1,16 +1,14 @@ name: E2E Staging (iOS) on: + schedule: + - cron: "0 4 * * *" workflow_dispatch: inputs: e2e_branch: description: "Branch of synonymdev/bitkit-e2e-tests to use (main | default-feature-branch | custom branch name)" required: false default: "default-feature-branch" - schedule: - - cron: "0 4 * * *" - pull_request: - types: [opened, synchronize, reopened, ready_for_review] env: TERM: xterm-256color @@ -25,7 +23,6 @@ concurrency: jobs: build-staging: - if: github.event.pull_request.draft == false runs-on: macos-latest steps: @@ -110,14 +107,12 @@ jobs: path: e2e-app/ e2e-branch: - if: github.event.pull_request.draft == false uses: synonymdev/bitkit-e2e-tests/.github/workflows/determine-e2e-branch.yml@main with: app_branch: ${{ github.head_ref || github.ref_name }} e2e_branch_input: ${{ github.event.inputs.e2e_branch || 'default-feature-branch' }} e2e-tests-staging: - if: github.event.pull_request.draft == false runs-on: macos-latest timeout-minutes: 90 needs: [build-staging, e2e-branch] @@ -128,7 +123,6 @@ jobs: shard: - { name: multi_address_2, grep: "@multi_address_2" } - { name: pubky, grep: "@pubky" } - - { name: transfer_staging, grep: "@transfer_1|@transfer_max" } name: e2e-tests-staging - ${{ matrix.shard.name }} @@ -256,7 +250,6 @@ jobs: notify-failure: if: >- always() && - github.event_name != 'pull_request' && (needs.build-staging.result == 'failure' || needs.e2e-branch.result == 'failure' || needs.e2e-tests-staging.result == 'failure') From adae18dca691bf890b801b62a8a4d603e2c25bb4 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 11 Sep 2026 20:57:00 +0000 Subject: [PATCH 4/8] ci: restore transfer_max shard to e2e-staging matrix Add @transfer_max grep to staging workflow. @transfer_1 temporarily omitted pending e2e-tests fix (PR B). Co-authored-by: piotr-iohk --- .github/workflows/e2e-staging.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/e2e-staging.yml b/.github/workflows/e2e-staging.yml index 67bb91bc9..e6b7fc0d8 100644 --- a/.github/workflows/e2e-staging.yml +++ b/.github/workflows/e2e-staging.yml @@ -123,6 +123,7 @@ jobs: shard: - { name: multi_address_2, grep: "@multi_address_2" } - { name: pubky, grep: "@pubky" } + - { name: transfer_max, grep: "@transfer_max" } name: e2e-tests-staging - ${{ matrix.shard.name }} From 0bc0b301ffab15c0a56ba6dac0b79ccc2e5a956f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 11 Sep 2026 21:07:37 +0000 Subject: [PATCH 5/8] ci: add notify_slack checkbox for workflow_dispatch - Add boolean input notify_slack (default: false) - Scheduled runs: always notify Slack on failure - Manual dispatch: notify only when checkbox is checked Co-authored-by: piotr-iohk --- .github/workflows/e2e-staging.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e-staging.yml b/.github/workflows/e2e-staging.yml index e6b7fc0d8..c4434f1df 100644 --- a/.github/workflows/e2e-staging.yml +++ b/.github/workflows/e2e-staging.yml @@ -9,6 +9,11 @@ on: description: "Branch of synonymdev/bitkit-e2e-tests to use (main | default-feature-branch | custom branch name)" required: false default: "default-feature-branch" + notify_slack: + description: "Post failure result to Slack (#bitkit-staging-nightly)" + type: boolean + default: false + required: false env: TERM: xterm-256color @@ -253,7 +258,9 @@ jobs: always() && (needs.build-staging.result == 'failure' || needs.e2e-branch.result == 'failure' || - needs.e2e-tests-staging.result == 'failure') + needs.e2e-tests-staging.result == 'failure') && + (github.event_name == 'schedule' || + (github.event_name == 'workflow_dispatch' && inputs.notify_slack == true)) runs-on: ubuntu-latest needs: [build-staging, e2e-branch, e2e-tests-staging] From d6679369a2e855c5b0ecf9d1ff3e315354511287 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 14 Sep 2026 07:08:19 +0000 Subject: [PATCH 6/8] ci: switch Slack notifications to shared script, fix cancelled runs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace notify-failure job with slack-report using shared scripts/slack_summary.py from bitkit-e2e-tests - Rename input notify_slack → post_to_slack - Change concurrency to cancel-in-progress: ${{ github.event_name != 'schedule' }} so dispatch cannot silently kill scheduled nightly - STAGING_RESULT is success only when all needed jobs succeed (fixes cancelled runs skipping Slack) - Post summary on every finished gated run (schedule or post_to_slack), not just failures Dependency: requires scripts/slack_summary.py e2e-staging mode in synonymdev/bitkit-e2e-tests (parallel PR). Co-authored-by: piotr-iohk --- .github/workflows/e2e-staging.yml | 47 +++++++++++++++---------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/.github/workflows/e2e-staging.yml b/.github/workflows/e2e-staging.yml index c4434f1df..eda0d4984 100644 --- a/.github/workflows/e2e-staging.yml +++ b/.github/workflows/e2e-staging.yml @@ -9,8 +9,8 @@ on: description: "Branch of synonymdev/bitkit-e2e-tests to use (main | default-feature-branch | custom branch name)" required: false default: "default-feature-branch" - notify_slack: - description: "Post failure result to Slack (#bitkit-staging-nightly)" + post_to_slack: + description: "Post E2E staging summary to Slack (#bitkit-staging-nightly)" type: boolean default: false required: false @@ -24,7 +24,7 @@ env: concurrency: group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true + cancel-in-progress: ${{ github.event_name != 'schedule' }} jobs: build-staging: @@ -253,33 +253,30 @@ jobs: name: e2e-artifacts-staging_${{ matrix.shard.name }}_${{ github.run_number }} path: bitkit-e2e-tests/artifacts/ - notify-failure: + slack-report: if: >- always() && - (needs.build-staging.result == 'failure' || - needs.e2e-branch.result == 'failure' || - needs.e2e-tests-staging.result == 'failure') && (github.event_name == 'schedule' || - (github.event_name == 'workflow_dispatch' && inputs.notify_slack == true)) + (github.event_name == 'workflow_dispatch' && inputs.post_to_slack == true)) runs-on: ubuntu-latest needs: [build-staging, e2e-branch, e2e-tests-staging] steps: - - name: Notify Slack on failure - uses: slackapi/slack-github-action@b0fa283ad8fea605de13dc3f449259339835fc52 + - name: Checkout E2E tests + uses: actions/checkout@v7 with: - webhook: ${{ secrets.SLACK_WEBHOOK_URL_STAGING }} - webhook-type: incoming-webhook - payload: | - { - "text": "🚨 E2E Staging (iOS) failed", - "blocks": [ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "🚨 *E2E Staging (iOS) failed*\n\n*Workflow:* ${{ github.workflow }}\n*Run:* <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|#${{ github.run_number }}>\n*Branch:* `${{ github.ref_name }}`\n*Triggered by:* ${{ github.event_name }}" - } - } - ] - } + repository: synonymdev/bitkit-e2e-tests + ref: ${{ needs.e2e-branch.outputs.branch }} + + - name: Post Slack summary + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_STAGING }} + PLATFORM: ios + STAGING_RESULT: ${{ needs.build-staging.result == 'success' && needs.e2e-branch.result == 'success' && needs.e2e-tests-staging.result == 'success' && 'success' || 'failure' }} + BUILD_STAGING_RESULT: ${{ needs.build-staging.result }} + E2E_BRANCH_RESULT: ${{ needs.e2e-branch.result }} + E2E_TESTS_STAGING_RESULT: ${{ needs.e2e-tests-staging.result }} + RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + RUN_ATTEMPT: ${{ github.run_attempt }} + E2E_TESTS_REF: ${{ needs.e2e-branch.outputs.branch }} + run: python3 scripts/slack_summary.py e2e-staging From f261447865427dce2bec55cede708d7abd9f0594 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 14 Sep 2026 07:12:10 +0000 Subject: [PATCH 7/8] ci: fix slack_summary env var names for e2e-staging Co-authored-by: piotr-iohk --- .github/workflows/e2e-staging.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-staging.yml b/.github/workflows/e2e-staging.yml index eda0d4984..dc02ee762 100644 --- a/.github/workflows/e2e-staging.yml +++ b/.github/workflows/e2e-staging.yml @@ -273,9 +273,9 @@ jobs: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_STAGING }} PLATFORM: ios STAGING_RESULT: ${{ needs.build-staging.result == 'success' && needs.e2e-branch.result == 'success' && needs.e2e-tests-staging.result == 'success' && 'success' || 'failure' }} - BUILD_STAGING_RESULT: ${{ needs.build-staging.result }} + BUILD_RESULT: ${{ needs.build-staging.result }} E2E_BRANCH_RESULT: ${{ needs.e2e-branch.result }} - E2E_TESTS_STAGING_RESULT: ${{ needs.e2e-tests-staging.result }} + E2E_TESTS_RESULT: ${{ needs.e2e-tests-staging.result }} RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} RUN_ATTEMPT: ${{ github.run_attempt }} E2E_TESTS_REF: ${{ needs.e2e-branch.outputs.branch }} From 97e450ce3aa4ca7144fb6069d1489ff623bc08ae Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 15 Sep 2026 06:58:54 +0000 Subject: [PATCH 8/8] ci: isolate schedule and dispatch e2e-staging concurrency Include event_name in the concurrency group so a workflow_dispatch on master cannot cancel a scheduled nightly (or vice versa). Co-authored-by: piotr-iohk --- .github/workflows/e2e-staging.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-staging.yml b/.github/workflows/e2e-staging.yml index dc02ee762..ce7fd428b 100644 --- a/.github/workflows/e2e-staging.yml +++ b/.github/workflows/e2e-staging.yml @@ -23,8 +23,8 @@ env: IOS_VERSION: "26.2" concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ github.event_name != 'schedule' }} + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} + cancel-in-progress: true jobs: build-staging: