Switch from ubuntu-latest
to ubuntu-22.04
in CI, update some depe…
#3786
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: linting-and-tests | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
# Automatically stop old builds on the same branch/PR | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
defaults: | |
run: | |
shell: bash -l {0} | |
jobs: | |
pre-commit-checks: | |
name: Pre-commit Checks | |
timeout-minutes: 30 | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout branch | |
uses: actions/checkout@v4 | |
- name: Run pre-commit-conda | |
uses: quantco/pre-commit-conda@v1 | |
mypy-typechecking: | |
name: Mypy Type Checks | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 20 | |
defaults: | |
run: | |
shell: bash -el {0} | |
steps: | |
- name: Checkout branch | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup mamba | |
uses: ./.github/actions/mamba | |
- name: Install repository | |
run: | | |
python -m pip install --no-build-isolation --no-deps --disable-pip-version-check -e . | |
micromamba run -n modyn pip install -r dev-requirements.txt | |
- name: Run mypy | |
run: mypy . | |
pylint: | |
timeout-minutes: 20 | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Setup mamba | |
uses: ./.github/actions/mamba | |
- name: Pylint | |
run: | | |
micromamba run -n modyn pylint --version | |
micromamba run -n modyn pylint modyn | |
unittests: | |
timeout-minutes: 25 | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Setup mamba | |
uses: ./.github/actions/mamba | |
- name: Pytest | |
run: | | |
set -o pipefail | |
micromamba run -n modyn pytest modyn --cache-clear --cov-report=xml --cov-fail-under=82 | |
- name: Upload codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
file: ./coverage.xml | |
format: | |
timeout-minutes: 20 | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: DoozyX/[email protected] | |
with: | |
source: "modyn" | |
extensions: "hpp,cpp" | |
clangFormatVersion: 16 | |
tidy: | |
timeout-minutes: 60 | |
runs-on: ubuntu-22.04 | |
env: | |
CLANG_TIDY: clang-tidy-15 | |
RUN_CLANG_TIDY: run-clang-tidy-15 | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install clang-tidy | |
run: | | |
sudo apt update | |
sudo apt install -y clang-tidy-15 libsqlite3-dev | |
cmake --version | |
- name: Configure CMake | |
working-directory: ${{github.workspace}} | |
run: bash scripts/clang-tidy.sh build | |
- name: Run clang-tidy | |
working-directory: ${{github.workspace}} | |
run: bash scripts/clang-tidy.sh run_tidy | |
cpp_build_and_test: | |
name: Build + Test (C++) | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 60 | |
outputs: | |
line-coverage: ${{steps.run_test_with_coverage.outputs.LINE_COVERAGE}} | |
branch-coverage: ${{steps.run_test_with_coverage.outputs.BRANCH_COVERAGE}} | |
strategy: | |
fail-fast: false | |
matrix: | |
build-type: [Release, Debug] | |
compiler: | |
- { c: gcc, cxx: g++, version: 11 } | |
- { c: gcc, cxx: g++, version: 12 } | |
- { c: clang, cxx: clang++, version: 14 } | |
- { c: clang, cxx: clang++, version: 17, coverage: true } | |
include: | |
# Currently, there is a linking error with zlib if we use clang 16 for sanitizers | |
# Let's investigate this when clang > 14 is os default - one problem could be the external clang installation | |
- compiler: { c: clang, cxx: clang++, version: 14 } | |
build-type: Tsan | |
- compiler: { c: clang, cxx: clang++, version: 14 } | |
build-type: Asan | |
env: | |
CC: ${{matrix.compiler.c}}-${{matrix.compiler.version}} | |
CXX: ${{matrix.compiler.cxx}}-${{matrix.compiler.version}} | |
CCACHE_BASEDIR: ${{github.workspace}} | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install ccache and sqlite | |
run: | | |
sudo apt update | |
sudo apt install -y ccache libsqlite3-dev | |
- name: Install clang version | |
if: ${{ matrix.compiler.c == 'clang' && matrix.compiler.version > 14 }} | |
uses: KyleMayes/[email protected] | |
with: | |
version: ${{ matrix.compiler.version }}.0 | |
env: true | |
- name: Create Build Environment | |
run: cmake -E make_directory ${{github.workspace}}//build | |
- name: Configure CMake | |
shell: bash | |
working-directory: ${{github.workspace}}/build | |
# fdebug-prefix-map is for ccache to not have absolute paths interfere with caching, see https://ccache.dev/manual/3.6.html#_compiling_in_different_directories | |
run: > | |
cmake ${{github.workspace}} | |
-DCMAKE_BUILD_TYPE=${{matrix.build-type}} | |
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache | |
-DCMAKE_CXX_FLAGS="-fdebug-prefix-map=${{github.workspace}}/build=." | |
-DMODYN_BUILD_PLAYGROUND=ON | |
-DMODYN_BUILD_TESTS=ON | |
-DMODYN_BUILD_STORAGE=ON | |
-DMODYN_TEST_COVERAGE=${{matrix.compiler.coverage && 'ON' || 'OFF'}} | |
- name: Build | |
working-directory: ${{github.workspace}}/build | |
shell: bash | |
run: cmake --build . --target modyn modyn-test playground --config ${{matrix.build-type}} -- -j8 | |
- name: Run tests | |
timeout-minutes: 20 | |
working-directory: ${{github.workspace}}/build/modyn/tests | |
shell: bash | |
env: | |
{ | |
"TSAN_OPTIONS": "halt_on_error=1", | |
"UBSAN_OPTIONS": "print_stacktrace=1:halt_on_error=1", | |
} | |
run: ./modyn-test | |
# The next two steps are solely related to creating coverage reports and will only run coverage in the compiler matrix is set to true | |
- name: Create Coverage Report | |
if: ${{ matrix.compiler.coverage && matrix.build-type == 'Debug' }} | |
working-directory: ${{github.workspace}}/build/modyn/tests | |
run: | | |
llvm-profdata-14 merge -sparse default.profraw -o tests.profdata | |
llvm-cov-14 report -instr-profile tests.profdata -object modyn-test -ignore-filename-regex="build\/" -ignore-filename-regex="\/test\/" -show-region-summary=false | tail -1 | sed 's/%//g' | tr -s " " > output.txt | |
llvm-cov-14 show -instr-profile tests.profdata -object modyn-test -format=html -output-dir=coverage -ignore-filename-regex="build\/" -ignore-filename-regex="\/test\/" -show-region-summary=false | |
echo ::set-output name=LINE_COVERAGE::"$(cat output.txt | cut -d ' ' -f 7)" | |
echo ::set-output name=BRANCH_COVERAGE::"$(cat output.txt | cut -d ' ' -f 10)" | |
id: run_test_with_coverage | |
- name: Upload HTML coverage report | |
if: ${{ matrix.compiler.coverage && matrix.build-type == 'Debug' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage-results | |
path: ${{github.workspace}}/build/modyn/tests/coverage | |
cpp_coverage_main: | |
name: C++ Test Coverage (gets coverage of main branch, currently not main branch because no C++ on main) | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 60 | |
env: | |
CC: clang-17 | |
CXX: clang++-17 | |
outputs: | |
line-coverage: ${{steps.run_main_test_with_coverage.outputs.LINE_COVERAGE}} | |
branch-coverage: ${{steps.run_main_test_with_coverage.outputs.BRANCH_COVERAGE}} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: main | |
- name: Install clang 17 | |
uses: KyleMayes/install-llvm-action@v1 | |
with: | |
version: 17.0 | |
env: true | |
- name: Create Build Environment | |
run: | | |
cmake -E make_directory ${{github.workspace}}/build | |
- name: Configure CMake | |
shell: bash | |
working-directory: ${{github.workspace}}/build | |
run: > | |
cmake ${{github.workspace}} -DCMAKE_BUILD_TYPE=Debug | |
-DMODYN_BUILD_PLAYGROUND=ON -DMODYN_BUILD_TESTS=ON -DMODYN_BUILD_STORAGE=ON -DMODYN_TEST_COVERAGE=ON | |
- name: Build | |
working-directory: ${{github.workspace}}/build | |
shell: bash | |
run: cmake --build . --config Debug --target modyn modyn-test -- -j8 | |
- name: Run tests | |
working-directory: ${{github.workspace}}/build/modyn/tests | |
shell: bash | |
run: ./modyn-test | |
- name: Create Coverage Report for main branch | |
working-directory: ${{github.workspace}}/build/modyn/tests | |
run: | | |
llvm-profdata-14 merge -sparse default.profraw -o tests.profdata | |
llvm-cov-14 report -instr-profile tests.profdata -object modyn-test -ignore-filename-regex="build\/" -ignore-filename-regex="\/test\/" -show-region-summary=false | tail -1 | sed 's/%//g' | tr -s " " > output.txt | |
echo ::set-output name=LINE_COVERAGE::"$(cat output.txt | cut -d ' ' -f 7)" | |
echo ::set-output name=BRANCH_COVERAGE::"$(cat output.txt | cut -d ' ' -f 10)" | |
id: run_main_test_with_coverage | |
cpp_comment_on_pr: | |
if: github.event.pull_request.head.repo.full_name == github.repository | |
runs-on: ubuntu-22.04 | |
name: Comment Coverage Results | |
needs: [cpp_build_and_test, cpp_coverage_main] | |
timeout-minutes: 5 | |
steps: | |
- name: Calculate changes | |
shell: bash | |
run: | | |
echo ::set-output name=line-changes::"$(awk 'BEGIN {printf "%+.2f", ${{ needs.cpp_build_and_test.outputs.line-coverage }}-${{ needs.cpp_coverage_main.outputs.line-coverage }}; exit}')" | |
echo ::set-output name=branch-changes::"$(awk 'BEGIN {printf "%+.2f", ${{ needs.cpp_build_and_test.outputs.branch-coverage }}-${{ needs.cpp_coverage_main.outputs.branch-coverage }}; exit}')" | |
id: calculation | |
- name: Comment on PR | |
uses: marocchino/sticky-pull-request-comment@v2 | |
with: | |
message: | | |
![Line Coverage: ${{ needs.cpp_build_and_test.outputs.line-coverage }}%](https://img.shields.io/badge/Line_Coverage-${{ needs.cpp_build_and_test.outputs.line-coverage }}%20%25-informational) <sup>(${{ steps.calculation.outputs.line-changes }} % to main)</sup> | |
![Branch Coverage: ${{ needs.cpp_build_and_test.outputs.branch-coverage }}%](https://img.shields.io/badge/Branch_Coverage-${{ needs.cpp_build_and_test.outputs.branch-coverage }}%20%25-informational) <sup>(${{ steps.calculation.outputs.branch-changes }} % to main)</sup> | |
### Integration Tests ### | |
# We have them in the same workflow because it's impossible to have a simple "if workflow A runs through completely, then workflow B should run" pipeline on Github currently | |
# Checks whether the base container works correctly. | |
dockerized-unittests: | |
timeout-minutes: 180 | |
runs-on: ubuntu-22.04 | |
needs: | |
- pre-commit-checks | |
- mypy-typechecking | |
- pylint | |
- unittests | |
- cpp_build_and_test | |
- tidy | |
- format | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Setup base container | |
uses: ./.github/actions/base | |
- name: Setup dev-requirements and run pytest within container | |
run: docker run modynbase mamba run -n modyn bash -c "pip install -r dev-requirements.txt && echo Running pytest && pytest" | |
integrationtests-debug: | |
timeout-minutes: 180 | |
runs-on: ubuntu-22.04 | |
needs: | |
- pre-commit-checks | |
- mypy-typechecking | |
- pylint | |
- unittests | |
- cpp_build_and_test | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Check disk space 1 | |
run: df . -h | |
- name: Free disk space | |
run: | | |
sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true | |
sudo rm -rf \ | |
/usr/share/dotnet /usr/local/lib/android /opt/ghc \ | |
/usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \ | |
/usr/lib/jvm || true | |
echo "some directories deleted" | |
sudo apt install aptitude -y >/dev/null 2>&1 | |
sudo aptitude purge aria2 ansible azure-cli shellcheck rpm xorriso zsync \ | |
esl-erlang firefox gfortran-8 gfortran-9 google-chrome-stable \ | |
google-cloud-sdk imagemagick \ | |
libmagickcore-dev libmagickwand-dev libmagic-dev ant ant-optional kubectl \ | |
mercurial apt-transport-https mono-complete libmysqlclient \ | |
unixodbc-dev yarn chrpath libssl-dev libxft-dev \ | |
libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev \ | |
snmp pollinate libpq-dev postgresql-client powershell ruby-full \ | |
sphinxsearch subversion mongodb-org azure-cli microsoft-edge-stable \ | |
-y -f >/dev/null 2>&1 | |
sudo aptitude purge google-cloud-sdk -f -y >/dev/null 2>&1 | |
sudo aptitude purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true | |
sudo apt purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true | |
sudo aptitude purge '~n ^mysql' -f -y >/dev/null 2>&1 | |
sudo aptitude purge '~n ^php' -f -y >/dev/null 2>&1 | |
sudo aptitude purge '~n ^dotnet' -f -y >/dev/null 2>&1 | |
sudo apt-get autoremove -y >/dev/null 2>&1 | |
sudo apt-get autoclean -y >/dev/null 2>&1 | |
echo "some packages purged" | |
- name: Check disk space 2 | |
run: df . -h | |
- name: Get more space | |
run: | | |
sudo rm -rf ${GITHUB_WORKSPACE}/.git | |
- name: Check disk space 3 | |
run: df . -h | |
- name: Start docker compose and exit when tests run through | |
run: bash scripts/run_integrationtests.sh Debug | |
integrationtests-asan: | |
timeout-minutes: 180 | |
runs-on: ubuntu-22.04 | |
needs: | |
- pre-commit-checks | |
- mypy-typechecking | |
- pylint | |
- unittests | |
- cpp_build_and_test | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Check disk space 1 | |
run: df . -h | |
- name: Free disk space | |
run: | | |
sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true | |
sudo rm -rf \ | |
/usr/share/dotnet /usr/local/lib/android /opt/ghc \ | |
/usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \ | |
/usr/lib/jvm || true | |
echo "some directories deleted" | |
sudo apt install aptitude -y >/dev/null 2>&1 | |
sudo aptitude purge aria2 ansible azure-cli shellcheck rpm xorriso zsync \ | |
esl-erlang firefox gfortran-8 gfortran-9 google-chrome-stable \ | |
google-cloud-sdk imagemagick \ | |
libmagickcore-dev libmagickwand-dev libmagic-dev ant ant-optional kubectl \ | |
mercurial apt-transport-https mono-complete libmysqlclient \ | |
unixodbc-dev yarn chrpath libssl-dev libxft-dev \ | |
libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev \ | |
snmp pollinate libpq-dev postgresql-client powershell ruby-full \ | |
sphinxsearch subversion mongodb-org azure-cli microsoft-edge-stable \ | |
-y -f >/dev/null 2>&1 | |
sudo aptitude purge google-cloud-sdk -f -y >/dev/null 2>&1 | |
sudo aptitude purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true | |
sudo apt purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true | |
sudo aptitude purge '~n ^mysql' -f -y >/dev/null 2>&1 | |
sudo aptitude purge '~n ^php' -f -y >/dev/null 2>&1 | |
sudo aptitude purge '~n ^dotnet' -f -y >/dev/null 2>&1 | |
sudo apt-get autoremove -y >/dev/null 2>&1 | |
sudo apt-get autoclean -y >/dev/null 2>&1 | |
echo "some packages purged" | |
- name: Check disk space 2 | |
run: df . -h | |
- name: Get more space | |
run: | | |
sudo rm -rf ${GITHUB_WORKSPACE}/.git | |
- name: Check disk space 3 | |
run: df . -h | |
- name: Start docker compose and exit when tests run through | |
run: bash scripts/run_integrationtests.sh Asan | |
integrationtests-tsan: | |
timeout-minutes: 180 | |
runs-on: ubuntu-22.04 | |
needs: | |
- pre-commit-checks | |
- mypy-typechecking | |
- pylint | |
- unittests | |
- cpp_build_and_test | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Check disk space 1 | |
run: df . -h | |
- name: Free disk space | |
run: | | |
sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true | |
sudo rm -rf \ | |
/usr/share/dotnet /usr/local/lib/android /opt/ghc \ | |
/usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \ | |
/usr/lib/jvm || true | |
echo "some directories deleted" | |
sudo apt install aptitude -y >/dev/null 2>&1 | |
sudo aptitude purge aria2 ansible azure-cli shellcheck rpm xorriso zsync \ | |
esl-erlang firefox gfortran-8 gfortran-9 google-chrome-stable \ | |
google-cloud-sdk imagemagick \ | |
libmagickcore-dev libmagickwand-dev libmagic-dev ant ant-optional kubectl \ | |
mercurial apt-transport-https mono-complete libmysqlclient \ | |
unixodbc-dev yarn chrpath libssl-dev libxft-dev \ | |
libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev \ | |
snmp pollinate libpq-dev postgresql-client powershell ruby-full \ | |
sphinxsearch subversion mongodb-org azure-cli microsoft-edge-stable \ | |
-y -f >/dev/null 2>&1 | |
sudo aptitude purge google-cloud-sdk -f -y >/dev/null 2>&1 | |
sudo aptitude purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true | |
sudo apt purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true | |
sudo aptitude purge '~n ^mysql' -f -y >/dev/null 2>&1 | |
sudo aptitude purge '~n ^php' -f -y >/dev/null 2>&1 | |
sudo aptitude purge '~n ^dotnet' -f -y >/dev/null 2>&1 | |
sudo apt-get autoremove -y >/dev/null 2>&1 | |
sudo apt-get autoclean -y >/dev/null 2>&1 | |
echo "some packages purged" | |
- name: Check disk space 2 | |
run: df . -h | |
- name: Get more space | |
run: | | |
sudo rm -rf ${GITHUB_WORKSPACE}/.git | |
- name: Check disk space 3 | |
run: df . -h | |
- name: Start docker compose and exit when tests run through | |
run: bash scripts/run_integrationtests.sh Tsan | |
integrationtests-release: | |
timeout-minutes: 180 | |
runs-on: ubuntu-22.04 | |
needs: | |
- pre-commit-checks | |
- mypy-typechecking | |
- pylint | |
- unittests | |
- cpp_build_and_test | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Check disk space 1 | |
run: df . -h | |
- name: Free disk space | |
run: | | |
sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true | |
sudo rm -rf \ | |
/usr/share/dotnet /usr/local/lib/android /opt/ghc \ | |
/usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \ | |
/usr/lib/jvm || true | |
echo "some directories deleted" | |
sudo apt install aptitude -y >/dev/null 2>&1 | |
sudo aptitude purge aria2 ansible azure-cli shellcheck rpm xorriso zsync \ | |
esl-erlang firefox gfortran-8 gfortran-9 google-chrome-stable \ | |
google-cloud-sdk imagemagick \ | |
libmagickcore-dev libmagickwand-dev libmagic-dev ant ant-optional kubectl \ | |
mercurial apt-transport-https mono-complete libmysqlclient \ | |
unixodbc-dev yarn chrpath libssl-dev libxft-dev \ | |
libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev \ | |
snmp pollinate libpq-dev postgresql-client powershell ruby-full \ | |
sphinxsearch subversion mongodb-org azure-cli microsoft-edge-stable \ | |
-y -f >/dev/null 2>&1 | |
sudo aptitude purge google-cloud-sdk -f -y >/dev/null 2>&1 | |
sudo aptitude purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true | |
sudo apt purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true | |
sudo aptitude purge '~n ^mysql' -f -y >/dev/null 2>&1 | |
sudo aptitude purge '~n ^php' -f -y >/dev/null 2>&1 | |
sudo aptitude purge '~n ^dotnet' -f -y >/dev/null 2>&1 | |
sudo apt-get autoremove -y >/dev/null 2>&1 | |
sudo apt-get autoclean -y >/dev/null 2>&1 | |
echo "some packages purged" | |
- name: Check disk space 2 | |
run: df . -h | |
- name: Get more space | |
run: | | |
sudo rm -rf ${GITHUB_WORKSPACE}/.git | |
- name: Check disk space 3 | |
run: df . -h | |
- name: Start docker compose and exit when tests run through | |
run: bash scripts/run_integrationtests.sh Release |