diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 29b9fe32..22d96e63 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -1,98 +1,90 @@ name: Pull Request SideStore build + on: pull_request: # types: [opened, synchronize, reopened, ready_for_review, converted_to_draft] types: [opened, synchronize, reopened, ready_for_review] +concurrency: + group: pr-${{ github.event.pull_request.number }} + cancel-in-progress: true + jobs: build: name: Build and upload SideStore if: ${{ github.event.pull_request.draft == false }} - strategy: - fail-fast: false - matrix: - include: - - os: 'macos-14' - version: '16.1' + runs-on: macos-26 - runs-on: ${{ matrix.os }} steps: - - name: Checkout code - uses: actions/checkout@v4 + - uses: actions/checkout@v4 with: submodules: recursive + fetch-depth: 1 # shallow clone just for PR - - name: Install dependencies - run: brew install ldid + - run: brew install ldid xcbeautify - - name: Install xcbeautify - run: brew install xcbeautify - - - name: Add PR suffix to version - run: sed -e "/MARKETING_VERSION = .*/s/\$/-pr.${{ github.event.pull_request.number }}+$(git rev-parse --short ${COMMIT:-HEAD})/" -i '' Build.xcconfig - env: - COMMIT: ${{ github.event.pull_request.head.sha }} - - - name: Get version - id: version - run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT - - - name: Echo version - run: echo "${{ steps.version.outputs.version }}" + - name: Setup Env + run: | + MARKETING_VERSION=$(python3 scripts/ci/workflow.py get-marketing-version) + SHORT_COMMIT=$(git rev-parse --short ${{ github.event.pull_request.head.sha }}) + QUALIFIED_VERSION="${MARKETING_VERSION}-pr.${{ github.event.pull_request.number }}+${SHORT_COMMIT}" + python3 scripts/ci/workflow.py set-marketing-version "$QUALIFIED_VERSION" + echo "SHORT_COMMIT=$SHORT_COMMIT" | tee -a $GITHUB_ENV + echo "MARKETING_VERSION=$QUALIFIED_VERSION" | tee -a $GITHUB_ENV - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1.6.0 with: - xcode-version: ${{ matrix.version }} + xcode-version: "26.2" - - name: Cache Build - uses: irgaly/xcode-cache@v1 + - name: Restore Cache (exact) + id: xcode-cache-exact + uses: actions/cache/restore@v3 with: - key: xcode-cache-deriveddata-${{ github.sha }} - restore-keys: xcode-cache-deriveddata- - swiftpm-cache-key: xcode-cache-sourcedata-${{ github.sha }} - swiftpm-cache-restore-keys: | - xcode-cache-sourcedata- + path: | + ~/Library/Developer/Xcode/DerivedData + ~/Library/Caches/org.swift.swiftpm + key: xcode-build-cache-${{ github.ref_name }}-${{ github.sha }} - - name: List Files and derived data + - name: Restore Cache (last) + if: steps.xcode-cache-exact.outputs.cache-hit != 'true' + id: xcode-cache-fallback + uses: actions/cache/restore@v3 + with: + path: | + ~/Library/Developer/Xcode/DerivedData + ~/Library/Caches/org.swift.swiftpm + key: xcode-build-cache-${{ github.ref_name }}- + + - name: Build + env: + BUILD_LOG_ZIP_PASSWORD: ${{ secrets.BUILD_LOG_ZIP_PASSWORD }} run: | - echo ">>>>>>>>> Workdir <<<<<<<<<<" - ls -la . - echo "" - - echo ">>>>>>>>> SideStore <<<<<<<<<<" - find SideStore -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - echo ">>>>>>>>> Dependencies <<<<<<<<<<" - find Dependencies -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - echo ">>>>>>>>> Xcode-Derived-Data <<<<<<<<<<" - ls -la ~/Library/Developer/Xcode/DerivedData || true # List contents if directory exists - echo "" + python3 scripts/ci/workflow.py build; STATUS=$? + python3 scripts/ci/workflow.py encrypt-build + mv SideStore.ipa SideStore-${{ env.MARKETING_VERSION }}.ipa + exit $STATUS - - - name: Build SideStore - run: NSUnbufferedIO=YES make build 2>&1 | xcbeautify --renderer github-actions && exit ${PIPESTATUS[0]} - - - name: Fakesign app - run: make fakesign - - - name: Convert to IPA - run: make ipa - - - name: Add version to IPA file name - run: mv SideStore.ipa SideStore-${{ steps.version.outputs.version }}.ipa - - - name: Upload SideStore.ipa Artifact - uses: actions/upload-artifact@v4 + - name: Save Cache + if: ${{ steps.xcode-cache-fallback.outputs.cache-hit != 'true' }} + uses: actions/cache/save@v3 with: - name: SideStore-${{ steps.version.outputs.version }}.ipa - path: SideStore-${{ steps.version.outputs.version }}.ipa + path: | + ~/Library/Developer/Xcode/DerivedData + ~/Library/Caches/org.swift.swiftpm + key: xcode-build-cache-${{ github.ref_name }}-${{ github.sha }} - - name: Upload *.dSYM Artifact - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v4 with: - name: SideStore-${{ steps.version.outputs.version }}-dSYM - path: ./SideStore.xcarchive/dSYMs/* + name: encrypted-build-logs-${{ env.MARKETING_VERSION }}.zip + path: encrypted-build-logs.zip + + - uses: actions/upload-artifact@v4 + with: + name: SideStore-${{ env.MARKETING_VERSION }}.ipa + path: SideStore-${{ env.MARKETING_VERSION }}.ipa + + - uses: actions/upload-artifact@v4 + with: + name: SideStore-${{ env.MARKETING_VERSION }}-dSYMs.zip + path: SideStore.dSYMs.zip