Build and Test #2529
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: Build and Test | |
on: | |
push: | |
pull_request: | |
schedule: | |
# Run Sunday at midnight | |
- cron: '0 0 * * 0' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
prepare-container: | |
# This job has the following matrix, x: Job trigger, y: Branch | |
# (scheduled jobs run only on main): | |
# +-------+-------------------+-------------------+ | |
# | | Push/Pull request | Scheduled | | |
# +-------+-------------------+-------------------+ | |
# | main | ghcr.io - Ubuntu | ghcr.io - Fedora | | |
# +-------+-------------------+-------------------+ | |
# | !main | Builds - Ubuntu | xxxxxxxxxxxxxxxxx | | |
# +-------+-------------------+-------------------+ | |
env: | |
DEPENDENCIES: podman | |
name: Prepare container | |
if: github.repository_owner == 'ovn-org' || github.event_name != 'schedule' | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Update APT cache | |
run: sudo apt update | |
- name: Install dependencies | |
run: sudo apt install -y ${{ env.DEPENDENCIES }} | |
- name: Choose image distro | |
if: github.event_name == 'push' || github.event_name == 'pull_request' | |
run: | | |
echo "IMAGE_DISTRO=ubuntu" >> $GITHUB_ENV | |
- name: Choose image distro | |
if: github.event_name == 'schedule' | |
run: | | |
echo "IMAGE_DISTRO=fedora" >> $GITHUB_ENV | |
- name: Build container | |
if: github.ref_name != 'main' | |
run: make ${{ env.IMAGE_DISTRO }} | |
working-directory: utilities/containers | |
- name: Download container | |
if: github.ref_name == 'main' | |
run: podman pull ghcr.io/ovn-org/ovn-tests:${{ env.IMAGE_DISTRO }} | |
- name: Export image | |
run: podman save -o /tmp/image.tar --format oci-archive ovn-org/ovn-tests:${{ env.IMAGE_DISTRO }} | |
- name: Cache image | |
id: image_cache | |
uses: actions/cache@v4 | |
with: | |
path: /tmp/image.tar | |
key: ${{ github.sha }}/${{ github.event_name }} | |
build-linux: | |
needs: [prepare-container] | |
env: | |
ARCH: ${{ matrix.cfg.arch }} | |
CC: ${{ matrix.cfg.compiler }} | |
DPDK: ${{ matrix.cfg.dpdk }} | |
LIBS: ${{ matrix.cfg.libs }} | |
OPTS: ${{ matrix.cfg.opts }} | |
TESTSUITE: ${{ matrix.cfg.testsuite }} | |
TEST_RANGE: ${{ matrix.cfg.test_range }} | |
SANITIZERS: ${{ matrix.cfg.sanitizers }} | |
UNSTABLE: ${{ matrix.cfg.unstable }} | |
name: linux ${{ join(matrix.cfg.*, ' ') }} | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
cfg: | |
- { compiler: gcc, opts: --disable-ssl } | |
- { compiler: clang, opts: --disable-ssl } | |
- { compiler: gcc, testsuite: test, test_range: "-300" } | |
- { compiler: gcc, testsuite: test, test_range: "301-600" } | |
- { compiler: gcc, testsuite: test, test_range: "601-", unstable: unstable } | |
- { compiler: clang, testsuite: test, sanitizers: sanitizers, test_range: "-300" } | |
- { compiler: clang, testsuite: test, sanitizers: sanitizers, test_range: "301-600" } | |
- { compiler: clang, testsuite: test, sanitizers: sanitizers, test_range: "601-", unstable: unstable } | |
- { compiler: gcc, testsuite: test, libs: -ljemalloc, test_range: "-300" } | |
- { compiler: gcc, testsuite: test, libs: -ljemalloc, test_range: "301-600" } | |
- { compiler: gcc, testsuite: test, libs: -ljemalloc, test_range: "601-", unstable: unstable } | |
- { compiler: gcc, testsuite: system-test-dpdk, dpdk: dpdk, test_range: "-100" } | |
- { compiler: gcc, testsuite: system-test-dpdk, dpdk: dpdk, test_range: "101-", unstable: unstable } | |
- { compiler: gcc, testsuite: system-test-userspace, test_range: "-100" } | |
- { compiler: gcc, testsuite: system-test-userspace, test_range: "101-", unstable: unstable } | |
- { compiler: gcc, testsuite: system-test, test_range: "-100" } | |
- { compiler: gcc, testsuite: system-test, test_range: "101-", unstable: unstable } | |
- { compiler: clang, testsuite: system-test, sanitizers: sanitizers, test_range: "-100" } | |
- { compiler: clang, testsuite: system-test, sanitizers: sanitizers, test_range: "101-", unstable: unstable } | |
- { arch: x86, compiler: gcc, opts: --disable-ssl } | |
steps: | |
- name: checkout | |
if: github.event_name == 'push' || github.event_name == 'pull_request' | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
# For weekly runs, don't update submodules | |
- name: checkout without submodule | |
if: github.event_name == 'schedule' | |
uses: actions/checkout@v4 | |
# Weekly runs test using the tip of the most recent stable OVS branch | |
# instead of the submodule. | |
- name: checkout OVS | |
if: github.event_name == 'schedule' | |
uses: actions/checkout@v4 | |
with: | |
repository: 'openvswitch/ovs' | |
fetch-depth: 0 | |
path: 'ovs' | |
- name: checkout OVS most recent stable branch. | |
if: github.event_name == 'schedule' | |
run: | | |
git checkout \ | |
$(git branch -a -l '*branch-*' | sed 's/remotes\/origin\///' | \ | |
sort -V | tail -1) | |
working-directory: ovs | |
- name: image cache | |
id: image_cache | |
uses: actions/cache@v4 | |
with: | |
path: /tmp/image.tar | |
key: ${{ github.sha }}/${{ github.event_name }} | |
# XXX This should be removed when native crun >=1.9.1 | |
- name: update crun script | |
run: | | |
crun --version | |
sudo curl -L "https://github.com/containers/crun/releases/download/1.14.1/crun-1.14.1-linux-amd64" -o /usr/bin/crun | |
sudo chmod +x /usr/bin/crun | |
echo "New crun version: "$(crun --version) | |
- name: Reduce ASLR entropy | |
if: matrix.cfg.sanitizers != '' | |
# Asan in llvm 14 provided in ubuntu-22.04 is incompatible with | |
# high-entropy ASLR configured in much newer kernels that GitHub | |
# runners are using leading to random crashes: | |
# https://github.com/actions/runner-images/issues/9491 | |
run: sudo sysctl -w vm.mmap_rnd_bits=28 | |
- name: load image | |
run: | | |
sudo podman load -i /tmp/image.tar | |
podman load -i /tmp/image.tar | |
rm -rf /tmp/image.tar | |
- name: build | |
if: ${{ startsWith(matrix.cfg.testsuite, 'system-test') }} | |
run: sudo -E ./.ci/ci.sh --archive-logs | |
- name: build | |
if: ${{ !startsWith(matrix.cfg.testsuite, 'system-test') }} | |
run: ./.ci/ci.sh --archive-logs | |
- name: upload logs on failure | |
if: failure() || cancelled() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: logs-linux-${{ join(matrix.cfg.*, '-') }} | |
path: logs.tgz | |
build-osx: | |
env: | |
CC: clang | |
OPTS: --disable-ssl | |
name: osx clang --disable-ssl | |
if: github.repository_owner == 'ovn-org' || github.event_name != 'schedule' | |
runs-on: macos-latest | |
strategy: | |
fail-fast: false | |
steps: | |
- name: checkout | |
if: github.event_name == 'push' || github.event_name == 'pull_request' | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
# For weekly runs, don't update submodules | |
- name: checkout without submodule | |
if: github.event_name == 'schedule' | |
uses: actions/checkout@v4 | |
# Weekly runs test using the tip of the most recent stable OVS branch | |
# instead of the submodule. | |
- name: checkout OVS | |
if: github.event_name == 'schedule' | |
uses: actions/checkout@v4 | |
with: | |
repository: 'openvswitch/ovs' | |
fetch-depth: 0 | |
path: 'ovs' | |
- name: checkout OVS most recent stable branch. | |
if: github.event_name == 'schedule' | |
run: | | |
git checkout \ | |
$(git branch -a -l '*branch-*' | sed 's/remotes\/origin\///' | \ | |
sort -V | tail -1) | |
working-directory: ovs | |
- name: install dependencies | |
run: brew install automake libtool | |
- name: update PATH | |
run: | | |
echo "$HOME/bin" >> $GITHUB_PATH | |
echo "$HOME/.local/bin" >> $GITHUB_PATH | |
- name: set up python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- name: prepare | |
run: ./.ci/osx-prepare.sh | |
- name: build | |
run: ./.ci/osx-build.sh | |
- name: upload logs on failure | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: logs-osx-clang---disable-ssl | |
path: config.log | |
build-linux-rpm: | |
name: linux rpm fedora | |
if: github.repository_owner == 'ovn-org' || github.event_name != 'schedule' | |
runs-on: ubuntu-22.04 | |
container: fedora:40 | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
steps: | |
- name: install dependencies | |
run: dnf install -y dnf-plugins-core git rpm-build | |
- name: checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: install build dependencies | |
run: | | |
sed -e 's/@VERSION@/0.0.1/' rhel/ovn-fedora.spec.in \ | |
> /tmp/ovn.spec | |
dnf builddep -y /tmp/ovn.spec | |
- name: configure OvS | |
run: ./boot.sh && ./configure | |
working-directory: ovs | |
- name: make dist OvS | |
run: make dist | |
working-directory: ovs | |
- name: configure OVN | |
run: ./boot.sh && ./configure | |
- name: make dist OVN | |
run: make dist | |
- name: build RPM | |
run: make rpm-fedora | |
- name: upload rpm packages | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rpm-packages | |
path: | | |
rpm/rpmbuild/SRPMS/*.rpm | |
rpm/rpmbuild/RPMS/*/*.rpm | |
retention-days: 14 |