--- # DESCRIPTION: Github actions config # SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 # name: format on: push: branches-ignore: - 'dependabot/**' # Avoid duplicates: only run the PR, not the push permissions: contents: write defaults: run: working-directory: repo concurrency: # At most 1 run per branch: the job pushes what 'make format' changed, so # concurrent runs on the same branch race on that push. Cancel the run in # progress, as the newer one formats a tree that already holds its commits. group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: format: runs-on: ubuntu-24.04 name: Ubuntu 24.04 | format steps: # On the main repository, push as the Verilator CI app. # Forks do not have the app, so fall back to GITHUB_TOKEN there. - name: Generate access token id: generate-token if: ${{ github.repository == 'verilator/verilator' }} uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 with: client-id: ${{ vars.VERILATOR_CI_ID }} private-key: ${{ secrets.VERILATOR_CI_KEY }} owner: verilator repositories: verilator permission-contents: write - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: path: repo token: ${{ steps.generate-token.outputs.token || secrets.GITHUB_TOKEN }} - name: Install packages for build uses: ./repo/.github/actions/install-deps with: stage: format - name: Configure git identity env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} APP_SLUG: ${{ steps.generate-token.outputs.app-slug }} run: | if [ -n "$APP_SLUG" ]; then user_id=$(gh api "/users/${APP_SLUG}[bot]" --jq .id) git config --global user.email "${user_id}+${APP_SLUG}[bot]@users.noreply.github.com" git config --global user.name "${APP_SLUG}[bot]" else git config --global user.email "action@example.com" git config --global user.name "github action" fi - name: Configure run: | autoconf ./configure - name: Set up Python venv uses: ./repo/.github/actions/setup-venv with: save: ${{ github.ref == 'refs/heads/master' }} - name: Format code run: | source .venv/bin/activate make -j 4 format CLANGFORMAT=clang-format-18 git status - name: Push run: |- if [ -n "$(git status --porcelain)" ]; then git commit . -m "Apply 'make format'" && git push origin fi