name: BuildReleaseApk on: pull_request: branches: - master types: [opened, synchronize, reopened] push: branches: - master jobs: buildReleaseApk: runs-on: ubuntu-latest steps: - name: Checkout project uses: actions/checkout@v4 with: fetch-depth: "0" - name: Specify node version uses: actions/setup-node@v4 with: node-version: 20 - name: Use npm caches uses: actions/cache@v4 with: path: ~/.npm key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-npm- - name: Use specific Java version for sdkmanager to work uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' cache: 'gradle' - name: Install node_modules run: npm install --omit=dev --yes - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: 3.1.6 bundler-cache: true - name: Cache Ruby Gems uses: actions/cache@v4 with: path: vendor/bundle key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }} restore-keys: | ${{ runner.os }}-gems- - name: Generate Build Number based on timestamp id: build_number run: | NEW_BUILD_NUMBER="$(date +%s)" echo "NEW_BUILD_NUMBER=$NEW_BUILD_NUMBER" >> $GITHUB_ENV - name: Prepare Keystore run: bundle exec fastlane android prepare_keystore env: KEYSTORE_FILE_HEX: ${{ secrets.KEYSTORE_FILE_HEX }} - name: Update Version Code, Build, and Sign APK id: build_and_sign_apk run: | bundle exec fastlane android update_version_build_and_sign_apk env: BUILD_NUMBER: ${{ env.NEW_BUILD_NUMBER }} KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} - name: Determine APK Filename and Path id: determine_apk_path run: | VERSION_NAME=$(grep versionName android/app/build.gradle | awk '{print $2}' | tr -d '"') BRANCH_NAME=${GITHUB_HEAD_REF:-${GITHUB_REF_NAME}} BRANCH_NAME=$(echo "$BRANCH_NAME" | sed 's/[^a-zA-Z0-9_-]/-/g') if [ -n "$BRANCH_NAME" ] && [ "$BRANCH_NAME" != "master" ]; then EXPECTED_FILENAME="BlueWallet-${VERSION_NAME}-${NEW_BUILD_NUMBER}-${BRANCH_NAME}.apk" else EXPECTED_FILENAME="BlueWallet-${VERSION_NAME}-${NEW_BUILD_NUMBER}.apk" fi APK_PATH="android/app/build/outputs/apk/release/${EXPECTED_FILENAME}" echo "EXPECTED_FILENAME=${EXPECTED_FILENAME}" >> $GITHUB_ENV echo "APK_PATH=${APK_PATH}" >> $GITHUB_ENV - name: Upload APK as artifact uses: actions/upload-artifact@v4 with: name: signed-apk path: ${{ env.APK_PATH }} browserstack: runs-on: ubuntu-latest needs: buildReleaseApk if: ${{ github.event_name == 'pull_request' }} steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: 3.1.6 bundler-cache: true - name: Install dependencies with Bundler run: bundle install --jobs 4 --retry 3 - name: Download APK artifact uses: actions/download-artifact@v4 with: name: signed-apk - name: Set APK Path run: | APK_PATH=$(find ${{ github.workspace }} -name '*.apk') echo "APK_PATH=$APK_PATH" >> $GITHUB_ENV - name: Upload APK to BrowserStack and Post PR Comment env: BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }} BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }} GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: bundle exec fastlane upload_to_browserstack_and_comment