diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 67ef629f85036f256c1f460ebb9a9144f0f852a2..9455fa8ba5f7ccc58f41055977adb916b54291d5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,6 @@ stages: - - build_and_tests - fmt + - tests - clippy - publish_crate - publish_doc @@ -11,14 +11,14 @@ stages: variables: CARGO_HOME: $CI_PROJECT_DIR/cargo -.rust_stable_env: &rust_stable_env +.rust_stable_lin64: &rust_stable_lin64 tags: - redshift-rs-stable before_script: - export PATH="$HOME/.cargo/bin:$PATH" - rustc --version && cargo --version -.rust_beta_env: &rust_beta_env +.rust_beta_lin64: &rust_beta_lin64 image: parity/rust:gitlab-ci tags: - redshift-rs-stable @@ -27,54 +27,76 @@ variables: - rustup default beta - rustup show && rustc --version && cargo --version -.rust_nightly_env: &rust_nightly_env +.rust_nightly_lin64: &rust_nightly_lin64 image: rustlang/rust:nightly tags: - redshift-rs-nightly before_script: - export PATH="$HOME/.cargo/bin:$PATH" - rustc --version && cargo --version + +.rust_stable_armv7: &rust_stable_armv7 + image: registry.duniter.org/docker/rust/armv7-builder:v0.0.3 + tags: + - redshift-rs-stable + before_script: + - rustc --version && cargo --version + +.rust_stable_win64: &rust_stable_win64 + image: registry.duniter.org/docker/rust/win64-builder:v0.0.4 + tags: + - redshift-rs-stable + before_script: + - rustc --version && cargo --version + +fmt: + <<: *rust_nightly_lin64 + stage: fmt + before_script: + - rustup show + - rustup component add rustfmt-preview --toolchain nightly + script: + - cargo fmt -- --check + allow_failure: true -build_and_tests:stable: - <<: *rust_stable_env - stage: build_and_tests +tests:linux64:stable: + <<: *rust_stable_lin64 + stage: tests tags: - redshift-rs-stable script: - cargo build --features strict - cargo test --all - cache: - paths: - - cargo/ - - target/ + +tests:armv7:stable: + <<: *rust_stable_armv7 + stage: tests + script: + - cargo test --all --target=armv7-unknown-linux-gnueabihf + +tests:win64:stable: + <<: *rust_stable_win64 + stage: tests + script: + - cargo test --all --exclude duniter-tui --no-default-features --target=x86_64-pc-windows-gnu -build_and_tests:beta: - <<: *rust_beta_env - stage: build_and_tests +tests:linux64:beta: + <<: *rust_beta_lin64 + stage: tests script: - cargo build --features strict - cargo test --all when: manual allow_failure: true -build_and_tests:nightly: - <<: *rust_nightly_env - stage: build_and_tests +tests:linux64:nightly: + <<: *rust_nightly_lin64 + stage: tests script: - cargo build --features strict - cargo test --all when: manual allow_failure: true - -fmt: - <<: *rust_nightly_env - stage: fmt - before_script: - - rustup show - - rustup component add rustfmt-preview --toolchain nightly - script: - - cargo fmt -- --check - allow_failure: true clippy: image: guangie88/rustfmt-clippy:nightly @@ -89,7 +111,7 @@ clippy: allow_failure: true publish:crate: - <<: *rust_stable_env + <<: *rust_stable_lin64 stage: publish_crate script: - IFS='/' read -r first a <<< "$CI_COMMIT_TAG" @@ -102,7 +124,7 @@ publish:crate: when: manual pages: - <<: *rust_stable_env + <<: *rust_stable_lin64 stage: publish_doc script: - cargo doc @@ -117,8 +139,8 @@ pages: only: - dev -package:test:linux-x64: - <<: *rust_stable_env +package:test:linux64: + <<: *rust_stable_lin64 stage: package script: - bash "release/arch/linux-x64/build-lin-x64.sh" "$(date +%Y%m%d).$(date +%H%M).$(date +%S)" @@ -134,15 +156,73 @@ package:test:linux-x64: - tags when: manual -package:prod:linux-x64: - <<: *rust_stable_env +package:test:armv7: + <<: *rust_stable_armv7 stage: package script: - - bash "release/arch/linux-x64/build-lin-x64.sh" "${CI_COMMIT_TAG#v}" + - bash "release/arch/armv7/build-armv7.sh" "$(date +%Y%m%d).$(date +%H%M).$(date +%S)" cache: paths: - cargo/ - target/ + artifacts: + paths: + - work/bin/ + expire_in: 1 weeks + except: + - tags + when: manual + +package:test:win64: + <<: *rust_stable_win64 + stage: package + script: + - bash "release/arch/win64/build-win64.sh" "$(date +%Y%m%d).$(date +%H%M).$(date +%S)" + cache: + paths: + - cargo/ + - target/ + artifacts: + paths: + - work/bin/ + expire_in: 1 weeks + except: + - tags + when: manual + +package:prod:linux64: + <<: *rust_stable_lin64 + stage: package + script: + - bash "release/arch/linux-x64/build-lin-x64.sh" "${CI_COMMIT_TAG#v}" + artifacts: + paths: + - work/bin/ + expire_in: 2 weeks + only: + - tags + when: manual + allow_failure: false + +package:prod:armv7: + <<: *rust_stable_armv7 + stage: package + script: + - bash "release/arch/armv7/build-armv7.sh" "${CI_COMMIT_TAG#v}" + artifacts: + paths: + - work/bin/ + expire_in: 2 weeks + only: + - tags + when: manual + allow_failure: false + +package:prod:win64: + <<: *rust_stable_win64 + stage: package + script: + - bash "release/arch/win64/build-win64.sh" "${CI_COMMIT_TAG#v}" artifacts: paths: - work/bin/ diff --git a/release/arch/armv7/build-armv7.sh b/release/arch/armv7/build-armv7.sh new file mode 100644 index 0000000000000000000000000000000000000000..d69ad215bcb43458c722aaaf0caa906b593a42bd --- /dev/null +++ b/release/arch/armv7/build-armv7.sh @@ -0,0 +1,130 @@ +#!/bin/bash + +if [[ -z "${1}" ]]; then + echo "Fatal: no version given to build script" + exit 1 +fi + +# --------- +# Functions +# --------- + +# Create description. +# - +# Parameters: +# 1. Initial file name. +# 2. Building type (either “desktop†or “serverâ€). +# 3. Category (OS, distribution). +create_desc() { + cat >"${1}".desc <<-EOF + { + "version": "${DURS_TAG}", + "job": "${CI_JOB_ID}", + "type": "${2^}", + "category": "${3}", + "arch": "arm v7" + } + EOF +} + +# Server specific building phase. +# - +# Parameters: +# 1. Building directory. +build_extra_server() { + mkdir -p "${1}/lib/systemd/system" || exit 1 + cp "${ROOT}/release/extra/systemd/durs.service" "${1}/lib/systemd/system" || exit 1 +} + +# Debian package building. +# - +# Parameters: +# 1. Building type (either “desktop†or “serverâ€). +# 2. Debian package name. +build_deb_pack() { + rm -rf "${RELEASES}/durs-armv7" + mkdir "${RELEASES}/durs-armv7" || exit 1 + cp -r "${ROOT}/release/extra/debian/package/"* "${RELEASES}/durs-armv7" || exit 1 + build_extra_${1} "${RELEASES}/durs-armv7" + mkdir -p "${RELEASES}/durs-armv7/opt/durs/" || exit 1 + chmod 755 "${RELEASES}/durs-armv7/DEBIAN/"post* || exit 1 + chmod 755 "${RELEASES}/durs-armv7/DEBIAN/"pre* || exit 1 + sed -i "s/Version:.*/Version:${DURS_DEB_VER}/g" "${RELEASES}/durs-armv7/DEBIAN/control" || exit 1 + + cd "${RELEASES}/${1}_/" + zip -qr "${RELEASES}/durs-armv7/opt/durs/durs.zip" * || exit 1 + + sed -i "s/Package: .*/Package: ${2}/g" "${RELEASES}/durs-armv7/DEBIAN/control" || exit 1 + + cd "${RELEASES}" + dpkg-deb --build durs-armv7 || exit 1 + mv durs-armv7.deb "${BIN}/duniter-rust-${1}-${DURS_TAG}-armv7.deb" || exit 1 + create_desc "${BIN}/duniter-rust-${1}-${DURS_TAG}-armv7.deb" "${1}" "Linux (Ubuntu/Debian/Raspbian)" +} + +# ----------- +# Prepare +# ----------- + +DURS_TAG="v${1}" +DURS_DEB_VER=" ${1}" +TARGET="armv7-unknown-linux-gnueabihf" + +# ----------- +# Folders +# ----------- + +ROOT="${PWD}" +WORK_NAME=work +WORK="${ROOT}/${WORK_NAME}" +DOWNLOADS="${WORK}/downloads" +RELEASES="${WORK}/releases" +BIN="${WORK}/bin" + +mkdir -p "${DOWNLOADS}" "${RELEASES}" "${BIN}" || exit 1 +rm -rf "${BIN}/"*.{deb,tar.gz}{,.desc} # Clean up + +# ----------- +# Downloads +# ----------- + +cd "${DOWNLOADS}" + +# ----------- +# Releases +# ----------- + +# Prepare sources +mkdir -p "${RELEASES}/durs" || exit 1 +cp -r $(find "${ROOT}" -mindepth 1 -maxdepth 1 ! -name "${WORK_NAME}") "${RELEASES}/durs" || exit 1 +cd "${RELEASES}/durs" +rm -Rf .gitignore .git || exit 1 # Remove git files + +# Build binary +echo ">> Building binary..." +cd "${ROOT}" +cargo build --release --target=${TARGET} || exit 1 + +mkdir -p "${RELEASES}/server_" || exit 1 +cp "${ROOT}/target/${TARGET}/release/durs" "${RELEASES}/server_/" || exit 1 +#cp "${ROOT}/target/release/durs" "${RELEASES}/desktop_" || exit 1 + +# Copy logo +cp "${ROOT}/images/duniter-rs.png" "${RELEASES}/server_/" || exit 1 +#cp "${ROOT}/images/duniter-rs.png" "${RELEASES}/desktop_" || exit 1 + + +# --------------- +# Build .tar.gz +# --------------- + +cd "${RELEASES}/server_" +tar czf "${BIN}/duniter-rust-server-${DURS_TAG}-armv7.tar.gz" * || exit 1 +create_desc "${BIN}/duniter-rust-server-${DURS_TAG}-armv7.tar.gz" "Server" "Linux (generic)" + +# ----------------------- +# Build Debian packages +# ----------------------- + +build_deb_pack server durs +#build_deb_pack desktop durs diff --git a/release/arch/win64/build-win64.sh b/release/arch/win64/build-win64.sh new file mode 100644 index 0000000000000000000000000000000000000000..40577674d5d3d5d4a8473cd5d52d303aba50136b --- /dev/null +++ b/release/arch/win64/build-win64.sh @@ -0,0 +1,90 @@ +#!/bin/bash + +if [[ -z "${1}" ]]; then + echo "Fatal: no version given to build script" + exit 1 +fi + +# --------- +# Functions +# --------- + +# Create description. +# - +# Parameters: +# 1. Initial file name. +# 2. Building type (either “desktop†or “serverâ€). +# 3. Category (OS, distribution). +create_desc() { + cat >"${1}".desc <<-EOF + { + "version": "${DURS_TAG}", + "job": "${CI_JOB_ID}", + "type": "${2^}", + "category": "${3}", + "arch": "x64" + } + EOF +} + +# ----------- +# Prepare +# ----------- + +DURS_TAG="v${1}" +DURS_VER=" ${1}" +TARGET="x86_64-pc-windows-gnu" + +#rustup add target ${TARGET} || exit 1 + +# ----------- +# Folders +# ----------- + +ROOT="${PWD}" +WORK_NAME=work +WORK="${ROOT}/${WORK_NAME}" +DOWNLOADS="${WORK}/downloads" +RELEASES="${WORK}/releases" +BIN="${WORK}/bin" + +mkdir -p "${DOWNLOADS}" "${RELEASES}" "${BIN}" || exit 1 +rm -rf "${BIN}/"*.{deb,tar.gz}{,.desc} # Clean up + +# ----------- +# Downloads +# ----------- + +cd "${DOWNLOADS}" + +# ----------- +# Releases +# ----------- + +# Prepare sources +mkdir -p "${RELEASES}/durs" || exit 1 +cp -r $(find "${ROOT}" -mindepth 1 -maxdepth 1 ! -name "${WORK_NAME}") "${RELEASES}/durs" || exit 1 +cd "${RELEASES}/durs" +rm -Rf .gitignore .git || exit 1 # Remove git files + +# Build binary +echo ">> Building binary..." +cd "${ROOT}" +cargo build --target=${TARGET} --release --no-default-features || exit 1 + +mkdir -p "${RELEASES}/server_" || exit 1 +cp "${ROOT}/target/${TARGET}/release/durs.exe" "${RELEASES}/server_/" || exit 1 +#cp "${ROOT}/target/${TARGET}/release/durs" "${RELEASES}/desktop_" || exit 1 + +# Copy logo +#cp "${ROOT}/images/duniter-rs.png" "${RELEASES}/server_/" || exit 1 +#cp "${ROOT}/images/duniter-rs.png" "${RELEASES}/desktop_" || exit 1 + + +# --------------- +# Build .zip +# --------------- + +cd "${RELEASES}/server_" +zip "${BIN}/duniter-rust-server-${DURS_TAG}-windows-x64.zip" * || exit 1 +create_desc "${BIN}/duniter-rust-server-${DURS_TAG}-windows-x64.zip" "Server" "Windows"