diff --git a/.github/workflows/bump-build.yml b/.github/workflows/bump-build.yml deleted file mode 100644 index b88733e9..00000000 --- a/.github/workflows/bump-build.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Bump build number -on: - workflow_dispatch: - -env: - APP_NAME: Yattee - -jobs: - bump_build: - name: Bump build number - runs-on: macos-latest - steps: - - uses: actions/checkout@v4 - - name: Configure git - run: | - git config --local user.email "github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" - - uses: ruby/setup-ruby@v1 - with: - ruby-version: '3.1' - bundler-cache: true - cache-version: 1 - - uses: maierj/fastlane-action@v3.0.0 - with: - lane: bump_build - - run: echo "BUILD_NUMBER=$(cat Yattee.xcodeproj/project.pbxproj | grep -m 1 CURRENT_PROJECT_VERSION | cut -d' ' -f3 | sed 's/;//g')" >> $GITHUB_ENV - - name: Create Pull Request - uses: peter-evans/create-pull-request@v7 - with: - token: ${{ secrets.GIT_AUTHORIZATION }} - branch: actions/bump-build-to-${{ env.BUILD_NUMBER }} - base: main - title: Bump build number to ${{ env.BUILD_NUMBER }} - - diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8b9885d5..1b8bd873 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,6 +23,10 @@ on: type: boolean default: true +concurrency: + group: release + cancel-in-progress: false + env: APP_NAME: Yattee FASTLANE_USER: ${{ secrets.FASTLANE_USER }} @@ -41,8 +45,37 @@ env: TESTFLIGHT_EXTERNAL_GROUPS: ${{ secrets.TESTFLIGHT_EXTERNAL_GROUPS }} jobs: + determine_build_number: + name: Determine build number + runs-on: macos-latest + outputs: + build_number: ${{ steps.calc.outputs.build_number }} + version_number: ${{ steps.version.outputs.version_number }} + steps: + - uses: actions/checkout@v4 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.1' + bundler-cache: true + cache-version: 1 + - uses: maierj/fastlane-action@v3.0.0 + with: + lane: latest_build_number + - name: Calculate next build number + id: calc + run: | + LATEST=$(cat latest_build_number.txt) + NEXT=$((LATEST + 1)) + echo "build_number=$NEXT" >> $GITHUB_OUTPUT + - name: Read version number + id: version + run: | + VERSION=$(grep -m 1 MARKETING_VERSION Yattee.xcodeproj/project.pbxproj | cut -d' ' -f3 | sed 's/;//g') + echo "version_number=$VERSION" >> $GITHUB_OUTPUT + ios_beta: if: ${{ inputs.build_ios }} + needs: [determine_build_number] name: Release iOS to TestFlight runs-on: macos-latest steps: @@ -55,6 +88,9 @@ jobs: - name: Set signing to manual for CI run: | sed -i '' 's/CODE_SIGN_STYLE = Automatic/CODE_SIGN_STYLE = Manual/' Yattee.xcodeproj/project.pbxproj + - name: Set build number + run: | + sed -i '' 's/CURRENT_PROJECT_VERSION = [0-9]*/CURRENT_PROJECT_VERSION = ${{ needs.determine_build_number.outputs.build_number }}/' Yattee.xcodeproj/project.pbxproj - name: Clear SPM cache run: rm -rf ~/Library/Caches/org.swift.swiftpm/artifacts - uses: maierj/fastlane-action@v3.0.0 @@ -68,6 +104,7 @@ jobs: tvos_beta: if: ${{ inputs.build_tvos }} + needs: [determine_build_number] name: Release tvOS to TestFlight runs-on: macos-latest steps: @@ -80,6 +117,9 @@ jobs: - name: Set signing to manual for CI run: | sed -i '' 's/CODE_SIGN_STYLE = Automatic/CODE_SIGN_STYLE = Manual/' Yattee.xcodeproj/project.pbxproj + - name: Set build number + run: | + sed -i '' 's/CURRENT_PROJECT_VERSION = [0-9]*/CURRENT_PROJECT_VERSION = ${{ needs.determine_build_number.outputs.build_number }}/' Yattee.xcodeproj/project.pbxproj - name: Clear SPM cache run: rm -rf ~/Library/Caches/org.swift.swiftpm/artifacts - uses: maierj/fastlane-action@v3.0.0 @@ -93,6 +133,7 @@ jobs: mac_beta: if: ${{ inputs.build_mac_beta }} + needs: [determine_build_number] name: Release macOS to TestFlight runs-on: macos-latest steps: @@ -105,6 +146,9 @@ jobs: - name: Set signing to manual for CI run: | sed -i '' 's/CODE_SIGN_STYLE = Automatic/CODE_SIGN_STYLE = Manual/' Yattee.xcodeproj/project.pbxproj + - name: Set build number + run: | + sed -i '' 's/CURRENT_PROJECT_VERSION = [0-9]*/CURRENT_PROJECT_VERSION = ${{ needs.determine_build_number.outputs.build_number }}/' Yattee.xcodeproj/project.pbxproj - name: Clear SPM cache run: rm -rf ~/Library/Caches/org.swift.swiftpm/artifacts - uses: maierj/fastlane-action@v3.0.0 @@ -118,8 +162,12 @@ jobs: mac_notarized: if: ${{ inputs.build_mac_notarized }} + needs: [determine_build_number] name: Build and notarize macOS app runs-on: macos-latest + env: + BUILD_NUMBER: ${{ needs.determine_build_number.outputs.build_number }} + VERSION_NUMBER: ${{ needs.determine_build_number.outputs.version_number }} steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 @@ -130,14 +178,14 @@ jobs: - name: Set signing to manual with Developer ID run: | sed -i '' 's/CODE_SIGN_STYLE = Automatic/CODE_SIGN_STYLE = Manual/' Yattee.xcodeproj/project.pbxproj + - name: Set build number + run: | + sed -i '' 's/CURRENT_PROJECT_VERSION = [0-9]*/CURRENT_PROJECT_VERSION = ${{ env.BUILD_NUMBER }}/' Yattee.xcodeproj/project.pbxproj - name: Clear SPM cache run: rm -rf ~/Library/Caches/org.swift.swiftpm/artifacts - uses: maierj/fastlane-action@v3.0.0 with: lane: mac build_and_notarize - - run: | - echo "BUILD_NUMBER=$(cat Yattee.xcodeproj/project.pbxproj | grep -m 1 CURRENT_PROJECT_VERSION | cut -d' ' -f3 | sed 's/;//g')" >> $GITHUB_ENV - echo "VERSION_NUMBER=$(cat Yattee.xcodeproj/project.pbxproj | grep -m 1 MARKETING_VERSION | cut -d' ' -f3 | sed 's/;//g')" >> $GITHUB_ENV - run: | echo "APP_PATH=fastlane/builds/${{ env.VERSION_NUMBER }}-${{ env.BUILD_NUMBER }}/macOS/Yattee.app" >> $GITHUB_ENV echo "ZIP_PATH=fastlane/builds/${{ env.VERSION_NUMBER }}-${{ env.BUILD_NUMBER }}/macOS/Yattee-${{ env.VERSION_NUMBER }}-macOS.zip" >> $GITHUB_ENV @@ -151,13 +199,26 @@ jobs: release: if: ${{ inputs.create_release && !cancelled() }} - needs: ['ios_beta', 'tvos_beta', 'mac_beta', 'mac_notarized'] + needs: [determine_build_number, ios_beta, tvos_beta, mac_beta, mac_notarized] name: Create GitHub release runs-on: ubuntu-latest + permissions: + contents: write + env: + BUILD_NUMBER: ${{ needs.determine_build_number.outputs.build_number }} + VERSION_NUMBER: ${{ needs.determine_build_number.outputs.version_number }} steps: - uses: actions/checkout@v4 - - run: echo "BUILD_NUMBER=$(cat Yattee.xcodeproj/project.pbxproj | grep -m 1 CURRENT_PROJECT_VERSION | cut -d' ' -f3 | sed 's/;//g')" >> $GITHUB_ENV - - run: echo "VERSION_NUMBER=$(cat Yattee.xcodeproj/project.pbxproj | grep -m 1 MARKETING_VERSION | cut -d' ' -f3 | sed 's/;//g')" >> $GITHUB_ENV + with: + token: ${{ secrets.GIT_AUTHORIZATION }} + - name: Commit build number + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + sed -i 's/CURRENT_PROJECT_VERSION = [0-9]*/CURRENT_PROJECT_VERSION = ${{ env.BUILD_NUMBER }}/' Yattee.xcodeproj/project.pbxproj + git add Yattee.xcodeproj/project.pbxproj + git commit -m "Bump build number to ${{ env.BUILD_NUMBER }}" + git push - uses: actions/download-artifact@v4 with: path: artifacts @@ -170,5 +231,5 @@ jobs: bodyFile: CHANGELOG.md update_altstore: - needs: ['release'] + needs: [release] uses: ./.github/workflows/update-altstore.yml diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 47e3f05a..c8fa851b 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -41,6 +41,25 @@ before_all do update_fastlane end +desc "Get latest TestFlight build number across all platforms" +lane :latest_build_number do + api_key = app_store_connect_api_key( + key_id: DEVELOPER_KEY_ID, + issuer_id: DEVELOPER_KEY_ISSUER_ID, + key_content: DEVELOPER_KEY_CONTENT, + is_key_content_base64: true + ) + + ios_build = latest_testflight_build_number(api_key: api_key, app_identifier: DEVELOPER_APP_IDENTIFIER, platform: "ios") + tvos_build = latest_testflight_build_number(api_key: api_key, app_identifier: DEVELOPER_APP_IDENTIFIER, platform: "appletvos") + macos_build = latest_testflight_build_number(api_key: api_key, app_identifier: DEVELOPER_APP_IDENTIFIER, platform: "osx") + + max_build = [ios_build, tvos_build, macos_build].max + File.write("latest_build_number.txt", max_build.to_s) + UI.success("Latest TestFlight build number: #{max_build}") + max_build +end + desc "Bump build number and commit" lane :bump_build do increment_build_number(xcodeproj: XCODEPROJ)