-
Notifications
You must be signed in to change notification settings - Fork 3
170 lines (150 loc) · 5.25 KB
/
build.yaml
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
---
name: Build
on:
push:
branches:
- main
paths-ignore:
- .github/ISSUE_TEMPLATE/*.md
- "*.md"
- docs/**
- mkdocs.yml
- LICENSE
- NOTICE
pull_request:
branches:
- main
paths-ignore:
- .github/ISSUE_TEMPLATE/*.md
- "*.md"
- docs/**
- mkdocs.yml
- LICENSE
- NOTICE
env:
GO_VERSION: 1.22.3
KIND_VERSION: v0.11.1
KIND_IMAGE: kindest/node:v1.21.1@sha256:69860bda5563ac81e3c0057d654b5253219618a22ec3a346306239bba8cfa1a6
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
verify-code:
name: Verify code
runs-on: ubuntu-20.04
steps:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
- name: Checkout code
uses: actions/checkout@v4
- name: Cached Go dependencies
uses: actions/cache@v4
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Verify Go code
uses: golangci/[email protected]
with:
args: --verbose
version: v1.57.2
skip-pkg-cache: true
skip-build-cache: true
- name: Verify YAML code
uses: ibiqlik/action-yamllint@v3
- name: Vendor Go modules
run: go mod vendor
tests:
name: Run tests
runs-on: ubuntu-20.04
steps:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
- name: Checkout code
uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Run unit tests
run: make test
- name: Upload code coverage
uses: codecov/codecov-action@v4
with:
files: ./coverage.txt
e2e-testing:
name: Run end to end testing
runs-on: ubuntu-latest
env:
DOCKER_CLI_EXPERIMENTAL: enabled
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
- name: Release snapshot
uses: goreleaser/goreleaser-action@v5
with:
version: v1.7.0
args: release -f=goreleaser-e2e.yaml --snapshot --skip-publish --rm-dist
- name: Install kind and create cluster
run: >
curl -Lo ./kind https://kind.sigs.k8s.io/dl/${{ env.KIND_VERSION
}}/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
kind create cluster
curl -LO https://dl.k8s.io/release/v1.26.0/bin/linux/amd64/kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
- name: Test connection to Kubernetes cluster
run: |
kubectl cluster-info
kubectl wait --for=condition=Ready nodes --all --timeout=300s
kubectl describe node
- name: Load node-collector image to cluster
run: >
echo "tagging image with e2e tag"
docker tag ghcr.io/aquasecurity/node-collector:${{ github.sha }}-amd64 ghcr.io/aquasecurity/node-collector:e2e
echo "saving image to tar file"
docker save -o node-collector.tar ghcr.io/aquasecurity/node-collector:e2e
sleep 5
echo "loading image to kind cluster"
kind load image-archive node-collector.tar
- name: Install JQ Tool
uses: mbround18/install-jq@v1
- name: Retrieve job args
run: |
echo "KUBELET_CONFIG=$(cat ./tests/e2e/kubeletconfig.json | bzip2 -c | base64)" >> $GITHUB_ENV
echo "NODE_CONFIG=$(cat ./tests/e2e/nodeconfig.yaml | bzip2 -c | base64)" >> $GITHUB_ENV
echo "KUBELET_MAPPING=$(cat ./tests/e2e/kubeletconfig-mapping.yaml | bzip2 -c | base64)" >> $GITHUB_ENV
echo "COMMANDS=$(cat ./tests/e2e/commands.yaml | bzip2 -c | base64)" >> $GITHUB_ENV
id: args
- name: Run node-collector job
run: >
sed -i 's\COMMANDS\${{ env.COMMANDS }}\g' ./tests/e2e/job.yaml
sed -i 's\NODE_CONFIG\${{ env.NODE_CONFIG }}\g' ./tests/e2e/job.yaml
sed -i 's\KUBELET_MAPPING\${{ env.KUBELET_MAPPING }}\g' ./tests/e2e/job.yaml
sed -i 's\KUBELET_CONFIG\${{ env.KUBELET_CONFIG }}\g' ./tests/e2e/job.yaml
kubectl apply -f ./tests/e2e/job.yaml
kubectl wait --for=condition=Complete --timeout=30s job/node-collector
kubectl logs job/node-collector > full-actual-node-collector-output.txt
jq -r .info full-actual-node-collector-output.txt > actual-node-collector-output.txt
echo "compare node collector actual vs expected logs"
diff -a --suppress-common-lines -y actual-node-collector-output.txt ./tests/e2e/expected-node-collector-output.txt