mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-09-12 16:32:16 +00:00
* feat: add riscv64 cross-build support Add the missing build infrastructure for riscv64gc-unknown-linux-gnu. The codebase itself already compiles cleanly for riscv64 (verified with `cargo check --workspace --target riscv64gc-unknown-linux-gnu`): all architecture-sensitive dependencies support it (tikv-jemalloc-sys, aws-lc-sys, ring, pprof, simd-json). - .cargo/config.toml: set riscv64-linux-gnu-gcc as the linker for the riscv64gc-unknown-linux-gnu target - rust.yml: add a check-riscv64 CI job that cross-checks the whole workspace to prevent regressions from future dependency changes - docker/dev-builder/riscv64/Dockerfile: new cross dev-builder image with gcc/g++-riscv64-linux-gnu and the riscv64 rust target - Makefile: add dev-builder-riscv64 and build-riscv64-bin targets Verified end-to-end: the produced riscv64 binary starts in standalone mode under qemu and serves SQL (create/insert/select) over HTTP. Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * ci: build riscv64 artifacts in the release workflow - release.yml: add build-linux-riscv64-artifacts job that cross-compiles greptime for riscv64gc-unknown-linux-gnu on the amd64 runner with the dev-builder-riscv64 image, and uploads greptime-linux-riscv64-* artifacts. The job is wired into the needs of publish-github-release, release-cn-artifacts and stop-linux-amd64-runner. Integration tests are skipped since the cross-compiled binary cannot run on the host. - release-dev-builder-images.yaml + build-dev-builder-images action: build and push the dev-builder-riscv64 image to DockerHub, and sync it to ECR and ACR via skopeo like the other dev-builder images. - Makefile: DEV_BUILDER_RISCV64_IMAGE_TAG now defaults to DEV_BUILDER_IMAGE_TAG so the existing tag-bump automation keeps the riscv64 image tag in sync. Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * fix: forward cargo extension in riscv64 build Pass CARGO_EXTENSION through build-riscv64-bin just like the existing build-by-dev-builder target, so wrappers such as sccache are preserved inside the cross-build container. Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * ci: check riscv64 release feature graph Check all workspace targets with the servers/dashboard feature enabled so the riscv64 CI job covers the same optional dependency graph used by the release artifact build. Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * fix: gate riscv64 latest tags to main pushes Manual dev-builder workflow dispatches now publish only their immutable version tag. Update DockerHub and ECR latest tags only for the workflow's main-branch push event, preventing feature-branch builds from replacing the shared latest image. Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * docs: include riscv64 in release input description Update the build_linux_artifacts workflow input description to reflect that it now triggers amd64, arm64, and riscv64 artifact builds. Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * fix: fall back when riscv64 builder is unpublished Before building a release artifact, pull the pinned RISC-V dev-builder from ECR. If the image has not been published yet, build the same tag locally from the current Dockerfile so releases remain unblocked during the builder-tag update window. Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> --------- Signed-off-by: Lei, HUANG <mrsatangel@gmail.com>
102 lines
4.2 KiB
YAML
102 lines
4.2 KiB
YAML
name: Build and push dev-builder images
|
|
description: Build and push dev-builder images to DockerHub and ACR
|
|
inputs:
|
|
dockerhub-image-registry:
|
|
description: The dockerhub image registry to store the images
|
|
required: false
|
|
default: docker.io
|
|
dockerhub-image-registry-username:
|
|
description: The dockerhub username to login to the image registry
|
|
required: true
|
|
dockerhub-image-registry-token:
|
|
description: The dockerhub token to login to the image registry
|
|
required: true
|
|
dockerhub-image-namespace:
|
|
description: The dockerhub namespace of the image registry to store the images
|
|
required: false
|
|
default: greptime
|
|
version:
|
|
description: Version of the dev-builder
|
|
required: false
|
|
default: latest
|
|
build-dev-builder-ubuntu:
|
|
description: Build dev-builder-ubuntu image
|
|
required: false
|
|
default: "true"
|
|
build-dev-builder-centos:
|
|
description: Build dev-builder-centos image
|
|
required: false
|
|
default: "true"
|
|
build-dev-builder-android:
|
|
description: Build dev-builder-android image
|
|
required: false
|
|
default: "true"
|
|
build-dev-builder-riscv64:
|
|
description: Build dev-builder-riscv64 image
|
|
required: false
|
|
default: "true"
|
|
runs:
|
|
using: composite
|
|
steps:
|
|
- name: Login to Dockerhub
|
|
uses: docker/login-action@v2
|
|
with:
|
|
registry: ${{ inputs.dockerhub-image-registry }}
|
|
username: ${{ inputs.dockerhub-image-registry-username }}
|
|
password: ${{ inputs.dockerhub-image-registry-token }}
|
|
|
|
- name: Set up qemu for multi-platform builds
|
|
uses: docker/setup-qemu-action@v3
|
|
with:
|
|
platforms: linux/amd64,linux/arm64
|
|
# The latest version will lead to segmentation fault.
|
|
image: tonistiigi/binfmt:qemu-v7.0.0-28
|
|
|
|
- name: Build and push dev-builder-ubuntu image # Build image for amd64 and arm64 platform.
|
|
shell: bash
|
|
if: ${{ inputs.build-dev-builder-ubuntu == 'true' }}
|
|
run: |
|
|
make dev-builder \
|
|
BASE_IMAGE=ubuntu \
|
|
BUILDX_MULTI_PLATFORM_BUILD=all \
|
|
IMAGE_REGISTRY=${{ inputs.dockerhub-image-registry }} \
|
|
IMAGE_NAMESPACE=${{ inputs.dockerhub-image-namespace }} \
|
|
DEV_BUILDER_IMAGE_TAG=${{ inputs.version }}
|
|
|
|
- name: Build and push dev-builder-centos image # Only build image for amd64 platform.
|
|
shell: bash
|
|
if: ${{ inputs.build-dev-builder-centos == 'true' }}
|
|
run: |
|
|
make dev-builder \
|
|
BASE_IMAGE=centos \
|
|
BUILDX_MULTI_PLATFORM_BUILD=amd64 \
|
|
IMAGE_REGISTRY=${{ inputs.dockerhub-image-registry }} \
|
|
IMAGE_NAMESPACE=${{ inputs.dockerhub-image-namespace }} \
|
|
DEV_BUILDER_IMAGE_TAG=${{ inputs.version }}
|
|
|
|
- name: Build and push dev-builder-riscv64 image # Only build image for amd64 platform (it cross-compiles riscv64 binaries).
|
|
shell: bash
|
|
if: ${{ inputs.build-dev-builder-riscv64 == 'true' }}
|
|
run: |
|
|
make dev-builder-riscv64 \
|
|
IMAGE_REGISTRY=${{ inputs.dockerhub-image-registry }} \
|
|
IMAGE_NAMESPACE=${{ inputs.dockerhub-image-namespace }} \
|
|
DEV_BUILDER_RISCV64_IMAGE_TAG=${{ inputs.version }}
|
|
docker push ${{ inputs.dockerhub-image-registry }}/${{ inputs.dockerhub-image-namespace }}/dev-builder-riscv64:${{ inputs.version }}
|
|
if [[ "${{ github.event_name }}" == "push" ]]; then
|
|
docker tag ${{ inputs.dockerhub-image-registry }}/${{ inputs.dockerhub-image-namespace }}/dev-builder-riscv64:${{ inputs.version }} \
|
|
${{ inputs.dockerhub-image-registry }}/${{ inputs.dockerhub-image-namespace }}/dev-builder-riscv64:latest
|
|
docker push ${{ inputs.dockerhub-image-registry }}/${{ inputs.dockerhub-image-namespace }}/dev-builder-riscv64:latest
|
|
fi
|
|
|
|
- name: Build and push dev-builder-android image # Only build image for amd64 platform.
|
|
shell: bash
|
|
if: ${{ inputs.build-dev-builder-android == 'true' }}
|
|
run: |
|
|
make dev-builder \
|
|
BASE_IMAGE=android \
|
|
BUILDX_MULTI_PLATFORM_BUILD=amd64 \
|
|
IMAGE_REGISTRY=${{ inputs.dockerhub-image-registry }} \
|
|
IMAGE_NAMESPACE=${{ inputs.dockerhub-image-namespace }} \
|
|
DEV_BUILDER_IMAGE_TAG=${{ inputs.version }}
|