Create Release PRs #98
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Create Release PRs | |
| # Note: The "Use workflow from" dropdown selects which version of THIS workflow to run. | |
| # Always select "main" unless you're testing workflow changes from another branch. | |
| # The "base_branch" input below determines where the release PR will be targeted. | |
| # This workflow bumps version and creates PRs in the iOS-SDK and XCFramework SDK. | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: "The version number of the release (e.g., 5.2.15 or 5.2.3-beta-01)" | |
| type: string | |
| required: true | |
| base_branch: | |
| description: 'Target branch for the PR (e.g. main for regular releases, 5.3-main for 5.3.x releases)' | |
| type: string | |
| required: false | |
| default: 'main' | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| jobs: | |
| # Step 1: Use reusable workflow to prepare release branch | |
| prep: | |
| uses: OneSignal/sdk-actions/.github/workflows/prep-release.yml@3baaadcef6da01536c48b9ac2b0c320f43b771c5 | |
| with: | |
| version: ${{ github.event.inputs.version }} | |
| target_branch: ${{ github.event.inputs.base_branch }} | |
| # Step 2: Update iOS-specific files and build binaries | |
| update-and-build: | |
| needs: prep | |
| runs-on: macos-13 | |
| outputs: | |
| version_from: ${{ steps.extract_version.outputs.current_version }} | |
| env: | |
| VERSION: ${{ github.event.inputs.version }} | |
| BASE_BRANCH: ${{ github.event.inputs.base_branch }} | |
| RELEASE_BRANCH: ${{ needs.prep.outputs.release_branch }} | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| steps: | |
| - name: 📋 Display Configuration | |
| run: | | |
| echo "============================================" | |
| echo "📦 Release Version: $VERSION" | |
| echo "🎯 Base Branch (PR Target): $BASE_BRANCH" | |
| echo "🌿 Release Branch: $RELEASE_BRANCH" | |
| echo "============================================" | |
| - name: Checkout OneSignal-iOS-SDK | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ needs.prep.outputs.release_branch }} | |
| fetch-depth: 0 | |
| - name: Configure Git | |
| run: | | |
| git config --local user.email "[email protected]" | |
| git config --local user.name "github-actions[bot]" | |
| - name: Extract Current Version | |
| id: extract_version | |
| run: | | |
| CURRENT_VERSION=$(grep -E "s.version\s*=" OneSignal.podspec | sed -E 's/.*"(.*)".*/\1/') | |
| echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT | |
| echo "Current version: $CURRENT_VERSION" | |
| - name: Setup Xcode | |
| uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: '15.2' | |
| - name: Install the Apple distribution certificate and provisioning profile (OneSignal) | |
| uses: apple-actions/import-codesign-certs@v2 | |
| with: | |
| keychain-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }} | |
| p12-file-base64: ${{ secrets.CERTIFICATES_P12 }} | |
| p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }} | |
| - name: Install the Apple distribution certificate and provisioning profile (Lilomi) | |
| uses: apple-actions/import-codesign-certs@v2 | |
| with: | |
| create-keychain: false # do not create a new keychain for this value | |
| keychain-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }} | |
| p12-file-base64: ${{ secrets.DEV_CERTIFICATES_P12 }} | |
| p12-password: ${{ secrets.DEV_CERTIFICATES_P12_PASSWORD }} | |
| - name: Update Version in SDK and Podspec Files | |
| run: | | |
| cd iOS_SDK/OneSignalSDK | |
| chmod +x ./update_version.sh | |
| ./update_version.sh $VERSION | |
| shell: bash | |
| - name: Commit Version Bump and Push Changes | |
| run: | | |
| git commit -am "chore: bump version to $VERSION" | |
| git push origin $RELEASE_BRANCH | |
| # - name: Build Binaries | |
| # run: | | |
| # cd iOS_SDK/OneSignalSDK | |
| # chmod +x ./build_all_frameworks.sh | |
| # ./build_all_frameworks.sh | |
| # shell: bash | |
| # - name: Code Sign | |
| # run: | | |
| # cd iOS_SDK/OneSignalSDK | |
| # codesign --timestamp -v --sign "Apple Distribution: OneSignal, Inc. (J3J28YJX9L)" OneSignal_Core/OneSignalCore.xcframework | |
| # codesign --timestamp -v --sign "Apple Distribution: OneSignal, Inc. (J3J28YJX9L)" OneSignal_Extension/OneSignalExtension.xcframework | |
| # codesign --timestamp -v --sign "Apple Distribution: OneSignal, Inc. (J3J28YJX9L)" OneSignal_InAppMessages/OneSignalInAppMessages.xcframework | |
| # codesign --timestamp -v --sign "Apple Distribution: OneSignal, Inc. (J3J28YJX9L)" OneSignal_Location/OneSignalLocation.xcframework | |
| # codesign --timestamp -v --sign "Apple Distribution: OneSignal, Inc. (J3J28YJX9L)" OneSignal_Notifications/OneSignalNotifications.xcframework | |
| # codesign --timestamp -v --sign "Apple Distribution: OneSignal, Inc. (J3J28YJX9L)" OneSignal_OSCore/OneSignalOSCore.xcframework | |
| # codesign --timestamp -v --sign "Apple Distribution: OneSignal, Inc. (J3J28YJX9L)" OneSignal_Outcomes/OneSignalOutcomes.xcframework | |
| # codesign --timestamp -v --sign "Apple Distribution: OneSignal, Inc. (J3J28YJX9L)" OneSignal_User/OneSignalUser.xcframework | |
| # codesign --timestamp -v --sign "Apple Distribution: OneSignal, Inc. (J3J28YJX9L)" OneSignal_XCFramework/OneSignalFramework.xcframework | |
| # codesign --timestamp -v --sign "Apple Distribution: OneSignal, Inc. (J3J28YJX9L)" OneSignal_LiveActivities/OneSignalLiveActivities.xcframework | |
| # shell: bash | |
| # - name: Commit Build and Push Changes | |
| # run: | | |
| # git commit -am "chore: build binaries" | |
| # git push origin $RELEASE_BRANCH | |
| - name: Update Swift Package | |
| run: | | |
| cd iOS_SDK/OneSignalSDK | |
| chmod +x ./update_swift_package.sh | |
| ./update_swift_package.sh $VERSION | |
| shell: bash | |
| - name: Commit Swift Package and Push Changes | |
| run: | | |
| git commit -am "chore: update Swift package" | |
| git push origin $RELEASE_BRANCH | |
| # Step 3: Use reusable workflow to create iOS SDK PR with release notes | |
| create-ios-pr: | |
| needs: [prep, update-and-build] | |
| uses: OneSignal/sdk-actions/.github/workflows/create-release.yml@3baaadcef6da01536c48b9ac2b0c320f43b771c5 | |
| with: | |
| release_branch: ${{ needs.prep.outputs.release_branch }} | |
| target_branch: ${{ github.event.inputs.base_branch }} | |
| # Step 4: Update XCFramework repository | |
| update-xcframework: | |
| needs: [prep, update-and-build, create-ios-pr] | |
| runs-on: macos-13 | |
| env: | |
| VERSION: ${{ github.event.inputs.version }} | |
| BASE_BRANCH: ${{ github.event.inputs.base_branch }} | |
| RELEASE_BRANCH: ${{ needs.prep.outputs.release_branch }} | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| steps: | |
| - name: Checkout OneSignal-iOS-SDK | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ needs.prep.outputs.release_branch }} | |
| path: ios-sdk-repo | |
| - name: Get iOS SDK PR Body | |
| run: | | |
| cd ios-sdk-repo | |
| # Find the PR that was just created for this version | |
| PR_NUMBER=$(gh pr list --state open --search "Release $VERSION in:title" --json number --jq '.[0].number // empty') | |
| if [[ -n "$PR_NUMBER" ]]; then | |
| echo "Found iOS SDK PR: #$PR_NUMBER" | |
| gh pr view "$PR_NUMBER" --json body --jq '.body' > ../pr_body.md | |
| else | |
| echo "Warning: Could not find iOS SDK PR, using default body" | |
| echo "## Release $VERSION" > ../pr_body.md | |
| echo "" >> ../pr_body.md | |
| echo "See iOS SDK release: https://github.com/OneSignal/OneSignal-iOS-SDK/releases/tag/$VERSION" >> ../pr_body.md | |
| fi | |
| - name: Checkout OneSignal-XCFramework | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: OneSignal/OneSignal-XCFramework | |
| ref: ${{ env.BASE_BRANCH }} | |
| path: xcframework-repo | |
| token: ${{ secrets.PAT_TOKEN_ONESIGNAL_XCFRAMEWORK }} | |
| - name: Update Package.swift in XCFramework Repository | |
| run: | | |
| # Copy Package.swift from iOS SDK to XCFramework repo | |
| cp ios-sdk-repo/Package.swift xcframework-repo/Package.swift | |
| # Update package name to OneSignalXCFramework | |
| sed -i '' 's/name: "OneSignalFramework"/name: "OneSignalXCFramework"/' xcframework-repo/Package.swift | |
| # Navigate to XCFramework repo | |
| cd xcframework-repo | |
| # Delete remote branch if it exists | |
| git push origin --delete $RELEASE_BRANCH || true | |
| # Create release branch | |
| git checkout -b $RELEASE_BRANCH | |
| # Configure git | |
| git config --local user.email "[email protected]" | |
| git config --local user.name "github-actions[bot]" | |
| # Commit changes | |
| git commit -am "Release $VERSION" | |
| # Push to remote | |
| git push origin $RELEASE_BRANCH | |
| env: | |
| GH_TOKEN: ${{ secrets.PAT_TOKEN_ONESIGNAL_XCFRAMEWORK }} | |
| - name: Create Pull Request for XCFramework Repository | |
| env: | |
| GH_TOKEN: ${{ secrets.PAT_TOKEN_ONESIGNAL_XCFRAMEWORK }} | |
| run: | | |
| cd xcframework-repo | |
| gh pr create \ | |
| --title "Release $VERSION" \ | |
| --body-file ../pr_body.md \ | |
| --head "$RELEASE_BRANCH" \ | |
| --base "$BASE_BRANCH" |