CI #43311
This file contains hidden or 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: CI | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
schedule: | |
# Every 15 minutes | |
- cron: "*/15 * * * *" | |
workflow_dispatch: | |
concurrency: | |
group: scheduled-${{ github.ref }}-${{ github.event_name }} | |
cancel-in-progress: true | |
jobs: | |
generate-cask: | |
if: startsWith( github.repository, 'Homebrew/' ) | |
name: Generate homebrew/cask data, pages and API | |
runs-on: macos-latest | |
timeout-minutes: 20 | |
permissions: | |
contents: read | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Set up Homebrew | |
id: set-up-homebrew | |
uses: Homebrew/actions/setup-homebrew@main | |
with: | |
core: false | |
cask: true | |
test-bot: false | |
- name: Update data for homebrew/cask | |
run: /usr/bin/rake casks | |
env: | |
HOMEBREW_DEVELOPER: 1 | |
- name: Archive data | |
run: tar czvf data-cask.tar.gz _data/cask/ api/cask/ api/cask-source/ api/cask_tap_migrations.json api/internal/cask.* cask/ | |
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
with: | |
name: data-cask | |
path: data-cask.tar.gz | |
retention-days: 1 | |
generate-core: | |
if: startsWith( github.repository, 'Homebrew/' ) | |
name: Generate homebrew/core data, pages and API | |
runs-on: macos-latest | |
timeout-minutes: 20 | |
permissions: | |
contents: read | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Set up Homebrew | |
id: set-up-homebrew | |
uses: Homebrew/actions/setup-homebrew@main | |
with: | |
core: true | |
cask: false | |
test-bot: false | |
- name: Update data for homebrew/core | |
run: /usr/bin/rake formulae | |
env: | |
HOMEBREW_DEVELOPER: 1 | |
- name: Archive data | |
run: tar czvf data-core.tar.gz _data/formula/ _data/formula_canonical.json api/formula/ api/formula_tap_migrations.json api/internal/formula.* formula/ | |
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
with: | |
name: data-core | |
path: data-core.tar.gz | |
retention-days: 1 | |
generate-analytics: | |
if: startsWith( github.repository, 'Homebrew/' ) | |
name: Generate analytics data | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
permissions: | |
contents: read | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Set up Homebrew | |
id: set-up-homebrew | |
uses: Homebrew/actions/setup-homebrew@main | |
with: | |
core: false | |
cask: false | |
test-bot: false | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@2a7b30092b0caf9c046252510f9273b4875f3db9 # v1.254.0 | |
with: | |
bundler-cache: true | |
- name: Get Python version file | |
id: get-python-version | |
run: | | |
echo "python-version-file=$(brew --repo)/Library/Homebrew/formula-analytics/.python-version" >> "$GITHUB_OUTPUT" | |
- name: Set up Python | |
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 | |
with: | |
python-version-file: ${{ steps.get-python-version.outputs.python-version-file }} | |
- name: Create directories | |
run: mkdir -p _data/analytics api/analytics | |
- name: Update analytics data | |
run: /usr/bin/rake analytics | |
if: github.ref_name == 'main' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false && github.event.pull_request.user.login != 'dependabot[bot]') | |
env: | |
HOMEBREW_INFLUXDB_TOKEN: ${{ secrets.HOMEBREW_INFLUXDB_READ_TOKEN }} | |
- name: Archive data | |
run: tar czvf data-analytics.tar.gz _data/analytics api/analytics | |
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
with: | |
name: data-analytics | |
path: data-analytics.tar.gz | |
retention-days: 1 | |
build: | |
needs: [generate-cask, generate-core, generate-analytics] | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
permissions: | |
contents: read | |
steps: | |
- name: Set up Git repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
persist-credentials: false | |
- name: Set up Homebrew | |
id: set-up-homebrew | |
uses: Homebrew/actions/setup-homebrew@main | |
with: | |
core: false | |
cask: false | |
test-bot: false | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@2a7b30092b0caf9c046252510f9273b4875f3db9 # v1.254.0 | |
with: | |
bundler-cache: true | |
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 | |
- name: Move artifacts into place | |
run: | | |
tar xvf data-analytics/data-analytics.tar.gz | |
tar xvf data-cask/data-cask.tar.gz | |
tar xvf data-core/data-core.tar.gz | |
- name: Install oras for pulling from GitHub Packages | |
run: brew install oras | |
- name: Pull executables.txt from GitHub Packages | |
run: oras pull ghcr.io/homebrew/command-not-found/executables:latest --output api/internal | |
- name: Generate API samples | |
run: | | |
GENERATE_SAMPLES="${{ github.ref_name == 'main' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false && github.event.pull_request.user.login != 'dependabot[bot]') }}" | |
if [ "$GENERATE_SAMPLES" = "true" ]; then | |
/usr/bin/rake "api_samples" | |
else | |
/usr/bin/rake "api_samples[template]" | |
fi | |
- name: Build site | |
run: bundle exec jekyll build | |
- name: Validate build | |
run: ./script/validate-build.rb | |
- name: Sign API | |
if: github.ref_name == 'main' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false && github.event.pull_request.user.login != 'dependabot[bot]') | |
env: | |
JWS_SIGNING_KEY_ID: homebrew-1 | |
JWS_SIGNING_KEY: ${{ secrets.JWS_HOMEBREW_1 }} | |
run: ./script/sign-json.rb | |
- name: Upload artifact | |
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1 | |
deploy: | |
needs: build | |
if: ${{ github.ref_name == 'main' }} | |
permissions: | |
pages: write | |
id-token: write | |
environment: | |
name: github-pages | |
url: ${{ steps.deployment.outputs.page_url }} | |
outputs: | |
deploy_url: ${{ steps.deployment.outputs.page_url }} | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
steps: | |
- name: Deploy to GitHub Pages | |
id: deployment | |
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5 | |
deploy-issue: | |
name: Open/close deploy issues | |
needs: | |
[ | |
generate-cask, | |
generate-core, | |
generate-analytics, | |
build, | |
deploy, | |
] | |
if: ${{ always() && github.ref_name == 'main' }} | |
env: | |
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
runs-on: ubuntu-latest | |
timeout-minutes: 5 | |
permissions: | |
issues: write # for Homebrew/actions/create-or-update-issue | |
steps: | |
- name: Open, update, or close deploy issue | |
uses: Homebrew/actions/create-or-update-issue@main | |
with: | |
token: ${{ github.token }} | |
repository: ${{ github.repository }} | |
title: formulae.brew.sh deployment failed! | |
body: The most recent [formulae.brew.sh deployment failed](${{ env.RUN_URL }}). | |
labels: deploy failure | |
update-existing: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') || contains(needs.*.result, 'skipped') }} | |
close-existing: ${{ needs.deploy.result == 'success' }} | |
close-from-author: github-actions[bot] | |
close-comment: The most recent [formulae.brew.sh deployment succeeded](${{ env.RUN_URL }}). Closing issue. |