| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| name: Comment Bot |
| |
| on: |
| # TODO(kszucs): support pull_request_review_comment |
| issue_comment: |
| types: |
| - created |
| - edited |
| |
| permissions: |
| contents: read |
| pull-requests: write |
| |
| jobs: |
| crossbow: |
| name: Listen! |
| if: startsWith(github.event.comment.body, '@github-actions crossbow') |
| runs-on: ubuntu-latest |
| steps: |
| - name: Checkout Arrow |
| uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 |
| with: |
| path: arrow |
| # fetch the tags for version number generation |
| fetch-depth: 0 |
| - name: Set up Python |
| uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 |
| with: |
| python-version: 3.8 |
| - name: Install Archery and Crossbow dependencies |
| run: pip install -e arrow/dev/archery[bot] |
| - name: Handle GitHub comment event |
| env: |
| ARROW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| CROSSBOW_GITHUB_TOKEN: ${{ secrets.CROSSBOW_GITHUB_TOKEN }} |
| run: | |
| archery trigger-bot \ |
| --event-name ${{ github.event_name }} \ |
| --event-payload ${{ github.event_path }} |
| |
| autotune: |
| name: "Fix all the things" |
| if: startsWith(github.event.comment.body, '@github-actions autotune') |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 |
| - uses: r-lib/actions/pr-fetch@11a22a908006c25fe054c4ef0ac0436b1de3edbe # v2.6.4 |
| with: |
| repo-token: ${{ secrets.GITHUB_TOKEN }} |
| - name: See what is different |
| run: | |
| set -ex |
| DEFAULT_BRANCH=${{ github.event.repository.default_branch }} |
| git remote add upstream https://github.com/apache/arrow |
| git fetch upstream |
| |
| changed() { |
| git diff --name-only upstream/$DEFAULT_BRANCH... | grep -e "$1" >/dev/null 2>&1 |
| } |
| if changed '^r/.*\.R$'; then |
| echo "R_DOCS=true" >> $GITHUB_ENV |
| echo "R_CODE=true" >> $GITHUB_ENV |
| fi |
| if changed 'cmake' || changed 'CMake'; then |
| echo "CMAKE_FORMAT=true" >> $GITHUB_ENV |
| fi |
| if changed '^cpp/src'; then |
| echo "CLANG_FORMAT_CPP=true" >> $GITHUB_ENV |
| fi |
| if changed '^r/src'; then |
| echo "CLANG_FORMAT_R=true" >> $GITHUB_ENV |
| fi |
| - name: Ensure clang-format has the appropriate version |
| if: env.CMAKE_FORMAT == 'true' || |
| env.CLANG_FORMAT_CPP == 'true' || |
| env.CLANG_FORMAT_R == 'true' || |
| endsWith(github.event.comment.body, 'everything') |
| run: | |
| set -e |
| . .env # To get the clang version we use |
| sudo apt update |
| sudo apt install -y clang-format-${CLANG_TOOLS} |
| - name: Run cmake_format |
| if: env.CMAKE_FORMAT == 'true' || endsWith(github.event.comment.body, 'everything') |
| run: | |
| set -ex |
| export PATH=/home/runner/.local/bin:$PATH |
| python3 -m pip install --upgrade pip setuptools wheel |
| python3 -m pip install -e dev/archery[lint] |
| archery lint --cmake-format --fix |
| - name: Run clang-format on cpp |
| if: env.CLANG_FORMAT_CPP == 'true' || endsWith(github.event.comment.body, 'everything') |
| run: | |
| . .env # To get the clang version we use |
| cpp/build-support/run_clang_format.py \ |
| --clang_format_binary=clang-format-${CLANG_TOOLS} \ |
| --exclude_glob=cpp/build-support/lint_exclusions.txt \ |
| --source_dir=cpp/src --quiet --fix |
| - name: Run clang-format on r |
| if: env.CLANG_FORMAT_R == 'true' || endsWith(github.event.comment.body, 'everything') |
| run: | |
| . .env # To get the clang version we use |
| cpp/build-support/run_clang_format.py \ |
| --clang_format_binary=clang-format-${CLANG_TOOLS} \ |
| --exclude_glob=cpp/build-support/lint_exclusions.txt \ |
| --source_dir=r/src --quiet --fix |
| - uses: r-lib/actions/setup-r@11a22a908006c25fe054c4ef0ac0436b1de3edbe # v2.6.4 |
| if: env.R_DOCS == 'true' || env.R_CODE == 'true' || endsWith(github.event.comment.body, 'everything') |
| - name: Update R docs |
| if: env.R_DOCS == 'true' || endsWith(github.event.comment.body, 'everything') |
| shell: Rscript {0} |
| run: | |
| source("ci/etc/rprofile") |
| install.packages(c("remotes", "roxygen2")) |
| remotes::install_deps("r") |
| roxygen2::roxygenize("r") |
| - name: Style R code |
| if: env.R_CODE == 'true' || endsWith(github.event.comment.body, 'everything') |
| shell: Rscript {0} |
| run: | |
| changed_files <- system("git diff --name-only upstream/${{ github.event.repository.default_branch }}... 2>&1", intern = TRUE) |
| # only grab the .R files under r/ |
| changed_files <- grep('^r/.*\\.R$', changed_files, value = TRUE) |
| # remove codegen.R and other possible exclusions |
| changed_files <- changed_files[!changed_files %in% file.path("r", source("r/.styler_excludes.R")$value)] |
| source("ci/etc/rprofile") |
| install.packages(c("remotes", "styler")) |
| remotes::install_deps("r") |
| styler::style_file(changed_files) |
| - name: Commit results |
| run: | |
| git config user.name "$(git log -1 --pretty=format:%an)" |
| git config user.email "$(git log -1 --pretty=format:%ae)" |
| git commit -a -m 'Autoformat/render all the things [automated commit]' || echo "No changes to commit" |
| - uses: r-lib/actions/pr-push@11a22a908006c25fe054c4ef0ac0436b1de3edbe # v2.6.4 |
| with: |
| repo-token: ${{ secrets.GITHUB_TOKEN }} |
| |
| rebase: |
| name: "Rebase" |
| if: startsWith(github.event.comment.body, '@github-actions rebase') |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 |
| - uses: r-lib/actions/pr-fetch@11a22a908006c25fe054c4ef0ac0436b1de3edbe # v2.6.4 |
| with: |
| repo-token: ${{ secrets.GITHUB_TOKEN }} |
| - name: Rebase on ${{ github.repository }} default branch |
| run: | |
| set -ex |
| git config user.name "$(git log -1 --pretty=format:%an)" |
| git config user.email "$(git log -1 --pretty=format:%ae)" |
| git remote add upstream https://github.com/${{ github.repository }} |
| git fetch --unshallow upstream ${{ github.event.repository.default_branch }} |
| git rebase upstream/${{ github.event.repository.default_branch }} |
| - uses: r-lib/actions/pr-push@11a22a908006c25fe054c4ef0ac0436b1de3edbe # v2.6.4 |
| with: |
| repo-token: ${{ secrets.GITHUB_TOKEN }} |
| args: "--force" |
| |
| issue_assign: |
| name: "Assign issue" |
| permissions: |
| issues: write |
| if: github.event.comment.body == 'take' |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 |
| with: |
| github-token: ${{ secrets.GITHUB_TOKEN }} |
| script: | |
| github.rest.issues.addAssignees({ |
| owner: context.repo.owner, |
| repo: context.repo.repo, |
| issue_number: context.payload.issue.number, |
| assignees: context.payload.comment.user.login |
| }); |