mirror of
https://gitlab.com/famedly/conduit.git
synced 2024-11-17 02:38:18 -07:00
0080932aef
Setting cargo to run incremental builds means partial build results should be cached. This is not enabled by default in release mode. Incremental builds use 256 codegen units by default [1]. We set them to 16 (release default) again for somewhat faster code but slightly slower builds. [1]: https://doc.rust-lang.org/cargo/reference/profiles.html#codegen-units
170 lines
5.8 KiB
YAML
170 lines
5.8 KiB
YAML
stages:
|
|
- test
|
|
- build
|
|
- upload artifacts
|
|
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: recursive
|
|
FF_USE_FASTZIP: 1
|
|
CACHE_COMPRESSION_LEVEL: fastest
|
|
|
|
|
|
|
|
test:cargo:
|
|
stage: "test"
|
|
needs: []
|
|
image: "rust:latest"
|
|
tags: ["docker"]
|
|
variables:
|
|
CARGO_HOME: "cargohome"
|
|
cache:
|
|
paths:
|
|
- target
|
|
- cargohome
|
|
key: test_cache
|
|
interruptible: true
|
|
before_script:
|
|
- mkdir -p $CARGO_HOME && echo "using $CARGO_HOME to cache cargo deps"
|
|
- apt-get update -yqq
|
|
- apt-get install -yqq --no-install-recommends build-essential libssl-dev pkg-config
|
|
- rustup component add clippy rustfmt
|
|
script:
|
|
- rustc --version && cargo --version # Print version info for debugging
|
|
- cargo test --workspace --verbose --locked
|
|
- cargo fmt --all -- --check
|
|
- cargo clippy
|
|
|
|
# --------------------------------------------------------------------- #
|
|
# Cargo: Compiling for different architectures #
|
|
# --------------------------------------------------------------------- #
|
|
|
|
.build-cargo-shared-settings:
|
|
stage: "build"
|
|
needs: []
|
|
rules:
|
|
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
|
interruptible: true
|
|
image: "rust:latest"
|
|
tags: ["docker"]
|
|
cache:
|
|
paths:
|
|
- cargohome
|
|
- target/
|
|
key: "build_cache-$TARGET"
|
|
before_script:
|
|
- 'echo "Building for target $TARGET"'
|
|
- 'mkdir -p cargohome && CARGOHOME="cargohome"'
|
|
- "cat /etc/*-release && rustc --version && cargo --version" # Print version info for debugging
|
|
- 'apt-get update -yqq'
|
|
- 'echo "Installing packages: $NEEDED_PACKAGES"'
|
|
- "apt-get install -yqq --no-install-recommends $NEEDED_PACKAGES"
|
|
- "rustup target add $TARGET"
|
|
script:
|
|
# Set some cargo tuning here, because targets overwrite the 'variables'
|
|
- "export CARGO_INCREMENTAL=true"
|
|
- "export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16"
|
|
- time cargo build --target $TARGET --release
|
|
- 'mv "target/$TARGET/release/conduit" "conduit-$TARGET"'
|
|
artifacts:
|
|
name: "conduit-$TARGET"
|
|
expose_as: "Binary"
|
|
paths:
|
|
- "conduit-$TARGET"
|
|
|
|
build:cargo:x86_64-unknown-linux-gnu:
|
|
extends: .build-cargo-shared-settings
|
|
variables:
|
|
TARGET: "x86_64-unknown-linux-gnu"
|
|
|
|
build:cargo:armv7-unknown-linux-gnueabihf:
|
|
extends: .build-cargo-shared-settings
|
|
variables:
|
|
TARGET: "armv7-unknown-linux-gnueabihf"
|
|
NEEDED_PACKAGES: "build-essential gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc6-dev-armhf-cross"
|
|
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-gcc
|
|
CC_armv7_unknown_linux_gnueabihf: arm-linux-gnueabihf-gcc
|
|
CXX_armv7_unknown_linux_gnueabihf: arm-linux-gnueabihf-g++
|
|
|
|
build:cargo:aarch64-unknown-linux-gnu:
|
|
extends: .build-cargo-shared-settings
|
|
variables:
|
|
TARGET: "aarch64-unknown-linux-gnu"
|
|
NEEDED_PACKAGES: "build-essential gcc-8-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross"
|
|
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
|
|
CC_aarch64_unknown_linux_gnu: aarch64-linux-gnu-gcc
|
|
CXX_aarch64_unknown_linux_gnu: aarch64-linux-gnu-g++
|
|
TARGET_CC: "/usr/bin/aarch64-linux-gnu-gcc-8"
|
|
TARGET_AR: "/usr/bin/aarch64-linux-gnu-gcc-ar-8"
|
|
|
|
|
|
# --------------------------------------------------------------------- #
|
|
# Cargo: Compiling deb packages for different architectures #
|
|
# --------------------------------------------------------------------- #
|
|
|
|
|
|
.build-cargo-deb-shared-settings:
|
|
stage: "build"
|
|
needs: []
|
|
rules:
|
|
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
|
interruptible: true
|
|
image: "rust:latest"
|
|
tags: ["docker"]
|
|
cache:
|
|
paths:
|
|
- cargohome
|
|
- target/
|
|
key: "build_cache-deb-$TARGET"
|
|
before_script:
|
|
- 'echo "Building debian package for target $TARGET"'
|
|
- 'mkdir -p cargohome && CARGOHOME="cargohome"'
|
|
- "cat /etc/*-release && rustc --version && cargo --version" # Print version info for debugging
|
|
- 'apt-get update -yqq'
|
|
- 'echo "Installing packages: $NEEDED_PACKAGES"'
|
|
- "apt-get install -yqq --no-install-recommends $NEEDED_PACKAGES"
|
|
- "rustup target add $TARGET"
|
|
- "cargo install cargo-deb"
|
|
script:
|
|
- time cargo deb --target $TARGET
|
|
- 'mv target/$TARGET/debian/*.deb "conduit-$TARGET.deb"'
|
|
artifacts:
|
|
name: "conduit-$TARGET.deb"
|
|
expose_as: "Debian Package"
|
|
paths:
|
|
- "conduit-$TARGET.deb"
|
|
|
|
build:cargo-deb:x86_64-unknown-linux-gnu:
|
|
extends: .build-cargo-deb-shared-settings
|
|
variables:
|
|
TARGET: "x86_64-unknown-linux-gnu"
|
|
NEEDED_PACKAGES: ""
|
|
|
|
|
|
|
|
|
|
# --------------------------------------------------------------------- #
|
|
# Store binaries as package so they have download urls #
|
|
# --------------------------------------------------------------------- #
|
|
|
|
publish:package:
|
|
stage: "upload artifacts"
|
|
needs:
|
|
- "build:cargo:x86_64-unknown-linux-gnu"
|
|
- "build:cargo:armv7-unknown-linux-gnueabihf"
|
|
- "build:cargo:aarch64-unknown-linux-gnu"
|
|
- "build:cargo-deb:x86_64-unknown-linux-gnu"
|
|
rules:
|
|
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
|
image: curlimages/curl:latest
|
|
tags: ["docker"]
|
|
variables:
|
|
GIT_STRATEGY: "none" # Don't need a clean copy of the code, we just operate on artifacts
|
|
script:
|
|
- 'BASE_URL="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/conduit-${CI_COMMIT_REF_SLUG}/build-${CI_PIPELINE_ID}"'
|
|
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file conduit-x86_64-unknown-linux-gnu "${BASE_URL}/conduit-x86_64-unknown-linux-gnu"'
|
|
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file conduit-armv7-unknown-linux-gnueabihf "${BASE_URL}/conduit-armv7-unknown-linux-gnueabihf"'
|
|
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file conduit-aarch64-unknown-linux-gnu "${BASE_URL}/conduit-aarch64-unknown-linux-gnu"'
|
|
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file conduit-x86_64-unknown-linux-gnu.deb "${BASE_URL}/conduit-x86_64-unknown-linux-gnu.deb"'
|
|
|
|
|