diff --git a/.github/actions/codecov/action.yml b/.github/actions/codecov/action.yml new file mode 100644 index 000000000..1c9b2c9a8 --- /dev/null +++ b/.github/actions/codecov/action.yml @@ -0,0 +1,21 @@ +name: 'Upload Coverage Report' +description: 'Generates and uploads code coverage to Codecov' + +inputs: + codecov_token: + description: 'Codecov upload token' + required: true + +runs: + using: "composite" + steps: + - name: Generate coverage report + run: docker run -v shared-data:/build -v $(pwd):/codecov -t partmc-test bash -c "lcov --capture --directory /build --output-file /codecov/coverage.info --no-external" + shell: bash + + - name: Upload coverage report to codecov.io + uses: codecov/codecov-action@v5.5.0 + with: + token: ${{ inputs.codecov_token }} + fail_ci_if_error: true + diff --git a/.github/workflows/camp.yml b/.github/workflows/camp.yml index 5be147c55..0eb399891 100644 --- a/.github/workflows/camp.yml +++ b/.github/workflows/camp.yml @@ -12,4 +12,8 @@ jobs: - name: Build the testing docker image run: docker build -f Dockerfile.camp -t partmc-test . - name: Run the tests in the docker container - run: docker run -t partmc-test bash -c 'cd /build; make test' + run: docker run -v shared-data:/build -t partmc-test bash -c 'cd /build; make test' + - name: Generate and upload coverage report + uses: ./.github/actions/codecov + with: + codecov_token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/cloud_parcel.yml b/.github/workflows/cloud_parcel.yml index 095b43d61..7a4336755 100644 --- a/.github/workflows/cloud_parcel.yml +++ b/.github/workflows/cloud_parcel.yml @@ -10,6 +10,10 @@ jobs: steps: - uses: actions/checkout@v1 - name: Build the testing docker image - run: docker build -f Dockerfile.cloud_parcel -t partmc-cloud-parcel . + run: docker build -f Dockerfile.cloud_parcel -t partmc-test . - name: Run the tests in the docker container - run: docker run -t partmc-cloud-parcel bash -c 'cd /build; make test' + run: docker run -v shared-data:/build -t partmc-test bash -c 'cd /build; make test' + - name: Generate and upload coverage report + uses: ./.github/actions/codecov + with: + codecov_token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 585ee5d79..895b995d3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,4 +12,8 @@ jobs: - name: Build the testing docker image run: docker build -t partmc-test . - name: Run the tests in the docker container - run: docker run -t partmc-test bash -c 'cd /build; make test' + run: docker run -v shared-data:/build -t partmc-test bash -c 'cd /build; make test' + - name: Generate and upload coverage report + uses: ./.github/actions/codecov + with: + codecov_token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/mpi.yml b/.github/workflows/mpi.yml index fc875d044..95f5a04a2 100644 --- a/.github/workflows/mpi.yml +++ b/.github/workflows/mpi.yml @@ -12,4 +12,8 @@ jobs: - name: Build the testing docker image run: docker build -f Dockerfile.mpi -t partmc-test . - name: Run the tests in the docker container - run: docker run -t partmc-test bash -c 'cd /build; CTEST_OUTPUT_ON_FAILURE=1 OMPI_MCA_rmaps_base_oversubscribe=false make test' + run: docker run -v shared-data:/build -t partmc-test bash -c 'cd /build; CTEST_OUTPUT_ON_FAILURE=1 OMPI_MCA_rmaps_base_oversubscribe=false make test' + - name: Generate and upload coverage report + uses: ./.github/actions/codecov + with: + codecov_token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/tchem.yml b/.github/workflows/tchem.yml index e7abf74d1..176afab2c 100644 --- a/.github/workflows/tchem.yml +++ b/.github/workflows/tchem.yml @@ -12,4 +12,8 @@ jobs: - name: Build the testing docker image run: docker build -f Dockerfile.tchem -t partmc-test . - name: Run the tests in the docker container - run: docker run -t partmc-test bash -c 'export CTEST_PARALLEL_LEVEL=4; cd /build; make test' + run: docker run -v shared-data:/build -t partmc-test bash -c 'export CTEST_PARALLEL_LEVEL=4; cd /build; make test' + - name: Generate and upload coverage report + uses: ./.github/actions/codecov + with: + codecov_token: ${{ secrets.CODECOV_TOKEN }} diff --git a/Dockerfile b/Dockerfile index 5f775eae0..aed42ec36 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,6 +9,7 @@ RUN dnf -y update \ netcdf-fortran-devel \ gsl-devel \ cmake \ + lcov \ && dnf clean all # NOTE: Modify .dockerignore to whitelist files/directories to copy. @@ -17,8 +18,8 @@ COPY . /partmc/ RUN mkdir /build \ && cd /build \ && cmake -D CMAKE_BUILD_TYPE=release \ - -D CMAKE_C_FLAGS_RELEASE="-O2 -g -Werror -Wall -Wextra" \ - -D CMAKE_Fortran_FLAGS_RELEASE="-O2 -g -Werror -fimplicit-none -Wall -Wextra -Wconversion -Wunderflow -Wimplicit-interface -Wno-compare-reals -Wno-unused -Wno-unused-parameter -Wno-unused-dummy-argument -fbounds-check" \ + -D CMAKE_C_FLAGS_RELEASE="-O2 -g -Werror -Wall -Wextra --coverage" \ + -D CMAKE_Fortran_FLAGS_RELEASE="-O2 -g -Werror -fimplicit-none -Wall -Wextra -Wconversion -Wunderflow -Wimplicit-interface -Wno-compare-reals -Wno-unused -Wno-unused-parameter -Wno-unused-dummy-argument -fbounds-check --coverage" \ -D ENABLE_GSL:BOOL=TRUE \ /partmc \ && make diff --git a/Dockerfile.camp b/Dockerfile.camp index 99180a908..68016a823 100644 --- a/Dockerfile.camp +++ b/Dockerfile.camp @@ -12,6 +12,7 @@ RUN dnf -y update \ openblas-devel \ gsl-devel \ cmake \ + lcov \ && dnf clean all # Build the SuiteSparse libraries for sparse matrix support @@ -76,8 +77,8 @@ RUN mkdir /build \ && cmake -D CMAKE_BUILD_TYPE=release \ -D CMAKE_C_FLAGS_DEBUG="-g" \ -D CMAKE_Fortran_FLAGS_DEBUG="-g" \ - -D CMAKE_C_FLAGS_RELEASE="-O2 -g -Werror -Wall -Wextra" \ - -D CMAKE_Fortran_FLAGS_RELEASE="-O2 -g -Werror -fimplicit-none -Wall -Wextra -Wconversion -Wunderflow -Wimplicit-interface -Wno-compare-reals -Wno-unused -Wno-unused-parameter -Wno-unused-dummy-argument -fbounds-check" \ + -D CMAKE_C_FLAGS_RELEASE="-O2 -g -Werror -Wall -Wextra --coverage" \ + -D CMAKE_Fortran_FLAGS_RELEASE="-O2 -g -Werror -fimplicit-none -Wall -Wextra -Wconversion -Wunderflow -Wimplicit-interface -Wno-compare-reals -Wno-unused -Wno-unused-parameter -Wno-unused-dummy-argument -fbounds-check --coverage" \ -D ENABLE_GSL:BOOL=TRUE \ -D ENABLE_CAMP:BOOL=TRUE \ /partmc \ diff --git a/Dockerfile.cloud_parcel b/Dockerfile.cloud_parcel index ac372bb89..1309e723e 100644 --- a/Dockerfile.cloud_parcel +++ b/Dockerfile.cloud_parcel @@ -8,6 +8,7 @@ RUN dnf -y update \ sundials-devel \ gsl-devel \ cmake \ + lcov \ && dnf clean all # NOTE: Modify .dockerignore to whitelist files/directories to copy. @@ -16,8 +17,8 @@ COPY . /partmc/ RUN mkdir /build \ && cd /build \ && cmake -D CMAKE_BUILD_TYPE=release \ - -D CMAKE_C_FLAGS_RELEASE="-O2 -g -Werror -Wall -Wextra" \ - -D CMAKE_Fortran_FLAGS_RELEASE="-O2 -g -Werror -fimplicit-none -Wall -Wextra -Wconversion -Wunderflow -Wimplicit-interface -Wno-compare-reals -Wno-unused -Wno-unused-parameter -Wno-unused-dummy-argument -fbounds-check" \ + -D CMAKE_C_FLAGS_RELEASE="-O2 -g -Werror -Wall -Wextra --coverage" \ + -D CMAKE_Fortran_FLAGS_RELEASE="-O2 -g -Werror -fimplicit-none -Wall -Wextra -Wconversion -Wunderflow -Wimplicit-interface -Wno-compare-reals -Wno-unused -Wno-unused-parameter -Wno-unused-dummy-argument -fbounds-check --coverage" \ -D ENABLE_GSL:BOOL=TRUE \ -D ENABLE_SUNDIALS:BOOL=TRUE \ /partmc \ diff --git a/Dockerfile.mpi b/Dockerfile.mpi index c1b2ba30e..fdf0aeaff 100644 --- a/Dockerfile.mpi +++ b/Dockerfile.mpi @@ -9,6 +9,7 @@ RUN dnf -y update \ gsl-devel \ openmpi-devel \ cmake \ + lcov \ && dnf clean all # NOTE: Modify .dockerignore to whitelist files/directories to copy. @@ -24,8 +25,8 @@ ENV CC=mpicc RUN mkdir /build \ && cd /build \ && cmake -D CMAKE_BUILD_TYPE=release \ - -D CMAKE_C_FLAGS_RELEASE="-O2 -g -Werror -Wall -Wextra" \ - -D CMAKE_Fortran_FLAGS_RELEASE="-O2 -g -Werror -fimplicit-none -Wall -Wextra -Wconversion -Wunderflow -Wimplicit-interface -Wno-compare-reals -Wno-unused -Wno-unused-parameter -Wno-unused-dummy-argument -fbounds-check" \ + -D CMAKE_C_FLAGS_RELEASE="-O2 -g -Werror -Wall -Wextra --coverage" \ + -D CMAKE_Fortran_FLAGS_RELEASE="-O2 -g -Werror -fimplicit-none -Wall -Wextra -Wconversion -Wunderflow -Wimplicit-interface -Wno-compare-reals -Wno-unused -Wno-unused-parameter -Wno-unused-dummy-argument -fbounds-check --coverage" \ -D ENABLE_GSL:BOOL=TRUE \ -D ENABLE_MPI:BOOL=TRUE \ /partmc \ diff --git a/Dockerfile.tchem b/Dockerfile.tchem index b34de0eb8..e31123791 100644 --- a/Dockerfile.tchem +++ b/Dockerfile.tchem @@ -165,8 +165,8 @@ RUN cd /build \ && cmake -DCMAKE_BUILD_TYPE=release \ -DCMAKE_C_COMPILER=gcc \ -DCMAKE_Fortran_COMPILER=gfortran \ - -DCMAKE_C_FLAGS_RELEASE="-O2 -g -Werror -Wall -Wextra" \ - -DCMAKE_Fortran_FLAGS_RELEASE="-O2 -g -Werror -fimplicit-none -Wall -Wextra -Wconversion -Wunderflow -Wimplicit-interface -Wno-compare-reals -Wno-unused -Wno-unused-parameter -Wno-unused-dummy-argument -fbounds-check" \ + -DCMAKE_C_FLAGS_RELEASE="-O2 -g -Werror -Wall -Wextra --coverage" \ + -DCMAKE_Fortran_FLAGS_RELEASE="-O2 -g -Werror -fimplicit-none -Wall -Wextra -Wconversion -Wunderflow -Wimplicit-interface -Wno-compare-reals -Wno-unused -Wno-unused-parameter -Wno-unused-dummy-argument -fbounds-check --coverage" \ -D ENABLE_GSL:BOOL=TRUE \ -D ENABLE_TCHEM:BOOL=TRUE \ -D ENABLE_SUNDIALS:BOOL=TRUE \