default:
image: mastersign/docker-rust-cross:latest
tags: ['cross-rs']
variables:
BINARY_NAME: boom
EXT: ''
stages:
- build
- deploy
- deploy-latest
.cross-build-template: &cross-build
stage: build
rules:
- if: $CI_COMMIT_BRANCH == "build" || $CI_COMMIT_TAG
resource_group: cross script:
- rustc --version
- cross build --release --target ${TARGET}
- mv target/${TARGET}/release/${BINARY_NAME}${EXT} ${BINARY_NAME}_${TARGET}${EXT}
artifacts:
paths:
- ${BINARY_NAME}_${TARGET}${EXT}
.deploy-template: &deploy
stage: deploy
image: debian:11
rules:
- if: $CI_COMMIT_TAG
before_script:
- apt-get update
- apt-get install -y lftp
script:
- gzip --best ${BINARY_NAME}_${TARGET}${EXT}
- sha256sum ${BINARY_NAME}_${TARGET}${EXT}.gz > ${BINARY_NAME}_${TARGET}${EXT}.gz.sha256
- >
echo "Uploading ${BINARY_NAME}_${TARGET}${EXT}.gz ${CI_COMMIT_TAG}
to ${DOWNLOAD_FTP_USER}@${DOWNLOAD_FTP_HOST}"
- >
lftp --norc
-u ${DOWNLOAD_FTP_USER},${DOWNLOAD_FTP_PASSWORD}
-e "set ssl:verify-certificate false;
mkdir -p /boom/${CI_COMMIT_TAG};
put ${BINARY_NAME}_${TARGET}${EXT}.gz -o /boom/${CI_COMMIT_TAG}/;
put ${BINARY_NAME}_${TARGET}${EXT}.gz.sha256 -o /boom/${CI_COMMIT_TAG}/;
quit"
${DOWNLOAD_FTP_HOST}
.deploy-latest-template: &deploy-latest
<<: *deploy
stage: deploy-latest
rules:
- if: $CI_COMMIT_TAG
when: manual
allow_failure: true
script:
- gzip --best ${BINARY_NAME}_${TARGET}${EXT}
- sha256sum ${BINARY_NAME}_${TARGET}${EXT}.gz > ${BINARY_NAME}_${TARGET}${EXT}.gz.sha256
- >
echo "Uploading ${BINARY_NAME}_${TARGET}${EXT}.gz ${CI_COMMIT_TAG}
as latest to ${DOWNLOAD_FTP_USER}@${DOWNLOAD_FTP_HOST}"
- >
lftp --norc
-u ${DOWNLOAD_FTP_USER},${DOWNLOAD_FTP_PASSWORD}
-e "set ssl:verify-certificate false;
mkdir -p /boom/latest;
put ${BINARY_NAME}_${TARGET}${EXT}.gz -o /boom/latest/;
put ${BINARY_NAME}_${TARGET}${EXT}.gz.sha256 -o /boom/latest/;
quit"
${DOWNLOAD_FTP_HOST}
build-i686-unknown-linux-gnu:
<<: *cross-build
variables:
TARGET: i686-unknown-linux-gnu
deploy-i686-unknown-linux-gnu:
<<: *deploy
needs: [build-i686-unknown-linux-gnu]
variables:
TARGET: i686-unknown-linux-gnu
deploy-latest-i686-unknown-linux-gnu:
<<: *deploy-latest
needs: [build-i686-unknown-linux-gnu]
variables:
TARGET: i686-unknown-linux-gnu
build-x86_64-unknown-linux-gnu:
<<: *cross-build
variables:
TARGET: x86_64-unknown-linux-gnu
deploy-x86_64-unknown-linux-gnu:
<<: *deploy
needs: [build-x86_64-unknown-linux-gnu]
variables:
TARGET: x86_64-unknown-linux-gnu
deploy-latest-x86_64-unknown-linux-gnu:
<<: *deploy-latest
needs: [build-x86_64-unknown-linux-gnu]
variables:
TARGET: x86_64-unknown-linux-gnu
build-x86_64-unknown-linux-musl:
<<: *cross-build
variables:
TARGET: x86_64-unknown-linux-musl
deploy-x86_64-unknown-linux-musl:
<<: *deploy
needs: [build-x86_64-unknown-linux-musl]
variables:
TARGET: x86_64-unknown-linux-musl
deploy-latest-x86_64-unknown-linux-musl:
<<: *deploy-latest
needs: [build-x86_64-unknown-linux-musl]
variables:
TARGET: x86_64-unknown-linux-musl
build-arm-unknown-linux-gnueabihf:
<<: *cross-build
variables:
TARGET: arm-unknown-linux-gnueabihf
deploy-arm-unknown-linux-gnueabihf:
<<: *deploy
needs: [build-arm-unknown-linux-gnueabihf]
variables:
TARGET: arm-unknown-linux-gnueabihf
deploy-latest-arm-unknown-linux-gnueabihf:
<<: *deploy-latest
needs: [build-arm-unknown-linux-gnueabihf]
variables:
TARGET: arm-unknown-linux-gnueabihf
build-armv7-unknown-linux-gnueabihf:
<<: *cross-build
variables:
TARGET: armv7-unknown-linux-gnueabihf
deploy-armv7-unknown-linux-gnueabihf:
<<: *deploy
needs: [build-armv7-unknown-linux-gnueabihf]
variables:
TARGET: armv7-unknown-linux-gnueabihf
deploy-latest-armv7-unknown-linux-gnueabihf:
<<: *deploy-latest
needs: [build-armv7-unknown-linux-gnueabihf]
variables:
TARGET: armv7-unknown-linux-gnueabihf
build-aarch64-linux-android:
<<: *cross-build
variables:
TARGET: aarch64-linux-android
deploy-aarch64-linux-android:
<<: *deploy
needs: [build-aarch64-linux-android]
variables:
TARGET: aarch64-linux-android
deploy-latest-aarch64-linux-android:
<<: *deploy-latest
needs: [build-aarch64-linux-android]
variables:
TARGET: aarch64-linux-android