--- # DESCRIPTION: Github actions config # This name is key to badges in README.rst, so we use the name build # SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 name: build-test on: push: branches-ignore: - 'dependabot/**' # Avoid duplicates: only run the PR, not the push pull_request: workflow_dispatch: schedule: - cron: '0 0 * * 0' # weekly permissions: contents: read defaults: run: working-directory: repo concurrency: # At most 1 job per branch. Auto cancel on pull requests and on all forks group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.event_name == 'pull_request' || github.repository != 'verilator/verilator' }} jobs: build-2404-gcc: name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }} uses: ./.github/workflows/reusable-build.yml with: sha: ${{ github.sha }} os: ${{ matrix.os }} os-name: linux cc: ${{ matrix.cc }} dev-asan: ${{ matrix.asan }} dev-gcov: 0 strategy: fail-fast: false matrix: include: - {os: ubuntu-24.04, cc: gcc, asan: 0} build-2404-clang: name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }} uses: ./.github/workflows/reusable-build.yml with: sha: ${{ github.sha }} os: ${{ matrix.os }} os-name: linux cc: ${{ matrix.cc }} dev-asan: ${{ matrix.asan }} dev-gcov: 0 strategy: fail-fast: false matrix: include: - {os: ubuntu-24.04, cc: clang, asan: 1} build-2204-gcc: name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }} uses: ./.github/workflows/reusable-build.yml with: sha: ${{ github.sha }} os: ${{ matrix.os }} os-name: linux cc: ${{ matrix.cc }} dev-asan: ${{ matrix.asan }} dev-gcov: 0 strategy: fail-fast: false matrix: include: - {os: ubuntu-22.04, cc: gcc, asan: 0} build-2204-clang: name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }} uses: ./.github/workflows/reusable-build.yml with: sha: ${{ github.sha }} os: ${{ matrix.os }} os-name: linux cc: ${{ matrix.cc }} dev-asan: ${{ matrix.asan }} dev-gcov: 0 strategy: fail-fast: false matrix: include: - {os: ubuntu-22.04, cc: clang, asan: 0} build-osx-gcc: name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }} uses: ./.github/workflows/reusable-build.yml with: sha: ${{ github.sha }} os: ${{ matrix.os }} os-name: osx cc: ${{ matrix.cc }} dev-asan: ${{ matrix.asan }} dev-gcov: 0 strategy: fail-fast: false matrix: include: - {os: macos-15, cc: gcc, asan: 0} build-osx-clang: name: Build | ${{ matrix.os }} | ${{ matrix.cc }}${{ matrix.asan && ' | asan' || '' }} uses: ./.github/workflows/reusable-build.yml with: sha: ${{ github.sha }} os: ${{ matrix.os }} os-name: osx cc: ${{ matrix.cc }} dev-asan: ${{ matrix.asan }} dev-gcov: 0 strategy: fail-fast: false matrix: include: - {os: macos-15, cc: clang, asan: 0} build-windows: name: Build | ${{ matrix.os }} | ${{ matrix.cc }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - {os: windows-2025, cc: msvc} env: CI_OS_NAME: win CCACHE_COMPRESS: 1 CCACHE_DIR: ${{ github.workspace }}/.ccache CCACHE_LIMIT_MULTIPLE: 0.95 steps: - uses: actions/checkout@v5 with: path: repo - name: Cache $CCACHE_DIR uses: actions/cache@v4 with: path: ${{ env.CCACHE_DIR }} key: msbuild-msvc-cmake - name: compile env: WIN_FLEX_BISON: ${{ github.workspace }}/.ccache run: ./ci/ci-win-compile.ps1 - name: test build run: ./ci/ci-win-test.ps1 - name: Zip up repository run: Compress-Archive -LiteralPath install -DestinationPath verilator.zip - name: Upload zip archive uses: actions/upload-artifact@v5 with: path: ${{ github.workspace }}/repo/verilator.zip name: verilator-win.zip test-2404-gcc: name: Test | ${{ matrix.os }} | ${{ matrix.cc }} | ${{ matrix.reloc && 'reloc | ' || '' }} ${{ matrix.suite }} needs: build-2404-gcc uses: ./.github/workflows/reusable-test.yml with: archive: ${{ needs.build-2404-gcc.outputs.archive }} os: ${{ matrix.os }} cc: ${{ matrix.cc }} reloc: ${{ matrix.reloc }} suite: ${{ matrix.suite }} dev-gcov: 0 strategy: fail-fast: false matrix: include: # Ubuntu 24.04 gcc - {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: dist-vlt-0} - {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: dist-vlt-1} - {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: dist-vlt-2} - {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: dist-vlt-3} - {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: vltmt-0} - {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: vltmt-1} - {os: ubuntu-24.04, cc: gcc, reloc: 0, suite: vltmt-2} test-2404-clang: name: Test | ${{ matrix.os }} | ${{ matrix.cc }} | ${{ matrix.reloc && 'reloc | ' || '' }} ${{ matrix.suite }} needs: build-2404-clang uses: ./.github/workflows/reusable-test.yml with: archive: ${{ needs.build-2404-clang.outputs.archive }} os: ${{ matrix.os }} cc: ${{ matrix.cc }} reloc: ${{ matrix.reloc }} suite: ${{ matrix.suite }} dev-gcov: 0 strategy: fail-fast: false matrix: include: # Ubuntu 24.04 clang - {os: ubuntu-24.04, cc: clang, reloc: 0, suite: dist-vlt-0} - {os: ubuntu-24.04, cc: clang, reloc: 0, suite: dist-vlt-1} - {os: ubuntu-24.04, cc: clang, reloc: 0, suite: dist-vlt-2} - {os: ubuntu-24.04, cc: clang, reloc: 0, suite: dist-vlt-3} - {os: ubuntu-24.04, cc: clang, reloc: 0, suite: vltmt-0} - {os: ubuntu-24.04, cc: clang, reloc: 0, suite: vltmt-1} - {os: ubuntu-24.04, cc: clang, reloc: 0, suite: vltmt-2} test-2204-gcc: name: Test | ${{ matrix.os }} | ${{ matrix.cc }} | ${{ matrix.reloc && 'reloc | ' || '' }} ${{ matrix.suite }} needs: build-2204-gcc uses: ./.github/workflows/reusable-test.yml with: archive: ${{ needs.build-2204-gcc.outputs.archive }} os: ${{ matrix.os }} cc: ${{ matrix.cc }} reloc: ${{ matrix.reloc }} suite: ${{ matrix.suite }} dev-gcov: 0 strategy: fail-fast: false matrix: include: # Ubuntu 22.04 gcc - {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: dist-vlt-0} - {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: dist-vlt-1} - {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: dist-vlt-2} - {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: dist-vlt-3} - {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: vltmt-0} - {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: vltmt-1} - {os: ubuntu-22.04, cc: gcc, reloc: 0, suite: vltmt-2} test-2204-clang: name: Test | ${{ matrix.os }} | ${{ matrix.cc }} | ${{ matrix.reloc && 'reloc | ' || '' }} ${{ matrix.suite }} needs: build-2204-clang uses: ./.github/workflows/reusable-test.yml with: archive: ${{ needs.build-2204-clang.outputs.archive }} os: ${{ matrix.os }} cc: ${{ matrix.cc }} reloc: ${{ matrix.reloc }} suite: ${{ matrix.suite }} dev-gcov: 0 strategy: fail-fast: false matrix: include: # Ubuntu 22.04 clang, also test relocation - {os: ubuntu-22.04, cc: clang, reloc: 1, suite: dist-vlt-0} - {os: ubuntu-22.04, cc: clang, reloc: 1, suite: dist-vlt-1} - {os: ubuntu-22.04, cc: clang, reloc: 1, suite: dist-vlt-2} - {os: ubuntu-22.04, cc: clang, reloc: 1, suite: dist-vlt-3} - {os: ubuntu-22.04, cc: clang, reloc: 1, suite: vltmt-0} - {os: ubuntu-22.04, cc: clang, reloc: 1, suite: vltmt-1} - {os: ubuntu-22.04, cc: clang, reloc: 1, suite: vltmt-2} lint-py: name: Lint Python uses: ./.github/workflows/reusable-lint-py.yml passed: name: Test suite passed if: always() needs: - build-2404-gcc - build-2404-clang - build-2204-gcc - build-2204-clang - build-osx-gcc - build-osx-clang - build-windows - test-2404-gcc - test-2404-clang - test-2204-gcc - test-2204-clang - lint-py runs-on: ubuntu-24.04 steps: - name: Decide whether the needed jobs succeeded or failed uses: re-actors/alls-green@release/v1 with: jobs: ${{ toJSON(needs) }}