name: GitHub Actions CI on: push: branches: master pull_request: [] jobs: tests: if: github.repository == 'Homebrew/brew' runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macOS-latest] steps: - name: Set up Git repository uses: actions/checkout@v1 - name: Set up Homebrew PATH run: | if [ "$RUNNER_OS" = "macOS" ]; then echo "::add-path::/usr/local/bin:/usr/bin:/bin" else echo "::add-path::/home/linuxbrew/.linuxbrew/bin:/usr/bin:/bin" fi - name: Set up Homebrew run: | if [ "$RUNNER_OS" = "Linux" ]; then HOMEBREW_REPOSITORY=/home/linuxbrew/.linuxbrew/Homebrew sudo mkdir -p /home/linuxbrew/.linuxbrew cd .. sudo mv "brew" "$HOMEBREW_REPOSITORY" sudo ln -s "$HOMEBREW_REPOSITORY" "brew" cd /home/linuxbrew/.linuxbrew sudo mkdir -p bin etc include lib opt sbin share var/homebrew/linked Cellar sudo ln -s ../Homebrew/bin/brew /home/linuxbrew/.linuxbrew/bin/ sudo chown -R "$USER" /home/linuxbrew # Install taps needed for 'brew tests' export HOMEBREW_NO_AUTO_UPDATE=1 brew tap homebrew/bundle else HOMEBREW_REPOSITORY="$(brew --repo)" mv "$HOMEBREW_REPOSITORY/Library/Taps" "$PWD/Library" sudo rm -rf "$HOMEBREW_REPOSITORY" sudo ln -s "$PWD" "$HOMEBREW_REPOSITORY" brew update-reset Library/Taps/homebrew/homebrew-core # Install taps needed for 'brew tests' export HOMEBREW_NO_AUTO_UPDATE=1 brew tap homebrew/cask brew tap homebrew/bundle brew tap homebrew/services fi - name: Run brew config run: | brew config - name: Run brew doctor run: | if [ "$RUNNER_OS" = "Linux" ]; then # Cleanup some Linux `brew doctor` failures sudo rm -rf /usr/local/include/node/ else # Allow Xcode to be outdated export HOMEBREW_GITHUB_ACTIONS=1 fi brew doctor - name: Install Bundler RubyGems run: | brew install-bundler-gems # Check for uncommitted gems git -C $(brew --repo) diff --stat --exit-code Library/Homebrew/vendor/bundle/ruby if [ "$RUNNER_OS" = "Linux" ]; then # Fix permissions for 'brew tests' sudo chmod -R g-w,o-w /home/linuxbrew /home/runner /opt fi - name: Run brew tests run: | # brew tests doesn't like world writable directories umask 022 # set variables for coverage reporting export HOMEBREW_CI_BUILD_NUMBER="$GITHUB_REF" export HOMEBREW_CI_BRANCH="$HEAD_GITHUB_REF" export HOMEBREW_GITHUB_REPOSITORY="$GITHUB_REPOSITORY" # 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_GITHUB_ACTIONS: 1 HOMEBREW_CI_NAME: github-actions HOMEBREW_COVERALLS_REPO_TOKEN: 3F6U6ZqctoNJwKyREremsqMgpU3qYgxFk # These cannot be queried at the macOS level on GitHub Actions. HOMEBREW_LANGUAGES: en-GB - name: Run brew style run: | brew style --display-cop-names - name: Run brew man run: | brew man --fail-if-changed - name: Run brew update-tests run: | git config --global user.name "BrewTestBot" git config --global user.email "homebrew-test-bot@lists.sfconservancy.org" brew update-test brew update-test --to-tag brew update-test --commit=HEAD if: github.event_name == 'pull_request' - name: Run brew readall run: | brew readall --aliases - name: Run vale for docs linting run: | brew install vale vale $(brew --repo)/docs/ - name: Build Docker image run: | docker pull homebrew/brew docker-compose -f Dockerfile.yml build sut if: matrix.os == 'ubuntu-latest' - name: Run brew test-bot run: | if [ "$RUNNER_OS" = "Linux" ]; then docker-compose -f Dockerfile.yml run --rm -v $GITHUB_WORKSPACE:/tmp/test-bot sut else brew test-bot fi