Skip to content

Commit 8957f04

Browse files
authored
Improve e2e perf (#1227)
1 parent 7ceb5bc commit 8957f04

File tree

4 files changed

+136
-35
lines changed

4 files changed

+136
-35
lines changed

.github/workflows/pr-build.yaml

+17-1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ jobs:
5959
version: latest
6060

6161
- name: Save
62+
env:
63+
BUILD_TARGETS: "botkube-agent"
6264
run: |
6365
make save-images
6466
@@ -98,6 +100,8 @@ jobs:
98100
password: ${{ secrets.GITHUB_TOKEN }}
99101

100102
- name: Push
103+
env:
104+
BUILD_TARGETS: "botkube-agent"
101105
run: make load-and-push-images
102106

103107
- name: Delete Docker image artifact
@@ -237,12 +241,24 @@ jobs:
237241
env:
238242
# we hardcode plugins version, so it's predictable in e2e tests
239243
GORELEASER_CURRENT_TAG: "v0.0.0-latest"
240-
OUTPUT_MODE: "archive"
244+
OUTPUT_MODE: "binary"
245+
SINGLE_PLATFORM: "true"
246+
PLUGIN_TARGETS: "kubernetes,kubectl,cm-watcher,echo,helm"
241247
run: |
242248
make build-plugins
243249
250+
- name: CLI Cache
251+
uses: actions/cache@v3
252+
with:
253+
path: |
254+
~/.cache/go-build
255+
~/go/pkg/mod
256+
dist/botkube-cli_linux_amd64_v1/botkube
257+
key: ${{ runner.os }}-botkube-cli
258+
244259
- name: Build CLI
245260
run: make release-snapshot-cli
261+
246262
- name: Add Botkube CLI to env
247263
run: |
248264
echo CONFIG_PROVIDER_BOTKUBE_CLI_BINARY_PATH="$PWD/dist/botkube-cli_linux_amd64_v1/botkube" >> $GITHUB_ENV

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,4 @@ plugins-dev-index.yaml
4949
plugins-index.yaml
5050
CHANGELOG.md
5151
botkube-agent
52+
.goreleaser_temp.yaml

.goreleaser.yml

+6
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ dockers:
9797
build_flag_templates:
9898
- "--platform=linux/amd64"
9999
- "--build-arg=botkube_version={{ .Env.IMAGE_TAG }}"
100+
id: botkube-agent-amd64
100101
- image_templates:
101102
- "{{.Env.IMAGE_REGISTRY}}/{{.Env.IMAGE_REPOSITORY}}:{{ .Env.IMAGE_TAG }}-arm64"
102103
use: buildx
@@ -105,6 +106,7 @@ dockers:
105106
build_flag_templates:
106107
- "--platform=linux/arm64"
107108
- "--build-arg=botkube_version={{ .Env.IMAGE_TAG }}"
109+
id: botkube-agent-arm64
108110
- image_templates:
109111
- "{{.Env.IMAGE_REGISTRY}}/{{.Env.IMAGE_REPOSITORY}}:{{ .Env.IMAGE_TAG }}-armv7"
110112
use: buildx
@@ -114,6 +116,7 @@ dockers:
114116
build_flag_templates:
115117
- "--platform=linux/arm"
116118
- "--build-arg=botkube_version={{ .Env.IMAGE_TAG }}"
119+
id: botkube-agent-armv7
117120
# Config Exporter
118121
- image_templates:
119122
- "{{.Env.IMAGE_REGISTRY}}/{{.Env.CFG_EXPORTER_IMAGE_REPOSITORY}}:{{ .Env.IMAGE_TAG }}-amd64"
@@ -122,6 +125,7 @@ dockers:
122125
build_flag_templates:
123126
- "--platform=linux/amd64"
124127
- "--build-arg=botkube_config_exporter_version={{ .Env.IMAGE_TAG }}"
128+
id: botkube-config-exporter-amd64
125129
- image_templates:
126130
- "{{.Env.IMAGE_REGISTRY}}/{{.Env.CFG_EXPORTER_IMAGE_REPOSITORY}}:{{ .Env.IMAGE_TAG }}-arm64"
127131
use: buildx
@@ -130,6 +134,7 @@ dockers:
130134
build_flag_templates:
131135
- "--platform=linux/arm64"
132136
- "--build-arg=botkube_config_exporter_version={{ .Env.IMAGE_TAG }}"
137+
id: botkube-config-exporter-arm64
133138
- image_templates:
134139
- "{{.Env.IMAGE_REGISTRY}}/{{.Env.CFG_EXPORTER_IMAGE_REPOSITORY}}:{{ .Env.IMAGE_TAG }}-armv7"
135140
use: buildx
@@ -139,6 +144,7 @@ dockers:
139144
build_flag_templates:
140145
- "--platform=linux/arm"
141146
- "--build-arg=botkube_config_exporter_version={{ .Env.IMAGE_TAG }}"
147+
id: botkube-config-exporter-armv7
142148
docker_manifests:
143149
- name_template: "{{.Env.IMAGE_REGISTRY}}/{{.Env.IMAGE_REPOSITORY}}:{{ .Env.IMAGE_TAG }}"
144150
image_templates:

hack/goreleaser.sh

+112-34
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,27 @@ save_images() {
5858
fi
5959

6060
export GORELEASER_CURRENT_TAG=${IMAGE_TAG}
61-
goreleaser release --clean --snapshot --skip-publish
61+
62+
GORELEASER_FILE="$(prepare_goreleaser)"
63+
goreleaser release --clean --snapshot --skip-publish --config="${GORELEASER_FILE}"
6264

6365
mkdir -p "${IMAGE_SAVE_LOAD_DIR}"
6466

6567
# Save images
66-
IMAGE_FILE_NAME_PREFIX=$(echo "${IMAGE_REPOSITORY}" | tr "/" "-")
67-
docker save ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-amd64 >${IMAGE_SAVE_LOAD_DIR}/${IMAGE_FILE_NAME_PREFIX}-amd64.tar
68-
docker save ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-arm64 >${IMAGE_SAVE_LOAD_DIR}/${IMAGE_FILE_NAME_PREFIX}-arm64.tar
69-
docker save ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-armv7 >${IMAGE_SAVE_LOAD_DIR}/${IMAGE_FILE_NAME_PREFIX}-armv7.tar
70-
71-
CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX=$(echo "${CFG_EXPORTER_IMAGE_REPOSITORY}" | tr "/" "-")
72-
docker save ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-amd64 >${IMAGE_SAVE_LOAD_DIR}/${CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX}-amd64.tar
73-
docker save ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-arm64 >${IMAGE_SAVE_LOAD_DIR}/${CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX}-arm64.tar
74-
docker save ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-armv7 >${IMAGE_SAVE_LOAD_DIR}/${CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX}-armv7.tar
68+
if [[ -z "$BUILD_TARGETS" || ",$BUILD_TARGETS," == *",botkube-agent,"* ]]; then
69+
IMAGE_FILE_NAME_PREFIX=$(echo "${IMAGE_REPOSITORY}" | tr "/" "-")
70+
docker save ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-amd64 >${IMAGE_SAVE_LOAD_DIR}/${IMAGE_FILE_NAME_PREFIX}-amd64.tar
71+
docker save ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-arm64 >${IMAGE_SAVE_LOAD_DIR}/${IMAGE_FILE_NAME_PREFIX}-arm64.tar
72+
docker save ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-armv7 >${IMAGE_SAVE_LOAD_DIR}/${IMAGE_FILE_NAME_PREFIX}-armv7.tar
73+
fi
74+
75+
if [[ -z "$BUILD_TARGETS" || ",$BUILD_TARGETS," == *",botkube-config-exporter,"* ]]; then
76+
CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX=$(echo "${CFG_EXPORTER_IMAGE_REPOSITORY}" | tr "/" "-")
77+
docker save ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-amd64 >${IMAGE_SAVE_LOAD_DIR}/${CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX}-amd64.tar
78+
docker save ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-arm64 >${IMAGE_SAVE_LOAD_DIR}/${CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX}-arm64.tar
79+
docker save ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-armv7 >${IMAGE_SAVE_LOAD_DIR}/${CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX}-armv7.tar
80+
fi
81+
7582
}
7683

7784
load_and_push_images() {
@@ -84,37 +91,49 @@ load_and_push_images() {
8491
export GORELEASER_CURRENT_TAG=${IMAGE_TAG}
8592

8693
# Load images
87-
IMAGE_FILE_NAME_PREFIX=$(echo "${IMAGE_REPOSITORY}" | tr "/" "-")
88-
docker load --input ${IMAGE_SAVE_LOAD_DIR}/${IMAGE_FILE_NAME_PREFIX}-amd64.tar
89-
docker load --input ${IMAGE_SAVE_LOAD_DIR}/${IMAGE_FILE_NAME_PREFIX}-arm64.tar
90-
docker load --input ${IMAGE_SAVE_LOAD_DIR}/${IMAGE_FILE_NAME_PREFIX}-armv7.tar
94+
if [[ -z "$BUILD_TARGETS" || ",$BUILD_TARGETS," == *",botkube-agent,"* ]]; then
95+
IMAGE_FILE_NAME_PREFIX=$(echo "${IMAGE_REPOSITORY}" | tr "/" "-")
96+
docker load --input ${IMAGE_SAVE_LOAD_DIR}/${IMAGE_FILE_NAME_PREFIX}-amd64.tar
97+
docker load --input ${IMAGE_SAVE_LOAD_DIR}/${IMAGE_FILE_NAME_PREFIX}-arm64.tar
98+
docker load --input ${IMAGE_SAVE_LOAD_DIR}/${IMAGE_FILE_NAME_PREFIX}-armv7.tar
99+
fi
91100

92-
CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX=$(echo "${CFG_EXPORTER_IMAGE_REPOSITORY}" | tr "/" "-")
93-
docker load --input ${IMAGE_SAVE_LOAD_DIR}/${CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX}-amd64.tar
94-
docker load --input ${IMAGE_SAVE_LOAD_DIR}/${CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX}-arm64.tar
95-
docker load --input ${IMAGE_SAVE_LOAD_DIR}/${CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX}-armv7.tar
101+
if [[ -z "$BUILD_TARGETS" || ",$BUILD_TARGETS," == *",botkube-config-exporter,"* ]]; then
102+
CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX=$(echo "${CFG_EXPORTER_IMAGE_REPOSITORY}" | tr "/" "-")
103+
docker load --input ${IMAGE_SAVE_LOAD_DIR}/${CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX}-amd64.tar
104+
docker load --input ${IMAGE_SAVE_LOAD_DIR}/${CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX}-arm64.tar
105+
docker load --input ${IMAGE_SAVE_LOAD_DIR}/${CFG_EXPORTER_IMAGE_FILE_NAME_PREFIX}-armv7.tar
106+
fi
96107

97108
# Push images
98-
docker push ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-amd64
99-
docker push ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-arm64
100-
docker push ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-armv7
109+
if [[ -z "$BUILD_TARGETS" || ",$BUILD_TARGETS," == *",botkube-agent,"* ]]; then
110+
docker push ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-amd64
111+
docker push ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-arm64
112+
docker push ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-armv7
113+
fi
101114

102-
docker push ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-amd64
103-
docker push ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-arm64
104-
docker push ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-armv7
115+
if [[ -z "$BUILD_TARGETS" || ",$BUILD_TARGETS," == *",botkube-config-exporter,"* ]]; then
116+
docker push ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-amd64
117+
docker push ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-arm64
118+
docker push ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-armv7
119+
fi
105120

106121
# Create manifest
107-
docker manifest create ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG} \
108-
--amend ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-amd64 \
109-
--amend ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-arm64 \
110-
--amend ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-armv7
111-
docker manifest push ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}
122+
if [[ -z "$BUILD_TARGETS" || ",$BUILD_TARGETS," == *",botkube-agent,"* ]]; then
123+
docker manifest create ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG} \
124+
--amend ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-amd64 \
125+
--amend ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-arm64 \
126+
--amend ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-armv7
127+
docker manifest push ${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}
128+
fi
112129

113-
docker manifest create ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG} \
114-
--amend ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-amd64 \
115-
--amend ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-arm64 \
116-
--amend ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-armv7
117-
docker manifest push ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}
130+
if [[ -z "$BUILD_TARGETS" || ",$BUILD_TARGETS," == *",botkube-config-exporter,"* ]]; then
131+
docker manifest create ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG} \
132+
--amend ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-amd64 \
133+
--amend ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-arm64 \
134+
--amend ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}-armv7
135+
docker manifest push ${IMAGE_REGISTRY}/${CFG_EXPORTER_IMAGE_REPOSITORY}:${GORELEASER_CURRENT_TAG}
136+
fi
118137
}
119138

120139
build() {
@@ -152,6 +171,65 @@ build_plugins_single() {
152171
eval "$command"
153172
}
154173

174+
prepare_goreleaser() {
175+
if [ -z "${BUILD_TARGETS}" ]; then
176+
echo ".goreleaser.yml"
177+
exit 0
178+
fi
179+
180+
cp .goreleaser.yml .goreleaser_temp.yaml
181+
182+
# Filter the builds section
183+
for build_id in $(yq e '.builds[].id' .goreleaser_temp.yaml); do
184+
if [[ ! ",$BUILD_TARGETS," == *",$build_id,"* ]]; then
185+
yq e "del(.builds[] | select(.id == \"$build_id\"))" -i .goreleaser_temp.yaml
186+
fi
187+
done
188+
189+
# Filter the dockers section
190+
for docker_id in $(yq e '.dockers[].id' .goreleaser_temp.yaml); do
191+
build_name=$(echo "$docker_id" | rev | cut -d'-' -f2- | rev)
192+
if [[ ! ",$BUILD_TARGETS," == *",$build_name,"* ]]; then
193+
yq e "del(.dockers[] | select(.id == \"$docker_id\"))" -i .goreleaser_temp.yaml
194+
fi
195+
done
196+
197+
# Filter the archives section
198+
for archive_id in $(yq e '.archives[].id' .goreleaser_temp.yaml); do
199+
if [[ ! ",$BUILD_TARGETS," == *",$archive_id,"* ]]; then
200+
yq e "del(.archives[] | select(.id == \"$archive_id\"))" -i .goreleaser_temp.yaml
201+
fi
202+
done
203+
204+
# Filter the brews section
205+
DEFAULT_BREW_NAME="botkube"
206+
BOTKUBE_CLI_ID="botkube-cli"
207+
if [[ ! ",$BUILD_TARGETS," == *",$BOTKUBE_CLI_ID,"* ]]; then
208+
yq e "del(.brews[] | select(.name == \"$DEFAULT_BREW_NAME\"))" -i .goreleaser_temp.yaml
209+
fi
210+
211+
if [[ "${SINGLE_PLATFORM}" == "true" ]]; then
212+
CURRENT_OS=$(go env GOOS)
213+
CURRENT_ARCH=$(go env GOARCH)
214+
215+
# Remove the goarm from the YAML file if it's not Darwin
216+
if [ "$CURRENT_OS" != "darwin" ]; then
217+
yq eval 'del(.builds[].goos[] | select(. == "darwin"))' .goreleaser_temp.yaml -i
218+
yq eval 'del(.builds[].goarm)' .goreleaser_temp.yaml -i
219+
fi
220+
221+
if [ -n "$CURRENT_OS" ]; then
222+
yq eval "del(.builds[].goos[] | select(. == \"$CURRENT_OS\"))" .goreleaser_temp.yaml -i
223+
fi
224+
225+
if [ -n "$CURRENT_ARCH" ]; then
226+
yq eval "del(.builds[].goarch[] | select(. == \"$CURRENT_ARCH\"))" .goreleaser_temp.yaml -i
227+
fi
228+
fi
229+
230+
echo ".goreleaser_temp.yaml"
231+
}
232+
155233
build_single() {
156234
export IMAGE_TAG=v9.99.9-dev
157235
docker run --rm --privileged \

0 commit comments

Comments
 (0)