-
Notifications
You must be signed in to change notification settings - Fork 62
171 lines (148 loc) · 6.89 KB
/
Copy pathcreate-release-pr.yml
File metadata and controls
171 lines (148 loc) · 6.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
name: Create Unity Release PR
on:
push:
branches:
- "ci-unity"
workflow_dispatch:
inputs:
version:
description: 'New Unity SDK version (e.g. 5.4.0-alpha01 or 3.2.1)'
type: string
required: true
base_branch:
description: 'Target branch for the PR (e.g. main for regular releases, 5.4-main for patch releases)'
type: string
required: false
default: 'main'
permissions:
contents: write
pull-requests: write
jobs:
create-unity-release:
runs-on: ubuntu-latest
env:
VERSION: ${{ github.event.inputs.version }}
BASE_BRANCH: ${{ github.event.inputs.base_branch || 'main' }}
BRANCH: release/${{ github.event.inputs.version }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: 📋 Display Configuration
run: |
echo "============================================"
echo "🎮 Creating Unity SDK Release"
echo "📦 Version: $VERSION"
echo "🎯 Base Branch (PR Target): $BASE_BRANCH"
echo "🌿 Release Branch (to create): $BRANCH"
echo "============================================"
- name: ✅ Validate Base Branch
run: |
if [[ "$BASE_BRANCH" == "main" ]]; then
echo "✅ Valid base branch: main"
elif [[ "$BASE_BRANCH" =~ ^[0-9]+\.[0-9]+-main$ ]]; then
echo "✅ Valid base branch: $BASE_BRANCH"
else
echo "❌ ERROR: Invalid base branch '$BASE_BRANCH'"
echo ""
echo "Base branch must be either:"
echo " - 'main' (for regular releases)"
echo " - 'X.Y-main' (for patch lines, e.g., 5.4-main)"
exit 1
fi
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Create release branch from base
run: |
if git ls-remote --exit-code --heads origin "$BRANCH"; then
echo "Deleting remote branch $BRANCH"
git push origin --delete "$BRANCH"
fi
echo "Creating release branch $BRANCH from $BASE_BRANCH"
git checkout -b "$BRANCH" origin/main
- name: Run composeRelease.sh
run: |
chmod +x ./composeRelease.sh
./composeRelease.sh $VERSION
shell: bash
- name: Commit and Push version bump
run: |
# 1. Update Version number in OneSignal.cs
echo "✅ Updating OneSignal.cs"
if [ -f "com.onesignal.unity.core/Runtime/OneSignal.cs" ]; then
sed -i "s/public const string SdkVersion = \".*\"/public const string SdkVersion = \"$VERSION\"/" com.onesignal.unity.core/Runtime/OneSignal.cs
fi
# 2. Update iOS version header in UIApplication+OneSignalUnity.mm
echo "✅ Updating UIApplication+OneSignalUnity.mm"
if [ -f "com.onesignal.unity.ios/Runtime/UIApplication+OneSignalUnity.mm" ]; then
sed -i "s/NSString \*const ONESIGNAL_UNITY_VERSION = @\".*\"/NSString *const ONESIGNAL_UNITY_VERSION = @\"$VERSION\"/" com.onesignal.unity.ios/Runtime/UIApplication+OneSignalUnity.mm
fi
# 3. Update platform version header in OneSignalPlatform.cs
echo "✅ Updating OneSignalPlatform.cs"
if [ -f "com.onesignal.unity.android/Runtime/OneSignalPlatform.cs" ]; then
sed -i "s/private const string SdkVersion = \".*\"/private const string SdkVersion = \"$VERSION\"/" com.onesignal.unity.android/Runtime/OneSignalPlatform.cs
fi
fi
# 4. Update example app packages-lock.json
echo "✅ Updating packages-lock.json"
if [ -f "OneSignalExample/Packages/packages-lock.json" ]; then
# Update com.onesignal.unity.android version
jq --arg ver "$VERSION" \
'(.dependencies."com.onesignal.unity.android".version = $ver)' \
OneSignalExample/Packages/packages-lock.json > temp.json && \
mv temp.json OneSignalExample/Packages/packages-lock.json
# Update com.onesignal.unity.ios version
jq --arg ver "$VERSION" \
'(.dependencies."com.onesignal.unity.ios".version = $ver)' \
OneSignalExample/Packages/packages-lock.json > temp.json && \
mv temp.json OneSignalExample/Packages/packages-lock.json
# Update com.onesignal.unity.core version
jq --arg ver "$VERSION" \
'(.dependencies."com.onesignal.unity.core".version = $ver)' \
OneSignalExample/Packages/packages-lock.json > temp.json && \
mv temp.json OneSignalExample/Packages/packages-lock.json
fi
# 5. Update version number in .asmdef files
echo "✅ Updating .asmdef files"
# List of asmdef files to update
ASMDEF_FILES=(
"com.onesignal.unity.core/Runtime/OneSignal.UnityPackage.Attribution.asmdef"
"OneSignalExample/Assets/OneSignal.UnityPackage.Example.asmdef"
"com.onesignal.unity.core/Editor/OneSignal.UnityPackage.Editor.asmdef"
)
for asmdef in "${ASMDEF_FILES[@]}"; do
if [ -f "$asmdef" ]; then
echo " - Updating $asmdef"
# Update versionDefines expression field
jq --arg ver "$VERSION" \
'(.versionDefines[]?.expression = $ver)' \
"$asmdef" > temp.json && mv temp.json "$asmdef"
else
echo " ⚠️ File not found: $asmdef"
fi
done
echo ""
echo "✅ Version update complete!"
echo "Updated to version: $VERSION"
- name: Generate PR Body
run: |
echo "## 🎮 Unity SDK Release v$VERSION" > pr_body.md
echo "" >> pr_body.md
echo "**Summary:**" >> pr_body.md
echo "- Automated release PR created by CI." >> pr_body.md
echo "- Includes version bumps and changelog updates performed by composeRelease.sh." >> pr_body.md
echo "" >> pr_body.md
echo "**Next Steps:**" >> pr_body.md
echo "1. Review and approve this PR." >> pr_body.md
echo "2. Merge into \`$BASE_BRANCH\`." >> pr_body.md
echo "3. Verify the generated draft GitHub release and attach the updated *.unitypackage if needed." >> pr_body.md
echo "" >> pr_body.md
echo "_This PR was auto-generated by create-unity-release CI._" >> pr_body.md
- name: Create Pull Request
run: |
gh pr create \
--title "Release Unity SDK v$VERSION" \
--body-file pr_body.md \
--head "$BRANCH" \
--base "$BASE_BRANCH"