boomack-cli 0.3.3

CLI client for Boomack
default:
  image: mastersign/docker-rust-cross:latest
  # Runners with the tag cross-rs must allow only one concurrent job
  # otherwise the builds conflict with each other
  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  # prevent parallel cross builds
  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-i686-pc-windows-gnu:
#   <<: *cross-build
#   variables:
#     TARGET: i686-pc-windows-gnu
#     EXT: .exe

# deploy-i686-pc-windows-gnu:
#   <<: *deploy
#   needs: [build-i686-pc-windows-gnu]
#   variables:
#     TARGET: i686-pc-windows-gnu

# deploy-latest-i686-pc-windows-gnu:
#   <<: *deploy-latest
#   needs: [build-i686-pc-windows-gnu]
#   variables:
#     TARGET: i686-pc-windows-gnu

# build-x86_64-pc-windows-gnu:
#   <<: *cross-build
#   variables:
#     TARGET: x86_64-pc-windows-gnu
#     EXT: .exe

# deploy-x86_64-pc-windows-gnu:
#   <<: *deploy
#   needs: [build-x86_64-pc-windows-gnu]
#   variables:
#     TARGET: x86_64-pc-windows-gnu

# deploy-latest-x86_64-pc-windows-gnu:
#   <<: *deploy-latest
#   needs: [build-x86_64-pc-windows-gnu]
#   variables:
#     TARGET: x86_64-pc-windows-gnu

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

# build-aarch64-unknown-linux-gnu:
#   <<: *cross-build
#   variables:
#     TARGET: aarch64-unknown-linux-gnu

# deploy-aarch64-unknown-linux-gnu:
#   <<: *deploy
#   needs: [build-aarch64-unknown-linux-gnu]
#   variables:
#     TARGET: aarch64-unknown-linux-gnu

# deploy-latest-aarch64-unknown-linux-gnu:
#   <<: *deploy-latest
#   needs: [build-aarch64-unknown-linux-gnu]
#   variables:
#     TARGET: aarch64-unknown-linux-gnu

# build-aarch64-unknown-linux-musl:
#   <<: *cross-build
#   variables:
#     TARGET: aarch64-unknown-linux-musl

# deploy-aarch64-unknown-linux-musl:
#   <<: *deploy
#   needs: [build-aarch64-unknown-linux-musl]
#   variables:
#     TARGET: aarch64-unknown-linux-musl

# deploy-latest-aarch64-unknown-linux-musl:
#   <<: *deploy-latest
#   needs: [build-aarch64-unknown-linux-musl]
#   variables:
#     TARGET: aarch64-unknown-linux-musl