@ -21,6 +21,8 @@ variables:
- if : '$CI_COMMIT_BRANCH == "master"'
- if : '$CI_COMMIT_BRANCH == "master"'
- if : '$CI_COMMIT_BRANCH == "next"'
- if : '$CI_COMMIT_BRANCH == "next"'
- if : '$CI_COMMIT_TAG'
- if : '$CI_COMMIT_TAG'
# TODO: Remove this before merging:
- if : '$CI_COMMIT_BRANCH == "better-multiarch-building-the-second-attempt"'
interruptible : true
interruptible : true
image : "rust:latest"
image : "rust:latest"
tags : [ "docker" ]
tags : [ "docker" ]
@ -28,118 +30,97 @@ variables:
paths:
paths:
- cargohome
- cargohome
- target/
- target/
key : "build_cache-$TARGET-release"
key : "build_cache-- $TARGET--$CI_COMMIT_BRANCH- -release"
variables:
variables:
CARGO_PROFILE_RELEASE_LTO=true
CARGO_PROFILE_RELEASE_LTO : "true"
CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1
CARGO_PROFILE_RELEASE_CODEGEN_UNITS : "1"
before_script:
before_script:
- 'echo "Building for target $TARGET"'
- 'echo "Building for target $TARGET"'
- 'mkdir -p cargohome && CARGOHOME="cargohome"'
- 'mkdir -p cargohome && CARGOHOME="cargohome"'
- "cat /etc/*-release && rustc --version && cargo --version" # Print version info for debugging
- "rustc --version && cargo --version && rustup show" # 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"
- "rustup target add $TARGET"
script:
script:
- time cargo build --target $TARGET --release
- time cargo build --target $TARGET --release
- 'mv "target/$TARGET/release/conduit" "conduit-$TARGET"'
- 'cp "target/$TARGET/release/conduit" "conduit-$TARGET"'
artifacts:
artifacts:
expire_in : never
expire_in : never
build:release:cargo:x86_64-unknown-linux-musl-with-debug:
build:release:cargo:x86_64-unknown-linux-gnu:
extends : .build-cargo-shared-settings
extends : .build-cargo-shared-settings
image : messense/rust-musl-cross:x86_64-musl
variables:
variables:
TARGET : "x86_64-unknown-linux-gnu"
CARGO_PROFILE_RELEASE_DEBUG : 2 # Enable debug info for flamegraph profiling
TARGET : "x86_64-unknown-linux-musl"
after_script:
- "mv ./conduit-x86_64-unknown-linux-musl ./conduit-x86_64-unknown-linux-musl-with-debug"
artifacts:
artifacts:
name : "conduit-x86_64-unknown-linux-gnu"
name : "conduit-x86_64-unknown-linux-musl-with-debug "
paths:
paths:
- "conduit-x86_64-unknown-linux-gnu "
- "conduit-x86_64-unknown-linux-musl-with-debug "
expose_as : "Conduit for x86_64-unknown-linux-gnu "
expose_as : "Conduit for x86_64-unknown-linux-musl-with-debug "
build:release:cargo:armv7-unknown-linux-gnueabihf :
build:release:cargo:x86_64-unknown-linux-musl :
extends : .build-cargo-shared-settings
extends : .build-cargo-shared-settings
image : messense/rust-musl-cross:x86_64-musl
variables:
variables:
TARGET : "armv7-unknown-linux-gnueabihf"
TARGET : "x86_64-unknown-linux-musl"
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++
artifacts:
artifacts:
name : "conduit-armv7-unknown-linux-gnueabihf "
name : "conduit-x86_64-unknown-linux-musl"
paths:
paths:
- "conduit-armv7-unknown-linux-gnueabihf "
- "conduit-x86_64-unknown-linux-musl"
expose_as : "Conduit for armv7-unknown-linux-gnueabihf "
expose_as : "Conduit for x86_64-unknown-linux-musl "
build:release:cargo:aarch64-unknown-linux-gnu :
build:release:cargo:arm-unknown-linux-musleabihf :
extends : .build-cargo-shared-settings
extends : .build-cargo-shared-settings
image : messense/rust-musl-cross:arm-musleabihf
variables:
variables:
TARGET : "aarch64-unknown-linux-gnu"
TARGET : "arm-unknown-linux-musleabihf"
NEEDED_PACKAGES : "build-essential gcc-10-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-10"
TARGET_AR : "/usr/bin/aarch64-linux-gnu-gcc-ar-10"
artifacts:
artifacts:
name : "conduit-aarch64-unknown-linux-gnu "
name : "conduit-arm-unknown-linux-musleabihf"
paths:
paths:
- "conduit-aarch64-unknown-linux-gnu "
- "conduit-arm-unknown-linux-musleabihf"
expose_as : "Conduit for aarch64-unknown-linux-gnu "
expose_as : "Conduit for arm-unknown-linux-musleabihf"
build:release:cargo:x86_64-unknown-linux-musl :
build:release:cargo:armv7-unknown-linux-musleabihf :
extends : .build-cargo-shared-settings
extends : .build-cargo-shared-settings
image : "rust:alpine"
image : messense/rust-musl-cross:armv7-musleabihf
variables:
variables:
TARGET : "x86_64-unknown-linux-musl"
TARGET : "armv7-unknown-linux-musleabihf"
before_script:
- 'echo "Building for target $TARGET"'
- 'mkdir -p cargohome && CARGOHOME="cargohome"'
- "cat /etc/*-release && rustc --version && cargo --version" # Print version info for debugging
- "rustup target add $TARGET"
- "apk add libc-dev"
artifacts:
artifacts:
name : "conduit-x86_64-unknown-linux-musl "
name : "conduit-armv7-unknown-linux-musleabihf"
paths:
paths:
- "conduit-x86_64-unknown-linux-musl "
- "conduit-armv7-unknown-linux-musleabihf"
expose_as : "Conduit for x86_64-unknown-linux-musl "
expose_as : "Conduit for armv7-unknown-linux-musleabihf"
build:release:cargo:aarch64-unknown-linux-musl:
extends : .build-cargo-shared-settings
image : messense/rust-musl-cross:aarch64-musl
variables:
TARGET : "aarch64-unknown-linux-musl"
artifacts:
name : "conduit-aarch64-unknown-linux-musl"
paths:
- "conduit-aarch64-unknown-linux-musl"
expose_as : "Conduit for aarch64-unknown-linux-musl"
.cargo-debug-shared-settings:
.cargo-debug-shared-settings:
extends : ".build-cargo-shared-settings"
extends : ".build-cargo-shared-settings"
rules:
rules:
- if : '$CI_COMMIT_BRANCH'
- if : '$CI_COMMIT_BRANCH != master'
- if : '$CI_COMMIT_TAG'
cache:
cache:
key : "build_cache-$TARGET-debug"
key : "build_cache-- $TARGET--$CI_COMMIT_BRANCH- -debug"
script:
script:
- "time cargo build --target $TARGET"
- "time cargo build --target $TARGET"
- 'mv "target/$TARGET/debug/conduit" "conduit-debug-$TARGET"'
- 'mv "target/$TARGET/debug/conduit" "conduit-debug-$TARGET"'
artifacts:
artifacts:
expire_in : 4 weeks
expire_in : 4 weeks
build:debug:cargo:x86_64-unknown-linux-gnu:
extends : ".cargo-debug-shared-settings"
variables:
TARGET : "x86_64-unknown-linux-gnu"
artifacts:
name : "conduit-debug-x86_64-unknown-linux-gnu"
paths:
- "conduit-debug-x86_64-unknown-linux-gnu"
expose_as : "Conduit DEBUG for x86_64-unknown-linux-gnu"
build:debug:cargo:x86_64-unknown-linux-musl:
build:debug:cargo:x86_64-unknown-linux-musl:
extends : ".cargo-debug-shared-settings"
extends : ".cargo-debug-shared-settings"
image : "rust:alpine"
image : messense/rust-musl-cross:x86_64-musl
variables:
variables:
TARGET : "x86_64-unknown-linux-musl"
TARGET : "x86_64-unknown-linux-musl"
before_script:
- 'echo "Building for target $TARGET"'
- 'mkdir -p cargohome && CARGOHOME="cargohome"'
- "cat /etc/*-release && rustc --version && cargo --version" # Print version info for debugging
- "rustup target add $TARGET"
- "apk add libc-dev"
artifacts:
artifacts:
name : "conduit-debug-x86_64-unknown-linux-musl"
name : "conduit-debug-x86_64-unknown-linux-musl"
paths:
paths:
@ -147,138 +128,135 @@ build:debug:cargo:x86_64-unknown-linux-musl:
expose_as : "Conduit DEBUG for x86_64-unknown-linux-musl"
expose_as : "Conduit DEBUG for x86_64-unknown-linux-musl"
# --------------------------------------------------------------------- #
# --------------------------------------------------------------------- #
# Cargo: Compiling deb packages for different architectures #
# Cargo: Compiling deb packages for different architectures #
# --------------------------------------------------------------------- #
# --------------------------------------------------------------------- #
.build-cargo-deb-shared-settings:
# .build-cargo-deb-shared-settings:
stage : "build"
# stage: "build"
needs : [ ]
# needs: [ ]
rules:
# rules:
- if : '$CI_COMMIT_BRANCH == "master"'
# - if: '$CI_COMMIT_BRANCH == "master"'
- if : '$CI_COMMIT_BRANCH == "next"'
# - if: '$CI_COMMIT_BRANCH == "next"'
- if : '$CI_COMMIT_TAG'
# - if: '$CI_COMMIT_TAG'
interruptible : true
# interruptible: true
image : "rust:latest"
# image: "rust:latest"
tags : [ "docker" ]
# tags: ["docker" ]
cache:
# cache:
paths:
# paths:
- cargohome
# - cargohome
- target/
# - target/
key : "build_cache-deb-$TARGET"
# key: "build_cache-deb-$TARGET"
before_script:
# before_script:
- 'echo "Building debian package for target $TARGET"'
# - 'echo "Building debian package for target $TARGET"'
- 'mkdir -p cargohome && CARGOHOME="cargohome"'
# - 'mkdir -p cargohome && CARGOHOME="cargohome"'
- "cat /etc/*-release && rustc --version && cargo --version" # Print version info for debugging
# - "cat /etc/*-release && rustc --version && cargo --version" # Print version info for debugging
- 'apt-get update -yqq'
# - 'apt-get update -yqq'
- 'echo "Installing packages: $NEEDED_PACKAGES"'
# - 'echo "Installing packages: $NEEDED_PACKAGES"'
- "apt-get install -yqq --no-install-recommends $NEEDED_PACKAGES"
# - "apt-get install -yqq --no-install-recommends $NEEDED_PACKAGES"
- "rustup target add $TARGET"
# - "rustup target add $TARGET"
- "cargo install cargo-deb"
# - "cargo install cargo-deb"
script:
# script:
- time cargo deb --target $TARGET
# - time cargo deb --target $TARGET
- 'mv target/$TARGET/debian/*.deb "conduit-$TARGET.deb"'
# - 'mv target/$TARGET/debian/*.deb "conduit-$TARGET.deb"'
#
build:cargo-deb:x86_64-unknown-linux-gnu:
# build:cargo-deb:x86_64-unknown-linux-gnu:
extends : .build-cargo-deb-shared-settings
# extends: .build-cargo-deb-shared-settings
variables:
# variables:
TARGET : "x86_64-unknown-linux-gnu"
# TARGET: "x86_64-unknown-linux-gnu"
NEEDED_PACKAGES : ""
# NEEDED_PACKAGES: ""
artifacts:
# artifacts:
name : "conduit-x86_64-unknown-linux-gnu.deb"
# name: "conduit-x86_64-unknown-linux-gnu.deb"
paths:
# paths:
- "conduit-x86_64-unknown-linux-gnu.deb"
# - "conduit-x86_64-unknown-linux-gnu.deb"
expose_as : "Debian Package x86_64"
# expose_as: "Debian Package x86_64"
#
# --------------------------------------------------------------------- #
# --------------------------------------------------------------------- #
# Create and publish docker image #
# Create and publish docker image #
# --------------------------------------------------------------------- #
# --------------------------------------------------------------------- #
# Build a docker image by packaging up the x86_64-unknown-linux-musl binary into an alpine image
.docker-shared-settings :
build:docker:new-way-of-building :
stage : "build docker image"
stage : "build docker image"
needs : [ ]
image : jdrouet/docker-with-buildx:stable
interruptible : true
image:
name : "gcr.io/kaniko-project/executor:debug"
entrypoint : [ "" ]
tags : [ "docker" ]
tags : [ "docker" ]
variables:
services:
# Configure Kaniko Caching: https://cloud.google.com/build/docs/kaniko-cache
- docker:dind
KANIKO_CACHE_ARGS : "--cache=true --cache-copy-layers=true --cache-ttl=120h --cache-repo $CI_REGISTRY_IMAGE/kaniko-ci-cache"
before_script:
- "mkdir -p /kaniko/.docker"
- 'echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"},\"$DOCKER_HUB\":{\"username\":\"$DOCKER_HUB_USER\",\"password\":\"$DOCKER_HUB_PASSWORD\"}}}" > /kaniko/.docker/config.json'
build:docker:next:
extends : .docker-shared-settings
needs:
- "build:release:cargo:x86_64-unknown-linux-musl"
script:
- >
/kaniko/executor
$KANIKO_CACHE_ARGS
--force
--context $CI_PROJECT_DIR
--build-arg CREATED=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
--build-arg VERSION=$(grep -m1 -o '[0-9].[0-9].[0-9]' Cargo.toml)
--build-arg "GIT_REF=$CI_COMMIT_SHORT_SHA"
--dockerfile "$CI_PROJECT_DIR/docker/ci-binaries-packaging.Dockerfile"
--destination "$CI_REGISTRY_IMAGE/conduit:next"
--destination "$CI_REGISTRY_IMAGE/conduit:next-alpine"
--destination "$CI_REGISTRY_IMAGE/conduit:commit-$CI_COMMIT_SHORT_SHA"
--destination "$DOCKER_HUB_IMAGE/matrixconduit/matrix-conduit:next"
--destination "$DOCKER_HUB_IMAGE/matrixconduit/matrix-conduit:next-alpine"
--destination "$DOCKER_HUB_IMAGE/matrixconduit/matrix-conduit:commit-$CI_COMMIT_SHORT_SHA"
rules:
- if : '$CI_COMMIT_BRANCH == "next"'
build:docker:master:
extends : .docker-shared-settings
needs:
needs:
- "build:release:cargo:x86_64-unknown-linux-musl"
- "build:release:cargo:x86_64-unknown-linux-musl"
script:
- "build:release:cargo:arm-unknown-linux-musleabihf"
- >
- "build:release:cargo:armv7-unknown-linux-musleabihf"
/kaniko/executor
- "build:release:cargo:aarch64-unknown-linux-musl"
$KANIKO_CACHE_ARGS
--context $CI_PROJECT_DIR
--build-arg CREATED=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
--build-arg VERSION=$(grep -m1 -o '[0-9].[0-9].[0-9]' Cargo.toml)
--build-arg "GIT_REF=$CI_COMMIT_SHORT_SHA"
--dockerfile "$CI_PROJECT_DIR/docker/ci-binaries-packaging.Dockerfile"
--destination "$CI_REGISTRY_IMAGE/conduit:latest"
--destination "$CI_REGISTRY_IMAGE/conduit:latest-alpine"
--destination "$DOCKER_HUB_IMAGE/matrixconduit/matrix-conduit:latest"
--destination "$DOCKER_HUB_IMAGE/matrixconduit/matrix-conduit:latest-alpine"
rules:
rules:
- if : '$CI_COMMIT_BRANCH == "master"'
- if : '$CI_COMMIT_BRANCH == "master"'
- if : '$CI_COMMIT_BRANCH == "next"'
# TODO: Remove this after debugging
build:docker:tags:
- if : '$CI_COMMIT_BRANCH == "better-multiarch-building-the-second-attempt"'
extends : .docker-shared-settings
variables:
needs:
DOCKER_HOST : tcp://docker:2375/
- "build:release:cargo:x86_64-unknown-linux-musl"
DOCKER_TLS_CERTDIR : ""
DOCKER_DRIVER : overlay2
PLATFORMS : "linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/amd64"
IMAGE_TAG : "$CI_REGISTRY_IMAGE/debug-conduit:multiarch-test-dont-use-yet"
DOCKER_FILE : "docker/ci-binaries-packaging.Dockerfile"
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
script:
script:
- >
# Prepare buildx to build multiarch stuff:
/kaniko/executor
- docker context create 'ci-context'
$KANIKO_CACHE_ARGS
- docker buildx create --name 'multiarch-builder' --use 'ci-context'
--context $CI_PROJECT_DIR
# Copy binaries to their docker arch path
--build-arg CREATED=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
- mkdir -p linux/ && mv ./conduit-x86_64-unknown-linux-musl linux/amd64
--build-arg VERSION=$(grep -m1 -o '[0-9].[0-9].[0-9]' Cargo.toml)
- mkdir -p linux/arm/ && mv ./conduit-arm-unknown-linux-musleabihf linux/arm/v6
--build-arg "GIT_REF=$CI_COMMIT_SHORT_SHA"
- mkdir -p linux/arm/ && mv ./conduit-armv7-unknown-linux-musleabihf linux/arm/v7
--dockerfile "$CI_PROJECT_DIR/docker/ci-binaries-packaging.Dockerfile"
- mkdir -p linux/arm64/ && mv ./conduit-aarch64-unknown-linux-musl linux/arm64/v8
--destination "$CI_REGISTRY_IMAGE/conduit:$CI_COMMIT_TAG"
# Actually create multiarch image:
--destination "$CI_REGISTRY_IMAGE/conduit:$CI_COMMIT_TAG-alpine"
- docker buildx build --pull --squash --push --platform $PLATFORMS --tag $IMAGE_TAG --file $DOCKER_FILE .
--destination "$DOCKER_HUB_IMAGE/matrixconduit/matrix-conduit:$CI_COMMIT_TAG"
--destination "$DOCKER_HUB_IMAGE/matrixconduit/matrix-conduit:$CI_COMMIT_TAG-alpine"
rules:
## Build a docker image by packaging up the x86_64-unknown-linux-musl binary into an alpine image
- if : '$CI_COMMIT_TAG'
#.docker-shared-settings:
# stage: "build docker image"
# needs: []
# interruptible: true
# image:
# name: "gcr.io/kaniko-project/executor:debug"
# entrypoint: [""]
# tags: ["docker"]
# variables:
# # Configure Kaniko Caching: https://cloud.google.com/build/docs/kaniko-cache
# KANIKO_CACHE_ARGS: "--cache=true --cache-copy-layers=true --cache-ttl=120h --cache-repo $CI_REGISTRY_IMAGE/kaniko-ci-cache"
# before_script:
# - "mkdir -p /kaniko/.docker"
# - 'echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"},\"$DOCKER_HUB\":{\"username\":\"$DOCKER_HUB_USER\",\"password\":\"$DOCKER_HUB_PASSWORD\"}}}" > /kaniko/.docker/config.json'
#
#
#build:docker:next:
# extends: .docker-shared-settings
# needs:
# - "build:release:cargo:x86_64-unknown-linux-musl"
# script:
# - >
# /kaniko/executor
# $KANIKO_CACHE_ARGS
# --force
# --context $CI_PROJECT_DIR
# --build-arg CREATED=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
# --build-arg VERSION=$(grep -m1 -o '[0-9].[0-9].[0-9]' Cargo.toml)
# --build-arg "GIT_REF=$CI_COMMIT_SHORT_SHA"
# --dockerfile "$CI_PROJECT_DIR/docker/ci-binaries-packaging.Dockerfile"
# --destination "$CI_REGISTRY_IMAGE/conduit:next"
# --destination "$CI_REGISTRY_IMAGE/conduit:next-alpine"
# --destination "$CI_REGISTRY_IMAGE/conduit:commit-$CI_COMMIT_SHORT_SHA"
# --destination "$DOCKER_HUB_IMAGE/matrixconduit/matrix-conduit:next"
# --destination "$DOCKER_HUB_IMAGE/matrixconduit/matrix-conduit:next-alpine"
# --destination "$DOCKER_HUB_IMAGE/matrixconduit/matrix-conduit:commit-$CI_COMMIT_SHORT_SHA"
# rules:
# - if: '$CI_COMMIT_BRANCH == "next"'
#
#
# --------------------------------------------------------------------- #
# --------------------------------------------------------------------- #
@ -348,11 +326,11 @@ test:sytest:
publish:package:
publish:package:
stage : "upload artifacts"
stage : "upload artifacts"
needs:
needs:
- "build:release:cargo:x86_64-unknown-linux-gnu"
- "build:release:cargo:armv7-unknown-linux-gnueabihf"
- "build:release:cargo:aarch64-unknown-linux-gnu"
- "build:release:cargo:x86_64-unknown-linux-musl"
- "build:release:cargo:x86_64-unknown-linux-musl"
- "build:cargo-deb:x86_64-unknown-linux-gnu"
- "build:release:cargo:armv-unknown-linux-musleabihf"
- "build:release:cargo:armv7-unknown-linux-musleabihf"
- "build:release:cargo:aarch64-unknown-linux-musl"
# - "build:cargo-deb:x86_64-unknown-linux-gnu"
rules:
rules:
- if : '$CI_COMMIT_BRANCH == "master"'
- if : '$CI_COMMIT_BRANCH == "master"'
- if : '$CI_COMMIT_BRANCH == "next"'
- if : '$CI_COMMIT_BRANCH == "next"'