1+ name : Create Unity Release PR
2+
3+ on :
4+ # For making a release pr from android / ios sdk actions
5+ workflow_call :
6+ inputs :
7+ unity_version :
8+ description : ' New Unity Version (e.g., 5.2.15 or 5.2.15-beta.1)'
9+ required : true
10+ type : string
11+ android_version :
12+ description : ' New Android SDK Version (e.g., 2.3.0). Leave blank to skip.'
13+ required : false
14+ type : string
15+ ios_version :
16+ description : ' New iOS SDK Version (e.g., 1.5.0). Leave blank to skip.'
17+ required : false
18+ type : string
19+ target_branch :
20+ description : ' Target branch to create the release PR on. Defaults to main.'
21+ required : false
22+ type : string
23+ default : main
24+
25+ # For making a release pr from github actions
26+ workflow_dispatch :
27+ inputs :
28+ unity_version :
29+ description : ' New Unity Version (e.g., 5.2.15 or 5.2.15-beta.1)'
30+ required : true
31+ type : string
32+ android_version :
33+ description : ' New Android SDK Version (e.g., 2.3.0). Leave blank to skip.'
34+ required : false
35+ type : string
36+ ios_version :
37+ description : ' New iOS SDK Version (e.g., 1.5.0). Leave blank to skip.'
38+ required : false
39+ type : string
40+ target_branch :
41+ description : ' Target branch to create the release PR on. Defaults to main.'
42+ required : false
43+ type : string
44+ default : main
45+
46+ permissions :
47+ contents : write
48+ pull-requests : write
49+
50+ jobs :
51+ prep :
52+ uses : OneSignal/sdk-actions/.github/workflows/prep-release.yml@main
53+ with :
54+ version : ${{ inputs.unity_version }}
55+
56+ # Unity specific steps
57+ update-version :
58+ needs : prep
59+ runs-on : ubuntu-latest
60+ outputs :
61+ unity_from : ${{ steps.current_versions.outputs.unity_from }}
62+ ios_from : ${{ steps.current_versions.outputs.ios_from }}
63+ android_from : ${{ steps.current_versions.outputs.android_from }}
64+
65+ steps :
66+ - name : Checkout
67+ uses : actions/checkout@v5
68+ with :
69+ ref : ${{ needs.prep.outputs.release_branch }}
70+
71+ - name : Get current native SDK versions
72+ id : current_versions
73+ run : |
74+ CURRENT_VERSION=$(cat OneSignalExample/Assets/OneSignal/VERSION | tr -d '\n\r' | xargs)
75+ ANDROID_VERSION=$(grep -oE 'spec="com.onesignal:OneSignal:[0-9]+\.[0-9]+\.[0-9]+"' com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml | sed -E 's/.*OneSignal:([0-9]+\.[0-9]+\.[0-9]+)".*/\1/' | head -1)
76+ IOS_VERSION=$(grep -oE 'version="[0-9.]+"' com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml | grep -oE '[0-9.]+' | head -1)
77+ echo "unity_from=${CURRENT_VERSION}" >> $GITHUB_OUTPUT
78+ echo "android_from=${ANDROID_VERSION}" >> $GITHUB_OUTPUT
79+ echo "ios_from=${IOS_VERSION}" >> $GITHUB_OUTPUT
80+
81+ - name : Update Android SDK version
82+ if : inputs.android_version != ''
83+ run : |
84+ VERSION="${{ inputs.android_version }}"
85+ # validate the version exists on GitHub
86+ curl -sfH "Authorization: token ${{ github.token }}" "https://api.github.com/repos/OneSignal/OneSignal-Android-SDK/releases/tags/${VERSION}" >/dev/null || { echo "✗ Android SDK version ${VERSION} not found"; exit 1; }
87+ sed -i -E "s/spec=\"com\.onesignal:OneSignal:[0-9][0-9.]*\"/spec=\"com.onesignal:OneSignal:$VERSION\"/" com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml
88+ sed -i -E "s/'com\.onesignal:OneSignal:[0-9][0-9.]*'/'com.onesignal:OneSignal:$VERSION'/" OneSignalExample/Assets/Plugins/Android/mainTemplate.gradle
89+ sed -i -E "s/<package>com\.onesignal:OneSignal:[0-9][0-9.]*<\/package>/<package>com.onesignal:OneSignal:$VERSION<\/package>/" OneSignalExample/ProjectSettings/AndroidResolverDependencies.xml
90+
91+ - name : Update iOS SDK version
92+ if : inputs.ios_version != ''
93+ run : |
94+ VERSION="${{ inputs.ios_version }}"
95+ # validate the version exists on GitHub
96+ curl -sfH "Authorization: token ${{ github.token }}" "https://api.github.com/repos/OneSignal/OneSignal-iOS-SDK/releases/tags/${VERSION}" >/dev/null || { echo "✗ iOS SDK version ${VERSION} not found"; exit 1; }
97+ sed -i -E "s/version=\"[0-9][0-9.]*\"/version=\"$VERSION\"/" com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.xml
98+
99+ - name : Update Unity SDK version
100+ run : |
101+ PADDED_VERSION=$(printf "%06d" $(echo "${{ inputs.unity_version }}" | sed 's/[^0-9]//g'))
102+ printf "%s" "${{ inputs.unity_version }}" > OneSignalExample/Assets/OneSignal/VERSION
103+ for file in com.onesignal.unity.core/package.json com.onesignal.unity.android/package.json com.onesignal.unity.ios/package.json; do
104+ sed -i "s/\"version\": \".*\"/\"version\": \"${{ inputs.unity_version }}\"/" "$file"
105+ sed -i "s/\"com.onesignal.unity.core\": \".*\"/\"com.onesignal.unity.core\": \"${{ inputs.unity_version }}\"/" "$file"
106+ done
107+ sed -i "s/public const string Version = \".*\"/public const string Version = \"${{ inputs.unity_version }}\"/" com.onesignal.unity.core/Runtime/OneSignal.cs
108+ sed -i "s/public const string VersionHeader = \".*\"/public const string VersionHeader = \"${PADDED_VERSION}\"/" com.onesignal.unity.core/Runtime/OneSignalPlatform.cs
109+ for asm in OneSignalExample/Assets/OneSignal/Example/OneSignal.UnityPackage.Example.asmdef OneSignalExample/Assets/OneSignal/Editor/OneSignal.UnityPackage.Editor.asmdef OneSignalExample/Assets/OneSignal/Attribution/OneSignal.UnityPackage.Attribution.asmdef; do
110+ sed -i "s/\"expression\": \".*\"/\"expression\": \"${{ inputs.unity_version }}\"/" "$asm"
111+ done
112+ sed -i "s/\"com.onesignal.unity.core\": \"[0-9.]\+\"/\"com.onesignal.unity.core\": \"${{ inputs.unity_version }}\"/g" OneSignalExample/Packages/packages-lock.json
113+ sed -i "s/bundleVersion: .*/bundleVersion: ${{ inputs.unity_version }}/" OneSignalExample/ProjectSettings/ProjectSettings.asset
114+ sed -i "s/setSdkVersion:@\"[0-9]*\"/setSdkVersion:@\"${PADDED_VERSION}\"/" com.onesignal.unity.ios/Runtime/Plugins/iOS/UIApplication+OneSignalUnity.mm
115+
116+ git config user.name "github-actions[bot]"
117+ git config user.email "github-actions[bot]@users.noreply.github.com"
118+ git add . && git commit -m "Release ${{ inputs.unity_version }}" && git push
119+
120+ create-pr :
121+ needs : [prep, update-version]
122+ uses : OneSignal/sdk-actions/.github/workflows/create-release.yml@main
123+ with :
124+ release_branch : ${{ needs.prep.outputs.release_branch }}
125+ target_branch : ${{ inputs.target_branch }}
126+ android_from : ${{ needs.update-version.outputs.android_from }}
127+ android_to : ${{ inputs.android_version }}
128+ ios_from : ${{ needs.update-version.outputs.ios_from }}
129+ ios_to : ${{ inputs.ios_version }}
130+
131+ update-changelog :
132+ needs : [prep, create-pr]
133+ runs-on : ubuntu-latest
134+ steps :
135+ - name : Checkout
136+ uses : actions/checkout@v5
137+ with :
138+ ref : ${{ needs.prep.outputs.release_branch }}
139+
140+ - name : Get PR release notes
141+ id : notes
142+ run : |
143+ sudo apt-get update && sudo apt-get install -y gh || true
144+ PR_NUMBER=$(gh pr list --head "${{ needs.prep.outputs.release_branch }}" --json number -q '.[0].number' || echo "")
145+ if [ -z "$PR_NUMBER" ]; then echo "RELEASE_NOTES=" >> $GITHUB_ENV; exit 0; fi
146+ cleaned_notes=$(gh pr view "$PR_NUMBER" --json body -q '.body' | awk 'BEGIN{found=0} /^- Update/{found=1} /^<!-- Reviewable:start -->/{found=0;next} found' | sed '/^- - -$/d' | sed '/^[[:space:]]*$/d')
147+ echo "RELEASE_NOTES<<EOF" >> $GITHUB_ENV
148+ echo "$cleaned_notes" >> $GITHUB_ENV
149+ echo "EOF" >> $GITHUB_ENV
150+
151+ - name : Update CHANGELOG.md
152+ run : |
153+ awk -v ver="${{ inputs.unity_version }}" -v notes="$RELEASE_NOTES" \
154+ '/^## \[Unreleased\]/ { print $0; print "## [" ver "]\n### Changed"; print notes "\n"; next } { print $0 }' \
155+ OneSignalExample/Assets/OneSignal/CHANGELOG.md > /tmp/changelog.tmp && mv /tmp/changelog.tmp OneSignalExample/Assets/OneSignal/CHANGELOG.md
156+ git config user.name "github-actions[bot]"
157+ git config user.email "github-actions[bot]@users.noreply.github.com"
158+ git add . && git commit -m "Update CHANGELOG.md for ${{ inputs.unity_version }}" && git push
0 commit comments