From 20612f30a3630be0050bbf4abab0632c17aed075 Mon Sep 17 00:00:00 2001 From: Geoffrey Arthaud <geoffrey.arthaud@developpement-durable.gouv.fr> Date: Tue, 16 Jul 2024 08:43:21 +0200 Subject: [PATCH] Refactored CI --- .gitlab-ci.yml | 96 +++++++++++++++++++++++++++----------------------- 1 file changed, 51 insertions(+), 45 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 519f2d6..ca5add7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,11 @@ +workflow: + rules: + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + - if: $CI_COMMIT_TAG + variables: - RUST_VERSION: "1.76" # slim or alpine not adapted because of openSSL dependency + RUST_VERSION: "1.79" # slim or alpine not adapted because of openSSL dependency TARGET_ARCH: default CARGO_HOME: .cargo TEST_OPTIONS: --url $CI_PROJECT_URL -a @@ -14,30 +20,47 @@ default: policy: pull-push stages: + - prepare - build_test - release - deploy - deploy_test include: - - remote: 'https://gitlab.com/r2devops/hub/-/raw/docker_build@2.0.2/jobs/docker_build/docker_build.yml' - - remote: 'https://gitlab.com/r2devops/hub/-/raw/gitleaks@1.2.2/jobs/gitleaks/gitleaks.yml' - -gitleaks: - stage: build_test + - component: ${CI_SERVER_FQDN}/share/components/oci-copier/crane@~latest + inputs: + as: copy-image-rust + stage: prepare + imageNameToCopy: rust + imageTagToCopy: $RUST_VERSION + copiedImageDigest: "RUST" + - component: $CI_SERVER_FQDN/share/components/oci-builder/podman@~latest + inputs: + as: release-gpd-image + stage: deploy + targetImageAppName: ${CI_PROJECT_NAME} + targetImageAppTag: $VERSION + targetImageRegistry: ${CI_REGISTRY}/${CI_PROJECT_NAMESPACE} + targetImageRegistryDigestName: "GPD" + forceBuild: true + Dockerfile: ${CI_PROJECT_DIR}/Dockerfile + +release-gpd-image: + needs: + - release-linux cache: [ ] + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + - if: $CI_COMMIT_TAG check-format: stage: build_test - image: rust:$RUST_VERSION + image: ${REGISTRY_IMAGE_RUST} script: - rustup component add rustfmt - rustup component add clippy - cargo fmt --all -- --check - cargo clippy -- -D warnings - rules: - - if: $CI_COMMIT_REF_NAME == 'main' - - if: $CI_PIPELINE_SOURCE == "merge_request_event" test-rust-current: stage: build_test @@ -46,16 +69,15 @@ test-rust-current: - cargo test --verbose - cargo run -- $TEST_OPTIONS allow_failure: true - rules: - - if: $CI_COMMIT_REF_NAME == 'main' - - if: $CI_PIPELINE_SOURCE == "merge_request_event" test-rust-nightly: extends: test-rust-current image: rustlang/rust:nightly + allow_failure: true test-clean-rust-current: extends: test-rust-current + allow_failure: true variables: TEST_OPTIONS: $CLEAN_OPTIONS @@ -68,18 +90,25 @@ test-clean-rust-current: - rustup target add $TARGET_ARCH - cargo build $CARGO_OPTS --target $TARGET_ARCH --release - if [ -z "$NO_POSTPROCESS" ]; then strip $TARGET; $LDD_CMD $TARGET; $TARGET $TEST_OPTIONS; fi - - 'if [ -z "$DEBUG" ]; then curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file $TARGET "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/$TARGET_ARCH/${CI_COMMIT_TAG:-latest}/$APP_NAME"; fi' + - export VERSION=${CI_COMMIT_TAG:-latest} + - echo "VERSION=${VERSION}" > release.env + - 'if [ -z "$DEBUG" ]; then curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file $TARGET "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/$TARGET_ARCH/${VERSION}/$APP_NAME"; fi' artifacts: paths: - $TARGET + reports: + dotenv: release.env allow_failure: true rules: - - if: $CI_COMMIT_REF_NAME == 'main' + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - if: $CI_COMMIT_TAG + needs: + - copy-image-rust + - test-rust-current release-linux: extends: .rust-release - image: rust:$RUST_VERSION + image: ${REGISTRY_IMAGE_RUST} variables: TARGET_ARCH: x86_64-unknown-linux-musl LDD_CMD: ldd @@ -107,7 +136,7 @@ release-macos-x86: release-windows: extends: .rust-release - image: rust:$RUST_VERSION + image: ${REGISTRY_IMAGE_RUST} variables: TARGET_ARCH: x86_64-pc-windows-gnu APP_NAME: gitlab-project-doctor.exe @@ -116,18 +145,6 @@ release-windows: - apt-get update - apt-get install -y lld gcc-mingw-w64-x86-64 -docker_build: - stage: deploy - variables: - COMMIT_CREATE_LATEST: "false" - IMAGE_TAG: "v1.19.2-debug" - retry: 2 - needs: - - release-linux - cache: [ ] - rules: - - if: $CI_COMMIT_REF_NAME == 'main' - test-release-docker: stage: deploy_test image: $CI_REGISTRY/pub/numeco/gitlab-project-doctor:$CI_COMMIT_SHA @@ -135,9 +152,10 @@ test-release-docker: - gitlab-project-doctor --url $CI_PROJECT_URL -a cache: [ ] needs: - - docker_build + - release-gpd-image rules: - - if: $CI_COMMIT_REF_NAME == 'main' + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + - if: $CI_COMMIT_TAG test-release-linux: stage: deploy_test @@ -149,17 +167,5 @@ test-release-linux: - chmod +x gitlab-project-doctor - ./gitlab-project-doctor --url $CI_PROJECT_URL -a rules: - - if: $CI_COMMIT_REF_NAME == 'main' - -docker_build-prod: - stage: deploy - extends: docker_build - variables: - COMMIT_CREATE_LATEST: "true" - IMAGE_TAG: "v1.19.2-debug" - retry: 2 - needs: - - release-linux - cache: [ ] - rules: - - if: $CI_COMMIT_TAG \ No newline at end of file + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + - if: $CI_COMMIT_TAG -- GitLab