From d1c205ec87852b2ce199b16532f5d915de6c7d51 Mon Sep 17 00:00:00 2001 From: jinliu9508 Date: Fri, 31 Oct 2025 12:05:30 -0400 Subject: [PATCH 1/8] ci: bump native version --- .github/workflows/bump-native-version.yml | 148 ++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 .github/workflows/bump-native-version.yml diff --git a/.github/workflows/bump-native-version.yml b/.github/workflows/bump-native-version.yml new file mode 100644 index 000000000..25142b002 --- /dev/null +++ b/.github/workflows/bump-native-version.yml @@ -0,0 +1,148 @@ +name: Bump Native OneSignal SDKs + +on: + push: + branches: + - "ci-bump-native-version" + 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 + +jobs: + bump-native-sdks: + runs-on: ubuntu-latest + + 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 + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh auth status || gh auth login --with-token <<< "${GH_TOKEN}" + + - name: Detect current SDK versions + id: current + run: | + # Example: extract versions from a constants file or C# source + ANDROID_CURRENT=$(grep -Eo 'OneSignalAndroidSDKVersion = "[^"]+"' com.onesignal.unity.core/Runtime/OneSignalPlatform.cs | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+') + IOS_CURRENT=$(grep -Eo 'OneSignaliOSSDKVersion = "[^"]+"' com.onesignal.unity.core/Runtime/OneSignalPlatform.cs | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+') + + echo "android_current=${ANDROID_CURRENT}" >> $GITHUB_OUTPUT + echo "ios_current=${IOS_CURRENT}" >> $GITHUB_OUTPUT + + echo "Detected current Android SDK: ${ANDROID_CURRENT}" + echo "Detected current iOS SDK: ${IOS_CURRENT}" + + - name: Gather all release notes between versions + id: notes + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + 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 + RELEASES=$(gh release list --repo "$repo" --limit 200 --json tagName --jq '.[] | .tagName' | sort -V) + START=0 + NOTES="" + for TAG in $RELEASES; do + 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') + NOTES+="$BODY\n\n" + fi + if [[ "$TAG" == "$to" ]]; then + break + fi + done + 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<> $GITHUB_OUTPUT + echo "$ANDROID_NOTES" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + echo "ios_notes<> $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..." + sed -i "s/OneSignal-Android-SDK:[0-9.]\+/OneSignal-Android-SDK:${ANDROID_NEW}/g" OneSignalExample/Assets/OneSignal/Editor/OneSignalAndroidDependencies.xml + sed -i "s/OneSignal-Android-SDK:[0-9.]\+/OneSignal-Android-SDK:${ANDROID_NEW}/g" OneSignalExample/Assets/Plugins/Android/mainTemplate.gradle + sed -i "s/OneSignal-Android-SDK:[0-9.]\+/OneSignal-Android-SDK:${ANDROID_NEW}/g" OneSignalExample/Assets/Plugins/Android/AndroidResolverDependencies.xml + + echo "🔧 Updating iOS SDK to $IOS_NEW in XML..." + sed -i "s/OneSignal-iOS-SDK:[0-9.]\+/OneSignal-iOS-SDK:${IOS_NEW}/g" OneSignalExample/Assets/OneSignal/Editor/OneSignaliOSDependencies.xml + + - 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 + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + 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" From 8c69dffd60bc245dbe7037ae52e361741f7526d7 Mon Sep 17 00:00:00 2001 From: jinliu9508 Date: Fri, 31 Oct 2025 12:31:39 -0400 Subject: [PATCH 2/8] fix missing file --- .github/workflows/bump-native-version.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/bump-native-version.yml b/.github/workflows/bump-native-version.yml index 25142b002..171a48403 100644 --- a/.github/workflows/bump-native-version.yml +++ b/.github/workflows/bump-native-version.yml @@ -35,16 +35,14 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: gh auth status || gh auth login --with-token <<< "${GH_TOKEN}" - - name: Detect current SDK versions + - name: Get current native SDK versions id: current run: | - # Example: extract versions from a constants file or C# source - ANDROID_CURRENT=$(grep -Eo 'OneSignalAndroidSDKVersion = "[^"]+"' com.onesignal.unity.core/Runtime/OneSignalPlatform.cs | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+') - IOS_CURRENT=$(grep -Eo 'OneSignaliOSSDKVersion = "[^"]+"' com.onesignal.unity.core/Runtime/OneSignalPlatform.cs | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+') + ANDROID_CURRENT=$(grep -oP '(?<=OneSignal-Android-SDK:)[0-9]+\.[0-9]+\.[0-9]+' com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml | head -1) + IOS_CURRENT=$(grep -oP '(?<=OneSignal-iOS-SDK:)[0-9]+\.[0-9]+\.[0-9]+' com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml | head -1) echo "android_current=${ANDROID_CURRENT}" >> $GITHUB_OUTPUT echo "ios_current=${IOS_CURRENT}" >> $GITHUB_OUTPUT - echo "Detected current Android SDK: ${ANDROID_CURRENT}" echo "Detected current iOS SDK: ${IOS_CURRENT}" @@ -97,12 +95,14 @@ jobs: IOS_NEW=${{ inputs.ios_version }} echo "🔧 Updating Android SDK to $ANDROID_NEW in XML and Gradle..." - sed -i "s/OneSignal-Android-SDK:[0-9.]\+/OneSignal-Android-SDK:${ANDROID_NEW}/g" OneSignalExample/Assets/OneSignal/Editor/OneSignalAndroidDependencies.xml + sed -i "s/OneSignal-Android-SDK:[0-9.]\+/OneSignal-Android-SDK:${ANDROID_NEW}/g" \ + com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml sed -i "s/OneSignal-Android-SDK:[0-9.]\+/OneSignal-Android-SDK:${ANDROID_NEW}/g" OneSignalExample/Assets/Plugins/Android/mainTemplate.gradle sed -i "s/OneSignal-Android-SDK:[0-9.]\+/OneSignal-Android-SDK:${ANDROID_NEW}/g" OneSignalExample/Assets/Plugins/Android/AndroidResolverDependencies.xml echo "🔧 Updating iOS SDK to $IOS_NEW in XML..." - sed -i "s/OneSignal-iOS-SDK:[0-9.]\+/OneSignal-iOS-SDK:${IOS_NEW}/g" OneSignalExample/Assets/OneSignal/Editor/OneSignaliOSDependencies.xml + sed -i "s/OneSignal-iOS-SDK:[0-9.]\+/OneSignal-iOS-SDK:${IOS_NEW}/g" \ + com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml - name: Insert formatted Android/iOS release notes under '## [Unreleased]' run: | From 77cf88236f6c430345270d3592ca4206c62b4734 Mon Sep 17 00:00:00 2001 From: jinliu9508 Date: Fri, 31 Oct 2025 13:03:45 -0400 Subject: [PATCH 3/8] fix path --- .github/workflows/bump-native-version.yml | 79 ++++++++++++++++------- 1 file changed, 56 insertions(+), 23 deletions(-) diff --git a/.github/workflows/bump-native-version.yml b/.github/workflows/bump-native-version.yml index 171a48403..058710756 100644 --- a/.github/workflows/bump-native-version.yml +++ b/.github/workflows/bump-native-version.yml @@ -1,9 +1,6 @@ name: Bump Native OneSignal SDKs on: - push: - branches: - - "ci-bump-native-version" workflow_dispatch: inputs: android_version: @@ -15,9 +12,15 @@ on: 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 @@ -31,25 +34,44 @@ jobs: sudo apt-get install -y gh jq - name: Configure GitHub CLI - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: gh auth status || gh auth login --with-token <<< "${GH_TOKEN}" - name: Get current native SDK versions id: current run: | - ANDROID_CURRENT=$(grep -oP '(?<=OneSignal-Android-SDK:)[0-9]+\.[0-9]+\.[0-9]+' com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml | head -1) - IOS_CURRENT=$(grep -oP '(?<=OneSignal-iOS-SDK:)[0-9]+\.[0-9]+\.[0-9]+' com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml | head -1) + 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:-}" + echo "Detected current iOS SDK: ${IOS_CURRENT:-}" echo "android_current=${ANDROID_CURRENT}" >> $GITHUB_OUTPUT echo "ios_current=${IOS_CURRENT}" >> $GITHUB_OUTPUT - echo "Detected current Android SDK: ${ANDROID_CURRENT}" - echo "Detected current iOS SDK: ${IOS_CURRENT}" - name: Gather all release notes between versions id: notes - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | ANDROID_OLD=${{ steps.current.outputs.android_current }} ANDROID_NEW=${{ inputs.android_version }} @@ -95,14 +117,27 @@ jobs: IOS_NEW=${{ inputs.ios_version }} echo "🔧 Updating Android SDK to $ANDROID_NEW in XML and Gradle..." - sed -i "s/OneSignal-Android-SDK:[0-9.]\+/OneSignal-Android-SDK:${ANDROID_NEW}/g" \ - com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml - sed -i "s/OneSignal-Android-SDK:[0-9.]\+/OneSignal-Android-SDK:${ANDROID_NEW}/g" OneSignalExample/Assets/Plugins/Android/mainTemplate.gradle - sed -i "s/OneSignal-Android-SDK:[0-9.]\+/OneSignal-Android-SDK:${ANDROID_NEW}/g" OneSignalExample/Assets/Plugins/Android/AndroidResolverDependencies.xml - - echo "🔧 Updating iOS SDK to $IOS_NEW in XML..." - sed -i "s/OneSignal-iOS-SDK:[0-9.]\+/OneSignal-iOS-SDK:${IOS_NEW}/g" \ - com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml + 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: | @@ -125,8 +160,6 @@ jobs: echo "✅ Added detailed changelog under ## [Unreleased]" - name: Commit and create PR - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" @@ -140,8 +173,8 @@ jobs: 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 }} + - 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 \ From 69efdd88c61bbd20d94e4e40dd454d85cab1e678 Mon Sep 17 00:00:00 2001 From: jinliu9508 Date: Fri, 31 Oct 2025 14:20:45 -0400 Subject: [PATCH 4/8] update gh token --- .github/workflows/bump-native-version.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/bump-native-version.yml b/.github/workflows/bump-native-version.yml index 058710756..040ea7f82 100644 --- a/.github/workflows/bump-native-version.yml +++ b/.github/workflows/bump-native-version.yml @@ -20,7 +20,7 @@ jobs: bump-native-sdks: runs-on: ubuntu-latest env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.ONESIGNAL_PAT }} steps: - name: Checkout repository @@ -36,6 +36,15 @@ jobs: - 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: | From 7112acb52a2a78aed1334a1736407300782fcfd3 Mon Sep 17 00:00:00 2001 From: jinliu9508 Date: Fri, 31 Oct 2025 14:25:04 -0400 Subject: [PATCH 5/8] update release note searching --- .github/workflows/bump-native-version.yml | 25 ++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/.github/workflows/bump-native-version.yml b/.github/workflows/bump-native-version.yml index 040ea7f82..1143a7075 100644 --- a/.github/workflows/bump-native-version.yml +++ b/.github/workflows/bump-native-version.yml @@ -81,32 +81,49 @@ jobs: - name: Gather all release notes between versions id: notes + shell: bash {0} 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 }} + echo "ANDROID_OLD=${ANDROID_OLD}, ANDROID_NEW=${ANDROID_NEW}" + echo "IOS_OLD=${IOS_OLD}, IOS_NEW=${IOS_NEW}" + get_notes_between() { local repo=$1 local from=$2 local to=$3 - RELEASES=$(gh release list --repo "$repo" --limit 200 --json tagName --jq '.[] | .tagName' | sort -V) + + 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') - NOTES+="$BODY\n\n" + 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" } @@ -120,6 +137,8 @@ jobs: echo "$IOS_NOTES" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT + + - name: Update native SDK versions in Unity dependencies run: | ANDROID_NEW=${{ inputs.android_version }} From 875c19a82effcecac6fffb20c0e9ceedb70345d7 Mon Sep 17 00:00:00 2001 From: jinliu9508 Date: Fri, 31 Oct 2025 14:53:22 -0400 Subject: [PATCH 6/8] update --- .github/workflows/bump-native-version.yml | 231 ++++++++++------------ 1 file changed, 101 insertions(+), 130 deletions(-) diff --git a/.github/workflows/bump-native-version.yml b/.github/workflows/bump-native-version.yml index 1143a7075..bc6593388 100644 --- a/.github/workflows/bump-native-version.yml +++ b/.github/workflows/bump-native-version.yml @@ -4,11 +4,11 @@ on: workflow_dispatch: inputs: android_version: - description: "Target OneSignal-Android-SDK version (e.g., 5.1.31)" + 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.10)" + description: "Target OneSignal-iOS-SDK version (e.g., 5.2.15)" required: true type: string @@ -20,7 +20,7 @@ jobs: bump-native-sdks: runs-on: ubuntu-latest env: - GH_TOKEN: ${{ secrets.ONESIGNAL_PAT }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - name: Checkout repository @@ -28,164 +28,135 @@ jobs: 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" + echo "✅ Checking dependency files..." + if [[ ! -f "$ANDROID_FILE" || ! -f "$IOS_FILE" ]]; then + echo "❌ Missing dependency file(s)" 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:-}" - echo "Detected current iOS SDK: ${IOS_CURRENT:-}" + 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 all release notes between versions + - name: Gather native release notes id: notes - shell: bash {0} - 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 }} - - echo "ANDROID_OLD=${ANDROID_OLD}, ANDROID_NEW=${ANDROID_NEW}" - echo "IOS_OLD=${IOS_OLD}, IOS_NEW=${IOS_NEW}" - - 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<> $GITHUB_OUTPUT - echo "$ANDROID_NOTES" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - echo "ios_notes<> $GITHUB_OUTPUT - echo "$IOS_NOTES" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - - - + 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('