Commit c28e7d8e authored by Nikos Psaromanolakis's avatar Nikos Psaromanolakis
Browse files

fix: Edit .gitlab-ci.yml

parent 0b8743b1
Loading
Loading
Loading
Loading
Loading
+74 −20
Original line number Diff line number Diff line
@@ -3,6 +3,10 @@ stages:
  # - test
  # - analyze
  - dev_image_build
  #- dev_deploy
  #- dev_workflows
  - develop_image_tag
  - validate_main_source
  - release
  - image_build

@@ -44,8 +48,11 @@ lint:
  artifacts:
    paths:
      - ${SONAR_GO_COVERAGE}
  rules:
    - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "main"'
  except:
    - main
    - tags
    - develop


dev_image_build_job:
  stage: dev_image_build
@@ -53,9 +60,12 @@ dev_image_build_job:
    - hypo
  image:
    name: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/docker:29.1.3
  variables:
    BUILT_IMAGE: "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA"
  before_script:
    - docker info
    - echo -n "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY"
    - apk add --no-cache curl
  script:
    - >
      docker build
@@ -67,8 +77,57 @@ dev_image_build_job:
      -t "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA"
      -f "$DOCKERFILE" .
    - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA"

    # Store the exact built image for the next develop pipeline
    - |
      curl --fail --request PUT \
        --header "PRIVATE-TOKEN: $GROUP_ACCESS_TOKEN" \
        --form "value=$BUILT_IMAGE" \
        "$CI_API_V4_URL/projects/$CI_PROJECT_ID/variables/LAST_MR_BUILT_IMAGE"

  after_script:
    - docker image rm -f "$BUILT_IMAGE" || true

  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"'

develop_image_tag_job:
  stage: develop_image_tag
  tags:
    - hypo
  image:
    name: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/docker:29.1.3
  variables:
    DEVELOP_IMAGE: "$CI_REGISTRY_IMAGE/$IMAGE_NAME:dev-latest"
  before_script:
    - docker info > /dev/null
  script:
    - echo -n $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
    - echo "Promoting image for develop commit $LAST_MR_BUILT_IMAGE"
    - docker pull "$LAST_MR_BUILT_IMAGE"
    - docker tag "$LAST_MR_BUILT_IMAGE" "$DEVELOP_IMAGE"
    - docker push "$DEVELOP_IMAGE"
  after_script:
    - docker image rm -f "$LAST_MR_BUILT_IMAGE" "$DEVELOP_IMAGE" || true
  only:
    - develop

validate_main_source_job:
  stage: validate_main_source
  tags:
    - hypo
  script:
    - |
      if [ "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" != "develop" ]; then
        echo "ERROR: Only develop can be merged into main."
        exit 1
      fi
      echo "Valid merge: develop -> main"
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" &&
           $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"'
    - when: never


semantic_versioning_job:
  image: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/node:lts
@@ -93,8 +152,9 @@ semantic_versioning_job:
  artifacts:
    paths:
      - release_version.txt
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
  only:
    - main


image_build_job:
  stage: image_build
@@ -110,21 +170,15 @@ image_build_job:
    - if [ "$RELEASE_VERSION" = "no-release" ]; then exit 0; fi
    - echo -n "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY"
  script:
    - >
      docker build
      --pull
      --network host
      --build-arg USERNAME="$CI_REGISTRY_USER"
      --build-arg PASSWORD="$CI_JOB_TOKEN"
      --build-arg CI_SERVER_HOST="$CI_SERVER_HOST"
      -t "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA"
      -f "$DOCKERFILE" .
      
    - docker tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest
    - docker tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA $CI_REGISTRY_IMAGE/$IMAGE_NAME:$RELEASE_VERSION
    - docker pull $CI_REGISTRY_IMAGE/$IMAGE_NAME:dev-latest
    - docker tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:dev-latest $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest
    - docker tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:dev-latest $CI_REGISTRY_IMAGE/$IMAGE_NAME:$RELEASE_VERSION
    - docker push $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest
    - docker push $CI_REGISTRY_IMAGE/$IMAGE_NAME:$RELEASE_VERSION
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
  after_script:
    - docker image rm -f $CI_REGISTRY_IMAGE/$IMAGE_NAME:$RELEASE_VERSION $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest $CI_REGISTRY_IMAGE/$IMAGE_NAME:dev-latest || true

  dependencies:
    - semantic_versioning_job
  only:
    - main