zvec/.github/workflows/nightly_coverage.yml

100 lines
3.0 KiB
YAML

name: Nightly Coverage Report
on:
schedule:
# Runs daily at 00:00 CST (China Standard Time) = 16:00 UTC
- cron: '0 16 * * *'
workflow_dispatch:
permissions:
contents: read
jobs:
coverage:
name: Nightly Coverage Report
runs-on: linux_x64
strategy:
matrix:
python-version: ['3.10']
fail-fast: false
container:
image: zvec-registry.cn-hongkong.cr.aliyuncs.com/zvec/zvec:0.0.2
options: --user root
steps:
- name: Activate Conda environment
run: |
if [[ "${{ matrix.python-version }}" == "3.10" ]]; then
ENV_NAME="py310"
elif [[ "${{ matrix.python-version }}" == "3.11" ]]; then
ENV_NAME="py311"
elif [[ "${{ matrix.python-version }}" == "3.12" ]]; then
ENV_NAME="py312"
else
echo "Unsupported Python version"
exit 1
fi
echo "CONDA_ENV_NAME=$ENV_NAME" >> $GITHUB_ENV
source /opt/miniforge3/bin/activate "$ENV_NAME"
python --version
shell: bash
- name: Prepare clean build directory
run: |
export CLEAN_WORKSPACE="/tmp/zvec"
mkdir -p "$CLEAN_WORKSPACE"
cd "$CLEAN_WORKSPACE"
git config --global --add safe.directory "$CLEAN_WORKSPACE"
git clone --recursive "https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" .
git checkout main # Always use main for nightly
echo "CLEAN_WORKSPACE=$CLEAN_WORKSPACE" >> $GITHUB_ENV
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
- name: Build with COVERAGE config
run: |
source /opt/miniforge3/bin/activate "${{ env.CONDA_ENV_NAME }}"
cd "$CLEAN_WORKSPACE"
pip install --upgrade pip pytest pytest-cov
NPROC=$(nproc 2>/dev/null || echo 2)
echo "Using $NPROC parallel jobs"
CMAKE_GENERATOR="Unix Makefiles" \
CMAKE_BUILD_PARALLEL_LEVEL="$NPROC" \
pip install -v . \
--config-settings="cmake.build-type=COVERAGE"
shell: bash
- name: Run Python Tests with Coverage
run: |
source /opt/miniforge3/bin/activate "${{ env.CONDA_ENV_NAME }}"
cd "$CLEAN_WORKSPACE"
python -m pytest python/tests/ --cov=zvec --cov-report=xml
shell: bash
- name: Run C++ Tests and Generate Coverage
run: |
cd "$CLEAN_WORKSPACE/build"
make unittest -j$(nproc) # Run all (nightly can afford it)
cd "$CLEAN_WORKSPACE"
# Ensure gcov.sh is executable
chmod +x scripts/gcov.sh
bash scripts/gcov.sh -k
shell: bash
- name: Upload Coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: ${{ env.CLEAN_WORKSPACE }}/proxima-zvec-filtered.lcov.info,${{ env.CLEAN_WORKSPACE }}/coverage.xml
flags: python,cpp,nightly
name: nightly-linux-py${{ matrix.python-version }}
token: ${{ secrets.CODECOV_TOKEN }}