diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 785474e4f773de4a036e713fe6a84a051d886992..a655a2a7914730cd3a0449a960e5df6e5bbd4b69 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,31 +1,30 @@ +image: gitlab.limos.fr:5005/ecomobicoin/infra/rust-builder-image:1.71 + +cache: + paths: + - target/ + +variables: + PACKAGE_REGISTRY_URL: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic + +before_script: + - | # skip if not using custom Rust image + if hash rustc 2>/dev/null; then + rustc --version + cargo --version + fi + stages: - lint - build - test + - release-build - release - deploy -image: gitlab.limos.fr:5005/angraign/rust-ci-image:1.71 -# image: rust:latest - -before_script: - - rustc --version && cargo --version - # variables: # CARGO_HOME: $CI_PROJECT_DIR/.cargo -#cache: -# paths: -# - target/ - -# cache: -# key: one-key-to-rule-them-all -# paths: -# - $CARGO_HOME/bin -# - $CARGO_HOME/registry/index -# - $CARGO_HOME/registry/cache -# - $CARGO_HOME/git/db - lint: stage: lint script: @@ -104,26 +103,84 @@ package-docker: - if: $CI_COMMIT_BRANCH exists: - Dockerfile -# release: -# stage: release -# image: registry.gitlab.com/gitlab-org/release-cli:latest -# variables: -# LINUX_ASSET_LINK: '{"name":"gitlab-downloader-linux-86_64-${CI_COMMIT_TAG}","url":"${PACKAGE_REGISTRY_URL}/${CI_COMMIT_TAG}/linux-x86_64/gitlab-downloader","type":"package"}' + +# release-build-apple: +# stage: release-build # script: -# - echo "Releasing..." -# - echo "Tag = ${CI_COMMIT_TAG}" -# - echo "URL = ${PACKAGE_REGISTRY_URL}/${CI_COMMIT_TAG}" -# - echo "LINUX = ${LINUX_ASSET_LINK}" -# - echo "WIN = ${WIN_ASSET_LINK}" +# # x64 Mac +# - cargo build --target x86_64-apple-darwin --workspace --profile=production +# - | +# curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file "target/x86_64-apple-darwin/production/truite" "${PACKAGE_REGISTRY_URL}/${CI_COMMIT_TAG}/apple-x86_64/truite" +# # ARM Mac e.g. Macbook Pro with M1 +# - cargo build --target aarch64-apple-darwin --workspace --profile=production # - | -# release-cli --debug create --name "Release ${CI_COMMIT_TAG}" --tag-name "${CI_COMMIT_TAG}" --assets-link "${LINUX_ASSET_LINK}" --assets-link "${WIN_ASSET_LINK}" -# - echo "Done!" -# needs: -# - job: build -# artifacts: true +# curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file "target/aarch64-apple-darwin/production/truite" "${PACKAGE_REGISTRY_URL}/${CI_COMMIT_TAG}/apple-aarch64/truite" # rules: -# - if: '$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v[0-9]\.[0-9]\.[0-9](-rc.+)?/' +# - if: "$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v/" # when: always +# tags: +# - ecomobicoin + +release-build-linux: + stage: release-build + script: + - cargo build --target x86_64-unknown-linux-gnu --workspace --profile=production + - | + curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file "target/x86_64-unknown-linux-gnu/production/truite" "${PACKAGE_REGISTRY_URL}/${CI_COMMIT_TAG}/linux-x86_64/truite" + rules: + - if: "$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v/" + when: always + tags: + - ecomobicoin + +release-docker: + stage: release-build + image: docker:latest + before_script: + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + variables: + CONTAINER_COMMIT_IMAGE: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}" + CONTAINER_RELEASE_IMAGE: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}" + script: + - echo "Building docker image... (CONTAINER_COMMIT_IMAGE = ${CONTAINER_COMMIT_IMAGE}, CONTAINER_RELEASE_IMAGE = ${CONTAINER_RELEASE_IMAGE})" + - docker build --pull -t $CONTAINER_COMMIT_IMAGE . + - docker tag $CONTAINER_COMMIT_IMAGE $CONTAINER_RELEASE_IMAGE + - docker push $CONTAINER_RELEASE_IMAGE + rules: + - if: "$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v/" + when: always + tags: + - ecomobicoin + +release: + stage: release + image: registry.gitlab.com/gitlab-org/release-cli:latest + variables: + LINUX_ASSET_LINK: '{"name":"truite-linux-86_64-${CI_COMMIT_TAG}","url":"${PACKAGE_REGISTRY_URL}/${CI_COMMIT_TAG}/linux-x86_64/truite","type":"package"}' + # MAC_INTEL_ASSET_LINK: '{"name":"truite-apple-86_64-${CI_COMMIT_TAG}","url":"${PACKAGE_REGISTRY_URL}/${CI_COMMIT_TAG}/apple-x86_64/truite","type":"package"}' + # MAC_ARM_ASSET_LINK: '{"name":"truite-apple-aarch64-${CI_COMMIT_TAG}","url":"${PACKAGE_REGISTRY_URL}/${CI_COMMIT_TAG}/apple-aarch64/truite","type":"package"}' + DOCKER_ASSET_LINK: '{"name":"truite:${CI_COMMIT_TAG}","url":"${CI_PROJECT_URL}/container_registry","type":"image"}' + script: + - echo "Releasing..." + - echo "Tag = ${CI_COMMIT_TAG}" + - echo "URL = ${PACKAGE_REGISTRY_URL}/${CI_COMMIT_TAG}" + - echo "LINUX = ${LINUX_ASSET_LINK}" + # - echo "MAC INTEL = ${MAC_INTEL_ASSET_LINK}" + # - echo "MAC ARM = ${MAC_ARM_ASSET_LINK}" + - echo "DOCKER = ${DOCKER_ASSET_LINK}" + - | + release-cli --debug create --name "Release ${CI_COMMIT_TAG}" --tag-name "${CI_COMMIT_TAG}" --assets-link "${LINUX_ASSET_LINK}" --assets-link "${DOCKER_ASSET_LINK}" + - echo "Done!" + needs: + - job: release-build-linux + artifacts: true + # - job: release-build-apple + # artifacts: true + - job: release-docker + artifacts: true + rules: + - if: "$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v/" + when: always deploy-eco1: image: alpine:latest @@ -142,3 +199,4 @@ deploy-eco1: - ssh $SSH_USER@$SSH_HOST "sudo docker pull $CI_REGISTRY_IMAGE && sudo docker-compose -f /opt/ecomobicoin/clermont/docker-compose.yml up -d --no-deps" only: - dev + when: manual