diff --git a/.github/workflows/feature-pr.yml b/.github/workflows/feature-pr.yml new file mode 100644 index 0000000000..a14408f4e7 --- /dev/null +++ b/.github/workflows/feature-pr.yml @@ -0,0 +1,92 @@ +name: Feature PR + +# Auto-create PR from dev/* branches to develop +# This is the entry point for new features into the staging pipeline + +on: + push: + branches: + - 'dev/**' + - 'feature/**' + - 'fix/**' + +permissions: + contents: read + pull-requests: write + +jobs: + create-pr: + name: Create PR to develop + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check if develop exists + id: check-develop + run: | + if git ls-remote --heads origin develop | grep -q develop; then + echo "exists=true" >> $GITHUB_OUTPUT + else + echo "exists=false" >> $GITHUB_OUTPUT + echo "::warning::develop branch does not exist yet. PR will target main." + fi + + - name: Determine target branch + id: target + run: | + if [ "${{ steps.check-develop.outputs.exists }}" = "true" ]; then + echo "branch=develop" >> $GITHUB_OUTPUT + else + echo "branch=main" >> $GITHUB_OUTPUT + fi + + - name: Check for existing PR + id: check-pr + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + BRANCH="${{ github.ref_name }}" + TARGET="${{ steps.target.outputs.branch }}" + + # Check if PR already exists + EXISTING=$(gh pr list --head "$BRANCH" --base "$TARGET" --json number --jq '.[0].number // empty') + + if [ -n "$EXISTING" ]; then + echo "exists=true" >> $GITHUB_OUTPUT + echo "pr_number=$EXISTING" >> $GITHUB_OUTPUT + echo "PR #$EXISTING already exists for $BRANCH → $TARGET" + else + echo "exists=false" >> $GITHUB_OUTPUT + fi + + - name: Create PR + if: steps.check-pr.outputs.exists != 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + BRANCH="${{ github.ref_name }}" + TARGET="${{ steps.target.outputs.branch }}" + + # Extract title from branch name (dev/foo-bar → foo bar) + TITLE=$(echo "$BRANCH" | sed 's|^dev/||; s|^feature/||; s|^fix/||; s|-| |g; s|_| |g') + + # Capitalize first letter + TITLE="$(echo "${TITLE:0:1}" | tr '[:lower:]' '[:upper:]')${TITLE:1}" + + gh pr create \ + --base "$TARGET" \ + --head "$BRANCH" \ + --title "$TITLE" \ + --body "Auto-created PR from \`$BRANCH\` to \`$TARGET\`. + +## Changes + + + +--- +*This PR was auto-created by the feature-pr workflow.*" + + echo "Created PR: $BRANCH → $TARGET"