Create Wrapper PRs #31
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }} |