From 4c013b5080d4ef20165b187d18d8a7b27b67510d Mon Sep 17 00:00:00 2001 From: Jonas Zohren Date: Fri, 2 Jul 2021 10:30:09 +0000 Subject: [PATCH 1/2] Publish master builds as nightly releases --- .gitlab-ci.yml | 116 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 85 insertions(+), 31 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ae9b32b..ce00371 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,11 +1,13 @@ stages: - test - build - - release + - publish artifacts + - release nightly variables: GIT_SUBMODULE_STRATEGY: recursive FF_USE_FASTZIP: 1 + CACHE_COMPRESSION_LEVEL: fastest test:cargo: @@ -31,56 +33,108 @@ test:cargo: - cargo fmt --all -- --check - cargo clippy +# --------------------------------------------------------------------- # +# Cargo: Compiling for different architectures # +# --------------------------------------------------------------------- # -# Compile conduit for different linux target architectures -build:cargo: +.build-cargo-shared-settings: stage: "build" needs: [] + rules: + - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' interruptible: true - parallel: - matrix: - - TARGET: "x86_64-unknown-linux-gnu" - - TARGET: "armv7-unknown-linux-gnueabihf" - NEEDED_PACKAGES: "build-essential gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc6-dev-armhf-cross" - - TARGET: "aarch64-unknown-linux-gnu" - NEEDED_PACKAGES: "build-essential gcc-8-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross" - TARGET_CC: "/usr/bin/aarch64-linux-gnu-gcc-8" - TARGET_AR: "/usr/bin/aarch64-linux-gnu-gcc-ar-8" image: "rust:latest" cache: paths: + - cargohome - target/ key: "build_cache-$TARGET" - variables: - CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-gcc - CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_RUNNER: "/linux-runner armv7" - CC_armv7_unknown_linux_gnueabihf: arm-linux-gnueabihf-gcc - CXX_armv7_unknown_linux_gnueabihf: arm-linux-gnueabihf-g++ - CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc - CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER: "/linux-runner aarch64" - CC_aarch64_unknown_linux_gnu: aarch64-linux-gnu-gcc - CXX_aarch64_unknown_linux_gnu: aarch64-linux-gnu-g++ before_script: - - apt-get update -yqq + - '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: - - rustc --version && cargo --version # Print version info for debugging - - cargo build --target $TARGET --release + - 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" + + +# --------------------------------------------------------------------- # +# Storing and releasing compiled binaries # +# --------------------------------------------------------------------- # -# Store the resulting binaries into the GitLab package registry, so they can be downloaded publish:package: - stage: release + stage: "publish artifacts" + needs: + - "build:cargo:x86_64-unknown-linux-gnu" + - "build:cargo:armv7-unknown-linux-gnueabihf" + - "build:cargo:aarch64-unknown-linux-gnu" + rules: + - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' image: curlimages/curl:latest + variables: + GIT_STRATEGY: "none" # Don't need a clean copy of the code, we just operate on artifacts script: - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file conduit-x86_64-unknown-linux-gnu "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/conduit-${CI_COMMIT_REF_SLUG}/build-${CI_JOB_ID}/conduit-x86_64"' - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file conduit-armv7-unknown-linux-gnueabihf "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/conduit-${CI_COMMIT_REF_SLUG}/build-${CI_JOB_ID}/conduit-armv7"' - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file conduit-aarch64-unknown-linux-gnu "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/conduit-${CI_COMMIT_REF_SLUG}/build-${CI_JOB_ID}/conduit-aarch64"' - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file README.md "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/conduit-${CI_COMMIT_REF_SLUG}/build-${CI_JOB_ID}/README.md"' - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file LICENSE "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/conduit-${CI_COMMIT_REF_SLUG}/build-${CI_JOB_ID}/LICENSE"' + - '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"' + + + +publish:nightly: + stage: "release nightly" + image: registry.gitlab.com/gitlab-org/release-cli:latest + needs: + - job: "publish:package" + artifacts: false + variables: + GIT_STRATEGY: "none" # Don't need a clean copy of the code, we just operate on artifacts + script: "echo 'Releasing current state as release'" + rules: + - if: "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH" # Run this job on the main branch + release: + name: 'Nightly' + description: '⚠️ The latest development version of the day, fresh from the repository. Use at your own risk!' + tag_name: '$CI_COMMIT_REF_SLUG' + assets: + links: + - name: 'conduit-x86_64-unknown-linux-gnu' + url: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/conduit-${CI_COMMIT_REF_SLUG}/build-${CI_PIPELINE_ID}/conduit-x86_64-unknown-linux-gnu" + - name: 'conduit-armv7-unknown-linux-gnueabihf' + url: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/conduit-${CI_COMMIT_REF_SLUG}/build-${CI_PIPELINE_ID}/conduit-armv7-unknown-linux-gnueabihf" + - name: 'conduit-aarch64-unknown-linux-gnu' + url: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/conduit-${CI_COMMIT_REF_SLUG}/build-${CI_PIPELINE_ID}/conduit-aarch64-unknown-linux-gnu" From 90ad5d8349f687822a332d390e31e93aa4ccb7cc Mon Sep 17 00:00:00 2001 From: Jonas Zohren Date: Fri, 2 Jul 2021 10:33:05 +0000 Subject: [PATCH 2/2] Also build and release deb package for x86_64 --- .gitlab-ci.yml | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ce00371..930e8f6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -92,6 +92,50 @@ build:cargo:aarch64-unknown-linux-gnu: 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" + 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: "" + + + + # --------------------------------------------------------------------- # # Storing and releasing compiled binaries # # --------------------------------------------------------------------- # @@ -102,6 +146,7 @@ publish:package: - "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 @@ -112,6 +157,7 @@ publish:package: - '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"' @@ -138,3 +184,5 @@ publish:nightly: url: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/conduit-${CI_COMMIT_REF_SLUG}/build-${CI_PIPELINE_ID}/conduit-armv7-unknown-linux-gnueabihf" - name: 'conduit-aarch64-unknown-linux-gnu' url: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/conduit-${CI_COMMIT_REF_SLUG}/build-${CI_PIPELINE_ID}/conduit-aarch64-unknown-linux-gnu" + - name: 'conduit-x86_64-unknown-linux-gnu.deb' + url: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/conduit-${CI_COMMIT_REF_SLUG}/build-${CI_PIPELINE_ID}/conduit-x86_64-unknown-linux-gnu.deb"