mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-08-18 12:08:22 +00:00
7fa6f5f98e
* 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>
257 lines
9.0 KiB
YAML
257 lines
9.0 KiB
YAML
on:
|
|
schedule:
|
|
- cron: "0 15 * * 1-5"
|
|
merge_group:
|
|
pull_request:
|
|
types: [ opened, synchronize, reopened, ready_for_review ]
|
|
paths-ignore:
|
|
- 'docs/**'
|
|
- 'config/**'
|
|
- '**.md'
|
|
- '.dockerignore'
|
|
- 'docker/**'
|
|
- '.gitignore'
|
|
- 'grafana/**'
|
|
- 'Makefile'
|
|
workflow_dispatch:
|
|
|
|
name: Rust CI
|
|
|
|
env:
|
|
CARGO_UDEPS_VERSION: "0.1.61"
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
fmt:
|
|
if: ${{ github.repository == 'GreptimeTeam/greptimedb' }}
|
|
name: Rustfmt
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: arduino/setup-protoc@v3
|
|
with:
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
components: rustfmt
|
|
- name: Check format
|
|
run: make fmt-check
|
|
|
|
clippy:
|
|
if: ${{ github.repository == 'GreptimeTeam/greptimedb' }}
|
|
name: Clippy
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: arduino/setup-protoc@v3
|
|
with:
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
components: clippy
|
|
- name: Rust Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
# Shares across multiple jobs
|
|
# Shares with `Check` job
|
|
shared-key: "check-lint"
|
|
cache-all-crates: "true"
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
- name: Run cargo clippy
|
|
run: make clippy
|
|
|
|
check-udeps:
|
|
if: ${{ github.repository == 'GreptimeTeam/greptimedb' }}
|
|
name: Check Unused Dependencies
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: arduino/setup-protoc@v3
|
|
with:
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
- name: Rust Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
shared-key: "check-udeps"
|
|
cache-all-crates: "true"
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
- name: Install cargo-udeps
|
|
uses: taiki-e/install-action@v2
|
|
with:
|
|
tool: cargo-udeps@${{ env.CARGO_UDEPS_VERSION }}
|
|
fallback: none
|
|
- name: Check unused dependencies
|
|
run: make check-udeps
|
|
|
|
check-riscv64:
|
|
if: ${{ github.repository == 'GreptimeTeam/greptimedb' }}
|
|
name: Check riscv64 build
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 90
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: arduino/setup-protoc@v3
|
|
with:
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Install riscv64 cross toolchain
|
|
run: sudo apt-get update && sudo apt-get install -y gcc-riscv64-linux-gnu g++-riscv64-linux-gnu
|
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
- name: Add riscv64 target
|
|
run: rustup target add riscv64gc-unknown-linux-gnu
|
|
- name: Rust Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
shared-key: "check-riscv64"
|
|
cache-all-crates: "true"
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
- name: Run cargo check for riscv64
|
|
run: cargo check --locked --workspace --all-targets --features servers/dashboard --target riscv64gc-unknown-linux-gnu
|
|
|
|
conflict-check:
|
|
if: ${{ github.repository == 'GreptimeTeam/greptimedb' }}
|
|
name: Check for conflict
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
persist-credentials: false
|
|
- name: Merge Conflict Finder
|
|
uses: olivernybroe/action-conflict-finder@v4.0
|
|
|
|
test:
|
|
if: ${{ github.repository == 'GreptimeTeam/greptimedb' && github.event_name != 'merge_group' }}
|
|
runs-on: ubuntu-22.04-arm
|
|
timeout-minutes: 60
|
|
needs: [conflict-check, clippy, fmt, check-udeps]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: arduino/setup-protoc@v3
|
|
with:
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
- uses: rui314/setup-mold@v1
|
|
- name: Install toolchain
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
cache: false
|
|
- name: Rust Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
# Shares cross multiple jobs
|
|
shared-key: "coverage-test"
|
|
cache-all-crates: "true"
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
- name: Install latest nextest release
|
|
uses: taiki-e/install-action@nextest
|
|
|
|
- name: Setup external services
|
|
working-directory: tests-integration/fixtures
|
|
run: ../../.github/scripts/pull-test-deps-images.sh && docker compose up -d --wait
|
|
|
|
- name: Run nextest cases
|
|
run: cargo nextest run --workspace -F dashboard -F pg_kvbackend -F mysql_kvbackend -F vector_index
|
|
env:
|
|
CARGO_BUILD_RUSTFLAGS: "-C link-arg=-fuse-ld=mold"
|
|
RUST_BACKTRACE: 1
|
|
RUST_MIN_STACK: 8388608 # 8MB
|
|
CARGO_INCREMENTAL: 0
|
|
GT_S3_BUCKET: ${{ vars.AWS_CI_TEST_BUCKET }}
|
|
GT_S3_ACCESS_KEY_ID: ${{ secrets.AWS_CI_TEST_ACCESS_KEY_ID }}
|
|
GT_S3_ACCESS_KEY: ${{ secrets.AWS_CI_TEST_SECRET_ACCESS_KEY }}
|
|
GT_S3_REGION: ${{ vars.AWS_CI_TEST_BUCKET_REGION }}
|
|
GT_MINIO_BUCKET: greptime
|
|
GT_MINIO_ACCESS_KEY_ID: superpower_ci_user
|
|
GT_MINIO_ACCESS_KEY: superpower_password
|
|
GT_MINIO_REGION: us-west-2
|
|
GT_MINIO_ENDPOINT_URL: http://127.0.0.1:9000
|
|
GT_ETCD_TLS_ENDPOINTS: https://127.0.0.1:2378
|
|
GT_ETCD_ENDPOINTS: http://127.0.0.1:2379
|
|
GT_POSTGRES_ENDPOINTS: postgres://greptimedb:admin@127.0.0.1:5432/postgres
|
|
GT_POSTGRES15_ENDPOINTS: postgres://test_user:test_password@127.0.0.1:5433/postgres
|
|
GT_POSTGRES15_SCHEMA: test_schema
|
|
GT_MYSQL_ENDPOINTS: mysql://greptimedb:admin@127.0.0.1:3306/mysql
|
|
GT_KAFKA_ENDPOINTS: 127.0.0.1:9092
|
|
GT_KAFKA_SASL_ENDPOINTS: 127.0.0.1:9093
|
|
UNITTEST_LOG_DIR: "__unittest_logs"
|
|
|
|
coverage:
|
|
if: ${{ github.repository == 'GreptimeTeam/greptimedb' && github.event_name == 'merge_group' }}
|
|
runs-on: ubuntu-22.04-8-cores
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: arduino/setup-protoc@v3
|
|
with:
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
- uses: rui314/setup-mold@v1
|
|
- name: Install toolchain
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
components: llvm-tools
|
|
cache: false
|
|
- name: Rust Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
# Shares cross multiple jobs
|
|
shared-key: "coverage-test"
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
- name: Install latest nextest release
|
|
uses: taiki-e/install-action@nextest
|
|
- name: Install cargo-llvm-cov
|
|
uses: taiki-e/install-action@cargo-llvm-cov
|
|
|
|
- name: Setup external services
|
|
working-directory: tests-integration/fixtures
|
|
run: ../../.github/scripts/pull-test-deps-images.sh && docker compose up -d --wait
|
|
|
|
- name: Run nextest cases
|
|
run: cargo llvm-cov nextest --workspace --lcov --output-path lcov.info -F dashboard -F pg_kvbackend -F mysql_kvbackend -F vector_index
|
|
env:
|
|
CARGO_BUILD_RUSTFLAGS: "-C link-arg=-fuse-ld=mold"
|
|
RUST_BACKTRACE: 1
|
|
CARGO_INCREMENTAL: 0
|
|
GT_S3_BUCKET: ${{ vars.AWS_CI_TEST_BUCKET }}
|
|
GT_S3_ACCESS_KEY_ID: ${{ secrets.AWS_CI_TEST_ACCESS_KEY_ID }}
|
|
GT_S3_ACCESS_KEY: ${{ secrets.AWS_CI_TEST_SECRET_ACCESS_KEY }}
|
|
GT_S3_REGION: ${{ vars.AWS_CI_TEST_BUCKET_REGION }}
|
|
GT_MINIO_BUCKET: greptime
|
|
GT_MINIO_ACCESS_KEY_ID: superpower_ci_user
|
|
GT_MINIO_ACCESS_KEY: superpower_password
|
|
GT_MINIO_REGION: us-west-2
|
|
GT_MINIO_ENDPOINT_URL: http://127.0.0.1:9000
|
|
GT_ETCD_TLS_ENDPOINTS: https://127.0.0.1:2378
|
|
GT_ETCD_ENDPOINTS: http://127.0.0.1:2379
|
|
GT_POSTGRES_ENDPOINTS: postgres://greptimedb:admin@127.0.0.1:5432/postgres
|
|
GT_POSTGRES15_ENDPOINTS: postgres://test_user:test_password@127.0.0.1:5433/postgres
|
|
GT_POSTGRES15_SCHEMA: test_schema
|
|
GT_MYSQL_ENDPOINTS: mysql://greptimedb:admin@127.0.0.1:3306/mysql
|
|
GT_KAFKA_ENDPOINTS: 127.0.0.1:9092
|
|
GT_KAFKA_SASL_ENDPOINTS: 127.0.0.1:9093
|
|
UNITTEST_LOG_DIR: "__unittest_logs"
|
|
- name: Codecov upload
|
|
uses: codecov/codecov-action@v4
|
|
with:
|
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
files: ./lcov.info
|
|
flags: rust
|
|
fail_ci_if_error: false
|
|
verbose: true
|