-
Notifications
You must be signed in to change notification settings - Fork 1
130 lines (127 loc) · 4.43 KB
/
publish-docker-tester.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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 }}
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