Skip to content

Bump Native OneSignal SDKs #17

Bump Native OneSignal SDKs

Bump Native OneSignal SDKs #17

name: Bump Native OneSignal SDKs
on:
workflow_dispatch:
inputs:
android_version:
description: "Target OneSignal-Android-SDK version (e.g., 5.1.38)"
required: true
type: string
ios_version:
description: "Target OneSignal-iOS-SDK version (e.g., 5.2.15)"
required: true
type: string
permissions:
contents: write
pull-requests: write
jobs:
bump-native-sdks:
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get current native SDK versions
id: current
run: |
ANDROID_FILE="com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml"
IOS_FILE="com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml"
echo "✅ Checking dependency files..."
if [[ ! -f "$ANDROID_FILE" || ! -f "$IOS_FILE" ]]; then
echo "❌ Missing dependency file(s)"
exit 1
fi
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 "📦 Android current: ${ANDROID_CURRENT:-unknown}"
echo "📦 iOS current: ${IOS_CURRENT:-unknown}"
echo "android_current=${ANDROID_CURRENT}" >> $GITHUB_OUTPUT
echo "ios_current=${IOS_CURRENT}" >> $GITHUB_OUTPUT
- name: Gather native release notes
id: notes
uses: actions/github-script@v8
env:
ANDROID_OLD: ${{ steps.current.outputs.android_current }}
ANDROID_NEW: ${{ inputs.android_version }}
IOS_OLD: ${{ steps.current.outputs.ios_current }}
IOS_NEW: ${{ inputs.ios_version }}
with:
script: |
const androidRepo = 'OneSignal/OneSignal-Android-SDK';
const iosRepo = 'OneSignal/OneSignal-iOS-SDK';
async function getReleaseNotesBetween(repo, fromTag, toTag) {
const [owner, repoName] = repo.split('/');
const releases = await github.paginate(github.rest.repos.listReleases, {
owner,
repo: repoName,
per_page: 100
});
const tags = releases.map(r => r.tag_name.replace(/^Release\s+/, ''));
const fromIndex = tags.indexOf(fromTag);
const toIndex = tags.indexOf(toTag);
if (fromIndex === -1 || toIndex === -1) {
core.warning(`⚠️ Could not find ${fromTag} or ${toTag} in ${repo}`);
return '';
}
const slice = releases.slice(Math.min(fromIndex, toIndex), Math.max(fromIndex, toIndex) + 1);
let notes = '';
for (const rel of slice.reverse()) {
if (!rel || /alpha|beta|rc/i.test(rel.tag_name)) continue; // skip prerelease
const body = (rel.body || '').split('<!--')[0].trim();
notes += `\n- ### ${rel.tag_name}\n${body}\n`;
}
return notes.trim();
}
const androidNotes = await getReleaseNotesBetween(androidRepo, process.env.ANDROID_OLD, process.env.ANDROID_NEW);
const iosNotes = await getReleaseNotesBetween(iosRepo, process.env.IOS_OLD, process.env.IOS_NEW);
core.setOutput('android_notes', androidNotes);
core.setOutput('ios_notes', iosNotes);
# --- update xml and gradle references ---
- name: Update native SDK versions in Unity dependencies
run: |
ANDROID_NEW=${{ inputs.android_version }}
IOS_NEW=${{ inputs.ios_version }}
echo "🔧 Updating Android SDK → $ANDROID_NEW"
sed -i "s/com\.onesignal:OneSignal:[0-9.]\+/com.onesignal:OneSignal:${ANDROID_NEW}/g" \
com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml || true
sed -i "s/com\.onesignal:OneSignal:[0-9.]\+/com.onesignal:OneSignal:${ANDROID_NEW}/g" \
OneSignalExample/Assets/Plugins/Android/mainTemplate.gradle || true
sed -i "s/com\.onesignal:OneSignal:[0-9.]\+/com.onesignal:OneSignal:${ANDROID_NEW}/g" \
OneSignalExample/Assets/Plugins/Android/AndroidResolverDependencies.xml || true
echo "🔧 Updating iOS SDK → $IOS_NEW"
sed -i "s/OneSignalXCFramework\" version=\"[0-9.]\+/OneSignalXCFramework\" version=\"${IOS_NEW}/g" \
com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml || true
- 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)
echo "🪄 Updating changelog: $CHANGELOG"
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 [Android release notes](https://github.com/OneSignal/OneSignal-Android-SDK/releases) and [iOS 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 "✅ CHANGELOG updated."
- 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 adds detailed native SDK changelogs under **[Unreleased]** in the Unity CHANGELOG." \
--base main \
--label "native-sdk-bump"