readthedocs: Add the configuration file. #157
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: | |
build-dpdk: | |
env: | |
dependencies: gcc libnuma-dev ninja-build | |
CC: gcc | |
DPDK_GIT: https://dpdk.org/git/dpdk-stable | |
DPDK_VER: 22.11.1 | |
name: dpdk gcc | |
outputs: | |
dpdk_key: ${{ steps.gen_dpdk_key.outputs.key }} | |
runs-on: ubuntu-20.04 | |
timeout-minutes: 30 | |
steps: | |
- name: checkout | |
uses: actions/checkout@v3 | |
- name: update PATH | |
run: | | |
echo "$HOME/bin" >> $GITHUB_PATH | |
echo "$HOME/.local/bin" >> $GITHUB_PATH | |
- name: create ci signature file for the dpdk cache key | |
# This will collect most of DPDK related lines, so hash will be different | |
# if something changed in a way we're building DPDK including DPDK_VER. | |
# This also allows us to use cache from any branch as long as version | |
# and a way we're building DPDK stays the same. | |
run: | | |
grep -irE 'RTE_|DPDK|meson|ninja' .ci/dpdk-* > dpdk-ci-signature | |
grep -rwE 'DPDK_GIT|DPDK_VER' .github/ >> dpdk-ci-signature | |
if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then | |
git ls-remote --heads $DPDK_GIT $DPDK_VER >> dpdk-ci-signature | |
fi | |
cat dpdk-ci-signature | |
- name: generate ci DPDK key | |
id: gen_dpdk_key | |
env: | |
ci_key: ${{ hashFiles('dpdk-ci-signature') }} | |
run: echo 'key=dpdk-${{ env.ci_key }}' >> $GITHUB_OUTPUT | |
- name: cache | |
id: dpdk_cache | |
uses: actions/cache@v3 | |
with: | |
path: dpdk-dir | |
key: ${{ steps.gen_dpdk_key.outputs.key }} | |
- name: set up python | |
if: steps.dpdk_cache.outputs.cache-hit != 'true' | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.9' | |
- name: update APT cache | |
if: steps.dpdk_cache.outputs.cache-hit != 'true' | |
run: sudo apt update || true | |
- name: install common dependencies | |
if: steps.dpdk_cache.outputs.cache-hit != 'true' | |
run: sudo apt install -y ${{ env.dependencies }} | |
- name: prepare | |
if: steps.dpdk_cache.outputs.cache-hit != 'true' | |
run: ./.ci/dpdk-prepare.sh | |
- name: build | |
if: steps.dpdk_cache.outputs.cache-hit != 'true' | |
run: ./.ci/dpdk-build.sh | |
build-linux: | |
needs: build-dpdk | |
env: | |
IMAGE_NAME: ghcr.io/ovn-org/ovn-tests:ubuntu | |
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 }} | |
name: linux ${{ join(matrix.cfg.*, ' ') }} | |
runs-on: ubuntu-latest | |
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-" } | |
- { 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-" } | |
- { 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-" } | |
- { compiler: gcc, testsuite: system-test-dpdk, dpdk: dpdk, test_range: "-100" } | |
- { compiler: gcc, testsuite: system-test-dpdk, dpdk: dpdk, test_range: "101-" } | |
- { compiler: gcc, testsuite: system-test-userspace, test_range: "-100" } | |
- { compiler: gcc, testsuite: system-test-userspace, test_range: "101-" } | |
- { compiler: gcc, testsuite: system-test, test_range: "-100" } | |
- { compiler: gcc, testsuite: system-test, test_range: "101-" } | |
- { compiler: clang, testsuite: system-test, sanitizers: sanitizers, test_range: "-100" } | |
- { compiler: clang, testsuite: system-test, sanitizers: sanitizers, test_range: "101-" } | |
- { arch: x86, compiler: gcc, opts: --disable-ssl } | |
steps: | |
- name: checkout | |
if: github.event_name == 'push' || github.event_name == 'pull_request' | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
# For weekly runs, don't update submodules | |
- name: checkout without submodule | |
if: github.event_name == 'schedule' | |
uses: actions/checkout@v3 | |
# 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@v3 | |
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: cache | |
if: matrix.cfg.dpdk != '' | |
uses: actions/cache@v3 | |
with: | |
path: dpdk-dir | |
key: ${{ needs.build-dpdk.outputs.dpdk_key }} | |
- 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@v3 | |
with: | |
name: logs-linux-${{ join(matrix.cfg.*, '-') }} | |
path: logs.tgz | |
build-osx: | |
env: | |
CC: clang | |
OPTS: --disable-ssl | |
name: osx clang --disable-ssl | |
runs-on: macos-latest | |
strategy: | |
fail-fast: false | |
steps: | |
- name: checkout | |
if: github.event_name == 'push' || github.event_name == 'pull_request' | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
# For weekly runs, don't update submodules | |
- name: checkout without submodule | |
if: github.event_name == 'schedule' | |
uses: actions/checkout@v3 | |
# 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@v3 | |
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@v4 | |
with: | |
python-version: '3.x' | |
- 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@v3 | |
with: | |
name: logs-osx-clang---disable-ssl | |
path: config.log | |
build-linux-rpm: | |
name: linux rpm fedora | |
runs-on: ubuntu-latest | |
container: fedora:latest | |
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@v3 | |
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@v3 | |
with: | |
name: rpm-packages | |
path: | | |
rpm/rpmbuild/SRPMS/*.rpm | |
rpm/rpmbuild/RPMS/*/*.rpm | |
retention-days: 14 |