mirror of
https://github.com/verilator/verilator.git
synced 2026-10-05 17:43:31 +02:00
266 lines
8.3 KiB
YAML
266 lines
8.3 KiB
YAML
---
|
|
# DESCRIPTION: Github actions config
|
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
|
|
|
name: Regression
|
|
|
|
on:
|
|
push:
|
|
branches-ignore:
|
|
- 'dependabot/**' # Avoid duplicates: only run the PR, not the push
|
|
pull_request:
|
|
types: [opened, synchronize, reopened, labeled, unlabeled]
|
|
workflow_dispatch:
|
|
schedule:
|
|
- cron: '0 0 * * 0' # weekly
|
|
|
|
permissions:
|
|
contents: read
|
|
actions: read
|
|
|
|
defaults:
|
|
run:
|
|
working-directory: repo
|
|
|
|
concurrency:
|
|
# At most 1 job per branch. Auto cancel on pull requests and on all forks.
|
|
# Of the pull request events, only one that starts a run, or that removes the
|
|
# 'pr: regression' label to cancel one, shares the group. The rest are
|
|
# skipped (a change of another label, or a payload that does not carry the
|
|
# label, like an 'opened' delivered after it was added), and a skipped run
|
|
# must not cancel the one in progress, so they are given a unique group.
|
|
# This way adding the label starts a run, removing it cancels the in-progress
|
|
# run, and anything else has no effect. Note such an event still creates a
|
|
# run of this workflow, which is skipped, and would then hide the one in
|
|
# progress on the pull request. 'pr-run-cleanup.yml' deletes those.
|
|
# Key pull request runs on the number: 'github.ref' is the base branch once
|
|
# the pull request is closed, so unlabel events would cancel base runs.
|
|
# NOTE: The last part of the group expression must be kept in sync with the
|
|
# 'start' job condition below: it maps to 'shared' exactly those events that
|
|
# satisfy that condition, plus the 'unlabeled' event of the gating label.
|
|
group: |-
|
|
${{
|
|
github.workflow
|
|
}}-${{
|
|
(github.event_name == 'pull_request')
|
|
&& format('pr-{0}', github.event.number) || github.ref
|
|
}}-${{
|
|
(github.event_name == 'pull_request'
|
|
&& (((github.event.action == 'labeled' || github.event.action == 'unlabeled')
|
|
&& github.event.label.name != 'pr: regression')
|
|
|| (github.event.action != 'labeled'
|
|
&& github.event.action != 'unlabeled'
|
|
&& !contains(github.event.pull_request.labels.*.name, 'pr: regression'))))
|
|
&& github.run_id || 'shared'
|
|
}}
|
|
cancel-in-progress: ${{ github.event_name == 'pull_request' || github.repository != 'verilator/verilator' }}
|
|
|
|
jobs:
|
|
|
|
start:
|
|
name: Start
|
|
# Only run pull request jobs if labelled as needing a regression run.
|
|
# Always run push, workflow dispatch and scheduled jobs
|
|
if: |
|
|
(github.event_name == 'pull_request'
|
|
&& ((github.event.action == 'labeled'
|
|
&& github.event.label.name == 'pr: regression')
|
|
|| (github.event.action != 'labeled'
|
|
&& github.event.action != 'unlabeled'
|
|
&& contains(github.event.pull_request.labels.*.name, 'pr: regression')))) ||
|
|
(github.event_name == 'push') ||
|
|
(github.event_name == 'workflow_dispatch') ||
|
|
(github.event_name == 'schedule')
|
|
runs-on: ubuntu-slim
|
|
defaults:
|
|
run:
|
|
working-directory: . # The workflow default is not checked out here
|
|
steps:
|
|
- name: Enabled
|
|
run: echo "Regression is enabled for this run"
|
|
|
|
- name: Save the pull request number
|
|
if: ${{ github.event_name == 'pull_request' }}
|
|
run: echo "${{ github.event.number }}" > pr-number.txt
|
|
|
|
- name: Upload the pull request number
|
|
if: ${{ github.event_name == 'pull_request' }}
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
with:
|
|
name: pr-number
|
|
path: pr-number.txt
|
|
overwrite: true
|
|
|
|
build-2604-gcc:
|
|
name: Build | 26.04 | gcc
|
|
needs: start
|
|
uses: ./.github/workflows/reusable-build.yml
|
|
with:
|
|
cc: gcc
|
|
runs-on: ubuntu-26.04
|
|
sha: ${{ github.sha }}
|
|
|
|
build-2604-clang:
|
|
name: Build | 26.04 | clang
|
|
needs: start
|
|
uses: ./.github/workflows/reusable-build.yml
|
|
with:
|
|
cc: clang
|
|
dev-asan: true # Build (and run) with address sanitizer
|
|
runs-on: ubuntu-26.04
|
|
sha: ${{ github.sha }}
|
|
|
|
build-2404-gcc:
|
|
name: Build | 24.04 | gcc
|
|
needs: start
|
|
uses: ./.github/workflows/reusable-build.yml
|
|
with:
|
|
cc: gcc
|
|
runs-on: ubuntu-24.04
|
|
sha: ${{ github.sha }}
|
|
|
|
build-2404-clang:
|
|
name: Build | 24.04 | clang
|
|
needs: start
|
|
uses: ./.github/workflows/reusable-build.yml
|
|
with:
|
|
cc: clang
|
|
runs-on: ubuntu-24.04
|
|
sha: ${{ github.sha }}
|
|
|
|
build-2204-gcc:
|
|
name: Build | 22.04 | gcc
|
|
needs: start
|
|
uses: ./.github/workflows/reusable-build.yml
|
|
with:
|
|
cc: gcc
|
|
runs-on: ubuntu-22.04
|
|
sha: ${{ github.sha }}
|
|
|
|
build-macos-26-clang:
|
|
name: Build | macos-26 | clang
|
|
needs: start
|
|
uses: ./.github/workflows/reusable-build.yml
|
|
with:
|
|
cc: clang
|
|
runs-on: macos-26
|
|
sha: ${{ github.sha }}
|
|
|
|
build-windows:
|
|
name: Build | windows-2025-vs2026 | msvc
|
|
needs: start
|
|
runs-on: windows-2025-vs2026
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
with:
|
|
path: repo
|
|
- name: Cache win_flex_bison
|
|
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v5
|
|
with:
|
|
path: ${{ github.workspace }}/win_flex_bison
|
|
key: win_flex_bison
|
|
- name: compile
|
|
run: ./ci/ci-win-compile.ps1
|
|
- name: test build
|
|
run: ./ci/ci-win-test.ps1
|
|
|
|
test-2604-gcc:
|
|
name: Test | 26.04 | gcc | ${{ matrix.suite }}
|
|
needs: build-2604-gcc
|
|
uses: ./.github/workflows/reusable-test.yml
|
|
with:
|
|
archive: ${{ needs.build-2604-gcc.outputs.archive }}
|
|
cc: gcc
|
|
runs-on: ubuntu-26.04
|
|
suite: ${{ matrix.suite }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
suite: [dist-vlt-0, dist-vlt-1, dist-vlt-2, dist-vlt-3, vltmt-0, vltmt-1, vltmt-2]
|
|
|
|
test-2604-clang:
|
|
name: Test | 26.04 | clang | ${{ matrix.suite }}
|
|
needs: build-2604-clang
|
|
uses: ./.github/workflows/reusable-test.yml
|
|
with:
|
|
archive: ${{ needs.build-2604-clang.outputs.archive }}
|
|
cc: clang
|
|
runs-on: ubuntu-26.04
|
|
suite: ${{ matrix.suite }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
suite: [dist-vlt-0, dist-vlt-1, dist-vlt-2, dist-vlt-3, vltmt-0, vltmt-1, vltmt-2]
|
|
|
|
test-2404-gcc:
|
|
name: Test | 24.04 | gcc | ${{ matrix.suite }}
|
|
needs: build-2404-gcc
|
|
uses: ./.github/workflows/reusable-test.yml
|
|
with:
|
|
archive: ${{ needs.build-2404-gcc.outputs.archive }}
|
|
cc: gcc
|
|
runs-on: ubuntu-24.04
|
|
suite: ${{ matrix.suite }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
suite: [dist-vlt-0, dist-vlt-1, dist-vlt-2, dist-vlt-3, vltmt-0, vltmt-1, vltmt-2]
|
|
|
|
test-2404-clang:
|
|
name: Test | 24.04 | clang | ${{ matrix.suite }}
|
|
needs: build-2404-clang
|
|
uses: ./.github/workflows/reusable-test.yml
|
|
with:
|
|
archive: ${{ needs.build-2404-clang.outputs.archive }}
|
|
cc: clang
|
|
reloc: true # Test with relocated installation
|
|
runs-on: ubuntu-24.04
|
|
suite: ${{ matrix.suite }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
suite: [dist-vlt-0, dist-vlt-1, dist-vlt-2, dist-vlt-3, vltmt-0, vltmt-1, vltmt-2]
|
|
|
|
test-2204-gcc:
|
|
name: Test | 22.04 | gcc | ${{ matrix.suite }}
|
|
needs: build-2204-gcc
|
|
uses: ./.github/workflows/reusable-test.yml
|
|
with:
|
|
archive: ${{ needs.build-2204-gcc.outputs.archive }}
|
|
cc: gcc
|
|
runs-on: ubuntu-22.04
|
|
suite: ${{ matrix.suite }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
suite: [dist-vlt-0, dist-vlt-1, dist-vlt-2, dist-vlt-3, vltmt-0, vltmt-1, vltmt-2]
|
|
|
|
lint-py:
|
|
name: Lint Python
|
|
needs: start
|
|
uses: ./.github/workflows/reusable-lint-py.yml
|
|
|
|
passed:
|
|
name: Regression tests passed # This job is used as a required status check on PRs
|
|
if: ${{ !cancelled() && needs.start.result != 'skipped' }}
|
|
needs:
|
|
- start
|
|
- build-2604-gcc
|
|
- build-2604-clang
|
|
- build-2404-gcc
|
|
- build-2404-clang
|
|
- build-2204-gcc
|
|
- build-macos-26-clang
|
|
- build-windows
|
|
- test-2604-gcc
|
|
- test-2604-clang
|
|
- test-2404-gcc
|
|
- test-2404-clang
|
|
- test-2204-gcc
|
|
- lint-py
|
|
runs-on: ubuntu-slim
|
|
steps:
|
|
- name: Check all needed jobs succeeded
|
|
working-directory: .
|
|
run: jq -e 'all(.result == "success")' <<< '${{ toJSON(needs) }}'
|