diff --git a/.github/workflows/alpha.yml b/.github/workflows/alpha.yml new file mode 100644 index 0000000000..52fcd14441 --- /dev/null +++ b/.github/workflows/alpha.yml @@ -0,0 +1,104 @@ +name: Make TestFlight Alpha Build + +on: + workflow_dispatch: + branches: + - develop + - graeme/ios-nightly-alphas # TODO: Remove this before merging + #- '!develop' # filter out PRs matching that pattern + inputs: + destination: + description: "TestFlight Group" + required: true + default: "Latest Alpha Group" + type: string + + push: + branches: [ graeme/ios-nightly-alphas ] + +jobs: + make-alpha: + if: github.event.action == 0 || github.event.pull_request.merged == true # empty string returns 0; for case when workflow is triggered manually + runs-on: macos-13 + name: Make TestFlight Alpha Build + + steps: + + - name: Set destination output + id: destination + run: | + INPUT_DESTINATION=${{ github.event.inputs.destination }} + echo "destination=${INPUT_DESTINATION}" >> $GITHUB_OUTPUT + + # - name: Assert develop branch TODO: Uncomment before merging + # run: | + # case "${{ github.ref }}" in + # *develop/*) ;; + # *) echo "👎 Not develop branch"; exit 1 ;; + # esac + + - name: Register SSH keys for access to certificates + uses: webfactory/ssh-agent@v0.7.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY_FASTLANE_MATCH }} + + - name: Check out the code + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Set cache key hash + run: | + has_only_tags=$(jq '[ .object.pins[].state | has("version") ] | all' DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved) + if [[ "$has_only_tags" == "true" ]]; then + echo "cache_key_hash=${{ hashFiles('DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved') }}" >> $GITHUB_ENV + else + echo "Package.resolved contains dependencies specified by branch or commit, skipping cache." + fi + + - name: Cache SPM + if: env.cache_key_hash + uses: actions/cache@v3 + with: + path: DerivedData/SourcePackages + key: ${{ runner.os }}-spm-${{ env.cache_key_hash }} + restore-keys: | + ${{ runner.os }}-spm- + + - name: Select Xcode + run: sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer + + - name: Prepare fastlane + run: bundle install + + - name: Archive and upload the app + env: + APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }} + APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }} + APPLE_API_KEY_ISSUER: ${{ secrets.APPLE_API_KEY_ISSUER }} + MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} + run: | + app_version="$(cut -d ' ' -f 3 < Configuration/Version.xcconfig)" + bundle exec fastlane increment_build_number_for_version:app_version + bundle exec fastlane release_alpha groups:"${{ steps.destination.outputs.destination }}" + build_version="cat DuckDuckGo.xcodeproj/project.pbxproj | grep -m1 'CURRENT_PROJ ECT_VERSION' | cut -d'=' -f2 | tr -d ';' | tr -d ' '" + echo "dsyms_path=${{ github.workspace }}/DuckDuckGo.app.dSYM.zip" >> $GITHUB_ENV + echo "app_version=${app_version}" >> $GITHUB_ENV + echo "build_version=${build_version}" >> $GITHUB_ENV + + - name: Upload dSYMs artifact + uses: actions/upload-artifact@v3 + with: + name: DuckDuckGo-Alpha-dSYM-${{ env.app_version }} + path: ${{ env.dsyms_path }} + + - name: Upload debug symbols to Asana + env: + ASANA_ACCESS_TOKEN: ${{ secrets.ASANA_ACCESS_TOKEN }} + run: | + asana_dsyms_path="${{ github.workspace }}/DuckDuckGo-Alpha-${{ env.app_version }}(${{ env.build_version }})-dSYM.zip" + mv -f "${{ env.dsyms_path }}" "$asana_dsyms_path" + + curl -s "https://app.asana.com/0/0/1205344386326139/f/attachments" \ + -H "Authorization: Bearer ${{ secrets.ASANA_ACCESS_TOKEN }}" \ + --form "file=@${asana_dsyms_path};type=application/zip"