-
Notifications
You must be signed in to change notification settings - Fork 247
GitHub Actions Integration
You can also run Pronto as a GitHub action.
Here's an example .github/workflows/pronto.yml workflow file using the github_status and github_pr formatters and running on each GitHub PR, with pronto-rubocop as the runner:
name: Pronto
on: [pull_request_target]
jobs:
pronto:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- run: |
git fetch --no-tags --prune --depth=10 origin +refs/heads/*:refs/remotes/origin/*
- name: Setup Ruby
uses: ruby/setup-ruby@v1
- name: Setup pronto
run: gem install pronto pronto-rubocop
- name: Run Pronto
run: PRONTO_PULL_REQUEST_ID="${{ github.event.pull_request.number }}" PRONTO_GITHUB_ACCESS_TOKEN="${{ github.token }}" pronto run -f github_status github_pr -c origin/${{ github.base_ref }}
${{ github.token }}is scoped to the current repository, so if you want to checkout a different repository that is private you will need to provide your own PAT. e.g ${{ secrets.GitHub_PAT }} #GitHub_PATis a secret that contains your PAT.
If you intend to use bundler/Gemfile to manage all the dependencies (e.g. all the rubocop extension gems):
name: Pronto
on: [pull_request_target]
jobs:
pronto:
runs-on: ubuntu-latest
env:
# Requires the relevant gems to have a separate group in `Gemfile`
# At the time of writing there is no way to only install gems in specific group(s) by specifying the group name(s)
BUNDLE_WITHOUT: "default development test"
# `MAKE="make --jobs $(nproc)"` is from
# https://build.betterup.com/one-weird-trick-that-will-speed-up-your-bundle-install/
# Only works for MRI
#
# Using 4 since https://github.com/ruby/setup-ruby use 4
MAKE: "make --jobs 4"
steps:
- name: Checkout code
uses: actions/checkout@v2
- run: |
git fetch --no-tags --prune --depth=10 origin +refs/heads/*:refs/remotes/origin/*
# If your project only specifies its Ruby version in its
# Gemfile, you'll need to specify a version for the
# action to use. See documentation for the
# ruby/setup-ruby action for details.
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "2.7"
# Run `bundle install` with cache when `true`
bundler-cache: true
- name: Setup pronto
run: gem install pronto pronto-rubocop
- name: Run Pronto
run: bundle exec pronto run -f github_status github_pr -c origin/${{ github.base_ref }}
env:
PRONTO_PULL_REQUEST_ID: ${{ github.event.pull_request.number }}
PRONTO_GITHUB_ACCESS_TOKEN: "${{ github.token }}"
BUNDLE_PATH: "vendor/bundle"# Gemfile
# This might not be the right way to specify the group(s) for these gems
# Try it yourself
group :development do
# Ruby static code analyzer
gem "rubocop", ">= 1.15.0", require: false, group: :pronto
gem 'rubocop-performance', ">= 1.11.0", require: false, group: :pronto
gem 'rubocop-rails', '>= 2.11.0', require: false, group: :pronto
gem 'rubocop-rake', '>= 0.5.1', require: false, group: :pronto
# Mainly for being run in GH Action
gem "pronto", require: false, group: :pronto
gem "pronto-rubocop", require: false, group: :pronto
end"Resource not accessible by integration"
-
pull_request_targetlets you execute actions triggered by pull requests, but have access to secrets (the file available are from the main branch, not the PR) -
workflow_runlets you run actions after other actions have completed, with access to secrets
this blog post provides details of GitHub Actions improvements for fork and pull request workflows
please use GitHub doc checkout to update git checkout according to need.
- In above pronto.yml, setting linting pipelines up with a --depth=N (maybe 10 usually?) to reduce the size of the transfer and make the clone faster.
If your workflow is using bundler or Gemfile in that case, you might need to use bundle exec before pronto command.
- name: Run Pronto
run: |
PRONTO_PULL_REQUEST_ID="${{ github.event.pull_request.number }}" PRONTO_GITHUB_ACCESS_TOKEN="${{ github.token }}" bundle exec pronto run -f github_status github_pr -c origin/${{ github.base_ref }}add pronto and pronto runners gems in Gemfile
on: [pull_request]
name: Pronto
jobs:
linters:
name: Linters
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- run: |
git fetch --no-tags --prune --depth=10 origin +refs/heads/*:refs/remotes/origin/*
- name: Setup Ruby
uses: ruby/setup-ruby@v1
- name: Ruby gem cache
uses: actions/cache@v1
with:
path: vendor/bundle
key: |
${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gems-
- name: Install gems
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: 10.13.0
- name: Find yarn cache location
id: yarn-cache
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: JS package cache
uses: actions/cache@v1
with:
path: ${{ steps.yarn-cache.outputs.dir }}
key: |
${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install packages
run: |
yarn install --pure-lockfile
- name: Run Pronto
run: |
PRONTO_PULL_REQUEST_ID="${{ github.event.pull_request.number }}" PRONTO_GITHUB_ACCESS_TOKEN="${{ github.token }}" bundle exec pronto run -f github_status github_pr -c origin/${{ github.base_ref }}