Commit 866c9afb authored by Nikos Psaromanolakis's avatar Nikos Psaromanolakis
Browse files

Edit .gitlab-ci.yml

parent 754699a0
Loading
Loading
Loading
Loading
+186 −8
Original line number Diff line number Diff line
stages:
  - lint
  - dev_deploy
  - dev_workflows
  - dev_merge
  - get_images
  - update_values
  - package_publish
  - release

default:
  image: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/docker:20.10.16
@@ -30,8 +34,126 @@ lint:
    - cd charts
    - helm dep build hypo
    - helm lint hypo
  #rules:
  #  - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "schedule"'
  except:
    - main
    - tags


dev_deploy_job:
  stage: dev_deploy
  image:
    name: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/python-argocd:3.9
    pull_policy: [always, if-not-present]

  before_script:
    - mkdir -p /tmp/bin
    - export PATH="/tmp/bin:$PATH"

    # Install age
    - curl -L -o /tmp/age.tar.gz https://github.com/FiloSottile/age/releases/download/v1.2.1/age-v1.2.1-linux-amd64.tar.gz
    - tar -xzf /tmp/age.tar.gz -C /tmp
    - mv /tmp/age/age /tmp/age/age-keygen /tmp/bin/

    # Install sops
    - curl -L -o /tmp/bin/sops https://github.com/getsops/sops/releases/download/v3.10.2/sops-v3.10.2.linux.amd64
    - chmod +x /tmp/bin/sops

    - sops --version
    - age --version

    # Git configuration
    - git config --global user.email "$GITLAB_USER_EMAIL"
    - git config --global user.name "$GITLAB_USER_NAME"

    # Authenticate Git using the Group Access Token
    - git remote set-url origin "https://${GITLAB_USER_NAME}:${GROUP_ACCESS_TOKEN}@labs.etsi.org/rep/osl/hypo/code/org.etsi.osl.hypo.ops/installer.git"

    # Checkout GitOps branch
    - git fetch origin gitops-cd
    - git checkout gitops-cd
    - git pull origin gitops-cd

    # SOPS key
    - echo "$SOPS_AGE_KEY_PRIVATE" > ~/.sops-age-key.txt
    - chmod 600 ~/.sops-age-key.txt
    - export SOPS_AGE_KEY_FILE=~/.sops-age-key.txt

  script:
    # Decrypt values
    - sops --decrypt charts/hypo/values-cd.enc.yaml > charts/hypo/values-cd.yaml

    # Update Helm values
    - python3 scripts/helm_update_etsi.py $DEV_PORTAL_CART_IMAGE $DEV_TMF_API_IMAGE $DEV_SONATA_CORE_IMAGE $DEV_SONATA_HELM_IMAGE $DEV_SONATA_OSS_IMAGE $DEV_TELEMETRY_IMAGE $DEV_PEERING_IMAGE $DEV_REGISTRY_IMAGE $DEV_FABRIC_IMAGE $DEV_PORTAL

    # Encrypt values again
    - sops --encrypt --age "$SOPS_AGE_KEY_PUBLIC" charts/hypo/values-cd.yaml > charts/hypo/values-cd.enc.yaml

    # Cleanup
    - rm -f charts/hypo/values-cd.yaml ~/.sops-age-key.txt

    # Commit & Push
    - git add charts/hypo/values-cd.enc.yaml

    - |
      if git diff --cached --quiet; then
        echo "No changes to commit."
      else
        git commit -m "Update values.yaml for GitOps CD [skip ci]"
        git push origin HEAD:gitops-cd
      fi

    # Sync ArgoCD
    - |
      set -e
      argocd login "$ARGOCD_SERVER" \
        --username "$ARGOCD_USERNAME" \
        --password "$ARGOCD_PASSWORD" \
        --insecure

      argocd app get hypo --refresh >/dev/null
      argocd app wait hypo --sync --health --timeout 120

      echo "Argo CD application 'hypo' is synced and healthy."

  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'



dev_workflows_job:
  stage: dev_workflows
  image: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/maven:3.9-eclipse-temurin-17
  before_script:
    # clone the integration tests repo
    - git clone --depth 1 "https://oauth2:$GROUP_ACCESS_TOKEN@$INTEGRATION_REPO"
    - cd integration.tests
  script:
    - mvn -B -q test "-Dkarate.env=$KARATE_ENV" "-Dkarate.options=--tags @smoke-e2e-workflow-private"
  dependencies:
    - dev_deploy_job
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'


dev_merge:
  stage: dev_merge
  image:
    name: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/alpine:latest
    pull_policy: [always, if-not-present]
  script:
    - git config --global user.email "$GITLAB_USER_EMAIL"
    - git config --global user.name "$GITLAB_USER_NAME"
    - git remote set-url origin "https://${GITLAB_USER_NAME}:${GROUP_ACCESS_TOKEN}@labs.etsi.org/rep/osl/hypo/code/org.etsi.osl.hypo.ops/installer.git"

    - git fetch origin main
    - git fetch origin gitops-cd

    - git checkout gitops-cd
    - git pull origin gitops-cd
    - git merge origin/main -m "Merge changes from main"
    - git push origin gitops-cd
  rules:
    - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push"'


get_images:
@@ -73,8 +195,12 @@ get_images:
  artifacts:
    paths:
      - build.env
  #rules:
  #  - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "schedule"'
  only:
    refs:
      - main
      - gitops-cd
    variables:
      - '$CI_COMMIT_MESSAGE =~ /^release:\s\d/'


update_values:
@@ -125,8 +251,12 @@ update_values:
  #artifacts:
  #  paths:
  #    - skip.env
  #rules:
  #  - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "schedule"'
  only:
    refs:
      - main
      - gitops-cd
    variables:
      - '$CI_COMMIT_MESSAGE =~ /^release:\s\d/'


package_publish:
@@ -164,6 +294,54 @@ package_publish:
    paths:
      #- skip.env
      - chart_version.txt
  #rules:
  #  - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "schedule"'
  only:
    refs:
      - main
      - gitops-cd
    variables:
      - '$CI_COMMIT_MESSAGE =~ /^release:\s/'

prepare_release:
  stage: release
  image: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/alpine:latest
  dependencies:
    - package_publish
  script:
    - RELEASE_VERSION=$(echo "$CI_COMMIT_MESSAGE" | sed -E 's/^release:[[:space:]]*//')
    - echo "RELEASE_VERSION=$RELEASE_VERSION" > release.env
    - cat release.env
  artifacts:
    reports:
      dotenv: release.env
  only:
    refs:
      - main
      - develop
    variables:
      - '$CI_COMMIT_MESSAGE =~ /^release:\s/'


release_job:
  stage: release
  image: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/release-cli:latest
  needs:
    - job: package_publish
    - job: prepare_release
      artifacts: true
  dependencies:
    - prepare_release

  script:
    - echo "Creating release $RELEASE_VERSION"

  release:
    tag_name: $RELEASE_VERSION
    description: $RELEASE_VERSION

  only:
    refs:
      - main
      - develop
    variables:
      - '$CI_COMMIT_MESSAGE =~ /^release:\s/'