Skip to content

wip

wip #613

Workflow file for this run

name: CI
# Run CI when a commit lands on the main branch and when a PR for main is
# opened.
on:
push:
branches:
- main
- test_cache # Todo: remove this!
pull_request:
branches:
- main
env:
REGISTRY: ghcr.io
permissions:
checks: write
contents: read
id-token: write
packages: write
pages: write
pull-requests: write
jobs:
create-images:
timeout-minutes: 15
strategy:
matrix:
host:
- { name: ubuntu-24.04, arch: x64 }
- { name: 4-core-ubuntu-arm, arch: arm64 }
distribution:
- { name: fedora, version: "41" }
- { name: fedora, version: "40" }
- { name: fedora, version: "39" }
- { name: ubuntu, version: "24.10" }
- { name: ubuntu, version: "24.04" }
runs-on: [ "${{ matrix.host.name }}" ]
name: "Image: ${{ matrix.distribution.name }} ${{ matrix.distribution.version }} (${{ matrix.host.arch}})"
steps:
- name: Checkout bpfilter
uses: actions/checkout@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log to GHCR
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# Build the container images and use the existing images as cache
- name: Build and push container image
uses: docker/build-push-action@v4
with:
file: .github/${{ matrix.distribution.name }}-${{ matrix.distribution.version }}.Dockerfile
push: ${{ github.ref == 'refs/heads/main' && 'true' || 'false' }}
tags: ghcr.io/facebook/bpfilter:${{ matrix.distribution.name }}-${{ matrix.distribution.version }}-${{ matrix.host.arch}}
cache-from: type=gha,scope=${{ matrix.distribution.name }}-${{ matrix.distribution.version }}-${{ matrix.host.arch}}
cache-to: type=gha,mode=max,scope=${{ matrix.distribution.name }}-${{ matrix.distribution.version }}-${{ matrix.host.arch}}
build:
needs: create-images
timeout-minutes: 5
strategy:
matrix:
host:
- { name: ubuntu-24.04, arch: x64 }
- { name: 4-core-ubuntu-arm, arch: arm64 }
distribution:
- { name: fedora, version: "41" }
- { name: fedora, version: "40" }
- { name: fedora, version: "39" }
- { name: ubuntu, version: "24.10" }
- { name: ubuntu, version: "24.04" }
runs-on: [ "${{ matrix.host.name }}" ]
container: ghcr.io/facebook/bpfilter:${{ matrix.distribution.name }}-${{ matrix.distribution.version }}-${{ matrix.host.arch}}
name: "Build: ${{ matrix.distribution.name }} ${{ matrix.distribution.version }} (${{ matrix.host.arch}})"
steps:
- name: Checkout bpfilter
uses: actions/checkout@v2
- name: Configure the build
run: cmake -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build
- name: Build all
run: make -C $GITHUB_WORKSPACE/build -j `nproc`
check:
needs: create-images
timeout-minutes: 5
runs-on: [ "ubuntu-24.04" ]
container: ghcr.io/facebook/bpfilter:fedora-41-x64
name: "Check"
steps:
- name: Checkout bpfilter
uses: actions/checkout@v2
- name: Configure the build
run: cmake -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build
- name: Build
run: make -C $GITHUB_WORKSPACE/build -j `nproc` check
test:
needs: create-images
timeout-minutes: 5
strategy:
matrix:
host:
- { name: ubuntu-24.04, arch: x64 }
- { name: 4-core-ubuntu-arm, arch: arm64 }
runs-on: [ "${{ matrix.host.name }}" ]
container:
image: ghcr.io/facebook/bpfilter:fedora-41-${{ matrix.host.arch }}
options: --privileged
name: "Test: ${{ matrix.host.arch }}"
steps:
- name: Checkout bpfilter
uses: actions/checkout@v2
- name: Restore the cached test results
uses: actions/restore@v4
with:
path: build/output/tests
key: tests-results
- name: Configure the build
run: cmake -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build
- name: Build
run: make -C $GITHUB_WORKSPACE/build -j `nproc` test
- name: Build
run: make -C $GITHUB_WORKSPACE/build -j `nproc` e2e
- name: Cache the test results
uses: actions/save@v4
if: matrix.host.arch == 'x64' && github.ref == 'refs/heads/main'
with:
path: build/output/tests
key: tests-results
benchmark:
needs: create-images
timeout-minutes: 5
strategy:
matrix:
host:
- { name: ubuntu-24.04, arch: x64 }
- { name: 4-core-ubuntu-arm, arch: arm64 }
runs-on: [ "${{ matrix.host.name }}" ]
container:
image: ghcr.io/facebook/bpfilter:fedora-41-${{ matrix.host.arch }}
options: --privileged
name: "Benchmark: ${{ matrix.host.arch }}"
steps:
- name: Checkout bpfilter
uses: actions/checkout@v2
- name: Ensure we can read the Git repository
run: git config --global --add safe.directory $GITHUB_WORKSPACE
- name: Configure the build
run: cmake -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build -DWITH_BENCHMARK=on
- name: Restore the cached benchmark results
uses: actions/cache/restore@v4
with:
path: build/output/benchmarks
key: benchmarks-results
- name: Build
run: make -C $GITHUB_WORKSPACE/build -j `nproc` benchmark
- name: Cache the benchmark results
uses: actions/cache/save@v4
if: matrix.host.arch == 'x64' && github.ref == 'refs/heads/main'
with:
path: build/output/benchmarks
key: benchmarks-results
doc:
needs: [ test, benchmark ]
timeout-minutes: 5
runs-on: [ "ubuntu-24.04" ]
container: ghcr.io/facebook/bpfilter:fedora-41-x64
name: "Documentation"
steps:
- name: Checkout bpfilter
uses: actions/checkout@v2
- name: Configure the build
run: cmake -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build
- name: Restore the cached tests results
uses: actions/cache@v4
with:
path: build/output/tests
key: tests-results
- name: Restore the cached benchmarks results
uses: actions/cache@v4
with:
path: build/output/benchmarks
key: benchmarks-results
- name: cache content
run: ls build/output/benchmarks
- name: Build
run: make -C $GITHUB_WORKSPACE/build -j `nproc` doc
- name: Fix permissions
if: github.ref == 'refs/heads/main'
run: |
chmod -c -R +rX "$GITHUB_WORKSPACE/build/doc/html" | while read line; do
echo "::warning title=Invalid file permissions automatically fixed::$line"
done
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
if: github.ref == 'refs/heads/main'
with:
path: build/doc/html
- name: Deploy to GitHub Pages
uses: actions/deploy-pages@v4
if: github.ref == 'refs/heads/main'