Skip to content

Implement longValues for MultiFieldNormValues to speedup CombinedQuery #1233

Implement longValues for MultiFieldNormValues to speedup CombinedQuery

Implement longValues for MultiFieldNormValues to speedup CombinedQuery #1233

Workflow file for this run

name: Auto Format Bot
on:
issue_comment:
types: [created]
permissions: {}
jobs:
format-check:
name: Run format check
# Only run on pull requests when the bot is mentioned
if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, '/format-fix apply') }}
runs-on: ubuntu-latest
timeout-minutes: 30
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_ACTOR: ${{ github.actor }}
BASE_REPO: ${{ github.repository }}
PR_NUMBER: ${{ github.event.issue.number }}
COMMENT_ID: ${{ github.event.comment.id }}
COMMENT_URL: ${{ github.event.comment.html_url }}
permissions:
contents: write # pushes branch
pull-requests: write # creates/modifies pull requests
issues: write # may be unnecessary
steps:
- name: Check permissions
run: |
PR_AUTHOR=$(gh pr view "${PR_NUMBER}" --repo "${BASE_REPO}" --json author --jq '.author.login')
PERMISSION=$(gh api "repos/${BASE_REPO}/collaborators/${GH_ACTOR}/permission" --jq '.permission' 2>/dev/null || echo "none")
# only allow if user is PR author OR has admin/write repository access
if [[ "${GH_ACTOR}" == "$PR_AUTHOR" ]] || [[ "$PERMISSION" == "admin" ]] || [[ "$PERMISSION" == "write" ]]; then
echo "Permission granted: User @${GH_ACTOR} can run the format bot"
if [[ "${GH_ACTOR}" == "$PR_AUTHOR" ]]; then
echo " - Reason: PR author"
fi
if [[ "$PERMISSION" == "admin" ]] || [[ "$PERMISSION" == "write" ]]; then
echo " - Reason: Repository $PERMISSION access"
fi
else
echo "Error: User @${GH_ACTOR} does not have permission to run the format bot."
echo "Required: Be the PR author OR have admin/write repository access."
exit 1
fi
- name: Add workflow started reaction
run: |
gh api "repos/${BASE_REPO}/issues/comments/${COMMENT_ID}/reactions" \
--method POST \
--input - <<< '{"content":"eyes"}'
- name: Get PR details and checkout
run: |
# Get PR details
PR_DATA=$(gh pr view "${PR_NUMBER}" --repo "${BASE_REPO}" --json headRefName,headRepository,headRepositoryOwner)
HEAD_REF=$(echo "$PR_DATA" | jq -r '.headRefName')
HEAD_REPO=$(echo "$PR_DATA" | jq -r '.headRepository.name')
HEAD_OWNER=$(echo "$PR_DATA" | jq -r '.headRepositoryOwner.login')
echo "head_ref=$HEAD_REF" >> "$GITHUB_ENV"
echo "head_repo_full=$HEAD_OWNER/$HEAD_REPO" >> "$GITHUB_ENV"
- name: Detect if PR is from fork
run: |
HEAD_OWNER=$(echo "${head_repo_full}" | cut -d'/' -f1)
if [[ "$HEAD_OWNER" != "$REPO_OWNER" ]]; then
echo "is_fork=true" >> "$GITHUB_ENV"
echo "PR is from fork: ${head_repo_full}"
else
echo "is_fork=false" >> "$GITHUB_ENV"
echo "PR is from same repository"
fi
- name: Checkout PR code
uses: actions/checkout@v5
with:
repository: ${{ env.head_repo_full }}
ref: ${{ env.head_ref }}
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0
persist-credentials: false
- uses: ./.github/actions/prepare-for-build
#this replaces ana06/[email protected] since it doesn't support issue comment triggers
- name: Get changed files
id: changed-files
run: |
echo "Getting changed files for PR #${PR_NUMBER}..."
ALL_FILES=$(gh pr diff "${PR_NUMBER}" --name-only --repo "${BASE_REPO}")
FILTERED_FILES=$(echo "$ALL_FILES" | grep -E '\.(java|gradle|groovy|md|properties|xml|py|sh|bat|cmd)$' || true)
echo "All changed files:"
echo "$ALL_FILES"
echo
echo "Filtered files for formatting check:"
echo "$FILTERED_FILES"
echo "all<<EOF" >> "$GITHUB_OUTPUT"
echo "$ALL_FILES" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
echo "filtered<<EOF" >> "$GITHUB_OUTPUT"
echo "$FILTERED_FILES" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
- name: Initial validation
id: initial-validation
continue-on-error: true
run: |
echo "Running initial validation..."
./gradlew check -x test
- name: Fix formatting issues
if: ${{ steps.initial-validation.outcome == 'failure' }}
run: |
echo "Fixing formatting issues and updating lock file..."
./gradlew tidy writeLocks updateLicenses
- name: Check if formatting fixes were made
if: ${{ steps.initial-validation.outcome == 'failure' }}
id: check_changes
run: |
git add .
if git diff --staged --quiet; then
echo "No formatting changes were made"
echo "changes_made=false" >> "$GITHUB_OUTPUT"
else
echo "Formatting changes were made"
echo "changes_made=true" >> "$GITHUB_OUTPUT"
echo "Changed files:"
git diff --staged --name-only
fi
- name: Create fix branch and commit (same-repo)
if: ${{ steps.initial-validation.outcome == 'failure' && steps.check_changes.outputs.changes_made == 'true' && env.is_fork == 'false' }}
id: create_fix_branch
run: |
# Create a new branch for the fixes
fix_branch="format-fixes-${head_ref}-$(date +%s)"
echo "fix_branch=$fix_branch" >> "$GITHUB_OUTPUT"
echo "fix_branch=$fix_branch" >> "$GITHUB_ENV"
git config --local user.email "[email protected]"
git config --local user.name "Auto Format Bot"
git checkout -b "$fix_branch"
git commit -m "Apply automatic formatting fixes
Fixes applied by @auto-format-bot in response to:
${COMMENT_URL}
Original PR: #${PR_NUMBER}
Changes applied:
$(git diff --name-only HEAD~1)"
git push origin "$fix_branch"
- name: Commit directly to fork PR
if: ${{ steps.initial-validation.outcome == 'failure' && steps.check_changes.outputs.changes_made == 'true' && env.is_fork == 'true' }}
id: commit_to_fork
run: |
git config --local user.email "[email protected]"
git config --local user.name "Auto Format Bot"
git commit -m "Apply automatic formatting fixes
Fixes applied by @auto-format-bot in response to:
${COMMENT_URL}
Original PR: #${PR_NUMBER}
Changes applied:
$(git diff --name-only HEAD~1)"
git push origin "${head_ref}"
- name: Final validation
run: |
echo "Running final validation..."
./gradlew check -x test
- name: Create PR for fixes (same-repo only)
if: ${{ steps.initial-validation.outcome == 'failure' && steps.check_changes.outputs.changes_made == 'true' && env.is_fork == 'false' }}
id: create_pr
run: |
PR_BODY="## Automatic Formatting Fixes
This PR applies automatic formatting fixes to address validation failures in #${PR_NUMBER}.
### πŸ“ Details
- **Triggered by**: ${COMMENT_URL}
- **Original PR**: #${PR_NUMBER}
- **Fix branch**: \`${fix_branch}\`
### πŸš€ Next Steps
Review and merge this PR to apply the formatting fixes to the original branch.
---
*This PR was created automatically by the Auto Format Bot*"
PR_URL=$(gh pr create \
--repo "${BASE_REPO}" \
--title "Apply formatting fixes to #${PR_NUMBER}" \
--body "$PR_BODY" \
--base "${head_ref}" \
--head "${fix_branch}")
NEW_PR_NUMBER=$(echo "$PR_URL" | grep -o '[0-9]*$')
echo "pr_number=$NEW_PR_NUMBER" >> "$GITHUB_OUTPUT"
echo "pr_url=$PR_URL" >> "$GITHUB_OUTPUT"
- name: Add success reaction
if: success()
run: |
# Add success reaction
gh api "repos/${BASE_REPO}/issues/comments/${COMMENT_ID}/reactions" \
--method POST \
--input - <<< '{"content":"+1"}'
- name: Comment on PR with success (fixes applied to same-repo)
if: ${{ success() && steps.initial-validation.outcome == 'failure' && steps.check_changes.outputs.changes_made == 'true' && env.is_fork == 'false' }}
run: |
gh pr comment "${PR_NUMBER}" --repo "${BASE_REPO}" --body "## Formatting Fixes Applied
The formatting bot has successfully created a PR with formatting fixes!
### πŸ“ Details
- **Triggered by**: ${COMMENT_URL}
- **Fix PR**: #${NEW_PR_NUMBER}
### πŸš€ Next Steps
Review and merge PR #${NEW_PR_NUMBER} to apply the formatting fixes to this branch.
---
*This was performed automatically by the Auto Format Bot*"
env:
NEW_PR_NUMBER: ${{ steps.create_pr.outputs.pr_number }}
- name: Comment on PR with success (fixes applied to fork)
if: ${{ success() && steps.initial-validation.outcome == 'failure' && steps.check_changes.outputs.changes_made == 'true' && env.is_fork == 'true' }}
run: |
gh pr comment "${PR_NUMBER}" --repo "${BASE_REPO}" --body "## Formatting Fixes Applied
The formatting bot has commited the formatting fixes to this PR!
### πŸ“ Details
- **Triggered by**: ${COMMENT_URL}
- **Action taken**: Direct commit to this PR branch
---
*This was performed automatically by the Auto Format Bot*"
- name: Comment on PR with success (no fixes needed)
if: ${{ success() && steps.initial-validation.outcome == 'success' }}
run: |
gh pr comment "${PR_NUMBER}" --repo "${BASE_REPO}" --body "## No Formatting Issues Found
The formatting bot has validated this PR and found no issues!
### πŸ“ Details
- **Triggered by**: ${COMMENT_URL}
The PR is ready for review!
---
*This was performed automatically by the Auto Format Bot*"
- name: Comment on PR with success (fixes made but no changes)
if: ${{ success() && steps.initial-validation.outcome == 'failure' && steps.check_changes.outputs.changes_made == 'false' }}
run: |
gh pr comment "${PR_NUMBER}" --repo "${BASE_REPO}" --body "## Formatting Issues Detected (No Auto-fixes Available)
The formatting bot found issues but was unable to automatically fix them.
### πŸ“ Details
- **Triggered by**: ${COMMENT_URL}
**Recommendation**: Review the validation failures manually and apply fixes as needed.
---
*This was performed automatically by the Auto Format Bot*"
- name: Add failure reaction
if: ${{ failure() }}
run: |
# Add failure reaction
gh api "repos/${BASE_REPO}/issues/comments/${COMMENT_ID}/reactions" \
--method POST \
--input - <<< '{"content":"-1"}'
- name: Comment on PR with failure
if: ${{ failure() }}
run: |
gh pr comment "${PR_NUMBER}" --repo "${BASE_REPO}" --body "## Formatting Failed
The formatting bot encountered issues while processing this PR.
### Next Steps:
1. Check the workflow logs for specific error details
2. Fix any issues manually if needed
3. Re-trigger the bot with \`/format-fix apply\`
### πŸ“ Details
- **Triggered by**: ${COMMENT_URL}
- **Files processed**: ${FILES_PROCESSED}
---
*This was performed automatically by the Auto Format Bot*"
env:
FILES_PROCESSED: ${{ steps.changed-files.outputs.all || 'None detected' }}