Skip to content

Commit 3fc3f90

Browse files
authored
Merge pull request #796 from OneSignal/ci-unity
ci: create release PR
2 parents def8368 + 64defcf commit 3fc3f90

File tree

2 files changed

+174
-1
lines changed

2 files changed

+174
-1
lines changed
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
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

OneSignalExample/Assets/OneSignalPackager/Editor/OneSignalPackagePublisher.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,24 @@ public static void UpdateProjectVersion()
4545
[MenuItem("OneSignal/ExportUnityPackage")]
4646
public static void ExportUnityPackage()
4747
{
48+
UnityEngine.Debug.Log($"[OneSignalPackagePublisher] start exporting package");
4849
AssetDatabase.Refresh();
4950
var packageVersion = File.ReadAllText(VersionFilePath);
5051
var packageName = $"OneSignal-v{packageVersion}.unitypackage";
5152

53+
UnityEngine.Debug.Log($"[OneSignalPackagePublisher] package name: {packageName}");
54+
55+
string[] filePaths = _filePaths();
56+
UnityEngine.Debug.Log(
57+
$"[OneSignalPackagePublisher] Found {filePaths.Length} files/directories to include:"
58+
);
59+
foreach (var path in filePaths)
60+
{
61+
UnityEngine.Debug.Log($"[OneSignalPackagePublisher] - {path}");
62+
}
63+
5264
AssetDatabase.ExportPackage(
53-
_filePaths(),
65+
filePaths,
5466
packageName,
5567
ExportPackageOptions.Recurse | ExportPackageOptions.IncludeDependencies
5668
);
@@ -68,6 +80,9 @@ public static void ExportUnityPackage()
6880
private static string[] _filePaths()
6981
{
7082
var files = Directory.GetFileSystemEntries(PackagePath);
83+
UnityEngine.Debug.Log(
84+
$"[OneSignalPackagePublisher] Getting file paths from: {PackagePath}"
85+
);
7186
var pathsToInclude = files.Where(file =>
7287
{
7388
if (file.EndsWith(".meta"))

0 commit comments

Comments
 (0)