Bump Native OneSignal SDKs #15
Workflow file for this run
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: Bump Native OneSignal SDKs | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| android_version: | |
| description: "Target OneSignal-Android-SDK version (e.g., 5.1.31)" | |
| required: true | |
| type: string | |
| ios_version: | |
| description: "Target OneSignal-iOS-SDK version (e.g., 5.2.10)" | |
| required: true | |
| type: string | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| jobs: | |
| bump-native-sdks: | |
| runs-on: ubuntu-latest | |
| env: | |
| GH_TOKEN: ${{ secrets.ONESIGNAL_PAT }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install gh CLI | |
| run: | | |
| sudo apt-get update -y | |
| sudo apt-get install -y gh jq | |
| - name: Configure GitHub CLI | |
| run: gh auth status || gh auth login --with-token <<< "${GH_TOKEN}" | |
| - name: Debug GH CLI access | |
| run: | | |
| echo "🔍 Checking authentication" | |
| gh auth status | |
| echo "🔍 Listing releases from Android SDK repo" | |
| gh release list --repo OneSignal/OneSignal-Android-SDK --limit 5 | |
| echo "🔍 Listing releases from iOS SDK repo" | |
| gh release list --repo OneSignal/OneSignal-iOS-SDK --limit 5 | |
| - name: Get current native SDK versions | |
| id: current | |
| run: | | |
| set -e | |
| cd "${GITHUB_WORKSPACE}" || exit 1 | |
| ANDROID_FILE="com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml" | |
| IOS_FILE="com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml" | |
| if [[ ! -f "$ANDROID_FILE" ]]; then | |
| echo "❌ Android dependency file not found!" | |
| find . -name "OneSignalAndroidDependencies.xml" | |
| exit 1 | |
| fi | |
| if [[ ! -f "$IOS_FILE" ]]; then | |
| echo "❌ iOS dependency file not found!" | |
| find . -name "OneSignaliOSDependencies.xml" | |
| exit 1 | |
| fi | |
| echo "✅ Found both dependency files." | |
| echo "→ Android: $ANDROID_FILE" | |
| echo "→ iOS: $IOS_FILE" | |
| ANDROID_CURRENT=$(grep -oE 'com\.onesignal:OneSignal:[0-9]+\.[0-9]+\.[0-9]+' "$ANDROID_FILE" | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') | |
| IOS_CURRENT=$(grep -oE 'OneSignalXCFramework\" version=\"[0-9]+\.[0-9]+\.[0-9]+' "$IOS_FILE" | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') | |
| echo "Detected current Android SDK: ${ANDROID_CURRENT:-<none>}" | |
| echo "Detected current iOS SDK: ${IOS_CURRENT:-<none>}" | |
| echo "android_current=${ANDROID_CURRENT}" >> $GITHUB_OUTPUT | |
| echo "ios_current=${IOS_CURRENT}" >> $GITHUB_OUTPUT | |
| - name: Gather all release notes between versions | |
| id: notes | |
| env: | |
| GH_TOKEN: ${{ secrets.ONESIGNAL_PAT }} | |
| run: | | |
| ANDROID_OLD=${{ steps.current.outputs.android_current }} | |
| ANDROID_NEW=${{ inputs.android_version }} | |
| IOS_OLD=${{ steps.current.outputs.ios_current }} | |
| IOS_NEW=${{ inputs.ios_version }} | |
| get_notes_between() { | |
| local repo=$1 | |
| local from=$2 | |
| local to=$3 | |
| echo "🔎 Gathering release notes for $repo from $from → $to" | |
| RELEASES=$(gh release list --repo "$repo" --limit 200 --json tagName --jq '.[] | .tagName' | sed 's/^Release //g' | sort -V) | |
| START=0 | |
| NOTES="" | |
| FOUND=0 | |
| for TAG in $RELEASES; do | |
| echo "Checking tag: $TAG" | |
| if [[ "$TAG" == "$from" ]]; then | |
| START=1 | |
| continue | |
| fi | |
| if [[ "$START" -eq 1 ]]; then | |
| BODY=$(gh release view "$TAG" --repo "$repo" --json body,tagName --jq '". - ### " + .tagName + "\n" + (.body // "")' 2>/dev/null || true) | |
| if [[ -n "$BODY" ]]; then | |
| NOTES+="$BODY\n\n" | |
| FOUND=1 | |
| fi | |
| fi | |
| if [[ "$TAG" == "$to" ]]; then | |
| break | |
| fi | |
| done | |
| if [[ "$FOUND" -eq 0 ]]; then | |
| echo "⚠️ No notes found between $from → $to (possibly mismatched tags)" | |
| fi | |
| echo -e "$NOTES" | |
| } | |
| ANDROID_NOTES=$(get_notes_between "OneSignal/OneSignal-Android-SDK" "$ANDROID_OLD" "$ANDROID_NEW") | |
| IOS_NOTES=$(get_notes_between "OneSignal/OneSignal-iOS-SDK" "$IOS_OLD" "$IOS_NEW") | |
| echo "android_notes<<EOF" >> $GITHUB_OUTPUT | |
| echo "$ANDROID_NOTES" >> $GITHUB_OUTPUT | |
| echo "EOF" >> $GITHUB_OUTPUT | |
| echo "ios_notes<<EOF" >> $GITHUB_OUTPUT | |
| echo "$IOS_NOTES" >> $GITHUB_OUTPUT | |
| echo "EOF" >> $GITHUB_OUTPUT | |
| - name: Update native SDK versions in Unity dependencies | |
| run: | | |
| ANDROID_NEW=${{ inputs.android_version }} | |
| IOS_NEW=${{ inputs.ios_version }} | |
| echo "🔧 Updating Android SDK to $ANDROID_NEW in XML and Gradle..." | |
| for FILE in \ | |
| com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml \ | |
| com.onesignal.unity.android/Editor/mainTemplate.gradle \ | |
| com.onesignal.unity.android/Editor/AndroidResolverDependencies.xml | |
| do | |
| if [[ -f "$FILE" ]]; then | |
| sed -i "s#com\.onesignal:OneSignal:[0-9.]\+#com.onesignal:OneSignal:${ANDROID_NEW}#g" "$FILE" | |
| echo "✅ Updated $FILE" | |
| else | |
| echo "⚠️ Skipping missing file: $FILE" | |
| fi | |
| done | |
| echo "🔧 Updating iOS SDK to $IOS_NEW..." | |
| IOS_FILE="com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml" | |
| if [[ -f "$IOS_FILE" ]]; then | |
| sed -i "s/OneSignalXCFramework\" version=\"[0-9.]\+/OneSignalXCFramework\" version=\"${IOS_NEW}/g" "$IOS_FILE" | |
| echo "✅ Updated $IOS_FILE" | |
| else | |
| echo "⚠️ Skipping missing file: $IOS_FILE" | |
| fi | |
| - name: Insert formatted Android/iOS release notes under '## [Unreleased]' | |
| run: | | |
| ANDROID_OLD=${{ steps.current.outputs.android_current }} | |
| IOS_OLD=${{ steps.current.outputs.ios_current }} | |
| ANDROID_NEW=${{ inputs.android_version }} | |
| IOS_NEW=${{ inputs.ios_version }} | |
| ANDROID_NOTES="${{ steps.notes.outputs.android_notes }}" | |
| IOS_NOTES="${{ steps.notes.outputs.ios_notes }}" | |
| CHANGELOG="OneSignalExample/Assets/OneSignal/CHANGELOG.md" | |
| TMPFILE=$(mktemp) | |
| INSERTION="\ | |
| - Updated included Android SDK from ${ANDROID_OLD} to [${ANDROID_NEW}](https://github.com/OneSignal/OneSignal-Android-SDK/releases/tag/${ANDROID_NEW})\n${ANDROID_NOTES}\n\ | |
| - Updated included iOS SDK from ${IOS_OLD} to [${IOS_NEW}](https://github.com/OneSignal/OneSignal-iOS-SDK/releases/tag/${IOS_NEW})\n${IOS_NOTES}\n\ | |
| \nFor full changes, see the [native release notes](https://github.com/OneSignal/OneSignal-Android-SDK/releases) and [iOS native release notes](https://github.com/OneSignal/OneSignal-iOS-SDK/releases)\n" | |
| awk -v insert="$INSERTION" '/## \[Unreleased\]/ && !done {print; print insert; done=1; next}1' "$CHANGELOG" > "$TMPFILE" && mv "$TMPFILE" "$CHANGELOG" | |
| echo "✅ Added detailed changelog under ## [Unreleased]" | |
| - name: Commit and create PR | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| BRANCH="bump-native-${{ inputs.android_version }}-${{ inputs.ios_version }}" | |
| git checkout -b "$BRANCH" | |
| git add . | |
| git commit -m "Bump native OneSignal SDKs; OneSignal-Android-SDK ${{ inputs.android_version }}, OneSignal-iOS-SDK ${{ inputs.ios_version }}" | |
| git push origin "$BRANCH" | |
| gh pr create \ | |
| --title "Bump native OneSignal SDKs; OneSignal-Android-SDK ${{ inputs.android_version }}, OneSignal-iOS-SDK ${{ inputs.ios_version }}" \ | |
| --body "### 🧩 Native SDK Updates | |
| - Android: ${{ inputs.android_version }} | |
| - iOS: ${{ inputs.ios_version }} | |
| This PR updates Unity dependency files and inserts a detailed changelog entry under **[Unreleased]** in the Unity SDK changelog." \ | |
| --base main \ | |
| --label "native-sdk-bump" |