workflows/tests: split out jobs.

Separate out the slow parts of tests into jobs that can be run in
parallel.

Also:
- general refactoring from YAML linter.
- don't build on `macOS-latest` now that Big Sur is the latest stable
  release.
- Use `runner.os` when it improves readability over `matrix.os`.
This commit is contained in:
Mike McQuaid 2020-11-27 16:17:42 +00:00 committed by Markus Reiter
parent 7afaebc7f8
commit 5f42fd9545

View File

@ -1,25 +1,128 @@
name: GitHub Actions CI name: CI
on: on:
push: push:
branches: master branches:
- master
pull_request: pull_request:
env: env:
HOMEBREW_DEVELOPER: 1 HOMEBREW_DEVELOPER: 1
HOMEBREW_NO_AUTO_UPDATE: 1 HOMEBREW_NO_AUTO_UPDATE: 1
jobs: jobs:
tests: syntax:
if: github.repository == 'Homebrew/brew' if: github.repository == 'Homebrew/brew'
runs-on: ubuntu-latest
steps:
- name: Set up Homebrew
id: set-up-homebrew
uses: Homebrew/actions/setup-homebrew@master
- name: Cache Bundler RubyGems
uses: actions/cache@v1
with:
path: ${{ steps.set-up-homebrew.outputs.gems-path }}
key: ${{ runner.os }}-rubygems-${{ steps.set-up-homebrew.outputs.gems-hash }}
restore-keys: ${{ runner.os }}-rubygems-
- run: brew install-bundler-gems
- run: brew style --display-cop-names
- run: brew man --fail-if-changed
- run: brew typecheck
- name: Run vale for docs linting
run: |
brew install vale
vale docs/
- name: Lint Dockerfile
run: |
brew install hadolint
hadolint Dockerfile
brew-tests:
needs: syntax
runs-on: ubuntu-latest
strategy:
matrix:
include:
- test-flags: --no-compat --online
- test-flags: --generic --online
- test-flags: --online
steps:
- name: Set up Homebrew
id: set-up-homebrew
uses: Homebrew/actions/setup-homebrew@master
- name: Cache Bundler RubyGems
uses: actions/cache@v1
with:
path: ${{ steps.set-up-homebrew.outputs.gems-path }}
key: ${{ runner.os }}-rubygems-${{ steps.set-up-homebrew.outputs.gems-hash }}
restore-keys: ${{ runner.os }}-rubygems-
- run: brew install-bundler-gems
- name: Run brew tests
run: |
# brew tests doesn't like world writable directories
sudo chmod -R g-w,o-w /home/linuxbrew/.linuxbrew/Homebrew
brew tests ${{ matrix.test_flags }}
env:
HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
brew-tests-coverage:
needs: syntax
runs-on: macos-11.0
steps:
- name: Set up Homebrew
id: set-up-homebrew
uses: Homebrew/actions/setup-homebrew@master
- name: Set up Xcode
run: sudo xcode-select --switch /Applications/Xcode_12.2.app/Contents/Developer
- name: Install brew tests dependencies
run: |
brew install subversion
Library/Homebrew/shims/scm/svn --homebrew=print-path
which svn
which svnadmin
- name: Cache Bundler RubyGems
uses: actions/cache@v1
with:
path: ${{ steps.set-up-homebrew.outputs.gems-path }}
key: ${{ runner.os }}-rubygems-${{ steps.set-up-homebrew.outputs.gems-hash }}
restore-keys: ${{ runner.os }}-rubygems-
- run: brew install-bundler-gems
- run: brew tests --online --coverage
env:
HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# set variables for coverage reporting
HOMEBREW_CODECOV_TOKEN: 3ea0364c-80ce-47a3-9fba-93a940d4b5d7
# These cannot be queried at the macOS level on GitHub Actions.
HOMEBREW_LANGUAGES: en-GB
more-tests-and-syntax:
needs: syntax
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
os: [ubuntu-latest, macOS-latest, macOS-11.0] os:
- ubuntu-latest
- macos-11.0
include: include:
- os: ubuntu-latest - os: ubuntu-latest
core-tap: 'linuxbrew-core' core-tap: "linuxbrew-core"
- os: macOS-latest - os: macos-11.0
core-tap: 'homebrew-core' core-tap: "homebrew-core"
- os: macOS-11.0
core-tap: 'homebrew-core'
steps: steps:
- name: Set up Homebrew - name: Set up Homebrew
id: set-up-homebrew id: set-up-homebrew
@ -33,7 +136,7 @@ jobs:
- run: brew test-bot --only-cleanup-before - run: brew test-bot --only-cleanup-before
- name: Set up Xcode - name: Set up Xcode
if: matrix.os == 'macOS-11.0' if: matrix.os == 'macos-11.0'
run: sudo xcode-select --switch /Applications/Xcode_12.2.app/Contents/Developer run: sudo xcode-select --switch /Applications/Xcode_12.2.app/Contents/Developer
- run: brew config - run: brew config
@ -48,64 +151,23 @@ jobs:
- run: brew doctor - run: brew doctor
- name: Set up Homebrew official command taps
run: |
# Setup taps needed for 'brew tests' and 'brew man'
cd "$(brew --repo)"
if [ "$RUNNER_OS" = "macOS" ]; then
brew update-reset Library/Taps/homebrew/homebrew-bundle \
Library/Taps/homebrew/homebrew-cask \
Library/Taps/homebrew/homebrew-cask-versions \
Library/Taps/homebrew/homebrew-services
else
brew update-reset Library/Taps/homebrew/homebrew-services
fi
- name: Run brew style on Homebrew/brew
run: brew style --display-cop-names
- name: Run brew man
run: brew man --fail-if-changed
- name: Install brew tests dependencies
if: matrix.os != 'ubuntu-latest'
run: |
brew install subversion
Library/Homebrew/shims/scm/svn --homebrew=print-path
which svn
which svnadmin
- name: Run brew tests
run: |
# brew tests doesn't like world writable directories
if [[ "$RUNNER_OS" = "Linux" ]]; then
sudo chmod -R g-w,o-w /home/linuxbrew/.linuxbrew/Homebrew
fi
# don't bother running all tests on both platforms (for speed)
if [ "$RUNNER_OS" = "Linux" ]; then
brew tests --no-compat --online
brew tests --generic --online
brew tests --online
else
brew tests --online --coverage
fi
env:
HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# set variables for coverage reporting
HOMEBREW_CODECOV_TOKEN: 3ea0364c-80ce-47a3-9fba-93a940d4b5d7
# These cannot be queried at the macOS level on GitHub Actions.
HOMEBREW_LANGUAGES: en-GB
- name: Run brew update-tests - name: Run brew update-tests
if: github.event_name == 'pull_request'
run: | run: |
brew update-test brew update-test
brew update-test --to-tag brew update-test --to-tag
brew update-test --commit=HEAD brew update-test --commit=HEAD
if: github.event_name == 'pull_request'
- name: Set up all Homebrew taps
if: runner.os == 'macOS'
run: |
brew update-reset Library/Taps/homebrew/homebrew-bundle \
Library/Taps/homebrew/homebrew-cask \
Library/Taps/homebrew/homebrew-services
brew tap homebrew/cask
brew tap homebrew/cask-drivers
brew tap homebrew/cask-fonts
brew tap homebrew/cask-versions
- name: Run brew readall on all taps - name: Run brew readall on all taps
run: brew readall --aliases run: brew readall --aliases
@ -114,18 +176,16 @@ jobs:
run: brew style --display-cop-names homebrew/core run: brew style --display-cop-names homebrew/core
- name: Run brew style on official taps - name: Run brew style on official taps
run: brew style --display-cop-names homebrew/bundle homebrew/services homebrew/test-bot if: runner.os == 'macOS'
run: |
brew style --display-cop-names homebrew/bundle \
homebrew/services \
homebrew/test-bot
- name: Run brew style on cask taps - name: Run brew style on cask taps
if: matrix.os != 'ubuntu-latest' if: runner.os == 'macOS'
run: | run: |
brew tap homebrew/cask brew style --display-cop-names homebrew/cask \
brew tap homebrew/cask-drivers
brew tap homebrew/cask-fonts
brew tap homebrew/cask-versions
brew style --display-cop-names \
homebrew/cask \
homebrew/cask-drivers \ homebrew/cask-drivers \
homebrew/cask-fonts \ homebrew/cask-fonts \
homebrew/cask-versions homebrew/cask-versions
@ -133,37 +193,46 @@ jobs:
- name: Run brew audit --skip-style on all taps - name: Run brew audit --skip-style on all taps
run: brew audit --skip-style run: brew audit --skip-style
- run: brew typecheck docker:
needs: syntax
- name: Run vale for docs linting runs-on: ubuntu-latest
run: | steps:
brew install vale - name: Set up Homebrew
vale docs/ id: set-up-homebrew
uses: Homebrew/actions/setup-homebrew@master
- name: Lint Dockerfile
if: matrix.os == 'ubuntu-latest'
run: |
brew install hadolint
hadolint Dockerfile
- name: Build Docker image - name: Build Docker image
if: matrix.os == 'ubuntu-latest'
run: docker build -t brew --build-arg=version=16.04 . run: docker build -t brew --build-arg=version=16.04 .
- name: Run brew test-bot --only-formulae --test-default-formula
run: |
if [ "$RUNNER_OS" = "Linux" ]; then
docker run --rm brew brew test-bot --only-formulae --test-default-formula
else
brew test-bot --only-formulae --test-default-formula
fi
- name: Deploy the Docker image to GitHub Packages and Docker Hub - name: Deploy the Docker image to GitHub Packages and Docker Hub
if: matrix.os == 'ubuntu-latest' && github.ref == 'refs/heads/master' if: github.ref == 'refs/heads/master'
run: | run: |
echo ${{secrets.HOMEBREW_GITHUB_PACKAGES_API_TOKEN}} | docker login ghcr.io -u BrewTestBot --password-stdin echo ${{secrets.HOMEBREW_GITHUB_PACKAGES_API_TOKEN}} | \
docker login ghcr.io -u BrewTestBot --password-stdin
docker tag brew "ghcr.io/homebrew/ubuntu16.04:master" docker tag brew "ghcr.io/homebrew/ubuntu16.04:master"
docker push "ghcr.io/homebrew/ubuntu16.04:master" docker push "ghcr.io/homebrew/ubuntu16.04:master"
echo ${{secrets.DOCKER_TOKEN}} | docker login -u brewtestbot --password-stdin echo ${{secrets.DOCKER_TOKEN}} | \
docker login -u brewtestbot --password-stdin
docker tag brew "homebrew/ubuntu16.04:master" docker tag brew "homebrew/ubuntu16.04:master"
docker push "homebrew/ubuntu16.04:master" docker push "homebrew/ubuntu16.04:master"
test-bot-default-formula:
needs: syntax
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
- macos-11.0
steps:
- name: Set up Homebrew
id: set-up-homebrew
uses: Homebrew/actions/setup-homebrew@master
- name: Set up Xcode
if: matrix.os == 'macos-11.0'
run: sudo xcode-select --switch /Applications/Xcode_12.2.app/Contents/Developer
- run: brew test-bot --only-cleanup-before
- run: brew test-bot --only-formulae --test-default-formula