Skip to content

Commit

Permalink
feat(platforms): Add ARMv6 builds (#19192)
Browse files Browse the repository at this point in the history
* 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]>
  • Loading branch information
wtaylor and jszwedko authored Mar 11, 2024
1 parent b35eaf5 commit e9815e1
Show file tree
Hide file tree
Showing 12 changed files with 195 additions and 3 deletions.
2 changes: 2 additions & 0 deletions .github/actions/spelling/allow.txt
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ Moto
Mpman
Multilaser
Mumbai
musleabi
Mytab
NLB
Nabi
Expand Down Expand Up @@ -307,6 +308,7 @@ gcr
gcs
gdpr
github
gnueabi
gnueabihf
gnupg
gnuplot
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/cross.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ jobs:
- aarch64-unknown-linux-musl
- armv7-unknown-linux-gnueabihf
- armv7-unknown-linux-musleabihf
- arm-unknown-linux-gnueabi
- arm-unknown-linux-musleabi
steps:

- name: (PR comment) Get PR branch
Expand Down
104 changes: 103 additions & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,61 @@ jobs:
name: vector-${{ env.VECTOR_VERSION }}-armv7-unknown-linux-musleabihf
path: target/artifacts/vector*

build-arm-unknown-linux-gnueabi-packages:
name: Build Vector for arm-unknown-linux-gnueabi (.tar.gz)
runs-on: [ linux, release-builder ]
timeout-minutes: 60
needs: generate-publish-metadata
env:
VECTOR_VERSION: ${{ needs.generate-publish-metadata.outputs.vector_version }}
VECTOR_BUILD_DESC: ${{ needs.generate-publish-metadata.outputs.vector_build_desc }}
CHANNEL: ${{ needs.generate-publish-metadata.outputs.vector_release_channel }}
steps:
- name: Checkout Vector
uses: actions/checkout@v3
with:
ref: ${{ inputs.git_ref }}
- name: Bootstrap runner environment (Ubuntu-specific)
run: sudo -E bash scripts/environment/bootstrap-ubuntu-20.04.sh
- name: Bootstrap runner environment (generic)
run: bash scripts/environment/prepare.sh
- name: Build Vector
env:
DOCKER_PRIVILEGED: "true"
run: make package-arm-unknown-linux-gnueabi-all
- name: Stage package artifacts for publish
uses: actions/upload-artifact@v3
with:
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-gnueabi
path: target/artifacts/vector*

build-arm-unknown-linux-musleabi-packages:
name: Build Vector for arm-unknown-linux-musleabi (.tar.gz)
runs-on: [ linux, release-builder ]
needs: generate-publish-metadata
env:
VECTOR_VERSION: ${{ needs.generate-publish-metadata.outputs.vector_version }}
VECTOR_BUILD_DESC: ${{ needs.generate-publish-metadata.outputs.vector_build_desc }}
CHANNEL: ${{ needs.generate-publish-metadata.outputs.vector_release_channel }}
steps:
- name: Checkout Vector
uses: actions/checkout@v3
with:
ref: ${{ inputs.git_ref }}
- name: Bootstrap runner environment (Ubuntu-specific)
run: sudo -E bash scripts/environment/bootstrap-ubuntu-20.04.sh
- name: Bootstrap runner environment (generic)
run: bash scripts/environment/prepare.sh
- name: Build Vector
env:
DOCKER_PRIVILEGED: "true"
run: make package-arm-unknown-linux-musleabi
- name: Stage package artifacts for publish
uses: actions/upload-artifact@v3
with:
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-musleabi
path: target/artifacts/vector*

build-x86_64-apple-darwin-packages:
name: Build Vector for x86_64-apple-darwin (.tar.gz)
runs-on: macos-latest-xl
Expand Down Expand Up @@ -414,6 +469,8 @@ jobs:
- build-x86_64-unknown-linux-musl-packages
- build-armv7-unknown-linux-musleabihf-packages
- build-armv7-unknown-linux-gnueabihf-packages
- build-arm-unknown-linux-gnueabi-packages
- build-arm-unknown-linux-musleabi-packages
- deb-verify
env:
VECTOR_VERSION: ${{ needs.generate-publish-metadata.outputs.vector_version }}
Expand Down Expand Up @@ -469,9 +526,19 @@ jobs:
with:
name: vector-${{ env.VECTOR_VERSION }}-armv7-unknown-linux-musleabihf
path: target/artifacts
- name: Download staged package artifacts (arm-unknown-linux-gnueabi)
uses: actions/download-artifact@v3
with:
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-gnueabi
path: target/artifacts
- name: Download staged package artifacts (arm-unknown-linux-musleabi)
uses: actions/download-artifact@v3
with:
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-musleabi
path: target/artifacts
- name: Build and publish Docker images
env:
PLATFORM: "linux/amd64,linux/arm64,linux/arm/v7"
PLATFORM: "linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6"
run: |
make release-docker
Expand All @@ -489,6 +556,8 @@ jobs:
- build-x86_64-pc-windows-msvc-packages
- build-armv7-unknown-linux-musleabihf-packages
- build-armv7-unknown-linux-gnueabihf-packages
- build-arm-unknown-linux-gnueabi-packages
- build-arm-unknown-linux-musleabi-packages
- deb-verify
- rpm-verify
- macos-verify
Expand Down Expand Up @@ -540,6 +609,16 @@ jobs:
with:
name: vector-${{ env.VECTOR_VERSION }}-armv7-unknown-linux-musleabihf
path: target/artifacts
- name: Download staged package artifacts (arm-unknown-linux-gnueabi)
uses: actions/download-artifact@v3
with:
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-gnueabi
path: target/artifacts
- name: Download staged package artifacts (arm-unknown-linux-musleabi)
uses: actions/download-artifact@v3
with:
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-musleabi
path: target/artifacts
- name: Publish artifacts to S3
env:
AWS_ACCESS_KEY_ID: ${{ secrets.CI_AWS_ACCESS_KEY_ID }}
Expand All @@ -562,6 +641,8 @@ jobs:
- build-x86_64-pc-windows-msvc-packages
- build-armv7-unknown-linux-gnueabihf-packages
- build-armv7-unknown-linux-musleabihf-packages
- build-arm-unknown-linux-gnueabi-packages
- build-arm-unknown-linux-musleabi-packages
- deb-verify
- rpm-verify
- macos-verify
Expand Down Expand Up @@ -617,6 +698,15 @@ jobs:
uses: actions/download-artifact@v3
with:
name: vector-${{ env.VECTOR_VERSION }}-SHA256SUMS
- name: Download staged package artifacts (arm-unknown-linux-gnueabi)
uses: actions/download-artifact@v3
with:
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-gnueabi
path: target/artifacts
- name: Download staged package artifacts (arm-unknown-linux-musleabi)
uses: actions/download-artifact@v3
with:
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-musleabi
path: target/artifacts
- name: Publish release to GitHub
env:
Expand Down Expand Up @@ -658,6 +748,8 @@ jobs:
- build-x86_64-pc-windows-msvc-packages
- build-armv7-unknown-linux-gnueabihf-packages
- build-armv7-unknown-linux-musleabihf-packages
- build-arm-unknown-linux-gnueabi-packages
- build-arm-unknown-linux-musleabi-packages
env:
VECTOR_VERSION: ${{ needs.generate-publish-metadata.outputs.vector_version }}
steps:
Expand Down Expand Up @@ -705,6 +797,16 @@ jobs:
with:
name: vector-${{ env.VECTOR_VERSION }}-armv7-unknown-linux-musleabihf
path: target/artifacts
- name: Download staged package artifacts (arm-unknown-linux-gnueabi)
uses: actions/download-artifact@v3
with:
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-gnueabi
path: target/artifacts
- name: Download staged package artifacts (arm-unknown-linux-musleabi)
uses: actions/download-artifact@v3
with:
name: vector-${{ env.VECTOR_VERSION }}-arm-unknown-linux-musleabi
path: target/artifacts
- name: Generate SHA256 checksums for artifacts
run: make sha256sum
- name: Stage checksum for publish
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,6 @@ massif.*

# tilt
tilt_modules/

# Jetbrains
.idea/
5 changes: 5 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ start = false
# libc requirements are defined by `cross`
# https://github.com/rust-embedded/cross#supported-targets
# Though, it seems like aarch64 libc is actually 2.18 and not 2.19
[package.metadata.deb.variants.arm-unknown-linux-gnueabi]
depends = "libc6 (>= 2.15)"

[package.metadata.deb.variants.armv7-unknown-linux-gnueabihf]
depends = "libc6 (>= 2.15)"

Expand Down Expand Up @@ -424,6 +427,8 @@ target-aarch64-unknown-linux-gnu = ["api", "api-client", "enrichment-tables", "r
target-aarch64-unknown-linux-musl = ["api", "api-client", "enrichment-tables", "rdkafka?/cmake_build", "sinks", "sources", "sources-dnstap", "transforms", "unix", "enterprise"]
target-armv7-unknown-linux-gnueabihf = ["api", "api-client", "enrichment-tables", "rdkafka?/cmake_build", "sinks", "sources", "sources-dnstap", "transforms", "unix", "enterprise"]
target-armv7-unknown-linux-musleabihf = ["api", "api-client", "rdkafka?/cmake_build", "enrichment-tables", "sinks", "sources", "sources-dnstap", "transforms", "enterprise"]
target-arm-unknown-linux-gnueabi = ["api", "api-client", "enrichment-tables", "rdkafka?/cmake_build", "sinks", "sources", "sources-dnstap", "transforms", "unix", "enterprise"]
target-arm-unknown-linux-musleabi = ["api", "api-client", "rdkafka?/cmake_build", "enrichment-tables", "sinks", "sources", "sources-dnstap", "transforms", "enterprise"]
target-x86_64-unknown-linux-gnu = ["api", "api-client", "rdkafka?/cmake_build", "enrichment-tables", "sinks", "sources", "sources-dnstap", "transforms", "unix", "rdkafka?/gssapi-vendored", "enterprise"]
target-x86_64-unknown-linux-musl = ["api", "api-client", "rdkafka?/cmake_build", "enrichment-tables", "sinks", "sources", "sources-dnstap", "transforms", "unix", "enterprise"]
# Does not currently build
Expand Down
6 changes: 6 additions & 0 deletions Cross.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,9 @@ image = "vector-cross-env:armv7-unknown-linux-gnueabihf"

[target.armv7-unknown-linux-musleabihf]
image = "vector-cross-env:armv7-unknown-linux-musleabihf"

[target.arm-unknown-linux-gnueabi]
image = "vector-cross-env:arm-unknown-linux-gnueabi"

[target.arm-unknown-linux-musleabi]
image = "vector-cross-env:arm-unknown-linux-musleabi"
23 changes: 23 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,14 @@ build-armv7-unknown-linux-gnueabihf: target/armv7-unknown-linux-gnueabihf/releas
build-armv7-unknown-linux-musleabihf: target/armv7-unknown-linux-musleabihf/release/vector ## Build a release binary for the armv7-unknown-linux-musleabihf triple.
@echo "Output to ${<}"

.PHONY: build-arm-unknown-linux-gnueabi
build-arm-unknown-linux-gnueabi: target/arm-unknown-linux-gnueabi/release/vector ## Build a release binary for the arm-unknown-linux-gnueabi triple.
@echo "Output to ${<}"

.PHONY: build-arm-unknown-linux-musleabi
build-arm-unknown-linux-musleabi: target/arm-unknown-linux-musleabi/release/vector ## Build a release binary for the arm-unknown-linux-musleabi triple.
@echo "Output to ${<}"

.PHONY: build-graphql-schema
build-graphql-schema: ## Generate the `schema.json` for Vector's GraphQL API
${MAYBE_ENVIRONMENT_EXEC} cargo run --bin graphql-schema --no-default-features --features=default-no-api-client
Expand Down Expand Up @@ -529,6 +537,9 @@ package-aarch64-unknown-linux-gnu-all: package-aarch64-unknown-linux-gnu package
.PHONY: package-armv7-unknown-linux-gnueabihf-all
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

.PHONY: package-arm-unknown-linux-gnueabi-all
package-arm-unknown-linux-gnueabi-all: package-arm-unknown-linux-gnueabi package-deb-arm-gnu # Build all arm-unknown-linux-gnueabihf GNU packages

.PHONY: package-x86_64-unknown-linux-gnu
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.
@echo "Output to ${<}."
Expand All @@ -553,6 +564,14 @@ package-armv7-unknown-linux-gnueabihf: target/artifacts/vector-${VERSION}-armv7-
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.
@echo "Output to ${<}."

.PHONY: package-arm-unknown-linux-gnueabi
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.
@echo "Output to ${<}."

.PHONY: package-arm-unknown-linux-musleabi
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.
@echo "Output to ${<}."

# debs

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

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

# rpms

.PHONY: package-rpm-x86_64-unknown-linux-gnu
Expand Down
3 changes: 3 additions & 0 deletions changelog.d/18445_armv6_binaries.enhancement.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ARMv6 builds are now provided as binaries, `.deb` archives and container images (alpine and debian).

authors: wtaylor
7 changes: 6 additions & 1 deletion distribution/docker/alpine/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,13 @@ FROM docker.io/alpine:3.19 AS builder

WORKDIR /vector

ARG TARGETPLATFORM

COPY vector-*-unknown-linux-musl*.tar.gz ./
RUN tar -xvf vector-0*-"$(cat /etc/apk/arch)"-unknown-linux-musl*.tar.gz --strip-components=2

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

RUN mkdir -p /var/lib/vector

Expand Down
31 changes: 30 additions & 1 deletion scripts/build-docker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,36 @@ PLATFORM="${PLATFORM:-}"
PUSH="${PUSH:-"true"}"
REPO="${REPO:-"timberio/vector"}"

IFS=, read -ra REQUESTED_PLATFORMS <<< "$PLATFORM"
declare -A SUPPORTED_PLATFORMS=(
[debian]="linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8"
[alpine]="linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8"
[distroless-static]="linux/amd64,linux/arm/v7,linux/arm64/v8"
[distroless-libc]="linux/amd64,linux/arm/v7,linux/arm64/v8"
)

#
# Functions
#

evaluate_supported_platforms_for_base() {
local BASE="$1"
IFS=, read -ra SUPPORTED_PLATFORMS_FOR_BASE <<< "${SUPPORTED_PLATFORMS["$BASE"]}"

local BUILDABLE_PLATFORMS=""
for platform in "${REQUESTED_PLATFORMS[@]}"
do
if [[ ${SUPPORTED_PLATFORMS_FOR_BASE[*]} =~ $platform ]]
then
BUILDABLE_PLATFORMS+="$platform,"
else
>&2 echo "WARN: skipping $platform for $BASE, no base image for platform"
fi
done

echo "${BUILDABLE_PLATFORMS%?}"
}

build() {
local BASE="$1"
local VERSION="$2"
Expand All @@ -34,8 +60,11 @@ build() {
ARGS+=(--push)
fi

local BUILDABLE_PLATFORMS
BUILDABLE_PLATFORMS=$(evaluate_supported_platforms_for_base "$BASE")

docker buildx build \
--platform="$PLATFORM" \
--platform="$BUILDABLE_PLATFORMS" \
--tag "$TAG" \
target/artifacts \
-f "$DOCKERFILE" \
Expand Down
4 changes: 4 additions & 0 deletions scripts/cross/arm-unknown-linux-gnueabi.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
FROM ghcr.io/cross-rs/arm-unknown-linux-gnueabi:0.2.5

COPY scripts/cross/bootstrap-ubuntu.sh scripts/environment/install-protoc.sh /
RUN /bootstrap-ubuntu.sh && bash /install-protoc.sh
8 changes: 8 additions & 0 deletions scripts/cross/arm-unknown-linux-musleabi.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
FROM ghcr.io/cross-rs/arm-unknown-linux-musleabi:0.2.5

COPY scripts/cross/bootstrap-ubuntu.sh scripts/environment/install-protoc.sh /
RUN /bootstrap-ubuntu.sh && bash /install-protoc.sh

# Stick `libstdc++` somewhere it can be found other than it's normal location, otherwise we end up using the wrong version
# of _other_ libraries, which ultimately just breaks linking. We'll set `/lib/native-libs` as a search path in `.cargo/config.toml`.
RUN mkdir -p /lib/native-libs && cp /usr/local/arm-linux-musleabi/lib/libstdc++.a /lib/native-libs/

0 comments on commit e9815e1

Please sign in to comment.