---
kind: ConfigMap
apiVersion: v1
metadata:
  name: tower-groundswell-cfg
data:
  # Server settings
  SWELL_SERVER_HOST: "0.0.0.0"
  SWELL_SERVER_PORT: "8090"

  # Database settings, different from the tower DB credentials.
  # If using Amazon RDS or similar managed database services, `SWELL_DB_URL` will have the form
  # SWELL_DB_URL=mysql://db1.abcdefghijkl.us-east-1.rds.amazonaws.com:3306/swell or similar
  SWELL_DB_URL: mysql://<DB_AND_PORT>/swell
  SWELL_DB_USER: swell
  SWELL_DB_PASSWORD: <YOUR DATABASE PASSWORD>
  SWELL_DB_DIALECT: mysql
---
apiVersion: v1
kind: Service
metadata:
  name: groundswell
  labels:
    app: groundswell
spec:
  selector:
    app: groundswell
  ports:
    - name: http
      port: 8090
      # targetPort must match with the SWELL_SERVER_PORT in the ConfigMap above.
      targetPort: 8090
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: groundswell
  labels:
    app: groundswell
spec:
  selector:
    matchLabels:
      app: groundswell
  strategy:
    type: Recreate

  template:
    metadata:
      labels:
        app: groundswell
    spec:
      imagePullSecrets:
        - name: "cr.seqera.io"
      securityContext:
        fsGroup: 101

      initContainers:
        - name: wait-for-tower-db
          image: "docker.io/library/mysql:8.4"
          command:
            - 'bash'
            - '-c'
            - |
              echo "$(date): starting check for db $TOWER_DB_URL"
              # Strip initial Java connection string and options after '?' from URI
              until mysqlsh --uri "$(echo $TOWER_DB_URL |cut -d'?' -f1 |sed -e 's@jdbc:\(.*\)@\1@')" -u"$TOWER_DB_USER" -p"$TOWER_DB_PASSWORD" --sql -e "SELECT VERSION()"; do
                echo "$(date): see you in $SLEEP_PERIOD_SECONDS seconds"
                sleep $SLEEP_PERIOD_SECONDS
              done
              echo "$(date): db server ready"
          env:
            - name: SLEEP_PERIOD_SECONDS
              value: "5"
          envFrom:
            - configMapRef:
                name: tower-backend-cfg

        - name: wait-for-swell-db
          image: "docker.io/library/mysql:8.4"
          command:
            - 'bash'
            - '-c'
            - |
              echo "$(date): starting check for db $SWELL_DB_URL"
              # Strip initial Java connection string and options after '?' from URI
              until mysqlsh --uri "$SWELL_DB_URL" -u"$SWELL_DB_USER" -p"$SWELL_DB_PASSWORD" --sql -e "SELECT VERSION()"; do
                echo "$(date): see you in $SLEEP_PERIOD_SECONDS seconds"
                sleep $SLEEP_PERIOD_SECONDS
              done
              echo "$(date): db server ready"
          env:
            - name: SLEEP_PERIOD_SECONDS
              value: "5"
          envFrom:
            - configMapRef:
                name: tower-groundswell-cfg

        - name: migrate-db
          image: "cr.seqera.io/enterprise/platform/pipeline-optimization:0.4.15"
          command: ['/opt/groundswell/bin/migrate-db.sh']
          envFrom:
            - configMapRef:
                name: tower-groundswell-cfg
            - configMapRef:
                name: tower-backend-cfg

      containers:
        - name: groundswell
          image: "cr.seqera.io/enterprise/platform/pipeline-optimization:0.4.15"
          env:
            - name: MPLCONFIGDIR
              value: "/tmp"
          envFrom:
            - configMapRef:
                name: tower-backend-cfg
            - configMapRef:
                name: tower-groundswell-cfg
          volumeMounts:
            - name: tmp-volume
              mountPath: /tmp/
          securityContext:
            capabilities:
              drop:
              - ALL
            readOnlyRootFilesystem: true
            runAsNonRoot: true
            runAsUser: 101

      volumes:
        - name: tmp-volume
          emptyDir:
            sizeLimit: "1Gi"
