Skip to content

Commit e9815e1

Browse files
wtaylorjszwedko
andauthored
feat(platforms): Add ARMv6 builds (vectordotdev#19192)
* feat(platforms): Add ARMv6 builds Just curious to see if this works Signed-off-by: Jesse Szwedko <[email protected]> * add make targets Signed-off-by: Jesse Szwedko <[email protected]> * add image overrides for new arm v6 targets protoc was previously not found due to `cross` falling back to the default build images instead of the image overlayed with protoc Remove references to debs and rpms * Seperate arch var setting in alpine dockerfile due to subshell * use filtered platforms for buildx * fix shellcheck errors --------- Signed-off-by: Jesse Szwedko <[email protected]> Co-authored-by: Jesse Szwedko <[email protected]>
1 parent b35eaf5 commit e9815e1

12 files changed

+195
-3
lines changed

.github/actions/spelling/allow.txt

+2
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ Moto
131131
Mpman
132132
Multilaser
133133
Mumbai
134+
musleabi
134135
Mytab
135136
NLB
136137
Nabi
@@ -307,6 +308,7 @@ gcr
307308
gcs
308309
gdpr
309310
github
311+
gnueabi
310312
gnueabihf
311313
gnupg
312314
gnuplot

.github/workflows/cross.yml

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ jobs:
1919
- aarch64-unknown-linux-musl
2020
- armv7-unknown-linux-gnueabihf
2121
- armv7-unknown-linux-musleabihf
22+
- arm-unknown-linux-gnueabi
23+
- arm-unknown-linux-musleabi
2224
steps:
2325

2426
- name: (PR comment) Get PR branch

.github/workflows/publish.yml

+103-1
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,61 @@ jobs:
207207
name: vector-${{ env.VECTOR_VERSION }}-armv7-unknown-linux-musleabihf
208208
path: target/artifacts/vector*
209209

210+
build-arm-unknown-linux-gnueabi-packages:
211+
name: Build Vector for arm-unknown-linux-gnueabi (.tar.gz)
212+
runs-on: [ linux, release-builder ]
213+
timeout-minutes: 60
214+
needs: generate-publish-metadata
215+
env:
216+
VECTOR_VERSION: ${{ needs.generate-publish-metadata.outputs.vector_version }}
217+
VECTOR_BUILD_DESC: ${{ needs.generate-publish-metadata.outputs.vector_build_desc }}
218+
CHANNEL: ${{ needs.generate-publish-metadata.outputs.vector_release_channel }}
219+
steps:
220+
- name: Checkout Vector
221+
uses: actions/checkout@v3
222+
with:
223+
ref: ${{ inputs.git_ref }}
224+
- name: Bootstrap runner environment (Ubuntu-specific)
225+
run: sudo -E bash scripts/environment/bootstrap-ubuntu-20.04.sh
226+
- name: Bootstrap runner environment (generic)
227+
run: bash scripts/environment/prepare.sh
228+
- name: Build Vector
229+
env:
230+
DOCKER_PRIVILEGED: "true"
231+
run: make package-arm-unknown-linux-gnueabi-all
232+
- name: Stage package artifacts for publish
233+
uses: actions/upload-artifact@v3
234+
with:
235+
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-gnueabi
236+
path: target/artifacts/vector*
237+
238+
build-arm-unknown-linux-musleabi-packages:
239+
name: Build Vector for arm-unknown-linux-musleabi (.tar.gz)
240+
runs-on: [ linux, release-builder ]
241+
needs: generate-publish-metadata
242+
env:
243+
VECTOR_VERSION: ${{ needs.generate-publish-metadata.outputs.vector_version }}
244+
VECTOR_BUILD_DESC: ${{ needs.generate-publish-metadata.outputs.vector_build_desc }}
245+
CHANNEL: ${{ needs.generate-publish-metadata.outputs.vector_release_channel }}
246+
steps:
247+
- name: Checkout Vector
248+
uses: actions/checkout@v3
249+
with:
250+
ref: ${{ inputs.git_ref }}
251+
- name: Bootstrap runner environment (Ubuntu-specific)
252+
run: sudo -E bash scripts/environment/bootstrap-ubuntu-20.04.sh
253+
- name: Bootstrap runner environment (generic)
254+
run: bash scripts/environment/prepare.sh
255+
- name: Build Vector
256+
env:
257+
DOCKER_PRIVILEGED: "true"
258+
run: make package-arm-unknown-linux-musleabi
259+
- name: Stage package artifacts for publish
260+
uses: actions/upload-artifact@v3
261+
with:
262+
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-musleabi
263+
path: target/artifacts/vector*
264+
210265
build-x86_64-apple-darwin-packages:
211266
name: Build Vector for x86_64-apple-darwin (.tar.gz)
212267
runs-on: macos-latest-xl
@@ -414,6 +469,8 @@ jobs:
414469
- build-x86_64-unknown-linux-musl-packages
415470
- build-armv7-unknown-linux-musleabihf-packages
416471
- build-armv7-unknown-linux-gnueabihf-packages
472+
- build-arm-unknown-linux-gnueabi-packages
473+
- build-arm-unknown-linux-musleabi-packages
417474
- deb-verify
418475
env:
419476
VECTOR_VERSION: ${{ needs.generate-publish-metadata.outputs.vector_version }}
@@ -469,9 +526,19 @@ jobs:
469526
with:
470527
name: vector-${{ env.VECTOR_VERSION }}-armv7-unknown-linux-musleabihf
471528
path: target/artifacts
529+
- name: Download staged package artifacts (arm-unknown-linux-gnueabi)
530+
uses: actions/download-artifact@v3
531+
with:
532+
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-gnueabi
533+
path: target/artifacts
534+
- name: Download staged package artifacts (arm-unknown-linux-musleabi)
535+
uses: actions/download-artifact@v3
536+
with:
537+
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-musleabi
538+
path: target/artifacts
472539
- name: Build and publish Docker images
473540
env:
474-
PLATFORM: "linux/amd64,linux/arm64,linux/arm/v7"
541+
PLATFORM: "linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6"
475542
run: |
476543
make release-docker
477544
@@ -489,6 +556,8 @@ jobs:
489556
- build-x86_64-pc-windows-msvc-packages
490557
- build-armv7-unknown-linux-musleabihf-packages
491558
- build-armv7-unknown-linux-gnueabihf-packages
559+
- build-arm-unknown-linux-gnueabi-packages
560+
- build-arm-unknown-linux-musleabi-packages
492561
- deb-verify
493562
- rpm-verify
494563
- macos-verify
@@ -540,6 +609,16 @@ jobs:
540609
with:
541610
name: vector-${{ env.VECTOR_VERSION }}-armv7-unknown-linux-musleabihf
542611
path: target/artifacts
612+
- name: Download staged package artifacts (arm-unknown-linux-gnueabi)
613+
uses: actions/download-artifact@v3
614+
with:
615+
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-gnueabi
616+
path: target/artifacts
617+
- name: Download staged package artifacts (arm-unknown-linux-musleabi)
618+
uses: actions/download-artifact@v3
619+
with:
620+
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-musleabi
621+
path: target/artifacts
543622
- name: Publish artifacts to S3
544623
env:
545624
AWS_ACCESS_KEY_ID: ${{ secrets.CI_AWS_ACCESS_KEY_ID }}
@@ -562,6 +641,8 @@ jobs:
562641
- build-x86_64-pc-windows-msvc-packages
563642
- build-armv7-unknown-linux-gnueabihf-packages
564643
- build-armv7-unknown-linux-musleabihf-packages
644+
- build-arm-unknown-linux-gnueabi-packages
645+
- build-arm-unknown-linux-musleabi-packages
565646
- deb-verify
566647
- rpm-verify
567648
- macos-verify
@@ -617,6 +698,15 @@ jobs:
617698
uses: actions/download-artifact@v3
618699
with:
619700
name: vector-${{ env.VECTOR_VERSION }}-SHA256SUMS
701+
- name: Download staged package artifacts (arm-unknown-linux-gnueabi)
702+
uses: actions/download-artifact@v3
703+
with:
704+
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-gnueabi
705+
path: target/artifacts
706+
- name: Download staged package artifacts (arm-unknown-linux-musleabi)
707+
uses: actions/download-artifact@v3
708+
with:
709+
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-musleabi
620710
path: target/artifacts
621711
- name: Publish release to GitHub
622712
env:
@@ -658,6 +748,8 @@ jobs:
658748
- build-x86_64-pc-windows-msvc-packages
659749
- build-armv7-unknown-linux-gnueabihf-packages
660750
- build-armv7-unknown-linux-musleabihf-packages
751+
- build-arm-unknown-linux-gnueabi-packages
752+
- build-arm-unknown-linux-musleabi-packages
661753
env:
662754
VECTOR_VERSION: ${{ needs.generate-publish-metadata.outputs.vector_version }}
663755
steps:
@@ -705,6 +797,16 @@ jobs:
705797
with:
706798
name: vector-${{ env.VECTOR_VERSION }}-armv7-unknown-linux-musleabihf
707799
path: target/artifacts
800+
- name: Download staged package artifacts (arm-unknown-linux-gnueabi)
801+
uses: actions/download-artifact@v3
802+
with:
803+
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-gnueabi
804+
path: target/artifacts
805+
- name: Download staged package artifacts (arm-unknown-linux-musleabi)
806+
uses: actions/download-artifact@v3
807+
with:
808+
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-musleabi
809+
path: target/artifacts
708810
- name: Generate SHA256 checksums for artifacts
709811
run: make sha256sum
710812
- name: Stage checksum for publish

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,6 @@ massif.*
1919

2020
# tilt
2121
tilt_modules/
22+
23+
# Jetbrains
24+
.idea/

Cargo.toml

+5
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ start = false
7777
# libc requirements are defined by `cross`
7878
# https://github.com/rust-embedded/cross#supported-targets
7979
# Though, it seems like aarch64 libc is actually 2.18 and not 2.19
80+
[package.metadata.deb.variants.arm-unknown-linux-gnueabi]
81+
depends = "libc6 (>= 2.15)"
82+
8083
[package.metadata.deb.variants.armv7-unknown-linux-gnueabihf]
8184
depends = "libc6 (>= 2.15)"
8285

@@ -424,6 +427,8 @@ target-aarch64-unknown-linux-gnu = ["api", "api-client", "enrichment-tables", "r
424427
target-aarch64-unknown-linux-musl = ["api", "api-client", "enrichment-tables", "rdkafka?/cmake_build", "sinks", "sources", "sources-dnstap", "transforms", "unix", "enterprise"]
425428
target-armv7-unknown-linux-gnueabihf = ["api", "api-client", "enrichment-tables", "rdkafka?/cmake_build", "sinks", "sources", "sources-dnstap", "transforms", "unix", "enterprise"]
426429
target-armv7-unknown-linux-musleabihf = ["api", "api-client", "rdkafka?/cmake_build", "enrichment-tables", "sinks", "sources", "sources-dnstap", "transforms", "enterprise"]
430+
target-arm-unknown-linux-gnueabi = ["api", "api-client", "enrichment-tables", "rdkafka?/cmake_build", "sinks", "sources", "sources-dnstap", "transforms", "unix", "enterprise"]
431+
target-arm-unknown-linux-musleabi = ["api", "api-client", "rdkafka?/cmake_build", "enrichment-tables", "sinks", "sources", "sources-dnstap", "transforms", "enterprise"]
427432
target-x86_64-unknown-linux-gnu = ["api", "api-client", "rdkafka?/cmake_build", "enrichment-tables", "sinks", "sources", "sources-dnstap", "transforms", "unix", "rdkafka?/gssapi-vendored", "enterprise"]
428433
target-x86_64-unknown-linux-musl = ["api", "api-client", "rdkafka?/cmake_build", "enrichment-tables", "sinks", "sources", "sources-dnstap", "transforms", "unix", "enterprise"]
429434
# Does not currently build

Cross.toml

+6
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,9 @@ image = "vector-cross-env:armv7-unknown-linux-gnueabihf"
2828

2929
[target.armv7-unknown-linux-musleabihf]
3030
image = "vector-cross-env:armv7-unknown-linux-musleabihf"
31+
32+
[target.arm-unknown-linux-gnueabi]
33+
image = "vector-cross-env:arm-unknown-linux-gnueabi"
34+
35+
[target.arm-unknown-linux-musleabi]
36+
image = "vector-cross-env:arm-unknown-linux-musleabi"

Makefile

+23
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,14 @@ build-armv7-unknown-linux-gnueabihf: target/armv7-unknown-linux-gnueabihf/releas
223223
build-armv7-unknown-linux-musleabihf: target/armv7-unknown-linux-musleabihf/release/vector ## Build a release binary for the armv7-unknown-linux-musleabihf triple.
224224
@echo "Output to ${<}"
225225

226+
.PHONY: build-arm-unknown-linux-gnueabi
227+
build-arm-unknown-linux-gnueabi: target/arm-unknown-linux-gnueabi/release/vector ## Build a release binary for the arm-unknown-linux-gnueabi triple.
228+
@echo "Output to ${<}"
229+
230+
.PHONY: build-arm-unknown-linux-musleabi
231+
build-arm-unknown-linux-musleabi: target/arm-unknown-linux-musleabi/release/vector ## Build a release binary for the arm-unknown-linux-musleabi triple.
232+
@echo "Output to ${<}"
233+
226234
.PHONY: build-graphql-schema
227235
build-graphql-schema: ## Generate the `schema.json` for Vector's GraphQL API
228236
${MAYBE_ENVIRONMENT_EXEC} cargo run --bin graphql-schema --no-default-features --features=default-no-api-client
@@ -529,6 +537,9 @@ package-aarch64-unknown-linux-gnu-all: package-aarch64-unknown-linux-gnu package
529537
.PHONY: package-armv7-unknown-linux-gnueabihf-all
530538
package-armv7-unknown-linux-gnueabihf-all: package-armv7-unknown-linux-gnueabihf package-deb-armv7-gnu package-rpm-armv7hl-gnu # Build all armv7-unknown-linux-gnueabihf MUSL packages
531539

540+
.PHONY: package-arm-unknown-linux-gnueabi-all
541+
package-arm-unknown-linux-gnueabi-all: package-arm-unknown-linux-gnueabi package-deb-arm-gnu # Build all arm-unknown-linux-gnueabihf GNU packages
542+
532543
.PHONY: package-x86_64-unknown-linux-gnu
533544
package-x86_64-unknown-linux-gnu: target/artifacts/vector-${VERSION}-x86_64-unknown-linux-gnu.tar.gz ## Build an archive suitable for the `x86_64-unknown-linux-gnu` triple.
534545
@echo "Output to ${<}."
@@ -553,6 +564,14 @@ package-armv7-unknown-linux-gnueabihf: target/artifacts/vector-${VERSION}-armv7-
553564
package-armv7-unknown-linux-musleabihf: target/artifacts/vector-${VERSION}-armv7-unknown-linux-musleabihf.tar.gz ## Build an archive suitable for the `armv7-unknown-linux-musleabihf triple.
554565
@echo "Output to ${<}."
555566

567+
.PHONY: package-arm-unknown-linux-gnueabi
568+
package-arm-unknown-linux-gnueabi: target/artifacts/vector-${VERSION}-arm-unknown-linux-gnueabi.tar.gz ## Build an archive suitable for the `arm-unknown-linux-gnueabi` triple.
569+
@echo "Output to ${<}."
570+
571+
.PHONY: package-arm-unknown-linux-musleabi
572+
package-arm-unknown-linux-musleabi: target/artifacts/vector-${VERSION}-arm-unknown-linux-musleabi.tar.gz ## Build an archive suitable for the `arm-unknown-linux-musleabi` triple.
573+
@echo "Output to ${<}."
574+
556575
# debs
557576

558577
.PHONY: package-deb-x86_64-unknown-linux-gnu
@@ -571,6 +590,10 @@ package-deb-aarch64: package-aarch64-unknown-linux-gnu ## Build the aarch64 deb
571590
package-deb-armv7-gnu: package-armv7-unknown-linux-gnueabihf ## Build the armv7-unknown-linux-gnueabihf deb package
572591
$(CONTAINER_TOOL) run -v $(PWD):/git/vectordotdev/vector/ -e TARGET=armv7-unknown-linux-gnueabihf -e VECTOR_VERSION $(ENVIRONMENT_UPSTREAM) cargo vdev package deb
573592

593+
.PHONY: package-deb-arm-gnu
594+
package-deb-arm-gnu: package-arm-unknown-linux-gnueabi ## Build the arm-unknown-linux-gnueabi deb package
595+
$(CONTAINER_TOOL) run -v $(PWD):/git/vectordotdev/vector/ -e TARGET=arm-unknown-linux-gnueabi -e VECTOR_VERSION $(ENVIRONMENT_UPSTREAM) cargo vdev package deb
596+
574597
# rpms
575598

576599
.PHONY: package-rpm-x86_64-unknown-linux-gnu
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ARMv6 builds are now provided as binaries, `.deb` archives and container images (alpine and debian).
2+
3+
authors: wtaylor

distribution/docker/alpine/Dockerfile

+6-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@ FROM docker.io/alpine:3.19 AS builder
22

33
WORKDIR /vector
44

5+
ARG TARGETPLATFORM
6+
57
COPY vector-*-unknown-linux-musl*.tar.gz ./
6-
RUN tar -xvf vector-0*-"$(cat /etc/apk/arch)"-unknown-linux-musl*.tar.gz --strip-components=2
8+
9+
# special case for arm v6 builds, /etc/apk/arch reports armhf which conflicts with the armv7 package
10+
RUN ARCH=$(if [ "$TARGETPLATFORM" = "linux/arm/v6" ]; then echo "arm"; else cat /etc/apk/arch; fi) \
11+
&& tar -xvf vector-0*-"$ARCH"-unknown-linux-musl*.tar.gz --strip-components=2
712

813
RUN mkdir -p /var/lib/vector
914

scripts/build-docker.sh

+30-1
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,36 @@ PLATFORM="${PLATFORM:-}"
1717
PUSH="${PUSH:-"true"}"
1818
REPO="${REPO:-"timberio/vector"}"
1919

20+
IFS=, read -ra REQUESTED_PLATFORMS <<< "$PLATFORM"
21+
declare -A SUPPORTED_PLATFORMS=(
22+
[debian]="linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8"
23+
[alpine]="linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8"
24+
[distroless-static]="linux/amd64,linux/arm/v7,linux/arm64/v8"
25+
[distroless-libc]="linux/amd64,linux/arm/v7,linux/arm64/v8"
26+
)
27+
2028
#
2129
# Functions
2230
#
2331

32+
evaluate_supported_platforms_for_base() {
33+
local BASE="$1"
34+
IFS=, read -ra SUPPORTED_PLATFORMS_FOR_BASE <<< "${SUPPORTED_PLATFORMS["$BASE"]}"
35+
36+
local BUILDABLE_PLATFORMS=""
37+
for platform in "${REQUESTED_PLATFORMS[@]}"
38+
do
39+
if [[ ${SUPPORTED_PLATFORMS_FOR_BASE[*]} =~ $platform ]]
40+
then
41+
BUILDABLE_PLATFORMS+="$platform,"
42+
else
43+
>&2 echo "WARN: skipping $platform for $BASE, no base image for platform"
44+
fi
45+
done
46+
47+
echo "${BUILDABLE_PLATFORMS%?}"
48+
}
49+
2450
build() {
2551
local BASE="$1"
2652
local VERSION="$2"
@@ -34,8 +60,11 @@ build() {
3460
ARGS+=(--push)
3561
fi
3662

63+
local BUILDABLE_PLATFORMS
64+
BUILDABLE_PLATFORMS=$(evaluate_supported_platforms_for_base "$BASE")
65+
3766
docker buildx build \
38-
--platform="$PLATFORM" \
67+
--platform="$BUILDABLE_PLATFORMS" \
3968
--tag "$TAG" \
4069
target/artifacts \
4170
-f "$DOCKERFILE" \
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
FROM ghcr.io/cross-rs/arm-unknown-linux-gnueabi:0.2.5
2+
3+
COPY scripts/cross/bootstrap-ubuntu.sh scripts/environment/install-protoc.sh /
4+
RUN /bootstrap-ubuntu.sh && bash /install-protoc.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
FROM ghcr.io/cross-rs/arm-unknown-linux-musleabi:0.2.5
2+
3+
COPY scripts/cross/bootstrap-ubuntu.sh scripts/environment/install-protoc.sh /
4+
RUN /bootstrap-ubuntu.sh && bash /install-protoc.sh
5+
6+
# Stick `libstdc++` somewhere it can be found other than it's normal location, otherwise we end up using the wrong version
7+
# of _other_ libraries, which ultimately just breaks linking. We'll set `/lib/native-libs` as a search path in `.cargo/config.toml`.
8+
RUN mkdir -p /lib/native-libs && cp /usr/local/arm-linux-musleabi/lib/libstdc++.a /lib/native-libs/

0 commit comments

Comments
 (0)