Skip to content

test on the working branch #3

test on the working branch

test on the working branch #3

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"