From 32146b9424530c2e2cbc6b7d075d6d7027cf1998 Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Fri, 27 Dec 2024 11:27:31 +0100
Subject: [PATCH] First attempt in GitOps pipeline

---
 .gitlab-ci.yml                 | 184 ++++++++++++++++++---------------
 .gitlab/agents/dev/config.yaml |   0
 .gitlab/agents/dev/values.yaml | 161 +++++++++++++++++++++++++++++
 3 files changed, 261 insertions(+), 84 deletions(-)
 create mode 100644 .gitlab/agents/dev/config.yaml
 create mode 100644 .gitlab/agents/dev/values.yaml

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index aba94058e0..03f3c6b903 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -28,14 +28,55 @@ cache:
     - .m2/repository
 
 stages:
-  - build
   - lint
+  - build
+  - deploy
   - test
   - docs
   - release
   - verify
   - scan
 
+lint-docker-compose:
+  image: docker.io/alpine:${ALPINE_VERSION}
+  stage: lint
+  variables:
+    VERSION: 3.3.0
+    BINARY: yq_linux_amd64
+  before_script:
+    - 'apk --no-cache add bash wget'
+    - 'wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY} -O /usr/bin/yq && chmod +x /usr/bin/yq'
+    - 'ls -la .scripts'
+  script:
+    - "yq compare -P docker-compose.yml .docker/docker-compose.yml 'volumes.*'"
+    - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-analyse-service'"
+    - "bash .scripts/check-service.sh 'dbrepo-auth-db'"
+    - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-auth-service'"
+    - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-broker-service'"
+    - "IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-dashboard-service'"
+    - "bash .scripts/check-service.sh 'dbrepo-data-db'"
+    - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-data-service'"
+    - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-gateway-service'"
+    - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-identity-service'"
+    - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-metadata-db'"
+    - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-metadata-service'"
+    - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-metric-db'"
+    - "IGNORE_IMAGE=1 bash .scripts/check-service.sh 'dbrepo-search-db'"
+    - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-search-service'"
+    - "IGNORE_IMAGE=1 bash .scripts/check-service.sh 'dbrepo-search-service-init'"
+    - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-storage-service'"
+    - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-storage-service-init'"
+    - "IGNORE_IMAGE=1 bash .scripts/check-service.sh 'dbrepo-ui'"
+    - "bash .scripts/check-service.sh 'dbrepo-upload-service'"
+
+lint-helm-chart:
+  image: docker.io/alpine:3.20
+  stage: lint
+  before_script:
+    - apk add helm
+  script:
+    - helm lint ./helm/dbrepo
+
 build-metadata-service:
   image: maven:3-openjdk-${JAVA_VERSION}
   stage: build
@@ -125,73 +166,24 @@ build-helm:
     - apk add sed helm curl
     - helm package ./helm/dbrepo --destination ./build
 
-lint-docker-compose:
+deploy-staging:
   image: docker.io/alpine:${ALPINE_VERSION}
-  stage: lint
-  variables:
-    VERSION: 3.3.0
-    BINARY: yq_linux_amd64
+  stage: deploy
+  environment:
+    name: staging/datalab
+    url: ${CI_ENV_STAGING_URL}
   before_script:
-    - 'apk --no-cache add bash wget'
-    - 'wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY} -O /usr/bin/yq && chmod +x /usr/bin/yq'
-    - 'ls -la .scripts'
+    - apk add --no-cache helm make
+    - echo ${CI_K8S_CONFIG} | base64 -d > ./kubecfg
+    - make build-helm
+    - helm -n ${CI_ENV_STAGING_NAMESPACE} uninstall ${CI_ENV_STAGING_RELEASE_NAME}
+    - kubectl -n ${CI_ENV_STAGING_NAMESPACE} delete pvc --all
   script:
-    - "yq compare -P docker-compose.yml .docker/docker-compose.yml 'volumes.*'"
-    - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-analyse-service'"
-    - "bash .scripts/check-service.sh 'dbrepo-auth-db'"
-    - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-auth-service'"
-    - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-broker-service'"
-    - "IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-dashboard-service'"
-    - "bash .scripts/check-service.sh 'dbrepo-data-db'"
-    - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-data-service'"
-    - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-gateway-service'"
-    - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-identity-service'"
-    - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-metadata-db'"
-    - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-metadata-service'"
-    - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-metric-db'"
-    - "IGNORE_IMAGE=1 bash .scripts/check-service.sh 'dbrepo-search-db'"
-    - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-search-service'"
-    - "IGNORE_IMAGE=1 bash .scripts/check-service.sh 'dbrepo-search-service-init'"
-    - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-storage-service'"
-    - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-storage-service-init'"
-    - "IGNORE_IMAGE=1 bash .scripts/check-service.sh 'dbrepo-ui'"
-    - "bash .scripts/check-service.sh 'dbrepo-upload-service'"
-
-verify-install-script:
-  image: docker.io/docker:24-dind
-  stage: verify
+    - helm -n ${CI_ENV_STAGING_NAMESPACE} upgrade --install ${CI_ENV_STAGING_RELEASE_NAME} ./build/${CI_ENV_STAGING_RELEASE_NAME}-${CHART_VERSION}.tgz --create-namespace -f ./.gitlab/agents/dev/values.yaml
   only:
     refs:
-      - /^release-.*/
-  variables:
-    SKIP_CHECKS: 1
-  before_script:
-    - "apk add bash curl"
-  script:
-    - "curl -sSL https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/release-${DOC_VERSION}/install.sh | bash | grep 'Success!'"
-
-verify-dist:
-  image: docker.io/alpine:${ALPINE_VERSION}
-  stage: verify
-  only:
-    refs:
-      - /^release-.*/
-  before_script:
-    - "apk add curl"
-  script:
-    - "curl -v --output /dev/null --fail https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/${APP_VERSION}/dist.tar.gz"
-
-lint-helm-chart:
-  image: docker.io/alpine:3.20
-  stage: lint
-  needs:
-    - build-metadata-service
-  dependencies:
-    - build-metadata-service
-  before_script:
-    - apk add helm
-  script:
-    - helm lint ./helm/dbrepo
+      - dev
+  when: manual
 
 test-metadata-service:
   image: maven:3-openjdk-${JAVA_VERSION}
@@ -355,27 +347,6 @@ test-ui:
     - "sleep 30"
     - "ENDPOINT=http://localhost:3000 bash ./dbrepo-ui/test/test_heap.sh"
 
-scan-sonarqube:
-  image: sonarsource/sonar-scanner-cli:10.0
-  stage: scan
-  only:
-    refs:
-      - master
-  needs:
-    - build-data-service
-    - build-metadata-service
-  dependencies:
-    - build-data-service
-    - build-metadata-service
-  script:
-    - 'sonar-scanner -Dsonar.token="${CI_SONAR_TOKEN}"'
-  allow_failure: true
-  cache:
-    policy: pull
-    key: "${CI_COMMIT_SHORT_SHA}"
-    paths:
-      - sonar-scanner/
-
 release-images:
   stage: release
   image: docker:24-dind
@@ -472,3 +443,48 @@ release-libs:
   script:
     - bash ./lib/python/package.sh
     - bash ./lib/python/release.sh
+
+verify-install-script:
+  image: docker.io/docker:24-dind
+  stage: verify
+  only:
+    refs:
+      - /^release-.*/
+  variables:
+    SKIP_CHECKS: 1
+  before_script:
+    - "apk add bash curl"
+  script:
+    - "curl -sSL https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/release-${DOC_VERSION}/install.sh | bash | grep 'Success!'"
+
+verify-dist:
+  image: docker.io/alpine:${ALPINE_VERSION}
+  stage: verify
+  only:
+    refs:
+      - /^release-.*/
+  before_script:
+    - "apk add curl"
+  script:
+    - "curl -v --output /dev/null --fail https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/${APP_VERSION}/dist.tar.gz"
+
+scan-sonarqube:
+  image: sonarsource/sonar-scanner-cli:10.0
+  stage: scan
+  only:
+    refs:
+      - master
+  needs:
+    - build-data-service
+    - build-metadata-service
+  dependencies:
+    - build-data-service
+    - build-metadata-service
+  script:
+    - 'sonar-scanner -Dsonar.token="${CI_SONAR_TOKEN}"'
+  allow_failure: true
+  cache:
+    policy: pull
+    key: "${CI_COMMIT_SHORT_SHA}"
+    paths:
+      - sonar-scanner/
\ No newline at end of file
diff --git a/.gitlab/agents/dev/config.yaml b/.gitlab/agents/dev/config.yaml
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/.gitlab/agents/dev/values.yaml b/.gitlab/agents/dev/values.yaml
new file mode 100644
index 0000000000..e1641b5077
--- /dev/null
+++ b/.gitlab/agents/dev/values.yaml
@@ -0,0 +1,161 @@
+hostname: s155.datalab.tuwien.ac.at
+gateway: https://s155.datalab.tuwien.ac.at
+
+metadatadb:
+  enabled: true
+  rootUser:
+    user: root
+    password: da19c7cf5c0deba7bd47c174a0eb273b
+  galera:
+    mariabackup:
+      user: mariabackup
+      password: 9e447eeaf3e4b6aa26ea01582f0e8a54
+  persistence:
+    enabled: true
+
+authservice:
+  enabled: true
+  auth:
+    adminUser: admin
+    adminPassword: ea72038fa14b968fc0ed09e182ecf624
+  postgresql:
+    auth:
+      postgresPassword: 129d5b888b8df271fa482da39f15c513
+  jwt:
+    pubkey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB"
+  client:
+    id: dbrepo-client
+    secret: MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG
+  persistence:
+    enabled: true
+
+brokerservice:
+  enabled: true
+  ldap:
+    bindpw: b8534187c9adf9618e7bd1c79c7f4639
+identityservice:
+  enabled: true
+  global:
+    adminUser: admin
+    adminPassword: b8534187c9adf9618e7bd1c79c7f4639
+  users: admin
+  userPasswords: ea72038fa14b968fc0ed09e182ecf624
+
+datadb:
+  enabled: true
+  rootUser:
+    user: root
+    password: fdf8578499b2083eb3aa03a861ac7912
+  galera:
+    mariabackup:
+      user: mariabackup
+      password: ef60e32e3217525474635cd28422c829
+  replicaCount: 3
+  persistence:
+    enabled: true
+
+searchdb:
+  enabled: true
+  security:
+    enabled: false
+  extraEnvs:
+    - name: DISABLE_INSTALL_DEMO_CONFIG
+      value: "true"
+  persistence:
+    enabled: true
+
+analyseservice:
+  enabled: true
+
+metadataservice:
+  enabled: true
+  admin:
+    email: noreply@example.com
+  deletedRecord: permanent
+  repositoryName: Database Repository
+  granularity: YYYY-MM-DDThh:mm:ssZ
+  datacite:
+    enabled: false
+    url: https://api.datacite.org
+    prefix: ""
+    username: ""
+    password: ""
+
+dataservice:
+  enabled: true
+  rabbitmq:
+    consumer:
+      username: admin
+      password: ea72038fa14b968fc0ed09e182ecf624
+  s3:
+    auth:
+      username: a45e7a77607a8906e92237f00ea72f58
+      password: e2c4303dcbfd3a2c606fe30d19fcb82b
+    filePath: /s3
+
+searchservice:
+  enabled: true
+
+storageservice:
+  enabled: true
+
+uploadservice:
+  enabled: true
+
+dashboardservice:
+  enabled: true
+
+metricdb:
+  enabled: true
+  server:
+    rbac:
+      create: false
+
+ui:
+  enabled: true
+  public:
+    api:
+      client: https://s155.datalab.tuwien.ac.at
+      server: https://s155.datalab.tuwien.ac.at
+    title: "Database Repository"
+    logo: "https://s155.datalab.tuwien.ac.at/assets/logo.png"
+    icon: "https://s155.datalab.tuwien.ac.at/assets/favicon.png"
+    touch: "https://s155.datalab.tuwien.ac.at/assets/favicon.png"
+    broker:
+      host: s155.datalab.tuwien.ac.at
+      extra: "128.130.0.0/15"
+    database:
+      extra: "128.130.0.0/15"
+    pid:
+      default:
+        publisher: "TU Wien"
+    doi:
+      enabled: false
+      endpoint: https://doi.org
+  extraVolumes: [ ]
+  #  - name: images-map
+  #    configMap:
+  #      name: ui-config
+  extraVolumeMounts: [ ]
+  #  - name: images-map
+  #    mountPath: /static/logo.svg
+  #    subPath: logo.svg
+
+gatewayservice:
+  extraVolumes:
+    - name: config-map
+      configMap:
+        name: gateway-service-config
+  extraVolumeMounts:
+    - name: config-map
+      mountPath: /etc/nginx/assets/assets
+
+ingress:
+  enabled: true
+  className: nginx
+  tls:
+    enabled: true
+    secretName: ingress-cert
+  annotations:
+    cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
+#    nginx.ingress.kubernetes.io/whitelist-source-range: 128.130.0.0/15
-- 
GitLab