Skip to content

infra: Fixes to the build infrastructure #1136

infra: Fixes to the build infrastructure

infra: Fixes to the build infrastructure #1136

Workflow file for this run

name: Code Quality
on:
pull_request:
jobs:
warnings-base:
runs-on: ${{ matrix.os }}
strategy:
# Ensures that if the task on one system fails, other systems (the rest of the matrix) will be
# still executed.
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v6
with:
# fetch-depth: 0
# If PR, checkout the PR's repo (needed for PRs coming from forks).
repository: ${{ github.event.pull_request.base.repo.full_name || github.repository }}
ref: ${{ github.event.pull_request.base.sha || github.event.pull_request.base_ref || github.sha }}
- uses: ./.github/workflows/actions/setup
with:
os: ${{ matrix.os }}
- uses: ./.github/workflows/actions/compile
with:
build-log-output-file: "warnings-base"
warnings-new:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v6
with:
# fetch-depth: 0
# If PR, checkout the PR's repo (needed for PRs coming from forks).
repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: ./.github/workflows/actions/setup
with:
os: ${{ matrix.os }}
- uses: ./.github/workflows/actions/compile
with:
build-log-output-file: "warnings-new"
run-tests:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v6
with:
# fetch-depth: 0
# If PR, checkout the PR's repo (needed for PRs coming from forks).
repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: ./.github/workflows/actions/setup
with:
os: ${{ matrix.os }}
- uses: ./.github/workflows/actions/compile
with:
build-log-output-file: "warnings-new"
- name: Test the library
run: make test
run-tests-python:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
python-version: ["3.13"]
install-type: ["src", "tarball"]
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: ./.github/workflows/actions/setup
with:
os: ${{ matrix.os }}
- name: Set up Python and its dependencies ${{ inputs.python-version }}
uses: ./.github/workflows/actions/setup-python
with:
os: ${{ matrix.os }}
python-version: ${{ matrix.python-version }}
- name: Write the released version to VERSION file
shell: bash
run: |
echo "v0.0.0-dev.1" > VERSION
echo "v0.0.0-dev.1" > bindings/python/VERSION
- name: Compile the Python bindings from the source
uses: ./.github/workflows/actions/compile-python-src
- name: Compile the Python bindings from the tarball
if: matrix.install-type == 'tarball'
uses: ./.github/workflows/actions/compile-python-tarball
- name: Test the Python bindings
uses: ./.github/workflows/actions/test-python
# run-test-performance-base:
# runs-on: ${{ matrix.os }}
# strategy:
# fail-fast: false
# matrix:
# os: [ubuntu-latest, macos-latest]
# steps:
# - uses: actions/checkout@v6
# with:
# # fetch-depth: 0
# # If PR, checkout the PR's repo (needed for PRs coming from forks).
# repository: ${{ github.event.pull_request.base.repo.full_name || github.repository }}
# ref: ${{ github.event.pull_request.base.sha || github.event.pull_request.base_ref || github.sha }}
# - uses: ./.github/workflows/actions/setup
# with:
# os: ${{ matrix.os }}
# - uses: ./.github/workflows/actions/compile
# - name: Set up Python
# uses: actions/setup-python@v6
# with:
# python-version: 3.13
# cache: "pip"
# - name: Install Python Dependencies
# shell: sh
# run: |
# python -m pip install --upgrade pip
# pip install ./tests-integration/
# - name: Test the library
# run: make test-performance
# - name: Cache performance results
# uses: actions/cache@v5
# with:
# path: |
# ./tests-integration/results/corr-single-param-jobs.csv
# ./tests-integration/results/corr-double-param-jobs.csv
# key: performance-tests-baseline-${{ runner.os }}-${{ github.sha }}
# run-test-performance:
# runs-on: ${{ matrix.os }}
# strategy:
# fail-fast: false
# matrix:
# os: [ubuntu-latest, macos-latest]
# steps:
# - uses: actions/checkout@v6
# with:
# # fetch-depth: 0
# # If PR, checkout the PR's repo (needed for PRs coming from forks).
# repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
# ref: ${{ github.event.pull_request.head.sha || github.sha }}
# - uses: ./.github/workflows/actions/setup
# with:
# os: ${{ matrix.os }}
# - uses: ./.github/workflows/actions/compile
# - name: Set up Python
# uses: actions/setup-python@v4
# with:
# python-version: 3.13
# cache: "pip"
# - name: Install Python Dependencies
# shell: sh
# run: |
# python -m pip install --upgrade pip
# pip install ./tests-integration/
# - name: Test the library
# run: make test-performance
# - name: Cache performance results
# uses: actions/cache@v5
# with:
# path: |
# ./tests-integration/results/corr-single-param-jobs.csv
# ./tests-integration/results/corr-double-param-jobs.csv
# key: performance-tests-target-${{ runner.os }}-${{ github.sha }}
# compare-performance:
# runs-on: ${{ matrix.os }}
# strategy:
# fail-fast: false
# matrix:
# os: [ubuntu-latest, macos-latest]
# needs: [run-test-performance, run-test-performance-base]
# steps:
# - uses: actions/checkout@v6
# with:
# # fetch-depth: 0
# # If PR, checkout the PR's repo (needed for PRs coming from forks).
# repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
# ref: ${{ github.event.pull_request.head.sha || github.sha }}
# - name: Set up Python
# uses: actions/setup-python@v6
# with:
# python-version: 3.13
# cache: "pip"
# - name: Install Python Dependencies
# shell: sh
# run: |
# python -m pip install --upgrade pip
# pip install tabulate pandas
# - name: Restore target profiles
# uses: actions/cache/restore@v5
# with:
# path: |
# ./tests-integration/results/corr-single-param-jobs.csv
# ./tests-integration/results/corr-double-param-jobs.csv
# key: performance-tests-target-${{ runner.os }}-${{ github.sha }}
# - run: |
# mv ./tests-integration/results/corr-single-param-jobs.csv single-param-target.csv
# mv ./tests-integration/results/corr-double-param-jobs.csv double-param-target.csv
# - name: Restore baseline profiles
# uses: actions/cache/restore@v5
# with:
# path: |
# ./tests-integration/results/corr-single-param-jobs.csv
# ./tests-integration/results/corr-double-param-jobs.csv
# key: performance-tests-baseline-${{ runner.os }}-${{ github.sha }}
# - run: |
# mv ./tests-integration/results/corr-single-param-jobs.csv single-param-baseline.csv
# mv ./tests-integration/results/corr-double-param-jobs.csv double-param-baseline.csv
# - name: LOOK HERE for Comparison of operations accepting single automaton as parameters
# run: python3 tests-integration/scripts/compare_profiles.py single-param-target.csv single-param-baseline.csv
# - name: LOOK HERE for Comparison of operations accepting two automata as parameters
# run: python3 tests-integration/scripts/compare_profiles.py double-param-target.csv double-param-baseline.csv
compare-versions:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
needs: [warnings-base, warnings-new]
steps:
- name: Restore new cache
uses: actions/cache/restore@v5
with:
path: ./build_log
key: build-log-warnings-new-${{ runner.os }}-${{ github.sha }}
- run: mv build_log new_warnings
- name: Restore base cache
uses: actions/cache/restore@v5
with:
path: ./build_log
key: build-log-warnings-base-${{ runner.os }}-${{ github.sha }}
- run: mv build_log base_warnings
- name: Print base warnings
run: cat base_warnings
- name: Print new warnings
run: cat new_warnings
- name: Create comparison diff file
run: |
diff base_warnings new_warnings | grep "^> *" | sed "s/^> //g" > comparison
cat comparison
- name: Count number of warnings
run: |
number_of_warnings=`cat comparison | grep "warning:" | wc -l`
echo $number_of_warnings
if [ $number_of_warnings -gt 0 ]; then
exit 1
fi
code-coverage:
runs-on: ubuntu-latest
needs: run-tests
steps:
- uses: actions/checkout@v6
with:
# fetch-depth: 0
# If PR, checkout the PR's repo (needed for PRs coming from forks).
repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: ./.github/workflows/actions/setup
- name: Build library for coverage
run: make coverage
- name: Test the library
run: make test
- name: Upload coverage to codecov
uses: codecov/codecov-action@v5
with:
gcov: true
format-check:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: cachix/install-nix-action@v31
with:
nix_path: nixpkgs=channel:nixos-unstable
- uses: actions/checkout@v6
with:
# fetch-depth: 0
# If PR, checkout the PR's repo (needed for PRs coming from forks).
repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: ./.github/workflows/actions/setup
- name: Check formatting using treefmt through Nix
run: |
nix fmt
if [ -n "$(git status --porcelain)" ]; then
echo "ERROR: Code is not properly formatted. Please run 'nix fmt' locally and commit the changes:"
git diff
exit 1
else
echo "Code is properly formatted."
fi
build-docs:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v6
with:
# fetch-depth: 0
# If PR, checkout the PR's repo (needed for PRs coming from forks).
repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: ./.github/workflows/actions/docs
with:
os: ${{ matrix.os }}