diff --git a/.github/workflows/ios_emerge_upload_adhoc.yml b/.github/workflows/ios_emerge_upload_adhoc.yml deleted file mode 100644 index fead94b5..00000000 --- a/.github/workflows/ios_emerge_upload_adhoc.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: Sentry PR iOS Upload (Build Distribution) - -on: - pull_request: - branches: [main] - paths: [ios/**] - -jobs: - build_adhoc: - runs-on: macos-15 - - defaults: - run: - working-directory: ./ios - - steps: - - name: Checkout - uses: actions/checkout@v6 - with: - fetch-depth: 0 - - - name: Select Xcode version - run: sudo xcode-select -s '/Applications/Xcode_26.0.1.app/Contents/Developer' - - - name: Set up Ruby env - uses: ruby/setup-ruby@v1 - with: - ruby-version: 3.3.10 - bundler-cache: true - - - name: Setup gems - run: exec ../.github/scripts/ios/setup.sh - - - name: Decode signing certificate into a file - env: - CERTIFICATE_BASE64: ${{ secrets.IOS_DIST_SIGNING_KEY_BASE64 }} - run: | - echo $CERTIFICATE_BASE64 | base64 --decode > signing-cert.p12 - - name: Replace API key in Constants file - run: | - sed -i '' "s/API_KEY/$ETDISTRIBUTION_API_KEY/g" HackerNews/Utils/Constants.swift - env: - ETDISTRIBUTION_API_KEY: ${{ secrets.ETDISTRIBUTION_API_KEY_IOS }} - - name: Build & upload iOS AdHoc binary to Sentry - run: bundle exec fastlane ios build_upload_emerge - env: - ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }} - ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }} - ASC_KEY: ${{ secrets.ASC_PRIVATE_KEY }} - SIGNING_KEY_PASSWORD: ${{ secrets.IOS_DIST_SIGNING_KEY_PASSWORD }} - SIGNING_KEY_FILE_PATH: signing-cert.p12 - EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_SENTRY_AUTH_TOKEN }} - CONFIGURATION: AdHoc - EMERGE_BUILD_TYPE: pull-request-adhoc - PROV_PROFILE_NAME: HackerNews AdHoc Distribution - WIDGET_PROV_PROFILE_NAME: HackerNews AdHoc HomeWidget - ADHOC: true - APP_ID_SUFFIX: adhoc diff --git a/.github/workflows/ios_emerge_upload_main.yml b/.github/workflows/ios_emerge_upload_main.yml deleted file mode 100644 index 4d6704a5..00000000 --- a/.github/workflows/ios_emerge_upload_main.yml +++ /dev/null @@ -1,101 +0,0 @@ -name: Sentry iOS Upload (Size Analysis) - -on: - push: - branches: [main] - -jobs: - build: - runs-on: macos-15 - - defaults: - run: - working-directory: ./ios - - steps: - - name: Checkout - uses: actions/checkout@v6 - with: - fetch-depth: 0 - - - name: Select Xcode version - run: sudo xcode-select -s '/Applications/Xcode_26.0.1.app/Contents/Developer' - - - name: Set up Ruby env - uses: ruby/setup-ruby@v1 - with: - ruby-version: 3.3.10 - bundler-cache: true - - - name: Setup gems - run: exec ../.github/scripts/ios/setup.sh - - - name: Decode signing certificate into a file - env: - CERTIFICATE_BASE64: ${{ secrets.IOS_DIST_SIGNING_KEY_BASE64 }} - run: | - echo $CERTIFICATE_BASE64 | base64 --decode > signing-cert.p12 - - # This version uploads a build to Testflight - - name: Build & upload iOS size analysis binary to Sentry - run: bundle exec fastlane ios build_upload_testflight - env: - ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }} - ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }} - ASC_KEY: ${{ secrets.ASC_PRIVATE_KEY }} - SIGNING_KEY_PASSWORD: ${{ secrets.IOS_DIST_SIGNING_KEY_PASSWORD }} - SIGNING_KEY_FILE_PATH: signing-cert.p12 - EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - SENTRY_SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_SENTRY_AUTH_TOKEN }} - CONFIGURATION: Release - EMERGE_BUILD_TYPE: release - - build_adhoc: - runs-on: macos-15 - - defaults: - run: - working-directory: ./ios - - steps: - - name: Checkout - uses: actions/checkout@v6 - with: - fetch-depth: 0 - - - name: Select Xcode version - run: sudo xcode-select -s '/Applications/Xcode_26.0.1.app/Contents/Developer' - - - name: Set up Ruby env - uses: ruby/setup-ruby@v1 - with: - ruby-version: 3.3.10 - bundler-cache: true - - - name: Setup gems - run: exec ../.github/scripts/ios/setup.sh - - - name: Decode signing certificate into a file - env: - CERTIFICATE_BASE64: ${{ secrets.IOS_DIST_SIGNING_KEY_BASE64 }} - run: | - echo $CERTIFICATE_BASE64 | base64 --decode > signing-cert.p12 - - - name: Build & upload iOS AdHoc binary to Sentry - run: bundle exec fastlane ios build_upload_emerge - env: - ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }} - ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }} - ASC_KEY: ${{ secrets.ASC_PRIVATE_KEY }} - SIGNING_KEY_PASSWORD: ${{ secrets.IOS_DIST_SIGNING_KEY_PASSWORD }} - SIGNING_KEY_FILE_PATH: signing-cert.p12 - EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - SENTRY_SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_SENTRY_AUTH_TOKEN }} - CONFIGURATION: AdHoc - EMERGE_BUILD_TYPE: main-adhoc - PROV_PROFILE_NAME: HackerNews AdHoc Distribution - WIDGET_PROV_PROFILE_NAME: HackerNews AdHoc HomeWidget - ADHOC: true - APP_ID_SUFFIX: adhoc diff --git a/.github/workflows/ios_emerge_upload_pr.yml b/.github/workflows/ios_emerge_upload_pr.yml index ab00c95c..5704531b 100644 --- a/.github/workflows/ios_emerge_upload_pr.yml +++ b/.github/workflows/ios_emerge_upload_pr.yml @@ -22,6 +22,9 @@ jobs: - name: Select Xcode version run: sudo xcode-select -s '/Applications/Xcode_26.0.1.app/Contents/Developer' + - name: Install iOS platform + run: xcodebuild -downloadPlatform iOS + - name: Set up Ruby env uses: ruby/setup-ruby@v1 with: @@ -37,7 +40,7 @@ jobs: run: | echo $CERTIFICATE_BASE64 | base64 --decode > signing-cert.p12 - - name: Build & upload iOS size analysis binary to Emerge Tools + - name: Build iOS binary run: bundle exec fastlane ios build_upload_emerge env: ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }} @@ -50,3 +53,55 @@ jobs: SENTRY_SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_SENTRY_AUTH_TOKEN }} CONFIGURATION: Release EMERGE_BUILD_TYPE: pull-request + + - name: Print build log on failure + if: failure() + run: | + echo "=== Full Gym Build Log ===" + cat ~/Library/Logs/gym/HackerNews-HackerNews.log || echo "Log file not found" + + - name: Upload to Emerge Tools via REST API + env: + EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }} + run: | + set -e + + ZIP_PATH="./build/HackerNews.xcarchive.zip" + + echo "Zipping xcarchive..." + cd build && zip -r -q HackerNews.xcarchive.zip HackerNews.xcarchive && cd .. + + echo "Getting upload URL from Emerge..." + UPLOAD_RESPONSE=$(curl -s -X POST "https://api.emergetools.com/upload" \ + -H "Accept: application/json" \ + -H "Content-Type: application/json" \ + -H "X-API-Token: $EMERGE_API_TOKEN" \ + -d '{ + "filename": "HackerNews.xcarchive.zip", + "branch": "${{ github.head_ref }}", + "repoName": "${{ github.repository }}", + "sha": "${{ github.event.pull_request.head.sha }}", + "baseSha": "${{ github.event.pull_request.base.sha }}", + "prNumber": "${{ github.event.pull_request.number }}" + }') + + echo "Upload response: $UPLOAD_RESPONSE" + + UPLOAD_URL=$(echo "$UPLOAD_RESPONSE" | jq -r '.uploadURL') + + if [ -z "$UPLOAD_URL" ] || [ "$UPLOAD_URL" = "null" ]; then + echo "Failed to get upload URL. Response: $UPLOAD_RESPONSE" + exit 1 + fi + + echo "Uploading to Emerge..." + UPLOAD_STATUS=$(curl -s -o /dev/null -w "%{http_code}" -X PUT "$UPLOAD_URL" \ + -H "Content-Type: application/zip" \ + -T "$ZIP_PATH") + + if [ "$UPLOAD_STATUS" -ne 200 ]; then + echo "Upload failed with status: $UPLOAD_STATUS" + exit 1 + fi + + echo "Successfully uploaded to Emerge Tools!" diff --git a/.github/workflows/ios_emerge_upload_snapshots.yml b/.github/workflows/ios_emerge_upload_snapshots.yml deleted file mode 100644 index 3c9ba0a1..00000000 --- a/.github/workflows/ios_emerge_upload_snapshots.yml +++ /dev/null @@ -1,93 +0,0 @@ -name: Emerge PR iOS Upload (Snapshots) - -on: - push: - branches: [main] - pull_request: - branches: [main] - paths: [ios/**, .github/workflows/ios*] - -jobs: - upload_emerge_snapshots: - runs-on: macos-15 - - defaults: - run: - working-directory: ./ios - - steps: - - name: Checkout - uses: actions/checkout@v6 - with: - fetch-depth: 0 - - - name: Select Xcode version - run: sudo xcode-select -s '/Applications/Xcode_26.0.1.app/Contents/Developer' - - - name: Set up Ruby env - uses: ruby/setup-ruby@v1 - with: - ruby-version: 3.3.10 - bundler-cache: true - - - name: Setup gems - run: exec ../.github/scripts/ios/setup.sh - - - name: Build & upload iOS snapshot binary to Emerge Tools - run: bundle exec fastlane ios build_upload_emerge_snapshot - env: - EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }} - - upload_swift_snapshot_testing_snapshots: - runs-on: macos-15 - defaults: - run: - working-directory: ./ios - steps: - - name: Checkout - uses: actions/checkout@v6 - with: - fetch-depth: 0 - - name: Select Xcode version - run: sudo xcode-select -s '/Applications/Xcode_26.0.1.app/Contents/Developer' - - name: Ruby setup - uses: ruby/setup-ruby@v1 - with: - ruby-version: 3.3.10 - bundler-cache: true - - name: Install gems - run: gem install xcpretty emerge - - name: Set up App Store Connect API Key - run: | - ABSOLUTE_KEY_PATH="$(pwd)/app_store_key.p8" - echo "${{ secrets.ASC_PRIVATE_KEY }}" > "$ABSOLUTE_KEY_PATH" - echo "AUTH_KEY_PATH=$ABSOLUTE_KEY_PATH" >> $GITHUB_ENV - - name: Generate new snapshots - env: - APP_STORE_KEY_ID: ${{ secrets.ASC_KEY_ID }} - APP_STORE_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }} - run: | - set -o pipefail && xcodebuild test \ - -scheme HackerNews \ - -sdk iphonesimulator \ - -destination 'platform=iOS Simulator,name=iPhone 16 Pro,OS=18.6' \ - -only-testing:HackerNewsTests/SwiftSnapshotTest \ - -allowProvisioningUpdates \ - -authenticationKeyPath "$AUTH_KEY_PATH" \ - -authenticationKeyID $APP_STORE_KEY_ID \ - -authenticationKeyIssuerID $APP_STORE_ISSUER_ID \ - ONLY_ACTIVE_ARCH=YES \ - TARGETED_DEVICE_FAMILY=1 \ - SUPPORTS_MACCATALYST=NO | xcpretty - continue-on-error: true - - name: Upload snapshots - env: - EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }} - run: | - emerge upload snapshots \ - --name "HackerNews Swift-Snapshot-Testing" \ - --id "com.emerge.hn.Hacker-News.swiftsnapshottesting" \ - --repo-name "EmergeTools/hackernews" \ - --client-library swift-snapshot-testing \ - --project-root . \ - --debug diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index 148d8946..0a7c411a 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -186,10 +186,7 @@ platform :ios do load_asc_api_key prepare_signing build_app_for_scheme - emerge( - tag: ENV['EMERGE_BUILD_TYPE'], - app_id_suffix: ENV['APP_ID_SUFFIX'] - ) + # Emerge upload moved to GitHub Action step using REST API export_thinned_build sentry_upload_build( auth_token: ENV['SENTRY_SENTRY_AUTH_TOKEN'],