summaryrefslogtreecommitdiffstats
path: root/src/arrow/.github/workflows/comment_bot.yml
diff options
context:
space:
mode:
Diffstat (limited to 'src/arrow/.github/workflows/comment_bot.yml')
-rw-r--r--src/arrow/.github/workflows/comment_bot.yml170
1 files changed, 170 insertions, 0 deletions
diff --git a/src/arrow/.github/workflows/comment_bot.yml b/src/arrow/.github/workflows/comment_bot.yml
new file mode 100644
index 000000000..b78ae80fb
--- /dev/null
+++ b/src/arrow/.github/workflows/comment_bot.yml
@@ -0,0 +1,170 @@
+# 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
+
+jobs:
+ crossbow:
+ name: Listen!
+ if: startsWith(github.event.comment.body, '@github-actions crossbow')
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Arrow
+ uses: actions/checkout@v2
+ with:
+ path: arrow
+ - name: Set up Python
+ uses: actions/setup-python@v2
+ 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@v2
+ - uses: r-lib/actions/pr-fetch@master
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ - name: See what is different
+ run: |
+ set -ex
+ git remote add upstream https://github.com/apache/arrow
+ git fetch upstream
+ changed() {
+ git diff --name-only HEAD..upstream/master | 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 versoin
+ 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@v1
+ 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"))
+ # We currently need dev roxygen2 (> 7.1.1) until they release
+ remotes::install_github("r-lib/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 HEAD..upstream/master 2>&1", intern = TRUE)
+ # only grab the .R files under r/
+ changed_files <- grep('^r/.*\\.R$', changed_files, value = TRUE)
+ # remove latin1 which is unstylable due to encoding and codegen.R which is unique
+ 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@master
+ 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@v2
+ - uses: r-lib/actions/pr-fetch@master
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ - name: Rebase on ${{ github.repository }} master
+ 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 master
+ git rebase upstream/master
+ - uses: r-lib/actions/pr-push@master
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ args: "--force"