summaryrefslogtreecommitdiff
path: root/.gitlab-ci.yml
diff options
context:
space:
mode:
authorJonas Zohren <gitlab-jfowl-0ux98@sh14.de>2021-07-02 12:26:26 +0000
committerTimo Kösters <timo@koesters.xyz>2021-07-02 12:26:26 +0000
commita7cb1c999ae42d199e1e1ee342031ab29d64d7f8 (patch)
tree876a5a77473b530b55d8ca60cc4af961306dc2fd /.gitlab-ci.yml
parent5f6b0c673c9911309ae181ef25099acdca238c73 (diff)
downloadconduit-a7cb1c999ae42d199e1e1ee342031ab29d64d7f8.zip
Publish master builds as nightly releases & also build debs
Diffstat (limited to '.gitlab-ci.yml')
-rw-r--r--.gitlab-ci.yml156
1 files changed, 129 insertions, 27 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ae9b32b..930e8f6 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,156 @@ 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"
+ 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:
+ - 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
- 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++
+
+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
- 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++
+ 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"
+ cache:
+ paths:
+ - cargohome
+ - target/
+ key: "build_cache-deb-$TARGET"
before_script:
- - apt-get update -yqq
+ - '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:
- - rustc --version && cargo --version # Print version info for debugging
- - cargo build --target $TARGET --release
- - 'mv "target/$TARGET/release/conduit" "conduit-$TARGET"'
+ - time cargo deb --target $TARGET
+ - 'mv target/$TARGET/debian/*.deb "conduit-$TARGET.deb"'
artifacts:
- name: "conduit-$TARGET"
+ name: "conduit-$TARGET.deb"
+ expose_as: "Debian Package"
paths:
- - "conduit-$TARGET"
+ - "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 #
+# --------------------------------------------------------------------- #
-# 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"
+ - "build:cargo-deb:x86_64-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"'
+ - '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"'
+
+
+
+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"
+ - 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"