name: iOS CI on: push: branches: ["v2", "main"] paths: - "ios/**" - "justfile" - ".gitea/workflows/ios.yaml" pull_request: branches: ["v2", "main"] paths: - "ios/**" - "justfile" - ".gitea/workflows/ios.yaml" jobs: # ── build ───────────────────────────────────────────────────────────────── build: name: Build runs-on: macos-latest steps: - uses: actions/checkout@v4 - name: Install just run: brew install just - name: Install xcodegen run: brew install xcodegen - name: Build (simulator) run: just ios-build # ── test ────────────────────────────────────────────────────────────────── test: name: Test runs-on: macos-latest needs: build steps: - uses: actions/checkout@v4 - name: Install just run: brew install just - name: Install xcodegen run: brew install xcodegen - name: Run unit tests run: just ios-test - name: Upload test results if: always() uses: actions/upload-artifact@v4 with: name: test-results path: ios/LibNovel/test-results.xml retention-days: 7 # ── archive (release IPA) ───────────────────────────────────────────────── # Runs only on pushes to v2/main (not PRs). # Requires secrets: APPLE_CERTIFICATE_BASE64, APPLE_CERTIFICATE_PASSWORD, # APPLE_PROVISIONING_PROFILE_BASE64, KEYCHAIN_PASSWORD # Also requires ios/LibNovel/ExportOptions.plist to exist. # # archive: # name: Archive # runs-on: macos-latest # needs: [build, test] # if: gitea.event_name == 'push' # # steps: # - uses: actions/checkout@v4 # # - name: Install just # run: brew install just # # - name: Install xcodegen # run: brew install xcodegen # # - name: Import signing certificate # env: # CERTIFICATE_BASE64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }} # CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} # KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} # run: | # KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db # security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH # security set-keychain-settings -lut 21600 $KEYCHAIN_PATH # security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH # echo "$CERTIFICATE_BASE64" | base64 --decode > $RUNNER_TEMP/cert.p12 # security import $RUNNER_TEMP/cert.p12 \ # -P "$CERTIFICATE_PASSWORD" \ # -A -t cert -f pkcs12 \ # -k $KEYCHAIN_PATH # security list-keychain -d user -s $KEYCHAIN_PATH # # - name: Import provisioning profile # env: # PROFILE_BASE64: ${{ secrets.APPLE_PROVISIONING_PROFILE_BASE64 }} # run: | # PP_PATH=$RUNNER_TEMP/profile.mobileprovision # echo "$PROFILE_BASE64" | base64 --decode > $PP_PATH # mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles # cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles/ # # - name: Archive & export IPA # run: just ios-archive && just ios-export