From 25f34c6f69a782e793c3f1e2b699d39a26dcf3a6 Mon Sep 17 00:00:00 2001 From: mahee96 <47920326+mahee96@users.noreply.github.com> Date: Tue, 24 Feb 2026 20:23:12 +0530 Subject: [PATCH] ci: added back the nightly schedule checking for new commits and only then build --- .github/workflows/alpha.yml | 30 ++++++++++---- .github/workflows/nightly.yml | 76 ++++++++++++++++++++++++++++++----- scripts/ci/workflow.py | 16 ++++++++ 3 files changed, 103 insertions(+), 19 deletions(-) diff --git a/.github/workflows/alpha.yml b/.github/workflows/alpha.yml index ef7734b6..7093eaa0 100644 --- a/.github/workflows/alpha.yml +++ b/.github/workflows/alpha.yml @@ -23,6 +23,13 @@ jobs: submodules: recursive fetch-depth: 0 + - run: | + LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \ + "${{ github.workflow }}" "${{ env.CHANNEL }}" || echo "") + echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/cache@v4 with: path: | @@ -99,7 +106,9 @@ jobs: python3 scripts/ci/workflow.py clean-spm-cache - name: Boot simulator (async) - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_RUN == '1' }} + if: > + vars.ENABLE_TESTS == '1' && + vars.ENABLE_TESTS_RUN == '1' run: | mkdir -p build/logs python3 scripts/ci/workflow.py boot-sim-async "iPhone 17 Pro" @@ -116,7 +125,9 @@ jobs: - name: Tests Build id: test-build - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_BUILD == '1' }} + if: > + vars.ENABLE_TESTS == '1' && + vars.ENABLE_TESTS_BUILD == '1' env: BUILD_LOG_ZIP_PASSWORD: ${{ secrets.BUILD_LOG_ZIP_PASSWORD }} run: | @@ -135,7 +146,9 @@ jobs: - name: Tests Run id: test-run - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_RUN == '1' }} + if: > + vars.ENABLE_TESTS == '1' && + vars.ENABLE_TESTS_RUN == '1' env: BUILD_LOG_ZIP_PASSWORD: ${{ secrets.BUILD_LOG_ZIP_PASSWORD }} run: | @@ -152,13 +165,17 @@ jobs: path: encrypted-build-logs.zip - uses: actions/upload-artifact@v4 - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_BUILD == '1' }} + if: > + vars.ENABLE_TESTS == '1' && + vars.ENABLE_TESTS_BUILD == '1' with: name: encrypted-tests-build-logs-${{ env.SHORT_COMMIT }}.zip path: encrypted-tests-build-logs.zip - uses: actions/upload-artifact@v4 - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_RUN == '1' }} + if: > + vars.ENABLE_TESTS == '1' && + vars.ENABLE_TESTS_RUN == '1' with: name: encrypted-tests-run-logs-${{ env.SHORT_COMMIT }}.zip path: encrypted-tests-run-logs.zip @@ -192,9 +209,6 @@ jobs: SOURCE_JSON="_includes/source.json" IPA_NAME="$PRODUCT_NAME.ipa" - LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \ - "${{ github.workflow }}" "$CHANNEL") - python3 scripts/ci/workflow.py deploy \ SideStore/apps-v2.json \ "$SOURCE_JSON" \ diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 704c688e..a60317b5 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -25,7 +25,34 @@ jobs: submodules: recursive fetch-depth: 0 + - run: | + LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \ + "${{ github.workflow }}" "${{ env.CHANNEL }}" || echo "") + echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Check for new changes (on schedule) + id: check_changes + if: github.event_name == 'schedule' + run: | + NEW_COMMITS=$(python3 scripts/ci/workflow.py count-new-commits "$LAST_SUCCESSFUL_COMMIT") + SHOULD_BUILD=$([ "${NEW_COMMITS:-0}" -ge 1 ] && echo true || echo false) + echo "should_build=$SHOULD_BUILD" >> $GITHUB_OUTPUT + echo "NEW_COMMITS=$NEW_COMMITS" | tee -a $GITHUB_ENV + + - name: Should Skip Building (on schedule) + id: build_gate + run: | + SHOULD_SKIP=$( + { [ "${{ github.event_name }}" = "schedule" ] && \ + [ "${{ steps.check_changes.outputs.should_build }}" != "true" ]; \ + } && echo true || echo false + ) + echo "should_skip=$SHOULD_SKIP" >> $GITHUB_OUTPUT + - uses: actions/cache@v4 + if: steps.build_gate.outputs.should_skip != 'true' with: path: | /opt/homebrew/Cellar @@ -37,11 +64,13 @@ jobs: - run: | brew list ldid >/dev/null 2>&1 || brew install ldid brew list xcbeautify >/dev/null 2>&1 || brew install xcbeautify + if: steps.build_gate.outputs.should_skip != 'true' # -------------------------------------------------- # runtime env setup # -------------------------------------------------- - uses: actions/checkout@v4 + if: steps.build_gate.outputs.should_skip != 'true' with: repository: "SideStore/beta-build-num" ref: ${{ env.CHANNEL }} @@ -50,6 +79,7 @@ jobs: fetch-depth: 1 - name: Setup Env + if: steps.build_gate.outputs.should_skip != 'true' run: | BUILD_NUM=$(python3 scripts/ci/workflow.py reserve_build_number 'Dependencies/beta-build-num') MARKETING_VERSION=$(python3 scripts/ci/workflow.py get-marketing-version) @@ -68,11 +98,13 @@ jobs: echo "MARKETING_VERSION=$QUALIFIED_VERSION" | tee -a $GITHUB_ENV - name: Setup Xcode + if: steps.build_gate.outputs.should_skip != 'true' uses: maxim-lobanov/setup-xcode@v1.6.0 with: xcode-version: "26.2" - name: Restore Cache (exact) + if: steps.build_gate.outputs.should_skip != 'true' id: xcode-cache-exact uses: actions/cache/restore@v3 with: @@ -82,7 +114,9 @@ jobs: key: xcode-build-cache-${{ github.ref_name }}-${{ github.sha }} - name: Restore Cache (last) - if: steps.xcode-cache-exact.outputs.cache-hit != 'true' + if: > + steps.build_gate.outputs.should_skip != 'true' && + steps.xcode-cache-exact.outputs.cache-hit != 'true' id: xcode-cache-fallback uses: actions/cache/restore@v3 with: @@ -95,19 +129,23 @@ jobs: # build and test # -------------------------------------------------- - name: Clean - if: contains(github.event.head_commit.message, '[--clean-build]') + if: steps.build_gate.outputs.should_skip != 'true' && contains(github.event.head_commit.message, '[--clean-build]') run: | python3 scripts/ci/workflow.py clean python3 scripts/ci/workflow.py clean-derived-data python3 scripts/ci/workflow.py clean-spm-cache - name: Boot simulator (async) - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_RUN == '1' }} + if: > + steps.build_gate.outputs.should_skip != 'true' && + vars.ENABLE_TESTS == '1' && + vars.ENABLE_TESTS_RUN == '1' run: | mkdir -p build/logs python3 scripts/ci/workflow.py boot-sim-async "iPhone 17 Pro" - name: Build + if: steps.build_gate.outputs.should_skip != 'true' id: build env: BUILD_LOG_ZIP_PASSWORD: ${{ secrets.BUILD_LOG_ZIP_PASSWORD }} @@ -118,8 +156,11 @@ jobs: exit $STATUS - name: Tests Build + if: > + steps.build_gate.outputs.should_skip != 'true' && + vars.ENABLE_TESTS == '1' && + vars.ENABLE_TESTS_BUILD == '1' id: test-build - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_BUILD == '1' }} env: BUILD_LOG_ZIP_PASSWORD: ${{ secrets.BUILD_LOG_ZIP_PASSWORD }} run: | @@ -128,7 +169,9 @@ jobs: exit $STATUS - name: Save Cache - if: ${{ steps.xcode-cache-fallback.outputs.cache-hit != 'true' }} + if: > + steps.build_gate.outputs.should_skip != 'true' && + steps.xcode-cache-fallback.outputs.cache-hit != 'true' uses: actions/cache/save@v3 with: path: | @@ -137,8 +180,11 @@ jobs: key: xcode-build-cache-${{ github.ref_name }}-${{ github.sha }} - name: Tests Run + if: > + steps.build_gate.outputs.should_skip != 'true' && + vars.ENABLE_TESTS == '1' && + vars.ENABLE_TESTS_RUN == '1' id: test-run - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_RUN == '1' }} env: BUILD_LOG_ZIP_PASSWORD: ${{ secrets.BUILD_LOG_ZIP_PASSWORD }} run: | @@ -150,32 +196,42 @@ jobs: # artifacts # -------------------------------------------------- - uses: actions/upload-artifact@v4 + if: steps.build_gate.outputs.should_skip != 'true' with: name: encrypted-build-logs-${{ env.MARKETING_VERSION }}.zip path: encrypted-build-logs.zip - uses: actions/upload-artifact@v4 - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_BUILD == '1' }} + if: > + steps.build_gate.outputs.should_skip != 'true' && + vars.ENABLE_TESTS == '1' && + vars.ENABLE_TESTS_BUILD == '1' with: name: encrypted-tests-build-logs-${{ env.SHORT_COMMIT }}.zip path: encrypted-tests-build-logs.zip - uses: actions/upload-artifact@v4 - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_RUN == '1' }} + if: > + steps.build_gate.outputs.should_skip != 'true' && + vars.ENABLE_TESTS == '1' && + vars.ENABLE_TESTS_RUN == '1' with: name: encrypted-tests-run-logs-${{ env.SHORT_COMMIT }}.zip path: encrypted-tests-run-logs.zip - uses: actions/upload-artifact@v4 + if: steps.build_gate.outputs.should_skip != 'true' with: name: SideStore-${{ env.MARKETING_VERSION }}.ipa path: SideStore.ipa - uses: actions/upload-artifact@v4 + if: steps.build_gate.outputs.should_skip != 'true' with: name: SideStore-${{ env.MARKETING_VERSION }}-dSYMs.zip path: SideStore.dSYMs.zip - uses: actions/checkout@v4 + if: steps.build_gate.outputs.should_skip != 'true' with: repository: "SideStore/apps-v2.json" ref: "main" @@ -186,6 +242,7 @@ jobs: # deploy # -------------------------------------------------- - name: Deploy + if: steps.build_gate.outputs.should_skip != 'true' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | @@ -195,9 +252,6 @@ jobs: SOURCE_JSON="_includes/source.json" IPA_NAME="$PRODUCT_NAME.ipa" - LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \ - "${{ github.workflow }}" "$CHANNEL") - python3 scripts/ci/workflow.py deploy \ SideStore/apps-v2.json \ "$SOURCE_JSON" \ diff --git a/scripts/ci/workflow.py b/scripts/ci/workflow.py index 235f3103..c431c6b9 100644 --- a/scripts/ci/workflow.py +++ b/scripts/ci/workflow.py @@ -57,6 +57,21 @@ def getenv(name, default=""): def short_commit(): return runAndGet("git rev-parse --short HEAD") +def count_new_commits(last_commit): + if not last_commit or not last_commit.strip(): + return 0 + + try: + total = int(runAndGet("git rev-list --count HEAD")) + if total == 1: + head = runAndGet("git rev-parse HEAD") + return 1 if head != last_commit else 0 + + out = runAndGet(f"git rev-list --count {last_commit}..HEAD") + return int(out) + except Exception: + return 0 + # ---------------------------------------------------------- # BUILD NUMBER RESERVATION # ---------------------------------------------------------- @@ -464,6 +479,7 @@ COMMANDS = { # SHARED # ---------------------------------------------------------- "commit-id" : (short_commit, 0, ""), + "count-new-commits" : (count_new_commits, 1, ""), # ---------------------------------------------------------- # PROJECT INFO