@@ -28,135 +28,118 @@ jobs:
2828 with :
2929 fetch-depth : 0
3030
31+ - name : Install GitHub CLI
32+ run : sudo apt-get update -y && sudo apt-get install -y gh jq
33+
34+ - name : Configure GitHub Auth
35+ run : gh auth status || gh auth login --with-token <<< "${GH_TOKEN}"
36+
3137 - name : Get current native SDK versions
3238 id : current
3339 run : |
3440 ANDROID_FILE="com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml"
3541 IOS_FILE="com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml"
3642
37- echo "✅ Checking dependency files..."
38- if [[ ! -f "$ANDROID_FILE" || ! -f "$IOS_FILE" ]]; then
39- echo "❌ Missing dependency file(s)"
40- exit 1
41- fi
42-
4343 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]+')
4444 IOS_CURRENT=$(grep -oE 'OneSignalXCFramework\" version=\"[0-9]+\.[0-9]+\.[0-9]+' "$IOS_FILE" | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
4545
46- echo "📦 Android current: ${ANDROID_CURRENT:-unknown}"
47- echo "📦 iOS current: ${IOS_CURRENT:-unknown}"
48-
49- echo "android_current=${ANDROID_CURRENT}" >> $GITHUB_OUTPUT
50- echo "ios_current=${IOS_CURRENT}" >> $GITHUB_OUTPUT
51-
52- - name : Gather native release notes
53- id : notes
54- uses : actions/github-script@v8
55- env :
56- ANDROID_OLD : ${{ steps.current.outputs.android_current }}
57- ANDROID_NEW : ${{ inputs.android_version }}
58- IOS_OLD : ${{ steps.current.outputs.ios_current }}
59- IOS_NEW : ${{ inputs.ios_version }}
60- with :
61- script : |
62- const androidRepo = 'OneSignal/OneSignal-Android-SDK';
63- const iosRepo = 'OneSignal/OneSignal-iOS-SDK';
64-
65- async function getReleaseNotesBetween(repo, fromTag, toTag) {
66- const [owner, repoName] = repo.split('/');
67- const releases = await github.paginate(github.rest.repos.listReleases, {
68- owner,
69- repo: repoName,
70- per_page: 100
71- });
72-
73- const tags = releases.map(r => r.tag_name.replace(/^Release\s+/, ''));
74- const fromIndex = tags.indexOf(fromTag);
75- const toIndex = tags.indexOf(toTag);
76-
77- if (fromIndex === -1 || toIndex === -1) {
78- core.warning(`⚠️ Could not find ${fromTag} or ${toTag} in ${repo}`);
79- return '';
80- }
46+ echo "android_current=$ANDROID_CURRENT" >> $GITHUB_OUTPUT
47+ echo "ios_current=$IOS_CURRENT" >> $GITHUB_OUTPUT
48+ echo "Detected Android SDK: $ANDROID_CURRENT, iOS SDK: $IOS_CURRENT"
8149
82- const slice = releases.slice(Math.min(fromIndex, toIndex), Math.max(fromIndex, toIndex) + 1);
83- let notes = '';
84- for (const rel of slice.reverse()) {
85- if (!rel || /alpha|beta|rc/i.test(rel.tag_name)) continue; // skip prerelease
86- const body = (rel.body || '').split('<!--')[0].trim();
87- notes += `\n- ### ${rel.tag_name}\n${body}\n`;
88- }
89-
90- return notes.trim();
91- }
92-
93- const androidNotes = await getReleaseNotesBetween(androidRepo, process.env.ANDROID_OLD, process.env.ANDROID_NEW);
94- const iosNotes = await getReleaseNotesBetween(iosRepo, process.env.IOS_OLD, process.env.IOS_NEW);
95-
96- core.setOutput('android_notes', androidNotes);
97- core.setOutput('ios_notes', iosNotes);
98-
99- # --- update xml and gradle references ---
10050 - name : Update native SDK versions in Unity dependencies
10151 run : |
10252 ANDROID_NEW=${{ inputs.android_version }}
10353 IOS_NEW=${{ inputs.ios_version }}
10454
10555 echo "🔧 Updating Android SDK → $ANDROID_NEW"
10656 sed -i "s/com\.onesignal:OneSignal:[0-9.]\+/com.onesignal:OneSignal:${ANDROID_NEW}/g" \
107- com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml || true
57+ com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml
10858 sed -i "s/com\.onesignal:OneSignal:[0-9.]\+/com.onesignal:OneSignal:${ANDROID_NEW}/g" \
10959 OneSignalExample/Assets/Plugins/Android/mainTemplate.gradle || true
11060 sed -i "s/com\.onesignal:OneSignal:[0-9.]\+/com.onesignal:OneSignal:${ANDROID_NEW}/g" \
11161 OneSignalExample/ProjectSettings/AndroidResolverDependencies.xml || true
11262
11363 echo "🔧 Updating iOS SDK → $IOS_NEW"
11464 sed -i "s/OneSignalXCFramework\" version=\"[0-9.]\+/OneSignalXCFramework\" version=\"${IOS_NEW}/g" \
115- com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml || true
65+ com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml
11666
117- - name : Insert formatted Android/iOS release notes under '## [Unreleased]'
118- shell : bash
119- run : |
120- set -e
121- ANDROID_OLD=${{ steps.current.outputs.android_current }}
122- IOS_OLD=${{ steps.current.outputs.ios_current }}
123- ANDROID_NEW=${{ inputs.android_version }}
124- IOS_NEW=${{ inputs.ios_version }}
125-
126- # Normalize line endings
127- git config core.autocrlf false
128- find . -type f -name "*.md" -exec sed -i 's/\r$//' {} \;
129-
130- CHANGELOG="OneSignalExample/Assets/OneSignal/CHANGELOG.md"
131- TMPFILE=$(mktemp)
132-
133- echo "🪄 Updating changelog: $CHANGELOG"
134-
135- # Build markdown safely — literal heredoc (no expansion or parsing)
136- cat <<'EOF_INSERT' > insert.md
137- - Updated included Android SDK from {{ANDROID_OLD}} to [{{ANDROID_NEW}}](https://github.com/OneSignal/OneSignal-Android-SDK/releases/tag/{{ANDROID_NEW}})
138- {{ANDROID_NOTES}}
139- - Updated included iOS SDK from {{IOS_OLD}} to [{{IOS_NEW}}](https://github.com/OneSignal/OneSignal-iOS-SDK/releases/tag/{{IOS_NEW}})
140- {{IOS_NOTES}}
141-
142- For 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)
143- EOF_INSERT
144-
145- # Replace placeholders using envsubst-style sed
146- sed -i "s|{{ANDROID_OLD}}|${ANDROID_OLD}|g" insert.md
147- sed -i "s|{{ANDROID_NEW}}|${ANDROID_NEW}|g" insert.md
148- sed -i "s|{{IOS_OLD}}|${IOS_OLD}|g" insert.md
149- sed -i "s|{{IOS_NEW}}|${IOS_NEW}|g" insert.md
67+ - name : Gather and combine release notes
68+ id : combined
69+ uses : actions/github-script@v8
70+ env :
71+ ANDROID_OLD : ${{ steps.current.outputs.android_current }}
72+ IOS_OLD : ${{ steps.current.outputs.ios_current }}
73+ ANDROID_NEW : ${{ inputs.android_version }}
74+ IOS_NEW : ${{ inputs.ios_version }}
75+ with :
76+ script : |
77+ const { ANDROID_OLD, ANDROID_NEW, IOS_OLD, IOS_NEW } = process.env;
15078
151- # Append the actual release notes text
152- echo "${{ steps.notes.outputs.android_notes }}" | sed 's/\r$//' >> insert.md
153- echo "${{ steps.notes.outputs.ios_notes }}" | sed 's/\r$//' >> insert.md
79+ const getNotesBetween = async (repo, from, to) => {
80+ console.log(`🔎 Gathering release notes for ${repo} from ${from} → ${to}`);
81+ const [owner, name] = repo.split('/');
82+ const releases = await github.paginate(github.rest.repos.listReleases, {
83+ owner, repo: name, per_page: 100
84+ });
15485
155- # Inject under ## [Unreleased]
156- awk -v insert="$(cat insert.md)" '/## \[Unreleased\]/ && !done {print; print insert; done=1; next}1' "$CHANGELOG" > "$TMPFILE" && mv "$TMPFILE" "$CHANGELOG"
86+ const normalize = t => t.replace(/^Release /, '');
87+ const tags = releases.map(r => normalize(r.tag_name));
88+ const startIndex = tags.indexOf(from);
89+ const endIndex = tags.indexOf(to);
15790
158- echo "✅ CHANGELOG updated successfully."
91+ if (startIndex === -1 || endIndex === -1) {
92+ console.warn(`⚠️ Could not find tags ${from} or ${to} in ${repo}`);
93+ return '';
94+ }
15995
96+ const selected = releases.filter(r => {
97+ const tag = normalize(r.tag_name);
98+ return tags.indexOf(tag) > startIndex && tags.indexOf(tag) <= endIndex;
99+ }).reverse();
100+
101+ return selected
102+ .map(r => `- ### ${normalize(r.tag_name)}\n${r.body || '_No notes provided._'}`)
103+ .join('\n\n');
104+ };
105+
106+ const androidNotes = await getNotesBetween(
107+ 'OneSignal/OneSignal-Android-SDK',
108+ ANDROID_OLD,
109+ ANDROID_NEW
110+ );
111+ const iosNotes = await getNotesBetween(
112+ 'OneSignal/OneSignal-iOS-SDK',
113+ IOS_OLD,
114+ IOS_NEW
115+ );
116+
117+ const combined = `
118+ - Updated included Android SDK from ${ANDROID_OLD} to [${ANDROID_NEW}](https://github.com/OneSignal/OneSignal-Android-SDK/releases/tag/${ANDROID_NEW})
119+ ${androidNotes}
120+
121+ - Updated included iOS SDK from ${IOS_OLD} to [${IOS_NEW}](https://github.com/OneSignal/OneSignal-iOS-SDK/releases/tag/${IOS_NEW})
122+ ${iosNotes}
123+
124+ For 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)
125+ `.trim();
126+
127+ core.setOutput('combined', combined);
128+ console.log('✅ Combined release notes generated.');
129+
130+ - name : Update CHANGELOG.md
131+ uses : actions/github-script@v8
132+ env :
133+ NOTES : ${{ steps.combined.outputs.combined }}
134+ with :
135+ script : |
136+ const fs = require('fs');
137+ const file = 'OneSignalExample/Assets/OneSignal/CHANGELOG.md';
138+ let changelog = fs.readFileSync(file, 'utf8');
139+ const insert = process.env.NOTES;
140+ changelog = changelog.replace(/(## \[Unreleased\])/, `$1\n${insert}\n`);
141+ fs.writeFileSync(file, changelog);
142+ console.log('✅ CHANGELOG.md updated successfully.');
160143
161144 - name : Commit and create PR
162145 run : |
@@ -171,10 +154,6 @@ jobs:
171154
172155 gh pr create \
173156 --title "Bump native OneSignal SDKs; OneSignal-Android-SDK ${{ inputs.android_version }}, OneSignal-iOS-SDK ${{ inputs.ios_version }}" \
174- --body "### 🧩 Native SDK Updates
175- - **Android:** ${{ inputs.android_version }}
176- - **iOS:** ${{ inputs.ios_version }}
177-
178- This PR updates Unity dependency files and adds detailed native SDK changelogs under **[Unreleased]** in the Unity CHANGELOG." \
157+ --body "${{ steps.combined.outputs.combined }}" \
179158 --base main \
180159 --label "native-sdk-bump"
0 commit comments