Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Update and Build Formulae | |
on: | |
push: | |
branches: | |
- master | |
schedule: | |
- cron: '0 4 * * 4' | |
repository_dispatch: | |
workflow_dispatch: | |
pull_request: | |
env: | |
HOMEBREW_DEVELOPER: 1 | |
HOMEBREW_GITHUB_ACTIONS: 1 | |
HOMEBREW_NO_AUTO_UPDATE: 1 | |
HOMEBREW_NO_INSTALL_FROM_API: 1 | |
HOMEBREW_RELOCATE_RPATHS: 1 | |
jobs: | |
tap-syntax: | |
if: "!contains(github.event.head_commit.message, 'skip-build')" | |
runs-on: ubuntu-22.04 | |
container: | |
image: ghcr.io/homebrew/ubuntu22.04:master | |
env: | |
HOMEBREW_SIMULATE_MACOS_ON_LINUX: 1 | |
outputs: | |
testing_formulae: ${{ steps.formulae-detect.outputs.testing_formulae }} | |
added_formulae: ${{ steps.formulae-detect.outputs.added_formulae }} | |
deleted_formulae: ${{ steps.formulae-detect.outputs.deleted_formulae }} | |
steps: | |
- name: Set up Homebrew | |
id: set-up-homebrew | |
uses: Homebrew/actions/setup-homebrew@master | |
with: | |
core: true | |
cask: false | |
test-bot: true | |
- run: brew test-bot --only-tap-syntax | |
- run: brew test-bot --only-formulae-detect | |
if: github.event_name == 'pull_request' | |
id: formulae-detect | |
get-matrix: | |
if: github.event_name != 'pull_request' && !contains(github.event.head_commit.message, 'skip-build') | |
needs: tap-syntax | |
runs-on: ubuntu-22.04 | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Get matrix | |
id: set-matrix | |
env: | |
GITHUB_MESSAGE: ${{ github.event.head_commit.message }} | |
run: | | |
extensions=() | |
if [[ "$GITHUB_MESSAGE" != *--build-only-* ]]; then | |
mapfile -t extensions < <(find ./Formula -name "*@*.rb" -print0 | xargs -0 basename -a | sed "s/@.*//" | sort | uniq) | |
else | |
IFS=, read -ra extensions <<< "$(echo "$GITHUB_MESSAGE" | grep -Po 'build-only-.*' | cut -d '-' -f 3-)" | |
fi | |
json_array="" | |
first=true | |
for extension in "${extensions[@]}"; do | |
if [ "$first" = true ]; then | |
first=false | |
json_array="{\"extension\": \"$extension\"}" | |
else | |
json_array+=", {\"extension\": \"$extension\"}" | |
fi | |
done | |
echo "matrix={\"include\":[$json_array]}" >> "$GITHUB_OUTPUT" | |
create-pr: | |
if: github.event_name != 'pull_request' && !contains(github.event.head_commit.message, 'skip-build') | |
needs: get-matrix | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: ${{fromJson(needs.get-matrix.outputs.matrix)}} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Homebrew | |
id: set-up-homebrew | |
uses: Homebrew/actions/setup-homebrew@master | |
with: | |
core: false | |
cask: false | |
test-bot: false | |
- name: Patch formula | |
id: patch | |
env: | |
EXTENSION: ${{ matrix.extension }} | |
GITHUB_MESSAGE: ${{ github.event.head_commit.message }} | |
GITHUB_DEFAULT_BRANCH: master | |
GITHUB_REPOSITORY: ${{ github.repository }} | |
GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }} | |
GITHUB_TOKEN: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }} | |
GITHUB_SHA: ${{ github.sha }} | |
run: bash ./.github/scripts/pr.sh | |
set-environment: | |
if: github.event_name == 'pull_request' && !contains(github.event.head_commit.message, 'skip-build') | |
runs-on: ubuntu-22.04 | |
needs: tap-syntax | |
outputs: | |
syntax-only: ${{ steps.check-labels.outputs.syntax-only }} | |
linux-runner: ${{ steps.check-labels.outputs.linux-runner }} | |
fail-fast: ${{ steps.check-labels.outputs.fail-fast }} | |
test-dependents: ${{ steps.check-labels.outputs.test-dependents }} | |
timeout-minutes: ${{ steps.check-labels.outputs.timeout-minutes }} | |
container: ${{ steps.check-labels.outputs.container }} | |
test-bot-formulae-args: ${{ steps.check-labels.outputs.test-bot-formulae-args }} | |
test-bot-dependents-args: ${{ steps.check-labels.outputs.test-bot-dependents-args }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check for CI labels | |
id: check-labels | |
uses: actions/github-script@v7 | |
env: | |
SCRIPTS_PATH: .github/scripts | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const path = require('path') | |
const script = require(path.resolve(`${process.env.SCRIPTS_PATH}/environment.js`)) | |
const formula_detect = { | |
testing_formulae: '${{needs.tap-syntax.outputs.testing_formulae}}', | |
added_formulae: '${{needs.tap-syntax.outputs.added_formulae}}', | |
deleted_formulae: '${{needs.tap-syntax.outputs.deleted_formulae}}' | |
} | |
try { | |
await script({github, context, core}, formula_detect) | |
} catch (error) { | |
console.error(error); | |
} | |
build-formula: | |
needs: set-environment | |
if: github.event_name == 'pull_request' && !contains(github.event.head_commit.message, 'skip-build') | |
strategy: | |
matrix: | |
include: | |
- runner: 'macos-13-arm64' | |
cleanup: true | |
- runner: 'macos-15' | |
cleanup: true | |
- runner: 'macos-14' | |
cleanup: true | |
- runner: 'macos-13' | |
cleanup: true | |
- runner: ${{needs.set-environment.outputs.linux-runner}} | |
container: ${{fromJson(needs.set-environment.outputs.container)}} | |
workdir: /github/home | |
cleanup: false | |
timeout: 4320 | |
fail-fast: ${{fromJson(needs.set-environment.outputs.fail-fast)}} | |
runs-on: ${{matrix.runner}} | |
container: ${{matrix.container}} | |
timeout-minutes: ${{ matrix.timeout || fromJson(needs.set-environment.outputs.timeout-minutes) }} | |
defaults: | |
run: | |
shell: /bin/bash -e {0} | |
working-directory: ${{matrix.workdir || github.workspace}} | |
env: | |
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | |
HOMEBREW_GITHUB_API_TOKEN: ${{secrets.GITHUB_TOKEN}} | |
BOTTLES_DIR: ${{matrix.workdir || github.workspace}}/bottles | |
steps: | |
- name: Pre-test steps | |
uses: Homebrew/actions/pre-build@master | |
with: | |
bottles-directory: ${{ env.BOTTLES_DIR }} | |
cleanup: ${{ matrix.cleanup }} | |
- name: Run brew test-bot ${{ needs.set-environment.outputs.test-bot-formulae-args }} | |
id: brew-test-bot-formulae | |
working-directory: ${{ env.BOTTLES_DIR }} | |
run: | | |
brew test-bot ${{ needs.set-environment.outputs.test-bot-formulae-args }} | |
- name: Post-build steps | |
if: always() | |
uses: Homebrew/actions/post-build@master | |
with: | |
runner: ${{ matrix.runner }} | |
cleanup: ${{ matrix.cleanup }} | |
bottles-directory: ${{ env.BOTTLES_DIR }} | |
logs-directory: ${{ format('{0}/logs', env.BOTTLES_DIR) }} | |
add-label: | |
needs: build-formula | |
if: github.event_name == 'pull_request' && !contains(github.event.head_commit.message, 'skip-build') && github.event.pull_request.user.login == github.repository_owner | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Add Label | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: gh pr edit "$(echo "$GITHUB_REF" | awk 'BEGIN { FS = "/" } ; { print $3 }')" --add-label "build-complete" |