name: Merge Submodule PRs on: pull_request: types: [closed, labeled] jobs: merge-submodules: if: | github.event.pull_request.merged == true && (github.event.pull_request.base.ref == 'main' || github.event.pull_request.base.ref == 'lts-3.16') && !startsWith(github.event.pull_request.head.ref, 'release/') runs-on: ubuntu-latest steps: - name: Extract Branch Name and Base Branch run: | echo "BRANCH_NAME=${{ github.event.pull_request.head.ref }}" >> $GITHUB_ENV echo "BASE_BRANCH=${{ github.event.pull_request.base.ref }}" >> $GITHUB_ENV - name: Merge PR in ee-server (if exists) run: | PR=$(gh pr list -R ToolJet/ee-server --head "$BRANCH_NAME" --base "$BASE_BRANCH" --state open --json number -q '.[0].number') if [ -n "$PR" ]; then echo "Found ee-server PR: #$PR targeting $BASE_BRANCH" gh pr merge -R ToolJet/ee-server "$PR" --merge --admin else echo "No open ee-server PR for branch $BRANCH_NAME targeting $BASE_BRANCH" fi env: GH_TOKEN: ${{ secrets.TOKEN_PR }} - name: Merge PR in ee-frontend (if exists) run: | PR=$(gh pr list -R ToolJet/ee-frontend --head "$BRANCH_NAME" --base "$BASE_BRANCH" --state open --json number -q '.[0].number') if [ -n "$PR" ]; then echo "Found ee-frontend PR: #$PR targeting $BASE_BRANCH" gh pr merge -R ToolJet/ee-frontend "$PR" --merge --admin else echo "No open ee-frontend PR for branch $BRANCH_NAME targeting $BASE_BRANCH" fi env: GH_TOKEN: ${{ secrets.TOKEN_PR }} update-submodule-sha: needs: merge-submodules if: | github.event.pull_request.merged == true && (github.event.pull_request.base.ref == 'main' || github.event.pull_request.base.ref == 'lts-3.16') && !startsWith(github.event.pull_request.head.ref, 'release/') runs-on: ubuntu-latest steps: - name: Checkout base repo uses: actions/checkout@v4 with: token: ${{ secrets.TOKEN_PR }} ref: ${{ github.event.pull_request.base.ref }} submodules: recursive - name: Wait for merge completion run: | echo "Waiting for submodule merges to complete..." sleep 60 - name: Update submodules to latest ${{ github.event.pull_request.base.ref }} run: | git config user.name "adishM98 Bot" git config user.email "adish.madhu@gmail.com" # Update submodules to match the base branch BASE_BRANCH="${{ github.event.pull_request.base.ref }}" echo "Updating submodules to latest commit SHA from $BASE_BRANCH branch" # Get latest commit SHA from ee-frontend repository echo "Fetching latest commit from ToolJet/ee-frontend:$BASE_BRANCH" FRONTEND_SHA=$(gh api repos/ToolJet/ee-frontend/branches/$BASE_BRANCH --jq '.commit.sha' 2>/dev/null || gh api repos/ToolJet/ee-frontend/branches/main --jq '.commit.sha') echo "Frontend SHA: $FRONTEND_SHA" # Get latest commit SHA from ee-server repository echo "Fetching latest commit from ToolJet/ee-server:$BASE_BRANCH" SERVER_SHA=$(gh api repos/ToolJet/ee-server/branches/$BASE_BRANCH --jq '.commit.sha' 2>/dev/null || gh api repos/ToolJet/ee-server/branches/main --jq '.commit.sha') echo "Server SHA: $SERVER_SHA" # Update submodule pointers to specific commit SHAs cd frontend/ee git fetch origin $BASE_BRANCH if git cat-file -e "$FRONTEND_SHA" 2>/dev/null; then git checkout "$FRONTEND_SHA" echo "Successfully checked out frontend SHA: $FRONTEND_SHA" else echo "Error: Frontend SHA $FRONTEND_SHA not found. Fetching all refs..." git fetch origin git checkout "$FRONTEND_SHA" fi cd ../.. cd server/ee git fetch origin $BASE_BRANCH if git cat-file -e "$SERVER_SHA" 2>/dev/null; then git checkout "$SERVER_SHA" echo "Successfully checked out server SHA: $SERVER_SHA" else echo "Error: Server SHA $SERVER_SHA not found. Fetching all refs..." git fetch origin git checkout "$SERVER_SHA" fi cd ../.. git add frontend/ee server/ee if git diff --cached --quiet; then echo "No submodule updates found." && exit 0 fi env: GH_TOKEN: ${{ secrets.TOKEN_PR }} - name: Create PR for submodule update id: cpr uses: peter-evans/create-pull-request@v6 with: token: ${{ secrets.TOKEN_PR }} commit-message: "🚀 chore: update submodules to latest ${{ github.event.pull_request.base.ref }} after auto-merge" title: "🚀 chore: update submodules" body: "Auto-generated PR to update submodules after base PR merge" branch: auto/update-submodules-${{ github.run_id }} base: ${{ github.event.pull_request.base.ref }} - name: Auto-merge PR if: steps.cpr.outputs.pull-request-number != '' run: | echo "Merging submodule update PR #${PR_NUMBER}" gh pr merge --squash --admin "$PR_NUMBER" --repo ToolJet/ToolJet env: GH_TOKEN: ${{ secrets.TOKEN_PR }} PR_NUMBER: ${{ steps.cpr.outputs.pull-request-number }} check-submodule-prs: if: github.event.action == 'labeled' && github.event.label.name == 'ready-to-merge' runs-on: ubuntu-latest steps: - name: Extract Branch Name run: echo "BRANCH_NAME=${{ github.event.pull_request.head.ref }}" >> $GITHUB_ENV - name: Check and Comment Linked Submodule PRs run: | echo "🔍 Checking linked submodule PRs for \`$BRANCH_NAME\`:" > comment.md echo "" >> comment.md SERVER_URL=$(gh pr list -R ToolJet/ee-server --head "$BRANCH_NAME" --state open --json url -q '.[0].url') FRONTEND_URL=$(gh pr list -R ToolJet/ee-frontend --head "$BRANCH_NAME" --state open --json url -q '.[0].url') if [ -n "$SERVER_URL" ]; then echo "✅ ee-server PR - $SERVER_URL" >> comment.md else echo "❌ No open PR in ee-server" >> comment.md fi if [ -n "$FRONTEND_URL" ]; then echo "✅ ee-frontend PR - $FRONTEND_URL" >> comment.md else echo "❌ No open PR in ee-frontend" >> comment.md fi echo "" >> comment.md echo "📝 **Note**: The submodule PRs will be auto-merged once you merge this base PR-$PR_NUMBER into \`${{ github.event.pull_request.base.ref }}\`." >> comment.md gh pr comment "$PR_NUMBER" --repo ToolJet/ToolJet --body-file comment.md env: GH_TOKEN: ${{ secrets.TOKEN_PR }} PR_NUMBER: ${{ github.event.pull_request.number }}