name: Continuous Integration on: schedule: - cron: '0 0 * * 2' push: branches: - main pull_request: branches: - main paths: - .github/workflows/ci.yml - "benchmarks/**" - "kiwi/**" - "py/**" - setup.py - pyproject.toml jobs: lint: name: Lint runs-on: ubuntu-latest strategy: matrix: python-version: ['3.9'] steps: - uses: actions/checkout@v3 - name: Get history and tags for SCM versioning to work run: | git fetch --prune --unshallow git fetch --depth=1 origin +refs/tags/*:refs/tags/* - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r lint_requirements.txt pip install -e . - name: Formatting if: always() run: | ruff format py --check - name: Linting if: always() run: | ruff py - name: Typing if: always() # We test twice to ensure the type annotations are properly installed run: | mypy py cd py/tests mypy . benchmark: name: C++ Benchmark runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest] steps: - uses: actions/checkout@v3 - name: Install dependencies run: | sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test sudo apt-get install -y g++-11 - name: Build and run benchmark (C++11) run: cd benchmarks && ./build_and_run_bench.sh - name: Build and run benchmark (C++20) env: CXX_COMPILER: g++-11 CXX_FLAGS: -std=c++20 run: cd benchmarks && ./build_and_run_bench.sh tests: name: Unit tests runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12-dev', 'pypy-3.7', 'pypy-3.8'] steps: - uses: actions/checkout@v3 - name: Get history and tags for SCM versioning to work run: | git fetch --prune --unshallow git fetch --depth=1 origin +refs/tags/*:refs/tags/* - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip - name: Install project env: CPPFLAGS: --coverage KIWI_DISABLE_FH4: 1 run: | pip install . - name: Test with pytest run: | pip install pytest python -X dev -m pytest py -W error - name: Generate C++ coverage reports if: (github.event_name != 'schedule' && matrix.os != 'windows-latest') run: | bash -c "find . -type f -name '*.gcno' -exec gcov -pb --all-blocks {} +" || true - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 if: (github.event_name != 'schedule' && matrix.os != 'windows-latest') with: token: ${{ secrets.CODECOV_TOKEN }} flags: unittests name: codecov-umbrella fail_ci_if_error: true