Skip to content

Introduce multiport-eswitch mode to support continuous communication #728

Introduce multiport-eswitch mode to support continuous communication

Introduce multiport-eswitch mode to support continuous communication #728

name: Build and Publish Docker Tester Image
env:
platforms: linux/amd64
on:
push:
branches:
- main
tags:
- v*
paths-ignore:
- 'docs/**'
- '**/*.md'
pull_request:
paths-ignore:
- 'docs/**'
- '**/*.md'
jobs:
buildAndPushTester:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event_name == 'release' && github.ref || github.event_name == 'push' && github.ref || github.event_name == 'pull_request' && github.event.pull_request.head.ref || github.event_name == 'pull_request' && github.event.pull_request.head.ref }}
fetch-depth: 0
- name: Determine SHA for Docker Image
id: get_sha
run: |
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
echo "DOCKER_IMAGE_SHA=${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV
else
echo "DOCKER_IMAGE_SHA=${{ github.sha }}" >> $GITHUB_ENV
fi
- uses: docker/metadata-action@v5
id: meta
with:
images: |
ghcr.io/${{ github.repository_owner }}/dpservice-tester
tags: |
type=semver,pattern={{version}}
type=schedule
type=raw,${{ env.DOCKER_IMAGE_SHA }}
type=ref,event=branch
type=ref,event=tag
type=ref,event=pr
type=sha
flavor: |
latest=${{ github.ref == 'refs/heads/main' }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:latest
platforms: ${{env.platforms}}
# workaround for self-hosted runner
# https://github.com/mumoshu/actions-runner-controller-ci/commit/e91c8c0f6ca82aa7618010c6d2f417aa46c4a4bf
- name: Set up Docker Context for Buildx
id: buildx-context
run: |
CONTEXT_NAME="builders-tester-${GITHUB_RUN_ID}"
docker context create $CONTEXT_NAME
echo "CONTEXT_NAME=$CONTEXT_NAME" >> $GITHUB_ENV
- name: Set up Docker Buildx
timeout-minutes: 5
uses: docker/setup-buildx-action@v3
with:
version: latest
endpoint: ${{ env.CONTEXT_NAME }} # self-hosted
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push tester
timeout-minutes: 60
uses: docker/build-push-action@v5
with:
context: .
platforms: ${{env.platforms}}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
target: tester
secrets: |
"github_token=${{ secrets.BOT_PAT }}"
test:
runs-on: [ self-hosted, dpdk ]
needs: buildAndPushTester
steps:
- name: Determine SHA for Docker Image
id: get_sha
run: |
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
echo "DOCKER_IMAGE_SHA=${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV
else
echo "DOCKER_IMAGE_SHA=${{ github.sha }}" >> $GITHUB_ENV
fi
# dpservice-bin tests
- name: Run tests
id: run_tests
run: |
docker run --rm --privileged --mount type=bind,source=/dev/hugepages,target=/dev/hugepages ghcr.io/ironcore-dev/dpservice-tester:${{ env.DOCKER_IMAGE_SHA }}
- name: Docker cleanup
if: always()
run: |
for i in $(docker ps -q); do docker stop $i; done
# dpservice-go tests
- name: Run checkout
uses: actions/checkout@v4
with:
ref: ${{ env.DOCKER_IMAGE_SHA }}
- name: Run dpservice
run: docker run --rm --entrypoint ./dp_service.py --privileged -p1337:1337 --mount type=bind,source=/dev/hugepages,target=/dev/hugepages ghcr.io/ironcore-dev/dpservice-tester:${{ env.DOCKER_IMAGE_SHA }} --no-init &
- name: Wait for gRPC port
run: timeout 15 bash -c 'until echo > /dev/tcp/localhost/1337 2>/dev/null; do sleep 1; done' 2>/dev/null
- name: Setup Go Environment
uses: actions/setup-go@v5
with:
go-version-file: 'go/dpservice-go/go.mod'
- name: Run dpservice-go tests
id: run_dpservice-go_tests
run: |
make test
working-directory: go/dpservice-go
- name: Docker cleanup
if: always()
run: |
for i in $(docker ps -q); do docker stop $i; done