Skip to content

Commit 7deb814

Browse files
committed
fix
1 parent 875c19a commit 7deb814

File tree

1 file changed

+84
-105
lines changed

1 file changed

+84
-105
lines changed

.github/workflows/bump-native-version.yml

Lines changed: 84 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)