Commit 2c5bf8af authored by Pantelis Malekas's avatar Pantelis Malekas
Browse files

feat: add pipeline file

parent 6b384b39
Loading
Loading
Loading
Loading
Loading

.gitlab-ci.yml

0 → 100644
+170 −0
Original line number Diff line number Diff line
stages:
  - lint
  - get_images
  - update_values
  - package_publish

default:
  image: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/docker:20.10.16

variables:
  GIT_DEPTH: 0
  TMF_API_URL: "https://labs.etsi.org/rep/api/v4/projects/470/registry/repositories/3021/tags?page=1&per_page=500"
  SONATA_URL: "https://labs.etsi.org/rep/api/v4/projects/479/registry/repositories/3031/tags?page=1&per_page=500"
  OSS_CLIENT_URL: "https://labs.etsi.org/rep/api/v4/projects/474/registry/repositories/3023/tags?page=1&per_page=500"
  PKG_MANAGER_URL: "https://labs.etsi.org/rep/api/v4/projects/478/registry/repositories/3033/tags?page=1&per_page=500"
  PORTAL_CART_URL: "https://labs.etsi.org/rep/api/v4/projects/465/registry/repositories/3041/tags?page=1&per_page=500" 
  TELEMETRY_CLIENT_URL: "https://labs.etsi.org/rep/api/v4/projects/475/registry/repositories/3028/tags?page=1&per_page=500"
  PEERING_API_URL: "https://labs.etsi.org/rep/api/v4/projects/468/registry/repositories/3014/tags?page=1&per_page=500"
  REGISTRY_API_URL: "https://labs.etsi.org/rep/api/v4/projects/469/registry/repositories/3018/tags?page=1&per_page=500"
  FABRIC_API_URL: "https://labs.etsi.org/rep/api/v4/projects/467/registry/repositories/3011/tags?page=1&per_page=500"
  PORTAL_URL: "https://labs.etsi.org/rep/api/v4/projects/466/registry/repositories/3038/tags?page=1&per_page=500"
  
lint:
  stage: lint
  image:
    name: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/alpine/helm:3.17.2
    entrypoint: [""]
  script:
    - ls
    - cd charts
    - helm dep build hypo
    - helm lint hypo
  #rules:
  #  - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "schedule"'


get_images:
  stage: get_images
  image: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/alpine:latest
  before_script:
    - apk update && apk add bash curl jq
  script:
    - |
      TMF_API=$(curl --header "PRIVATE-TOKEN: $GROUP_ACCESS_TOKEN" --url $TMF_API_URL | jq -r '.[].location' | grep -E '[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
    - |
      SONATA=$(curl --header "PRIVATE-TOKEN: $GROUP_ACCESS_TOKEN" --url $SONATA_URL | jq -r '.[].location' | grep -E '[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
    - |
      OSS_CLIENT=$(curl --header "PRIVATE-TOKEN: $GROUP_ACCESS_TOKEN" --url $OSS_CLIENT_URL | jq -r '.[].location' | grep -E '[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
    - |
      PKG_MANAGER=$(curl --header "PRIVATE-TOKEN: $GROUP_ACCESS_TOKEN" --url $PKG_MANAGER_URL | jq -r '.[].location'  | grep -E '[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
    - |
      PORTAL_CART=$(curl --header "PRIVATE-TOKEN: $GROUP_ACCESS_TOKEN" --url $PORTAL_CART_URL | jq -r '.[].location'  | grep -E '[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
    - |
      TELEMETRY_CLIENT=$(curl --header "PRIVATE-TOKEN: $GROUP_ACCESS_TOKEN" --url $TELEMETRY_CLIENT_URL | jq -r '.[].location'  | grep -E '[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
    - |
      PEERING_API=$(curl --header "PRIVATE-TOKEN: $GROUP_ACCESS_TOKEN" --url $PEERING_API_URL | jq -r '.[].location'  | grep -E '[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
    - |
      REGISTRY_API=$(curl --header "PRIVATE-TOKEN: $GROUP_ACCESS_TOKEN" --url $REGISTRY_API_URL | jq -r '.[].location'  | grep -E '[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
    - |
      FABRIC_API=$(curl --header "PRIVATE-TOKEN: $GROUP_ACCESS_TOKEN" --url $FABRIC_API_URL | jq -r '.[].location'  | grep -E '[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
    - |
      PORTAL=$(curl --header "PRIVATE-TOKEN: $GROUP_ACCESS_TOKEN" --url $PORTAL_URL | jq -r '.[].location'  | grep -E '[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)  
    - echo "TMF_API=$TMF_API" > build.env 
    - echo "SONATA=$SONATA" >> build.env
    - echo "PKG_MANAGER=$PKG_MANAGER" >> build.env
    - echo "OSS_CLIENT=$OSS_CLIENT" >> build.env
    - echo "PORTAL_CART=$PORTAL_CART" >> build.env
    - echo "TELEMETRY_CLIENT=$TELEMETRY_CLIENT" >> build.env
    - echo "PEERING_API=$PEERING_API" >> build.env
    - echo "REGISTRY_API=$REGISTRY_API" >> build.env
    - echo "FABRIC_API=$FABRIC_API" >> build.env
    - echo "PORTAL=$PORTAL" >> build.env
  artifacts:
    paths:
      - build.env
  #rules:
  #  - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "schedule"'


update_values:
  stage: update_values
  image: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/python:3.9
  needs: 
    - get_images
  dependencies:
    - get_images
  before_script:
    - cat build.env
    - source build.env
    - echo $PKG_MANAGER
    - echo $OSS_CLIENT
    - echo $SONATA
    - echo $TMF_API
    - echo $PORTAL_CART
    - echo $TELEMETRY_CLIENT
    - echo $PEERING_API
    - echo $REGISTRY_API
    - echo $FABRIC_API
    - echo $PORTAL
    - python3 -m pip install ruamel.yaml
  script:
    - #echo "SKIP_PACKAGE=false" > skip.env
    - pwd
    - python3 scripts/helm_update_etsi.py $PKG_MANAGER $OSS_CLIENT $SONATA $TMF_API $PORTAL_CART $TELEMETRY_CLIENT $PEERING_API $REGISTRY_API $FABRIC_API $PORTAL --bump-chart --file=./charts/hypo/values.yaml
    - git add .
    - git config --global user.email $GITLAB_USER_EMAIL
    - git config --global user.name $GITLAB_USER_NAME
    - |
      if git commit -m "Update values.yaml [skip ci]"; then 
        git push -f "https://${GITLAB_USER_NAME}:${GROUP_ACCESS_TOKEN}@labs.etsi.org/rep/osl/hypo/code/org.etsi.osl.hypo.ops/installer.git" HEAD:main

        git fetch origin

        git checkout gitops-cd
        git pull origin gitops-cd
        git fetch origin main
        git merge origin/main -m "Merge changes from main"
      
        git status
        git push -f "https://${GITLAB_USER_NAME}:${GROUP_ACCESS_TOKEN}@labs.etsi.org/rep/osl/hypo/code/org.etsi.osl.hypo.ops/installer.git" HEAD:gitops-cd
      else
        echo "No changes to commit."
        #echo "SKIP_PACKAGE=true" > skip.env
      fi
  #artifacts:
  #  paths:
  #    - skip.env
  #rules:
  #  - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "schedule"'


package_publish:
  stage: package_publish
  allow_failure: true
  image:
    name: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/alpine/helm:3.17.2
    entrypoint: [""]
  needs: 
    - build_helm_package
  dependencies:
    - build_helm_package
  variables:
    CHART: hypo
    HELM_EXPERIMENTAL_OCI: 1
  before_script:
    - git fetch origin
    - git reset --hard origin/main
    - helm registry login -u "${HELM_REGISTRY_USER}" -p "${HELM_REGISTRY_PASSWORD}" registry.ubitech.eu
    - helm plugin install --version=v0.9.0 https://github.com/chartmuseum/helm-push.git
    #- source skip.env
  script:
    #- 'if [ "$SKIP_PACKAGE" == "true" ]; then exit 0; fi'
    - cd charts
    - helm package ./${CHART}
    - CHART_TGZ=$(ls ${CHART}*.tgz | head -n1)
    - >
      curl --request POST
      --form "chart=@${CHART_TGZ}"
      --user "${HELM_REGISTRY_USER}:${HELM_REGISTRY_PASSWORD}"
      https://labs.etsi.org/rep/api/v4/projects/481/packages/helm/api/stable/charts
    - helm push ${CHART}*.tgz oci://labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/installer
    - VERSION=$(helm show chart ${CHART_TGZ} | grep '^version:' | awk '{print $2}') 
    - echo "$VERSION" > ../chart_version.txt
  artifacts:
    paths:
      #- skip.env
      - chart_version.txt
  #rules:
  #  - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "schedule"'