ci: switch to github hosted runners (#398) #1321
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: CI | |
on: | |
push: | |
branches: | |
- "**" | |
env: | |
CUR_REGISTRY: ${{ vars.CUR_REGISTRY }} # "registry.cennso.com" | |
REGISTRY: ${{ vars.REGISTRY }} # "quay.io" | |
IMAGE_NAME: ${{ vars.IMAGE_NAME }} # travelping/upg-vpp | |
# Make 'git am' work | |
GIT_AUTHOR_NAME: Dummy | |
GIT_AUTHOR_EMAIL: dummy@example.com | |
GIT_COMMITTER_NAME: Dummy | |
GIT_COMMITTER_EMAIL: dummy@example.com | |
UPG_BUILDENV: docker | |
# FIXME: UDP tests are unstable, likely due to a shortcoming in | |
# Linux namespace handling code | |
E2E_SKIP: ".*IPv6 session measurement.*counts UDP traffic.*" | |
# Uncomment to disable pushing the upg-vpp images. | |
# Build images will still be pushed in case if a new one needs to be built. | |
# This may be helpful during workflow debugging | |
# NO_PUSH: y | |
# Uncomment/change the following to run only a subset of tests. | |
# But don't forget to comment it back for a finished PR! | |
# E2E_FOCUS: "TDF.*IPv4.*no proxy.*counts plain HTTP traffic" | |
E2E_PARALLEL_NODES: "10" | |
jobs: | |
build: | |
runs-on: | |
- ubuntu-22.04 | |
strategy: | |
matrix: | |
build_type: [debug, release] | |
env: | |
# avoid conflicts between parallel jobs | |
K8S_ID_SUFFIX: ${{ matrix.build_type }} | |
steps: | |
# https://github.com/actions/runner/issues/434#issuecomment-992865457 | |
- name: Clean the workspace | |
uses: docker://alpine | |
with: | |
args: /bin/sh -c "rm -rf /github/workspace/.* 2>/dev/null || rm -rf /github/workspace/*" | |
- name: Login to the registry | |
uses: docker/login-action@v1 | |
with: | |
registry: ${{ env.CUR_REGISTRY }} | |
username: ${{ secrets.CUR_REGISTRY_LOGIN }} | |
password: ${{ secrets.CUR_REGISTRY_PASSWORD }} | |
- name: Login to quay.io | |
uses: docker/login-action@v1 | |
with: | |
registry: ${{ env.REGISTRY }} | |
username: ${{ secrets.QUAY_USER_ID }} | |
password: ${{ secrets.QUAY_TOKEN }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
# for git describe | |
fetch-depth: 0 | |
- name: Build UPG image | |
run: | | |
make ci-build BUILD_TYPE="${{ matrix.build_type }}" | |
mv /tmp/_out _out | |
- name: Upload debs | |
uses: actions/upload-artifact@v2 | |
with: | |
name: debs-${{ matrix.build_type }} | |
path: _out/*.deb | |
# image.txt used by the release workflow | |
- name: Upload image.txt | |
uses: actions/upload-artifact@v2 | |
with: | |
name: image-${{ matrix.build_type }} | |
path: image-${{ matrix.build_type }}.txt | |
- name: Upload image.txt for the dev image | |
uses: actions/upload-artifact@v2 | |
with: | |
name: image-dev-${{ matrix.build_type }} | |
path: image-dev-${{ matrix.build_type }}.txt | |
checkstyle: | |
runs-on: | |
- ubuntu-22.04 | |
steps: | |
- name: Clean the workspace | |
uses: docker://alpine | |
with: | |
args: /bin/sh -c "rm -rf /github/workspace/.* 2>/dev/null || rm -rf /github/workspace/*" | |
- name: Login to the registry | |
uses: docker/login-action@v1 | |
with: | |
registry: ${{ env.CUR_REGISTRY }} | |
username: ${{ secrets.CUR_REGISTRY_LOGIN }} | |
password: ${{ secrets.CUR_REGISTRY_PASSWORD }} | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Check the code style | |
uses: jidicula/clang-format-action@v4.11.0 | |
with: | |
clang-format-version: '11' | |
integration: | |
runs-on: | |
- ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
build_type: [debug, release] | |
env: | |
BUILD_TYPE: ${{ matrix.build_type }} | |
needs: build | |
steps: | |
- name: Clean the workspace | |
uses: docker://alpine | |
with: | |
args: /bin/sh -c "rm -rf /github/workspace/.* 2>/dev/null || rm -rf /github/workspace/*" | |
- name: Login to the registry | |
uses: docker/login-action@v1 | |
with: | |
registry: ${{ env.CUR_REGISTRY }} | |
username: ${{ secrets.CUR_REGISTRY_LOGIN }} | |
password: ${{ secrets.CUR_REGISTRY_PASSWORD }} | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
# for git describe | |
fetch-depth: 0 | |
- name: Get dev image info | |
uses: actions/download-artifact@v2 | |
with: | |
name: image-dev-${{ matrix.build_type }} | |
- name: Run tests | |
run: | | |
dev_image=$(cat image-dev-${BUILD_TYPE}.txt) | |
make retest DEV_IMAGE="${dev_image}" | |
e2e: | |
runs-on: | |
- self-hosted | |
- hugepages | |
strategy: | |
fail-fast: false | |
matrix: | |
build_type: [debug, release] | |
env: | |
BUILD_TYPE: ${{ matrix.build_type }} | |
needs: build | |
steps: | |
- name: Clean the workspace | |
uses: docker://alpine | |
with: | |
args: /bin/sh -c "rm -rf /github/workspace/.* 2>/dev/null || rm -rf /github/workspace/*" | |
- name: Login to the registry | |
uses: docker/login-action@v1 | |
with: | |
registry: ${{ env.CUR_REGISTRY }} | |
username: ${{ secrets.CUR_REGISTRY_LOGIN }} | |
password: ${{ secrets.CUR_REGISTRY_PASSWORD }} | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
# for git describe | |
fetch-depth: 0 | |
- name: Get dev image info | |
uses: actions/download-artifact@v2 | |
with: | |
name: image-dev-${{ matrix.build_type }} | |
- name: Run tests | |
run: | | |
dev_image=$(cat image-dev-${BUILD_TYPE}.txt) | |
mkdir junit-output | |
if ! make retest-e2e \ | |
DEV_IMAGE="${dev_image}" \ | |
E2E_RETEST=y \ | |
E2E_PARALLEL=y \ | |
E2E_PARALLEL_NODES="${E2E_PARALLEL_NODES}" \ | |
E2E_QUICK=y \ | |
E2E_ARTIFACTS_DIR="/src/artifacts" \ | |
E2E_JUNIT_DIR="/src/artifacts/junit-output" \ | |
E2E_FOCUS="${E2E_FOCUS}" \ | |
E2E_SKIP="${E2E_SKIP}" \ | |
E2E_NO_GDB=1 \ | |
GRAB_ARTIFACTS=1; then | |
docker run -v "${PWD}:/src" alpine /bin/sh -c "chown -v -R $(id -u).$(id -g) /src/artifacts" | |
exit 1 | |
fi | |
- name: Upload artifacts for failed tests | |
if: failure() | |
uses: actions/upload-artifact@v2 | |
with: | |
name: test-artifacts-${{ matrix.kind }}-${{ matrix.build_type }} | |
path: artifacts/ | |
# dummy job for release.yaml to wait on | |
conclude: | |
runs-on: | |
- ubuntu-latest | |
needs: | |
- checkstyle | |
- integration | |
- e2e | |
steps: | |
- name: Dummy step | |
run: echo ok | |
# based on ergw GH Action config | |
slack: | |
needs: | |
- conclude | |
runs-on: | |
- ubuntu-22.04 | |
if: always() | |
steps: | |
- name: Set status | |
run: | | |
if [[ ${{ needs.conclude.result }} =~ ^(success|failure)$ ]]; then | |
echo '::set-output name=STATUS::${{ needs.conclude.result }}' | |
else | |
echo '::set-output name=STATUS::cancelled' | |
fi | |
id: set-status | |
- name: Slack notification | |
uses: 8398a7/action-slack@v3 | |
with: | |
author_name: "GitHub Actions" | |
username: ${{ github.event.repository.name }} | |
icon_emoji: ':octocat:' | |
fields: repo, message, ref, commit, author, action, eventName, workflow, job, took | |
status: ${{ steps.set-status.outputs.STATUS }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} | |
MATRIX_CONTEXT: ${{ toJson(matrix) }} |