04d02261e9
CI / pre-commit (push) Has been cancelled
CI / test (-DCMAKE_BUILD_TYPE=Debug, debug) (push) Has been cancelled
CI / test (-DCMAKE_CXX_FLAGS=-DUSE_64_BIT=1, 64-bit-versions) (push) Has been cancelled
CI / test (-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++, gcc) (push) Has been cancelled
CI / test (-DUSE_SIMD_FALLBACK=ON, simd-fallback) (push) Has been cancelled
CI / release (amd64, ubuntu-latest-amd64) (push) Has been cancelled
CI / release (arm64, ubuntu-latest-arm64) (push) Has been cancelled
CI / coverage (push) Has been cancelled
CI / build-image (amd64, ubuntu-latest-amd64) (push) Has been cancelled
CI / build-image (arm64, ubuntu-latest-arm64) (push) Has been cancelled
apt.llvm.org has no repository for the current ubuntu:rolling release, and nothing pins clang 20 - CC=clang already resolved to the distro clang. Drop the llvm.sh step along with its helper packages. docker build now runs under the buildx docker-container driver, which keeps the result in the build cache unless told otherwise, so push directly from the build instead of tagging locally.
242 lines
7.9 KiB
YAML
242 lines
7.9 KiB
YAML
name: CI
|
|
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
build-image:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- runner: ubuntu-latest-amd64
|
|
arch: amd64
|
|
- runner: ubuntu-latest-arm64
|
|
arch: arm64
|
|
runs-on: ${{ matrix.runner }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Log in to registry
|
|
run: |
|
|
echo "${{ secrets.REGISTRY_TOKEN }}" \
|
|
| docker login -u "${{ secrets.REGISTRY_USER }}" --password-stdin git.weaselab.dev
|
|
|
|
- name: Build and push image if changed
|
|
run: |
|
|
image=git.weaselab.dev/weaselab/conflict-set-ci
|
|
tag="$(sha256sum Dockerfile .pre-commit-config.yaml | sha256sum | cut -c 1-16)-${{ matrix.arch }}"
|
|
latest=latest-${{ matrix.arch }}
|
|
if docker manifest inspect "$image:$tag" > /dev/null 2>&1; then
|
|
if [ "$(docker manifest inspect "$image:$tag")" = "$(docker manifest inspect "$image:$latest" 2> /dev/null)" ]; then
|
|
echo "$image:$latest is up to date"
|
|
else
|
|
docker pull "$image:$tag"
|
|
docker tag "$image:$tag" "$image:$latest"
|
|
docker push "$image:$latest"
|
|
fi
|
|
else
|
|
docker build --push -t "$image:$tag" -t "$image:$latest" .
|
|
fi
|
|
|
|
pre-commit:
|
|
needs: build-image
|
|
runs-on: ubuntu-latest-amd64
|
|
container:
|
|
image: git.weaselab.dev/weaselab/conflict-set-ci:latest-amd64
|
|
credentials:
|
|
username: ${{ secrets.REGISTRY_USER }}
|
|
password: ${{ secrets.REGISTRY_TOKEN }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Run pre-commit
|
|
env:
|
|
# use the hooks pre-installed in the image
|
|
HOME: /tmp
|
|
run: |
|
|
git config --global --add safe.directory "$PWD"
|
|
pre-commit run --all-files --show-diff-on-failure
|
|
|
|
test:
|
|
needs: build-image
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- name: 64-bit-versions
|
|
cmake_args: -DCMAKE_CXX_FLAGS=-DUSE_64_BIT=1
|
|
- name: debug
|
|
cmake_args: -DCMAKE_BUILD_TYPE=Debug
|
|
- name: simd-fallback
|
|
cmake_args: -DUSE_SIMD_FALLBACK=ON
|
|
- name: gcc
|
|
cmake_args: -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
|
|
runs-on: ubuntu-latest-amd64
|
|
container:
|
|
image: git.weaselab.dev/weaselab/conflict-set-ci:latest-amd64
|
|
credentials:
|
|
username: ${{ secrets.REGISTRY_USER }}
|
|
password: ${{ secrets.REGISTRY_TOKEN }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: .ccache
|
|
key: ccache-${{ matrix.name }}-${{ gitea.sha }}
|
|
restore-keys: |
|
|
ccache-${{ matrix.name }}-
|
|
|
|
- name: Build
|
|
run: |
|
|
export CCACHE_DIR="$GITHUB_WORKSPACE/.ccache"
|
|
rm -rf build
|
|
cmake -S . -B build -G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ${{ matrix.cmake_args }}
|
|
ninja -C build
|
|
ccache -s
|
|
|
|
- name: Test
|
|
run: |
|
|
cd build
|
|
ctest --no-compress-output --test-output-size-passed 100000 --test-output-size-failed 100000 -T Test -j "$(nproc)" --timeout 90 > /dev/null
|
|
|
|
- name: Upload test results to MinIO
|
|
if: always()
|
|
env:
|
|
MINIO_ACCESS_KEY: ${{ secrets.MINIO_ACCESS_KEY }}
|
|
MC_HOST_minio: https://${{ secrets.MINIO_ACCESS_KEY }}:${{ secrets.MINIO_SECRET_KEY }}@minio.weaselab.dev
|
|
run: |
|
|
if [ -z "$MINIO_ACCESS_KEY" ]; then
|
|
echo "MinIO credentials not configured; skipping upload"
|
|
exit 0
|
|
fi
|
|
zstd build/Testing/*/Test.xml
|
|
mc cp build/Testing/*/Test.xml.zst "minio/jenkins/conflict-set/${{ gitea.run_number }}/${{ matrix.name }}/"
|
|
|
|
release:
|
|
needs: build-image
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- runner: ubuntu-latest-amd64
|
|
arch: amd64
|
|
- runner: ubuntu-latest-arm64
|
|
arch: arm64
|
|
runs-on: ${{ matrix.runner }}
|
|
container:
|
|
image: git.weaselab.dev/weaselab/conflict-set-ci:latest-${{ matrix.arch }}
|
|
credentials:
|
|
username: ${{ secrets.REGISTRY_USER }}
|
|
password: ${{ secrets.REGISTRY_TOKEN }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: .ccache
|
|
key: ccache-release-${{ matrix.arch }}-${{ gitea.sha }}
|
|
restore-keys: |
|
|
ccache-release-${{ matrix.arch }}-
|
|
|
|
- name: Build
|
|
run: |
|
|
export CCACHE_DIR="$GITHUB_WORKSPACE/.ccache"
|
|
rm -rf build
|
|
cmake -S . -B build -G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_FLAGS=-DNVALGRIND
|
|
ninja -C build
|
|
ccache -s
|
|
|
|
- name: Test
|
|
run: |
|
|
cd build
|
|
ctest --no-compress-output --test-output-size-passed 100000 --test-output-size-failed 100000 -T Test -j "$(nproc)" --timeout 90 > /dev/null
|
|
|
|
- name: Package
|
|
run: |
|
|
cd build
|
|
cpack -G DEB
|
|
cpack -G RPM
|
|
|
|
- name: Build paper
|
|
if: matrix.arch == 'amd64'
|
|
run: |
|
|
cd paper
|
|
make
|
|
|
|
- name: Upload artifacts to MinIO
|
|
if: always()
|
|
env:
|
|
MINIO_ACCESS_KEY: ${{ secrets.MINIO_ACCESS_KEY }}
|
|
MC_HOST_minio: https://${{ secrets.MINIO_ACCESS_KEY }}:${{ secrets.MINIO_SECRET_KEY }}@minio.weaselab.dev
|
|
run: |
|
|
if [ -z "$MINIO_ACCESS_KEY" ]; then
|
|
echo "MinIO credentials not configured; skipping upload"
|
|
exit 0
|
|
fi
|
|
dest="minio/jenkins/conflict-set/${{ gitea.run_number }}/release-${{ matrix.arch }}/"
|
|
zstd build/Testing/*/Test.xml
|
|
mc cp build/Testing/*/Test.xml.zst "$dest"
|
|
mc cp build/*.deb build/*.rpm "$dest"
|
|
if compgen -G "paper/*.pdf" > /dev/null; then
|
|
mc cp paper/*.pdf "$dest"
|
|
fi
|
|
|
|
coverage:
|
|
needs: build-image
|
|
runs-on: ubuntu-latest-amd64
|
|
container:
|
|
image: git.weaselab.dev/weaselab/conflict-set-ci:latest-amd64
|
|
credentials:
|
|
username: ${{ secrets.REGISTRY_USER }}
|
|
password: ${{ secrets.REGISTRY_TOKEN }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: .ccache
|
|
key: ccache-coverage-${{ gitea.sha }}
|
|
restore-keys: |
|
|
ccache-coverage-
|
|
|
|
- name: Build
|
|
run: |
|
|
export CCACHE_DIR="$GITHUB_WORKSPACE/.ccache"
|
|
rm -rf build
|
|
cmake -S . -B build -G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
|
-DCMAKE_C_FLAGS=--coverage -DCMAKE_CXX_FLAGS=--coverage \
|
|
-DCMAKE_BUILD_TYPE=Debug -DDISABLE_TSAN=ON
|
|
ninja -C build
|
|
ccache -s
|
|
|
|
- name: Test
|
|
run: |
|
|
cd build
|
|
ctest --no-compress-output --test-output-size-passed 100000 --test-output-size-failed 100000 -T Test -j "$(nproc)" --timeout 90 > /dev/null
|
|
|
|
- name: Coverage report
|
|
run: |
|
|
gcov_args=(-f ConflictSet.cpp -f LongestCommonPrefix.h -f Metrics.h
|
|
--gcov-executable "llvm-cov gcov" --exclude-noncode-lines)
|
|
gcovr "${gcov_args[@]}" --cobertura > build/coverage.xml
|
|
gcovr "${gcov_args[@]}"
|
|
gcovr "${gcov_args[@]}" --fail-under-line 100 > /dev/null
|
|
|
|
- name: Upload results to MinIO
|
|
if: always()
|
|
env:
|
|
MINIO_ACCESS_KEY: ${{ secrets.MINIO_ACCESS_KEY }}
|
|
MC_HOST_minio: https://${{ secrets.MINIO_ACCESS_KEY }}:${{ secrets.MINIO_SECRET_KEY }}@minio.weaselab.dev
|
|
run: |
|
|
if [ -z "$MINIO_ACCESS_KEY" ]; then
|
|
echo "MinIO credentials not configured; skipping upload"
|
|
exit 0
|
|
fi
|
|
dest="minio/jenkins/conflict-set/${{ gitea.run_number }}/coverage/"
|
|
zstd build/Testing/*/Test.xml
|
|
mc cp build/Testing/*/Test.xml.zst "$dest"
|
|
if [ -e build/coverage.xml ]; then
|
|
mc cp build/coverage.xml "$dest"
|
|
fi
|