yosys/docs/source/yosys_internals/extending_yosys/ci.rst

154 lines
3.7 KiB
ReStructuredText

Continuous Integration
======================
.. seealso:: Information about test suites is covered in :doc:`test_suites`
- combination of public (github) runners and private runner (for building with
Verific)
Manually triggering jobs
------------------------
- most jobs can run on ``workflow_dispatch``, allowing manual starting of a job
on any branch
- jobs which run on a public (github) runner can generally be run on any fork of
the repo
- `learn more about GitHub Actions
<https://docs.github.com/en/actions/get-started>`_
Workflows
---------
- located in :file:`.github/workflows`
- most jobs will be cancelled if a newer commit is pushed, prioritizing the most
up-to-date version instead
- jobs running on the main branch will never be cancelled
- most jobs will skip documentation-only changes (:file:`docs` directory and
readme file)
Compiler testing
~~~~~~~~~~~~~~~~
- ``test-compile.yml``
- most of these use ``make compile-only``, meaning no linking (or executing)
- run on pushes to main and PRs
- gcc
- oldest supported
- newest supported
- clang
- latest ubuntu, oldest supported
- latest ubuntu, newest supported
- macOS x86
- macOS arm
- verific configurations (``test-verific-cfg.yml``
manually triggered only)
- C++17
- C++20 (newest compiler versions only)
Build testing
~~~~~~~~~~~~~
- ``test-build.yml``
- run on pushes to main and PRs
- builds once (per OS) out-of-tree, using the same build artifact across tests
- mostly covered by :doc:`test_suites`
- ``make``
- ``make unit-test``
- ``make vanilla-test``
- ``make -C docs test``
- ``test-sanitizers.yml``
- uses private runner
- run on pushes to main and during PR merges
- ``make vanilla-test`` with ``SANITIZER=undefined,address``
Automatic testing with Verific
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ``test-verific.yml``
- uses private runner
- run on pushes to main and during PR merges
- build and test Yosys+Verific
- Vanilla tests
- Functional tests
- SBY tests (using latest version of SBY)
- Yosys+Verific specific tests
- also builds pyosys and runs pyosys tests
Extra build flows
~~~~~~~~~~~~~~~~~
- compiled and linked but not executed
- ``extra-builds.yml``
- run on pushes to main and PRs
- WASI (smoke test for YoWASP)
- VS (not released, not maintained?)
- nix (flake no longer updating, not maintained?)
- ``wheels.yml``
- run once per week on latest main:
- python wheels for PyPI release (pyosys)
Building documentation
~~~~~~~~~~~~~~~~~~~~~~
- uses private runner
- runs even on documentation-only changes, but still skips readme-only changes
- ``prepare-docs.yml``
- run on all pushes and PRs
- prepare docs artifact from Yosys executable (``make docs/prep``)
- triggers ReadtheDocs build for main (latest), tagged versions (releases),
and certain WIP doc previews
- ``test-build.yml``
- run on pushes to main and PRs
- ``make docs``, building both html and latexpdf targets (independently)
- will fail on warnings to replicate ReadtheDocs behavior (which itself was
configured to prevent updating live documentation with an incomplete or
missing artifact)
CodeQL
~~~~~~
- ``codeql.yml``
- static code analysis
- run every day on latest main
Vendor sources
~~~~~~~~~~~~~~
- ``source-vendor.yml``
- download and package source code with all submodules
- used for releases (``yosys.tar.gz``)
- run on pushes to YosysHQ/yosys
Composite actions
-----------------
- consolidate common setup steps
- :file:`.github/actions/setup-build-env/action.yml`
- consistent build environment setup
- broken into build/docs/test dependencies (currently only on linux)
- :file:`.github/actions/setup-iverilog/action.yml`
- iverilog install (including dependencies)