Skip to content

Create Wrapper PRs

Create Wrapper PRs #31

name: Create Wrapper PRs
on:
workflow_dispatch: # TODO: For testing, remove me before merging
inputs:
android_version:
required: false
type: string
description: The Android SDK version to update to
ios_version:
required: false
type: string
description: The iOS SDK version to update to
workflow_call:
inputs:
android_version:
required: false
type: string
description: The Android SDK version to update to
ios_version:
required: false
type: string
description: The iOS SDK version to update to
secrets:
GH_PUSH_TOKEN:
required: false
description: GitHub token with push permissions
jobs:
validate-inputs:
runs-on: ubuntu-latest
steps:
- name: Validate at least one input provided
run: |
if [[ -z "${{ inputs.android_version }}" && -z "${{ inputs.ios_version }}" ]]; then
echo "❌ Error: At least one of 'android_version' or 'ios_version' must be provided"
exit 1
fi
echo "✓ Input validation passed"
versions:
needs: validate-inputs
runs-on: ubuntu-latest
outputs:
cordova: ${{ steps.versions.outputs.cordova }}
flutter: ${{ steps.versions.outputs.flutter }}
react_native: ${{ steps.versions.outputs.react-native }}
unity: ${{ steps.versions.outputs.unity }}
steps:
- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- run: bun i -g semver
- name: Get latest SDK releases and close existing PRs
id: versions
run: |
# Define SDK to repo mapping
declare -A SDK_REPOS=(
["cordova"]="OneSignal/OneSignal-Cordova-SDK"
["flutter"]="OneSignal/OneSignal-Flutter-SDK"
["react-native"]="OneSignal/react-native-onesignal"
["unity"]="OneSignal/OneSignal-Unity-SDK"
)
for SDK in "${!SDK_REPOS[@]}"; do
REPO="${SDK_REPOS[$SDK]}"
# Get latest stable version (exclude pre-releases)
LATEST_VERSION=$(gh release list --repo "$REPO" --limit 20 --json tagName,isPrerelease | jq -r '.[] | select(.isPrerelease == false) | .tagName' | head -1 || echo "")
NEW_VERSION=$(semver "$LATEST_VERSION" -i patch)
echo "$SDK=$NEW_VERSION" >> $GITHUB_OUTPUT
# Close existing PR for this exact version if it exists (unless it has protected labels)
RELEASE_BRANCH="rel/$NEW_VERSION"
PR_INFO=$(gh pr list \
--repo "$REPO" \
--head "$RELEASE_BRANCH" \
--state open \
--json number,labels -q '.[0]')
if [ -n "$PR_INFO" ] && [ "$PR_INFO" != "null" ]; then
PR_NUMBER=$(echo "$PR_INFO" | jq -r '.number')
PROTECTED_LABELS="do-not-close,in-review,blocked"
HAS_PROTECTED_LABEL=$(echo "$PR_INFO" | jq -r --arg labels "$PROTECTED_LABELS" '.labels[].name | select(. as $l | $labels | split(",") | index($l))')
if [ -n "$HAS_PROTECTED_LABEL" ]; then
echo "⚠️ Skipping close of $SDK PR #$PR_NUMBER (has protected label: $HAS_PROTECTED_LABEL)"
else
gh pr close "$PR_NUMBER" --repo "$REPO"
echo "ℹ️ Closed $SDK PR #$PR_NUMBER for branch $RELEASE_BRANCH"
fi
fi
done
env:
GH_TOKEN: ${{ github.token }}
cordova-release:
needs: [versions]
uses: OneSignal/OneSignal-Cordova-SDK/.github/workflows/create-release-pr.yml@main
secrets:
GH_PUSH_TOKEN: ${{ secrets.GH_PUSH_TOKEN }}
with:
cordova_version: ${{ needs.versions.outputs.cordova }}
android_version: ${{ inputs.android_version }}
ios_version: ${{ inputs.ios_version }}