diff --git a/.github/workflows/release-selfhost.yml b/.github/workflows/release-selfhost.yml index ad0941709c..78009501f8 100644 --- a/.github/workflows/release-selfhost.yml +++ b/.github/workflows/release-selfhost.yml @@ -46,12 +46,16 @@ jobs: - uses: azure/setup-helm@v1 id: install - # So, we need to inject the values into this - run: yarn release:helm - - - name: Run chart-releaser - uses: helm/chart-releaser-action@v1.1.0 - with: - charts_dir: docs env: - CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + BUDIBASE_RELEASE_VERSION: ${{ steps.previoustag.outputs.tag }} + + - name: Configure Git + run: | + git config user.name "Budibase Helm Bot" + git config user.email "<>" + + - name: Run chart-releaser + uses: helm/chart-releaser-action@v1.2.0 + env: + CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 71432c2403..d4142f7ac9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -56,3 +56,5 @@ jobs: DOCKER_USER: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_API_KEY }} BUDIBASE_RELEASE_VERSION: ${{ steps.previoustag.outputs.tag }} + + # Release to pre-prod environment \ No newline at end of file diff --git a/hosting/kubernetes/budibase/.helmignore b/charts/budibase/.helmignore similarity index 100% rename from hosting/kubernetes/budibase/.helmignore rename to charts/budibase/.helmignore diff --git a/charts/budibase/Chart.yaml b/charts/budibase/Chart.yaml new file mode 100644 index 0000000000..602ffbf420 --- /dev/null +++ b/charts/budibase/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: budibase +description: >- + Budibase is an open source low-code platform, helping thousands of teams build + apps for their workplace in minutes. +keywords: + - low-code + - database + - cluster +sources: + - https://github.com/Budibase/budibase + - https://budibase.com +type: application +version: 0.2.6 +appVersion: 1.0.10 +dependencies: + - name: couchdb + version: 3.3.4 + repository: https://apache.github.io/couchdb-helm + condition: services.couchdb.enabled + - name: ingress-nginx + version: 3.35.0 + repository: https://github.com/kubernetes/ingress-nginx + condition: ingress.nginx diff --git a/hosting/kubernetes/budibase/README.md b/charts/budibase/README.md similarity index 100% rename from hosting/kubernetes/budibase/README.md rename to charts/budibase/README.md diff --git a/charts/budibase/charts/couchdb-3.3.4.tgz b/charts/budibase/charts/couchdb-3.3.4.tgz new file mode 100644 index 0000000000..f7ebfd3e96 Binary files /dev/null and b/charts/budibase/charts/couchdb-3.3.4.tgz differ diff --git a/hosting/kubernetes/budibase/charts/ingress-nginx-3.35.0.tgz b/charts/budibase/charts/ingress-nginx-3.35.0.tgz similarity index 100% rename from hosting/kubernetes/budibase/charts/ingress-nginx-3.35.0.tgz rename to charts/budibase/charts/ingress-nginx-3.35.0.tgz diff --git a/hosting/kubernetes/budibase/templates/NOTES.txt b/charts/budibase/templates/NOTES.txt similarity index 100% rename from hosting/kubernetes/budibase/templates/NOTES.txt rename to charts/budibase/templates/NOTES.txt diff --git a/hosting/kubernetes/budibase/templates/_helpers.tpl b/charts/budibase/templates/_helpers.tpl similarity index 100% rename from hosting/kubernetes/budibase/templates/_helpers.tpl rename to charts/budibase/templates/_helpers.tpl diff --git a/hosting/kubernetes/budibase/templates/alb-ingress.yaml b/charts/budibase/templates/alb-ingress.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/alb-ingress.yaml rename to charts/budibase/templates/alb-ingress.yaml diff --git a/hosting/kubernetes/budibase/templates/app-service-deployment.yaml b/charts/budibase/templates/app-service-deployment.yaml similarity index 93% rename from hosting/kubernetes/budibase/templates/app-service-deployment.yaml rename to charts/budibase/templates/app-service-deployment.yaml index 7c62ada63f..8086c0ab20 100644 --- a/hosting/kubernetes/budibase/templates/app-service-deployment.yaml +++ b/charts/budibase/templates/app-service-deployment.yaml @@ -73,17 +73,13 @@ spec: name: {{ template "budibase.fullname" . }} key: objectStoreSecret - name: MINIO_URL - {{ if .Values.services.objectStore.url }} value: {{ .Values.services.objectStore.url }} - {{ else }} - value: http://minio-service:{{ .Values.services.objectStore.port }} - {{ end }} - name: PORT value: {{ .Values.services.apps.port | quote }} - name: MULTI_TENANCY value: {{ .Values.globals.multiTenancy | quote }} - name: LOG_LEVEL - value: {{ .Values.services.apps.logLevel | quote }} + value: {{ default "info" .Values.services.apps.logLevel | quote }} - name: REDIS_PASSWORD value: {{ .Values.services.redis.password }} - name: REDIS_URL @@ -110,7 +106,7 @@ spec: value: {{ .Values.globals.accountPortalApiKey | quote }} - name: COOKIE_DOMAIN value: {{ .Values.globals.cookieDomain | quote }} - image: budibase/apps + image: budibase/apps:{{ .Values.globals.appVersion }} imagePullPolicy: Always name: bbapps ports: diff --git a/hosting/kubernetes/budibase/templates/app-service-service.yaml b/charts/budibase/templates/app-service-service.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/app-service-service.yaml rename to charts/budibase/templates/app-service-service.yaml diff --git a/charts/budibase/templates/couchdb-backup.yaml b/charts/budibase/templates/couchdb-backup.yaml new file mode 100644 index 0000000000..1072046c8c --- /dev/null +++ b/charts/budibase/templates/couchdb-backup.yaml @@ -0,0 +1,43 @@ +{{- if .Values.services.couchdb.backup.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: kompose convert + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + app.kubernetes.io/name: couchdb-backup + name: couchdb-backup +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: couchdb-backup + strategy: + type: Recreate + template: + metadata: + annotations: + kompose.cmd: kompose convert + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + app.kubernetes.io/name: couchdb-backup + spec: + containers: + - env: + - name: SOURCE + value: {{ .Values.services.couchdb.url }} + - name: TARGET + value: {{ .Values.services.couchdb.backup.target | quote }} + - name: RUN_EVERY_SECS + value: {{ .Values.services.couchdb.backup.interval | quote }} + - name: VERBOSE + value: "true" + image: redgeoff/replicate-couchdb-cluster + imagePullPolicy: Always + name: couchdb-backup + resources: {} +status: {} +{{- end }} diff --git a/hosting/kubernetes/budibase/templates/hpa.yaml b/charts/budibase/templates/hpa.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/hpa.yaml rename to charts/budibase/templates/hpa.yaml diff --git a/hosting/kubernetes/budibase/templates/ingress.yaml b/charts/budibase/templates/ingress.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/ingress.yaml rename to charts/budibase/templates/ingress.yaml diff --git a/hosting/kubernetes/budibase/templates/minio-data-persistentvolumeclaim.yaml b/charts/budibase/templates/minio-data-persistentvolumeclaim.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/minio-data-persistentvolumeclaim.yaml rename to charts/budibase/templates/minio-data-persistentvolumeclaim.yaml diff --git a/hosting/kubernetes/budibase/templates/minio-service-deployment.yaml b/charts/budibase/templates/minio-service-deployment.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/minio-service-deployment.yaml rename to charts/budibase/templates/minio-service-deployment.yaml diff --git a/hosting/kubernetes/budibase/templates/minio-service-service.yaml b/charts/budibase/templates/minio-service-service.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/minio-service-service.yaml rename to charts/budibase/templates/minio-service-service.yaml diff --git a/hosting/kubernetes/budibase/templates/proxy-service-deployment.yaml b/charts/budibase/templates/proxy-service-deployment.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/proxy-service-deployment.yaml rename to charts/budibase/templates/proxy-service-deployment.yaml diff --git a/hosting/kubernetes/budibase/templates/proxy-service-service.yaml b/charts/budibase/templates/proxy-service-service.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/proxy-service-service.yaml rename to charts/budibase/templates/proxy-service-service.yaml diff --git a/hosting/kubernetes/budibase/templates/redis-data-persistentvolumeclaim.yaml b/charts/budibase/templates/redis-data-persistentvolumeclaim.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/redis-data-persistentvolumeclaim.yaml rename to charts/budibase/templates/redis-data-persistentvolumeclaim.yaml diff --git a/hosting/kubernetes/budibase/templates/redis-service-deployment.yaml b/charts/budibase/templates/redis-service-deployment.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/redis-service-deployment.yaml rename to charts/budibase/templates/redis-service-deployment.yaml diff --git a/hosting/kubernetes/budibase/templates/redis-service-service.yaml b/charts/budibase/templates/redis-service-service.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/redis-service-service.yaml rename to charts/budibase/templates/redis-service-service.yaml diff --git a/hosting/kubernetes/budibase/templates/secrets.yaml b/charts/budibase/templates/secrets.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/secrets.yaml rename to charts/budibase/templates/secrets.yaml diff --git a/hosting/kubernetes/budibase/templates/service.yaml b/charts/budibase/templates/service.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/service.yaml rename to charts/budibase/templates/service.yaml diff --git a/hosting/kubernetes/budibase/templates/serviceaccount.yaml b/charts/budibase/templates/serviceaccount.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/serviceaccount.yaml rename to charts/budibase/templates/serviceaccount.yaml diff --git a/hosting/kubernetes/budibase/templates/tests/test-connection.yaml b/charts/budibase/templates/tests/test-connection.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/tests/test-connection.yaml rename to charts/budibase/templates/tests/test-connection.yaml diff --git a/hosting/kubernetes/budibase/templates/worker-service-deployment.yaml b/charts/budibase/templates/worker-service-deployment.yaml similarity index 93% rename from hosting/kubernetes/budibase/templates/worker-service-deployment.yaml rename to charts/budibase/templates/worker-service-deployment.yaml index 6cded8545f..8b6f5564ad 100644 --- a/hosting/kubernetes/budibase/templates/worker-service-deployment.yaml +++ b/charts/budibase/templates/worker-service-deployment.yaml @@ -70,17 +70,13 @@ spec: name: {{ template "budibase.fullname" . }} key: objectStoreSecret - name: MINIO_URL - {{ if .Values.services.objectStore.url }} value: {{ .Values.services.objectStore.url }} - {{ else }} - value: http://minio-service:{{ .Values.services.objectStore.port }} - {{ end }} - name: PORT value: {{ .Values.services.worker.port | quote }} - name: MULTI_TENANCY value: {{ .Values.globals.multiTenancy | quote }} - name: LOG_LEVEL - value: {{ .Values.services.worker.logLevel | quote }} + value: {{ default "info" .Values.services.worker.logLevel | quote }} - name: REDIS_PASSWORD value: {{ .Values.services.redis.password | quote }} - name: REDIS_URL @@ -115,7 +111,7 @@ spec: value: {{ .Values.globals.smtp.from | quote }} - name: APPS_URL value: http://app-service:{{ .Values.services.apps.port }} - image: budibase/worker + image: budibase/worker:{{ .Values.globals.appVersion }} imagePullPolicy: Always name: bbworker ports: diff --git a/hosting/kubernetes/budibase/templates/worker-service-service.yaml b/charts/budibase/templates/worker-service-service.yaml similarity index 100% rename from hosting/kubernetes/budibase/templates/worker-service-service.yaml rename to charts/budibase/templates/worker-service-service.yaml diff --git a/charts/budibase/values.yaml b/charts/budibase/values.yaml new file mode 100644 index 0000000000..b634f1581f --- /dev/null +++ b/charts/budibase/values.yaml @@ -0,0 +1,305 @@ +# Default values for budibase. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +image: + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +# fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: + {} + # fsGroup: 2000 + +securityContext: + {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 10000 + +ingress: + enabled: false + aws: false + nginx: true + certificateArn: "" + className: "" + annotations: + kubernetes.io/ingress.class: nginx + hosts: + - host: # change if using custom domain + paths: + - path: / + pathType: Prefix + backend: + service: + name: proxy-service + port: + number: 10000 + +resources: + {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +globals: + appVersion: "latest" + budibaseEnv: PRODUCTION + enableAnalytics: true + sentryDSN: "" + posthogToken: "" + logLevel: info + selfHosted: "1" # set to 0 for budibase cloud environment, set to 1 for self-hosted setup + multiTenancy: "0" # set to 0 to disable multiple orgs, set to 1 to enable multiple orgs + accountPortalUrl: "" + accountPortalApiKey: "" + cookieDomain: "" + platformUrl: "" + + createSecrets: true # creates an internal API key, JWT secrets and redis password for you + + # if createSecrets is set to false, you can hard-code your secrets here + internalApiKey: "" + jwtSecret: "" + + smtp: + enabled: false + +services: + budibaseVersion: latest + dns: cluster.local + + proxy: + port: 10000 + replicaCount: 1 + + apps: + port: 4002 + replicaCount: 1 + logLevel: info + + worker: + port: 4001 + replicaCount: 1 + + couchdb: + enabled: true + # url: "" # only change if pointing to existing couch server + # user: "" # only change if pointing to existing couch server + # password: "" # only change if pointing to existing couch server + port: 5984 + backup: + enabled: false + # target couchDB instance to back up to + target: "" + # backup interval in seconds + interval: "" + + redis: + enabled: true # disable if using external redis + port: 6379 + replicaCount: 1 + url: "" # only change if pointing to existing redis cluster and enabled: false + password: "budibase" # recommended to override if using built-in redis + storage: 100Mi + + objectStore: + minio: true + browser: true + port: 9000 + replicaCount: 1 + accessKey: "" # AWS_ACCESS_KEY if using S3 or existing minio access key + secretKey: "" # AWS_SECRET_ACCESS_KEY if using S3 or existing minio secret + region: "" # AWS_REGION if using S3 or existing minio secret + url: "http://minio-service:9000" # only change if pointing to existing minio cluster or S3 and minio: false + storage: 100Mi + +# Override values in couchDB subchart +couchdb: + ## clusterSize is the initial size of the CouchDB cluster. + clusterSize: 3 + allowAdminParty: false + + # Secret Management + createAdminSecret: true + + # adminUsername: budibase + # adminPassword: budibase + # adminHash: -pbkdf2-this_is_not_necessarily_secure_either + # cookieAuthSecret: admin + + ## When enabled, will deploy a networkpolicy that allows CouchDB pods to + ## communicate with each other for clustering and ingress on port 5984 + networkPolicy: + enabled: true + + # Use a service account + serviceAccount: + enabled: true + create: true + # name: + # imagePullSecrets: + # - name: myimagepullsecret + + ## The storage volume used by each Pod in the StatefulSet. If a + ## persistentVolume is not enabled, the Pods will use `emptyDir` ephemeral + ## local storage. Setting the storageClass attribute to "-" disables dynamic + ## provisioning of Persistent Volumes; leaving it unset will invoke the default + ## provisioner. + persistentVolume: + enabled: false + accessModes: + - ReadWriteOnce + size: 10Gi + storageClass: "" + + ## The CouchDB image + image: + repository: couchdb + tag: 3.1.0 + pullPolicy: IfNotPresent + + ## Experimental integration with Lucene-powered fulltext search + enableSearch: true + searchImage: + repository: kocolosk/couchdb-search + tag: 0.2.0 + pullPolicy: IfNotPresent + + initImage: + repository: busybox + tag: latest + pullPolicy: Always + + ## CouchDB is happy to spin up cluster nodes in parallel, but if you encounter + ## problems you can try setting podManagementPolicy to the StatefulSet default + ## `OrderedReady` + podManagementPolicy: Parallel + + ## Optional pod annotations + annotations: {} + + ## Optional tolerations + tolerations: [] + + service: + # annotations: + enabled: true + type: ClusterIP + externalPort: 5984 + + ## An Ingress resource can provide name-based virtual hosting and TLS + ## termination among other things for CouchDB deployments which are accessed + ## from outside the Kubernetes cluster. + ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/ + ingress: + enabled: false + hosts: + - chart-example.local + path: / + annotations: [] + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + tls: + # Secrets must be manually created in the namespace. + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + + ## Optional resource requests and limits for the CouchDB container + ## ref: http://kubernetes.io/docs/user-guide/compute-resources/ + resources: + {} + # requests: + # cpu: 100m + # memory: 128Mi + # limits: + # cpu: 56 + # memory: 256Gi + + ## erlangFlags is a map that is passed to the Erlang VM as flags using the + ## ERL_FLAGS env. `name` and `setcookie` flags are minimally required to + ## establish connectivity between cluster nodes. + ## ref: http://erlang.org/doc/man/erl.html#init_flags + erlangFlags: + name: couchdb + setcookie: monster + + ## couchdbConfig will override default CouchDB configuration settings. + ## The contents of this map are reformatted into a .ini file laid down + ## by a ConfigMap object. + ## ref: http://docs.couchdb.org/en/latest/config/index.html + couchdbConfig: + couchdb: + uuid: budibase-couchdb # REQUIRED: Unique identifier for this CouchDB server instance + # cluster: + # q: 8 # Create 8 shards for each database + chttpd: + bind_address: any + # chttpd.require_valid_user disables all the anonymous requests to the port + # 5984 when is set to true. + require_valid_user: false + + # Kubernetes local cluster domain. + # This is used to generate FQDNs for peers when joining the CouchDB cluster. + dns: + clusterDomainSuffix: cluster.local + + ## Configure liveness and readiness probe values + ## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes + livenessProbe: + enabled: true + failureThreshold: 3 + initialDelaySeconds: 0 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + readinessProbe: + enabled: true + failureThreshold: 3 + initialDelaySeconds: 0 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 \ No newline at end of file diff --git a/docs/budibase-0.1.0.tgz b/docs/budibase-0.1.0.tgz deleted file mode 100644 index 7873874ab0..0000000000 Binary files a/docs/budibase-0.1.0.tgz and /dev/null differ diff --git a/docs/budibase-0.1.1.tgz b/docs/budibase-0.1.1.tgz deleted file mode 100644 index b38527c4a4..0000000000 Binary files a/docs/budibase-0.1.1.tgz and /dev/null differ diff --git a/docs/budibase-0.2.0.tgz b/docs/budibase-0.2.0.tgz deleted file mode 100644 index 379b92cbb7..0000000000 Binary files a/docs/budibase-0.2.0.tgz and /dev/null differ diff --git a/docs/budibase-0.2.1.tgz b/docs/budibase-0.2.1.tgz deleted file mode 100644 index f3423763a5..0000000000 Binary files a/docs/budibase-0.2.1.tgz and /dev/null differ diff --git a/docs/budibase-0.2.2.tgz b/docs/budibase-0.2.2.tgz deleted file mode 100644 index c70754eb99..0000000000 Binary files a/docs/budibase-0.2.2.tgz and /dev/null differ diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 0fa6060f8f..0000000000 --- a/docs/index.html +++ /dev/null @@ -1,9 +0,0 @@ - - - Budibase Helm Chart Repo - - -

Budibase Charts Repo

-

Point Helm at this repo to see charts.

- - \ No newline at end of file diff --git a/docs/index.yaml b/docs/index.yaml deleted file mode 100644 index 04543c147e..0000000000 --- a/docs/index.yaml +++ /dev/null @@ -1,132 +0,0 @@ -apiVersion: v1 -entries: - budibase: - - apiVersion: v2 - appVersion: 0.9.169 - created: "2021-10-20T14:27:23.521358+01:00" - dependencies: - - condition: services.couchdb.enabled - name: couchdb - repository: https://apache.github.io/couchdb-helm - version: 3.3.4 - - condition: ingress.nginx - name: ingress-nginx - repository: https://github.com/kubernetes/ingress-nginx - version: 3.35.0 - description: Budibase is an open source low-code platform, helping thousands of teams build apps for their workplace in minutes. - digest: 57f365d799fcaace4658883cb8ec961a7905383a68acf065af4f6e57f9878ff8 - keywords: - - low-code - - database - - cluster - name: budibase - sources: - - https://github.com/Budibase/budibase - - https://budibase.com - type: application - urls: - - https://budibase.github.io/budibase/budibase-0.2.2.tgz - version: 0.2.2 - - apiVersion: v2 - appVersion: 0.9.163 - created: "2021-10-20T14:27:23.5153+01:00" - dependencies: - - condition: services.couchdb.enabled - name: couchdb - repository: https://apache.github.io/couchdb-helm - version: 3.3.4 - - condition: ingress.nginx - name: ingress-nginx - repository: https://github.com/kubernetes/ingress-nginx - version: 3.35.0 - description: Budibase is an open source low-code platform, helping thousands of teams build apps for their workplace in minutes. - digest: ebac6d8631cc38b266c3689508b5123f5afc395f23bdb02738be26c7cae0b0b5 - keywords: - - low-code - - database - - cluster - name: budibase - sources: - - https://github.com/Budibase/budibase - - https://budibase.com - type: application - urls: - - https://budibase.github.io/budibase/budibase-0.2.1.tgz - version: 0.2.1 - - apiVersion: v2 - appVersion: 0.9.163 - created: "2021-10-20T14:27:23.510041+01:00" - dependencies: - - condition: services.couchdb.enabled - name: couchdb - repository: https://apache.github.io/couchdb-helm - version: 3.3.4 - - condition: ingress.nginx - name: ingress-nginx - repository: https://github.com/kubernetes/ingress-nginx - version: 3.35.0 - description: Budibase is an open source low-code platform, helping thousands of teams build apps for their workplace in minutes. - digest: f369536c0eac1f6959d51e8ce6d74a87a7a9df29ae84fb9cbed0a273ab77429b - keywords: - - low-code - - database - - cluster - name: budibase - sources: - - https://github.com/Budibase/budibase - - https://budibase.com - type: application - urls: - - https://budibase.github.io/budibase/budibase-0.2.0.tgz - version: 0.2.0 - - apiVersion: v2 - appVersion: 0.9.56 - created: "2021-10-20T14:27:23.504543+01:00" - dependencies: - - condition: services.couchdb.enabled - name: couchdb - repository: https://apache.github.io/couchdb-helm - version: 3.3.4 - - name: ingress-nginx - repository: https://github.com/kubernetes/ingress-nginx - version: 3.35.0 - description: Budibase is an open source low-code platform, helping thousands of teams build apps for their workplace in minutes. - digest: 8dc4f2ed4d98cad5adf25936aefea680042d3e4e17832f846b961fd8708ad192 - keywords: - - low-code - - database - - cluster - name: budibase - sources: - - https://github.com/Budibase/budibase - - https://budibase.com - type: application - urls: - - https://budibase.github.io/budibase/budibase-0.1.1.tgz - version: 0.1.1 - - apiVersion: v2 - appVersion: 0.9.56 - created: "2021-10-20T14:27:23.496847+01:00" - dependencies: - - condition: services.couchdb.enabled - name: couchdb - repository: https://apache.github.io/couchdb-helm - version: 3.3.4 - - name: ingress-nginx - repository: https://github.com/kubernetes/ingress-nginx - version: 3.35.0 - description: Budibase is an open source low-code platform, helping thousands of teams build apps for their workplace in minutes. - digest: 08031b0803cce0eff64472e569d454d9176119c8207aa9873a9c95ee66cc7d3f - keywords: - - low-code - - database - - cluster - name: budibase - sources: - - https://github.com/Budibase/budibase - - https://budibase.com - type: application - urls: - - https://budibase.github.io/budibase/budibase-0.1.0.tgz - version: 0.1.0 -generated: "2021-10-20T14:27:23.491132+01:00" diff --git a/hosting/.env b/hosting/.env new file mode 120000 index 0000000000..bb1b54ad77 --- /dev/null +++ b/hosting/.env @@ -0,0 +1 @@ +hosting.properties \ No newline at end of file diff --git a/hosting/kubernetes/budibase/Chart.yaml b/hosting/kubernetes/budibase/Chart.yaml deleted file mode 100644 index c5233842ad..0000000000 --- a/hosting/kubernetes/budibase/Chart.yaml +++ /dev/null @@ -1,41 +0,0 @@ -apiVersion: v2 -name: budibase -description: Budibase is an open source low-code platform, helping thousands of teams build apps for their workplace in minutes. -keywords: -- low-code -- database -- cluster -sources: -- https://github.com/Budibase/budibase -- https://budibase.com - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.2.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "0.9.169" - -dependencies: - - name: couchdb - version: 3.3.4 - repository: https://apache.github.io/couchdb-helm - condition: services.couchdb.enabled - - name: ingress-nginx - version: 3.35.0 - repository: https://github.com/kubernetes/ingress-nginx - condition: ingress.nginx diff --git a/hosting/kubernetes/budibase/charts/couchdb/Chart.yaml b/hosting/kubernetes/budibase/charts/couchdb/Chart.yaml deleted file mode 100755 index 74ae734a17..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/Chart.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: v1 -appVersion: 3.1.0 -description: A database featuring seamless multi-master sync, that scales from big - data to mobile, with an intuitive HTTP/JSON API and designed for reliability. -home: https://couchdb.apache.org/ -icon: http://couchdb.apache.org/CouchDB-visual-identity/logo/CouchDB-couch-symbol.svg -keywords: -- couchdb -- database -- nosql -maintainers: -- email: kocolosk@apache.org - name: kocolosk -- email: willholley@apache.org - name: willholley -name: couchdb -sources: -- https://github.com/apache/couchdb-docker -version: 3.3.4 diff --git a/hosting/kubernetes/budibase/charts/couchdb/README.md b/hosting/kubernetes/budibase/charts/couchdb/README.md deleted file mode 100755 index 3227123d06..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/README.md +++ /dev/null @@ -1,244 +0,0 @@ -# CouchDB - -Apache CouchDB is a database featuring seamless multi-master sync, that scales -from big data to mobile, with an intuitive HTTP/JSON API and designed for -reliability. - -This chart deploys a CouchDB cluster as a StatefulSet. It creates a ClusterIP -Service in front of the Deployment for load balancing by default, but can also -be configured to deploy other Service types or an Ingress Controller. The -default persistence mechanism is simply the ephemeral local filesystem, but -production deployments should set `persistentVolume.enabled` to `true` to attach -storage volumes to each Pod in the Deployment. - -## TL;DR - -```bash -$ helm repo add couchdb https://apache.github.io/couchdb-helm -$ helm install couchdb/couchdb \ - --set allowAdminParty=true \ - --set couchdbConfig.couchdb.uuid=$(curl https://www.uuidgenerator.net/api/version4 2>/dev/null | tr -d -) -``` - -## Prerequisites - -- Kubernetes 1.9+ with Beta APIs enabled -- Ingress requires Kubernetes 1.14+ - -## Installing the Chart - -To install the chart with the release name `my-release`: - -Add the CouchDB Helm repository: - -```bash -$ helm repo add couchdb https://apache.github.io/couchdb-helm -``` - -Afterwards install the chart replacing the UUID -`decafbaddecafbaddecafbaddecafbad` with a custom one: - -```bash -$ helm install \ - --name my-release \ - --set couchdbConfig.couchdb.uuid=decafbaddecafbaddecafbaddecafbad \ - couchdb/couchdb -``` - -This will create a Secret containing the admin credentials for the cluster. -Those credentials can be retrieved as follows: - -```bash -$ kubectl get secret my-release-couchdb -o go-template='{{ .data.adminPassword }}' | base64 --decode -``` - -If you prefer to configure the admin credentials directly you can create a -Secret containing `adminUsername`, `adminPassword` and `cookieAuthSecret` keys: - -```bash -$ kubectl create secret generic my-release-couchdb --from-literal=adminUsername=foo --from-literal=adminPassword=bar --from-literal=cookieAuthSecret=baz -``` - -If you want to set the `adminHash` directly to achieve consistent salts between -different nodes you need to addionally add the key `password.ini` to the secret: - -```bash -$ kubectl create secret generic my-release-couchdb \ - --from-literal=adminUsername=foo \ - --from-literal=cookieAuthSecret=baz \ - --from-file=./my-password.ini -``` - -With the following contents in `my-password.ini`: - -``` -[admins] -foo = -``` - -and then install the chart while overriding the `createAdminSecret` setting: - -```bash -$ helm install \ - --name my-release \ - --set createAdminSecret=false \ - --set couchdbConfig.couchdb.uuid=decafbaddecafbaddecafbaddecafbad \ - couchdb/couchdb -``` - -This Helm chart deploys CouchDB on the Kubernetes cluster in a default -configuration. The [configuration](#configuration) section lists -the parameters that can be configured during installation. - -> **Tip**: List all releases using `helm list` - -## Uninstalling the Chart - -To uninstall/delete the `my-release` Deployment: - -```bash -$ helm delete my-release -``` - -The command removes all the Kubernetes components associated with the chart and -deletes the release. - -## Upgrading an existing Release to a new major version - -A major chart version change (like v0.2.3 -> v1.0.0) indicates that there is an -incompatible breaking change needing manual actions. - -### Upgrade to 3.0.0 - -Since version 3.0.0 setting the CouchDB server instance UUID is mandatory. -Therefore you need to generate a UUID and supply it as a value during the -upgrade as follows: - -```bash -$ helm upgrade \ - --reuse-values \ - --set couchdbConfig.couchdb.uuid= \ - couchdb/couchdb -``` - -## Migrating from stable/couchdb - -This chart replaces the `stable/couchdb` chart previously hosted by Helm and continues the -version semantics. You can upgrade directly from `stable/couchdb` to this chart using: - -```bash -$ helm repo add couchdb https://apache.github.io/couchdb-helm -$ helm upgrade my-release couchdb/couchdb -``` - -## Configuration - -The following table lists the most commonly configured parameters of the -CouchDB chart and their default values: - -| Parameter | Description | Default | -|---------------------------------|-------------------------------------------------------|----------------------------------------| -| `clusterSize` | The initial number of nodes in the CouchDB cluster | 3 | -| `couchdbConfig` | Map allowing override elements of server .ini config | *See below* | -| `allowAdminParty` | If enabled, start cluster without admin account | false (requires creating a Secret) | -| `createAdminSecret` | If enabled, create an admin account and cookie secret | true | -| `schedulerName` | Name of the k8s scheduler (other than default) | `nil` | -| `erlangFlags` | Map of flags supplied to the underlying Erlang VM | name: couchdb, setcookie: monster -| `persistentVolume.enabled` | Boolean determining whether to attach a PV to each node | false -| `persistentVolume.size` | If enabled, the size of the persistent volume to attach | 10Gi -| `enableSearch` | Adds a sidecar for Lucene-powered text search | false | - -You can set the values of the `couchdbConfig` map according to the -[official configuration][4]. The following shows the map's default values and -required options to set: - -| Parameter | Description | Default | -|---------------------------------|--------------------------------------------------------------------|----------------------------------------| -| `couchdb.uuid` | UUID for this CouchDB server instance ([Required in a cluster][5]) | | -| `chttpd.bind_address` | listens on all interfaces when set to any | any | -| `chttpd.require_valid_user` | disables all the anonymous requests to the port 5984 when true | false | - -A variety of other parameters are also configurable. See the comments in the -`values.yaml` file for further details: - -| Parameter | Default | -|--------------------------------------|----------------------------------------| -| `adminUsername` | admin | -| `adminPassword` | auto-generated | -| `adminHash` | | -| `cookieAuthSecret` | auto-generated | -| `image.repository` | couchdb | -| `image.tag` | 3.1.0 | -| `image.pullPolicy` | IfNotPresent | -| `searchImage.repository` | kocolosk/couchdb-search | -| `searchImage.tag` | 0.1.0 | -| `searchImage.pullPolicy` | IfNotPresent | -| `initImage.repository` | busybox | -| `initImage.tag` | latest | -| `initImage.pullPolicy` | Always | -| `ingress.enabled` | false | -| `ingress.hosts` | chart-example.local | -| `ingress.annotations` | | -| `ingress.path` | / | -| `ingress.tls` | | -| `persistentVolume.accessModes` | ReadWriteOnce | -| `persistentVolume.storageClass` | Default for the Kube cluster | -| `podManagementPolicy` | Parallel | -| `affinity` | | -| `annotations` | | -| `tolerations` | | -| `resources` | | -| `service.annotations` | | -| `service.enabled` | true | -| `service.type` | ClusterIP | -| `service.externalPort` | 5984 | -| `dns.clusterDomainSuffix` | cluster.local | -| `networkPolicy.enabled` | true | -| `serviceAccount.enabled` | true | -| `serviceAccount.create` | true | -| `serviceAccount.imagePullSecrets` | | -| `sidecars` | {} | -| `livenessProbe.enabled` | true | -| `livenessProbe.failureThreshold` | 3 | -| `livenessProbe.initialDelaySeconds` | 0 | -| `livenessProbe.periodSeconds` | 10 | -| `livenessProbe.successThreshold` | 1 | -| `livenessProbe.timeoutSeconds` | 1 | -| `readinessProbe.enabled` | true | -| `readinessProbe.failureThreshold` | 3 | -| `readinessProbe.initialDelaySeconds` | 0 | -| `readinessProbe.periodSeconds` | 10 | -| `readinessProbe.successThreshold` | 1 | -| `readinessProbe.timeoutSeconds` | 1 | - -## Feedback, Issues, Contributing - -General feedback is welcome at our [user][1] or [developer][2] mailing lists. - -Apache CouchDB has a [CONTRIBUTING][3] file with details on how to get started -with issue reporting or contributing to the upkeep of this project. In short, -use GitHub Issues, do not report anything on Docker's website. - -## Non-Apache CouchDB Development Team Contributors - -- [@natarajaya](https://github.com/natarajaya) -- [@satchpx](https://github.com/satchpx) -- [@spanato](https://github.com/spanato) -- [@jpds](https://github.com/jpds) -- [@sebastien-prudhomme](https://github.com/sebastien-prudhomme) -- [@stepanstipl](https://github.com/sebastien-stepanstipl) -- [@amatas](https://github.com/amatas) -- [@Chimney42](https://github.com/Chimney42) -- [@mattjmcnaughton](https://github.com/mattjmcnaughton) -- [@mainephd](https://github.com/mainephd) -- [@AdamDang](https://github.com/AdamDang) -- [@mrtyler](https://github.com/mrtyler) -- [@kevinwlau](https://github.com/kevinwlau) -- [@jeyenzo](https://github.com/jeyenzo) -- [@Pinpin31.](https://github.com/Pinpin31) - -[1]: http://mail-archives.apache.org/mod_mbox/couchdb-user/ -[2]: http://mail-archives.apache.org/mod_mbox/couchdb-dev/ -[3]: https://github.com/apache/couchdb/blob/master/CONTRIBUTING.md -[4]: https://docs.couchdb.org/en/stable/config/index.html -[5]: https://docs.couchdb.org/en/latest/setup/cluster.html#preparing-couchdb-nodes-to-be-joined-into-a-cluster diff --git a/hosting/kubernetes/budibase/charts/couchdb/ci/required-values.yaml b/hosting/kubernetes/budibase/charts/couchdb/ci/required-values.yaml deleted file mode 100755 index 79589d2e04..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/ci/required-values.yaml +++ /dev/null @@ -1,3 +0,0 @@ -couchdbConfig: - couchdb: - uuid: "decafbaddecafbaddecafbaddecafbad" diff --git a/hosting/kubernetes/budibase/charts/couchdb/ci/sidecar.yaml b/hosting/kubernetes/budibase/charts/couchdb/ci/sidecar.yaml deleted file mode 100755 index aa570bdf74..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/ci/sidecar.yaml +++ /dev/null @@ -1,9 +0,0 @@ -sidecars: - - name: foo - image: "busybox" - imagePullPolicy: IfNotPresent - resources: - requests: - cpu: "0.1" - memory: 10Mi - command: ['while true; do echo "foo"; sleep 5; done;'] diff --git a/hosting/kubernetes/budibase/charts/couchdb/password.ini b/hosting/kubernetes/budibase/charts/couchdb/password.ini deleted file mode 100755 index 4ce8445aae..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/password.ini +++ /dev/null @@ -1,2 +0,0 @@ -[admins] -{{ .Values.adminUsername }} = {{ .Values.adminHash }} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/NOTES.txt b/hosting/kubernetes/budibase/charts/couchdb/templates/NOTES.txt deleted file mode 100755 index a3658bd37f..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/NOTES.txt +++ /dev/null @@ -1,20 +0,0 @@ -Apache CouchDB is starting. Check the status of the Pods using: - - kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "couchdb.name" . }},release={{ .Release.Name }}" - -Once all of the Pods are fully Ready, execute the following command to create -some required system databases: - - kubectl exec --namespace {{ .Release.Namespace }} {{ if not .Values.allowAdminParty }}-it {{ end }}{{ template "couchdb.fullname" . }}-0 -c couchdb -- \ - curl -s \ - http://127.0.0.1:5984/_cluster_setup \ - -X POST \ - -H "Content-Type: application/json" \ -{{- if .Values.allowAdminParty }} - -d '{"action": "finish_cluster"}' -{{- else }} - -d '{"action": "finish_cluster"}' \ - -u -{{- end }} - -Then it's time to relax. diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/_helpers.tpl b/hosting/kubernetes/budibase/charts/couchdb/templates/_helpers.tpl deleted file mode 100755 index f9d013e487..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/_helpers.tpl +++ /dev/null @@ -1,81 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "couchdb.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -*/}} -{{- define "couchdb.fullname" -}} -{{- if .Values.fullnameOverride -}} -{{- printf "%s-%s" .Values.fullnameOverride .Chart.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.nameOverride -}} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} - -{{/* -In the event that we create both a headless service and a traditional one, -ensure that the latter gets a unique name. -*/}} -{{- define "couchdb.svcname" -}} -{{- if .Values.fullnameOverride -}} -{{- printf "%s-svc-%s" .Values.fullnameOverride .Chart.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.nameOverride -}} -{{- printf "%s-svc-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} - -{{/* -Create a random string if the supplied key does not exist -*/}} -{{- define "couchdb.defaultsecret" -}} -{{- if . -}} -{{- . | b64enc | quote -}} -{{- else -}} -{{- randAlphaNum 20 | b64enc | quote -}} -{{- end -}} -{{- end -}} - -{{/* -Labels used to define Pods in the CouchDB statefulset -*/}} -{{- define "couchdb.ss.selector" -}} -app: {{ template "couchdb.name" . }} -release: {{ .Release.Name }} -{{- end -}} - -{{/* -Generates a comma delimited list of nodes in the cluster -*/}} -{{- define "couchdb.seedlist" -}} -{{- $nodeCount := min 5 .Values.clusterSize | int }} - {{- range $index0 := until $nodeCount -}} - {{- $index1 := $index0 | add1 -}} - {{ $.Values.erlangFlags.name }}@{{ template "couchdb.fullname" $ }}-{{ $index0 }}.{{ template "couchdb.fullname" $ }}.{{ $.Release.Namespace }}.svc.{{ $.Values.dns.clusterDomainSuffix }}{{ if ne $index1 $nodeCount }},{{ end }} - {{- end -}} -{{- end -}} - -{{/* -If serviceAccount.name is specified, use that, else use the couchdb instance name -*/}} -{{- define "couchdb.serviceAccount" -}} -{{- if .Values.serviceAccount.name -}} -{{- .Values.serviceAccount.name }} -{{- else -}} -{{- template "couchdb.fullname" . -}} -{{- end -}} -{{- end -}} - -{{/* -Fail if couchdbConfig.couchdb.uuid is undefined -*/}} -{{- define "couchdb.uuid" -}} -{{- required "A value for couchdbConfig.couchdb.uuid must be set" (.Values.couchdbConfig.couchdb | default dict).uuid -}} -{{- end -}} \ No newline at end of file diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/configmap.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/configmap.yaml deleted file mode 100755 index a6a20e0574..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/configmap.yaml +++ /dev/null @@ -1,23 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ template "couchdb.fullname" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" - heritage: {{ .Release.Service | quote }} - release: {{ .Release.Name | quote }} -data: - inifile: | - {{ $couchdbConfig := dict "couchdb" (dict "uuid" (include "couchdb.uuid" .)) -}} - {{- $couchdbConfig := merge $couchdbConfig .Values.couchdbConfig -}} - {{- range $section, $settings := $couchdbConfig -}} - {{ printf "[%s]" $section }} - {{ range $key, $value := $settings -}} - {{ printf "%s = %s" $key ($value | toString) }} - {{ end }} - {{ end }} - - seedlistinifile: | - [cluster] - seedlist = {{ template "couchdb.seedlist" . }} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/headless.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/headless.yaml deleted file mode 100755 index 0ce3ef0f35..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/headless.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ template "couchdb.fullname" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -spec: - clusterIP: None - publishNotReadyAddresses: true - ports: - - name: couchdb - port: 5984 - selector: -{{ include "couchdb.ss.selector" . | indent 4 }} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/ingress.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/ingress.yaml deleted file mode 100755 index c547847ce5..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/ingress.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $serviceName := include "couchdb.fullname" . -}} -{{- $servicePort := .Values.service.externalPort -}} -{{- $path := .Values.ingress.path | quote -}} -apiVersion: networking.k8s.io/v1beta1 -kind: Ingress -metadata: - name: {{ template "couchdb.fullname" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} - annotations: - {{- range $key, $value := .Values.ingress.annotations }} - {{ $key }}: {{ $value | quote }} - {{- end }} -spec: - rules: - {{- range $host := .Values.ingress.hosts }} - - host: {{ $host }} - http: - paths: - - path: {{ $path }} - backend: - serviceName: {{ $serviceName }} - servicePort: {{ $servicePort }} - {{- end -}} - {{- if .Values.ingress.tls }} - tls: -{{ toYaml .Values.ingress.tls | indent 4 }} - {{- end -}} -{{- end -}} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/networkpolicy.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/networkpolicy.yaml deleted file mode 100755 index 2830708bef..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/networkpolicy.yaml +++ /dev/null @@ -1,31 +0,0 @@ - -{{- if .Values.networkPolicy.enabled }} -kind: NetworkPolicy -apiVersion: networking.k8s.io/v1 -metadata: - name: {{ template "couchdb.fullname" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -spec: - podSelector: - matchLabels: -{{ include "couchdb.ss.selector" . | indent 6 }} - ingress: - - ports: - - protocol: TCP - port: 5984 - - ports: - - protocol: TCP - port: 9100 - - protocol: TCP - port: 4369 - from: - - podSelector: - matchLabels: -{{ include "couchdb.ss.selector" . | indent 14 }} - policyTypes: - - Ingress -{{- end }} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/secrets.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/secrets.yaml deleted file mode 100755 index 92f55c6d6b..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/secrets.yaml +++ /dev/null @@ -1,19 +0,0 @@ -{{- if .Values.createAdminSecret -}} -apiVersion: v1 -kind: Secret -metadata: - name: {{ template "couchdb.fullname" . }} - labels: - app: {{ template "couchdb.fullname" . }} - chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" - release: "{{ .Release.Name }}" - heritage: "{{ .Release.Service }}" -type: Opaque -data: - adminUsername: {{ template "couchdb.defaultsecret" .Values.adminUsername }} - adminPassword: {{ template "couchdb.defaultsecret" .Values.adminPassword }} - cookieAuthSecret: {{ template "couchdb.defaultsecret" .Values.cookieAuthSecret }} -{{- if .Values.adminHash }} - password.ini: {{ tpl (.Files.Get "password.ini") . | b64enc }} -{{- end -}} -{{- end -}} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/service.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/service.yaml deleted file mode 100755 index 6d0382477d..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/service.yaml +++ /dev/null @@ -1,23 +0,0 @@ -{{- if .Values.service.enabled -}} -apiVersion: v1 -kind: Service -metadata: - name: {{ template "couchdb.svcname" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -{{- if .Values.service.annotations }} - annotations: -{{ toYaml .Values.service.annotations | indent 4 }} -{{- end }} -spec: - ports: - - port: {{ .Values.service.externalPort }} - protocol: TCP - targetPort: 5984 - type: {{ .Values.service.type }} - selector: -{{ include "couchdb.ss.selector" . | indent 4 }} -{{- end -}} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/serviceaccount.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/serviceaccount.yaml deleted file mode 100755 index bb82799a49..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/serviceaccount.yaml +++ /dev/null @@ -1,15 +0,0 @@ -{{- if .Values.serviceAccount.create }} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ template "couchdb.serviceAccount" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -{{- if .Values.serviceAccount.imagePullSecrets }} -imagePullSecrets: -{{ toYaml .Values.serviceAccount.imagePullSecrets }} -{{- end }} -{{- end }} diff --git a/hosting/kubernetes/budibase/charts/couchdb/templates/statefulset.yaml b/hosting/kubernetes/budibase/charts/couchdb/templates/statefulset.yaml deleted file mode 100755 index 6225fbe98c..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/templates/statefulset.yaml +++ /dev/null @@ -1,202 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: {{ template "couchdb.fullname" . }} - labels: - app: {{ template "couchdb.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -spec: - replicas: {{ .Values.clusterSize }} - serviceName: {{ template "couchdb.fullname" . }} - podManagementPolicy: {{ .Values.podManagementPolicy }} - selector: - matchLabels: -{{ include "couchdb.ss.selector" . | indent 6 }} - template: - metadata: - labels: -{{ include "couchdb.ss.selector" . | indent 8 }} -{{- with .Values.annotations }} - annotations: - checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} -{{ toYaml . | indent 8 }} -{{- end }} - spec: - {{- if .Values.schedulerName }} - schedulerName: "{{ .Values.schedulerName }}" - {{- end }} - {{- if .Values.serviceAccount.enabled }} - serviceAccountName: {{ template "couchdb.serviceAccount" . }} - {{- end }} - initContainers: - - name: init-copy - image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" - imagePullPolicy: {{ .Values.initImage.pullPolicy }} - command: ['sh','-c','cp /tmp/chart.ini /default.d; cp /tmp/seedlist.ini /default.d; ls -lrt /default.d;'] - volumeMounts: - - name: config - mountPath: /tmp/ - - name: config-storage - mountPath: /default.d -{{- if .Values.adminHash }} - - name: admin-hash-copy - image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" - imagePullPolicy: {{ .Values.initImage.pullPolicy }} - command: ['sh','-c','cp /tmp/password.ini /local.d/ ;'] - volumeMounts: - - name: admin-password - mountPath: /tmp/password.ini - subPath: "password.ini" - - name: local-config-storage - mountPath: /local.d -{{- end }} - containers: - - name: couchdb - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - ports: - - name: couchdb - containerPort: 5984 - - name: epmd - containerPort: 4369 - - containerPort: 9100 - env: -{{- if not .Values.allowAdminParty }} - - name: COUCHDB_USER - valueFrom: - secretKeyRef: - name: {{ template "couchdb.fullname" . }} - key: adminUsername - - name: COUCHDB_PASSWORD - valueFrom: - secretKeyRef: - name: {{ template "couchdb.fullname" . }} - key: adminPassword - - name: COUCHDB_SECRET - valueFrom: - secretKeyRef: - name: {{ template "couchdb.fullname" . }} - key: cookieAuthSecret -{{- end }} - - name: ERL_FLAGS - value: "{{ range $k, $v := .Values.erlangFlags }} -{{ $k }} {{ $v }} {{ end }}" -{{- if .Values.livenessProbe.enabled }} - livenessProbe: -{{- if .Values.couchdbConfig.chttpd.require_valid_user }} - exec: - command: - - sh - - -c - - curl -G --silent --fail -u ${COUCHDB_USER}:${COUCHDB_PASSWORD} http://localhost:5984/_up -{{- else }} - httpGet: - path: /_up - port: 5984 -{{- end }} - failureThreshold: {{ .Values.livenessProbe.failureThreshold }} - initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }} - periodSeconds: {{ .Values.livenessProbe.periodSeconds }} - successThreshold: {{ .Values.livenessProbe.successThreshold }} - timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }} -{{- end }} -{{- if .Values.readinessProbe.enabled }} - readinessProbe: -{{- if .Values.couchdbConfig.chttpd.require_valid_user }} - exec: - command: - - sh - - -c - - curl -G --silent --fail -u ${COUCHDB_USER}:${COUCHDB_PASSWORD} http://localhost:5984/_up -{{- else }} - httpGet: - path: /_up - port: 5984 -{{- end }} - failureThreshold: {{ .Values.readinessProbe.failureThreshold }} - initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }} - periodSeconds: {{ .Values.readinessProbe.periodSeconds }} - successThreshold: {{ .Values.readinessProbe.successThreshold }} - timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }} -{{- end }} - resources: -{{ toYaml .Values.resources | indent 12 }} - volumeMounts: - - name: config-storage - mountPath: /opt/couchdb/etc/default.d -{{- if .Values.adminHash }} - - name: local-config-storage - mountPath: /opt/couchdb/etc/local.d -{{- end }} - - name: database-storage - mountPath: /opt/couchdb/data -{{- if .Values.enableSearch }} - - name: clouseau - image: "{{ .Values.searchImage.repository }}:{{ .Values.searchImage.tag }}" - imagePullPolicy: {{ .Values.searchImage.pullPolicy }} - volumeMounts: - - name: database-storage - mountPath: /opt/couchdb-search/data -{{- end }} -{{- if .Values.sidecars }} -{{ toYaml .Values.sidecars | indent 8}} -{{- end }} -{{- if .Values.nodeSelector }} - nodeSelector: -{{ toYaml .Values.nodeSelector | indent 8 }} -{{- end }} -{{- with .Values.tolerations }} - tolerations: -{{ toYaml . | indent 8 }} -{{- end }} -{{- with .Values.affinity }} - affinity: -{{ toYaml . | indent 8 }} -{{- end }} - volumes: - - name: config-storage - emptyDir: {} - - name: config - configMap: - name: {{ template "couchdb.fullname" . }} - items: - - key: inifile - path: chart.ini - - key: seedlistinifile - path: seedlist.ini - -{{- if .Values.adminHash }} - - name: local-config-storage - emptyDir: {} - - name: admin-password - secret: - secretName: {{ template "couchdb.fullname" . }} -{{- end -}} - -{{- if not .Values.persistentVolume.enabled }} - - name: database-storage - emptyDir: {} -{{- else }} - volumeClaimTemplates: - - metadata: - name: database-storage - labels: - app: {{ template "couchdb.name" . }} - release: {{ .Release.Name }} - spec: - accessModes: - {{- range .Values.persistentVolume.accessModes }} - - {{ . | quote }} - {{- end }} - resources: - requests: - storage: {{ .Values.persistentVolume.size | quote }} - {{- if .Values.persistentVolume.storageClass }} - {{- if (eq "-" .Values.persistentVolume.storageClass) }} - storageClassName: "" - {{- else }} - storageClassName: "{{ .Values.persistentVolume.storageClass }}" - {{- end }} - {{- end }} -{{- end }} diff --git a/hosting/kubernetes/budibase/charts/couchdb/values.yaml b/hosting/kubernetes/budibase/charts/couchdb/values.yaml deleted file mode 100755 index 5a5025f816..0000000000 --- a/hosting/kubernetes/budibase/charts/couchdb/values.yaml +++ /dev/null @@ -1,201 +0,0 @@ -## clusterSize is the initial size of the CouchDB cluster. -clusterSize: 3 - -## If allowAdminParty is enabled the cluster will start up without any database -## administrator account; i.e., all users will be granted administrative -## access. Otherwise, the system will look for a Secret called -## -couchdb containing `adminUsername`, `adminPassword` and -## `cookieAuthSecret` keys. See the `createAdminSecret` flag. -## ref: https://kubernetes.io/docs/concepts/configuration/secret/ -allowAdminParty: false - -## If createAdminSecret is enabled a Secret called -couchdb will -## be created containing auto-generated credentials. Users who prefer to set -## these values themselves have a couple of options: -## -## 1) The `adminUsername`, `adminPassword`, `adminHash`, and `cookieAuthSecret` -## can be defined directly in the chart's values. Note that all of a chart's -## values are currently stored in plaintext in a ConfigMap in the tiller -## namespace. -## -## 2) This flag can be disabled and a Secret with the required keys can be -## created ahead of time. -createAdminSecret: true - -# adminUsername: budibase -# adminPassword: budibase -# adminHash: -pbkdf2-this_is_not_necessarily_secure_either -# cookieAuthSecret: admin - -## When enabled, will deploy a networkpolicy that allows CouchDB pods to -## communicate with each other for clustering and ingress on port 5984 -networkPolicy: - enabled: true - -## Use an alternate scheduler, e.g. "stork". -## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ -## -# schedulerName: - -# Use a service account -serviceAccount: - enabled: true - create: true -# name: -# imagePullSecrets: -# - name: myimagepullsecret - -## The storage volume used by each Pod in the StatefulSet. If a -## persistentVolume is not enabled, the Pods will use `emptyDir` ephemeral -## local storage. Setting the storageClass attribute to "-" disables dynamic -## provisioning of Persistent Volumes; leaving it unset will invoke the default -## provisioner. -persistentVolume: - enabled: false - accessModes: - - ReadWriteOnce - size: 10Gi - storageClass: "" - -## The CouchDB image -image: - repository: couchdb - tag: 3.1.0 - pullPolicy: IfNotPresent - -## Experimental integration with Lucene-powered fulltext search -searchImage: - repository: kocolosk/couchdb-search - tag: 0.2.0 - pullPolicy: IfNotPresent - -## Flip this to flag to include the Search container in each Pod -enableSearch: true - -initImage: - repository: busybox - tag: latest - pullPolicy: Always - -## CouchDB is happy to spin up cluster nodes in parallel, but if you encounter -## problems you can try setting podManagementPolicy to the StatefulSet default -## `OrderedReady` -podManagementPolicy: Parallel - -## To better tolerate Node failures, we can prevent Kubernetes scheduler from -## assigning more than one Pod of CouchDB StatefulSet per Node using podAntiAffinity. -affinity: {} - # podAntiAffinity: - # requiredDuringSchedulingIgnoredDuringExecution: - # - labelSelector: - # matchExpressions: - # - key: "app" - # operator: In - # values: - # - couchdb - # topologyKey: "kubernetes.io/hostname" - -## Optional pod annotations -annotations: {} - -## Optional tolerations -tolerations: [] - -## A StatefulSet requires a headless Service to establish the stable network -## identities of the Pods, and that Service is created automatically by this -## chart without any additional configuration. The Service block below refers -## to a second Service that governs how clients connect to the CouchDB cluster. -service: - # annotations: - enabled: true - type: ClusterIP - externalPort: 5984 - -## An Ingress resource can provide name-based virtual hosting and TLS -## termination among other things for CouchDB deployments which are accessed -## from outside the Kubernetes cluster. -## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/ -ingress: - enabled: false - hosts: - - chart-example.local - path: / - annotations: [] - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - tls: - # Secrets must be manually created in the namespace. - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -## Optional resource requests and limits for the CouchDB container -## ref: http://kubernetes.io/docs/user-guide/compute-resources/ -resources: - {} - # requests: - # cpu: 100m - # memory: 128Mi - # limits: - # cpu: 56 - # memory: 256Gi - -## erlangFlags is a map that is passed to the Erlang VM as flags using the -## ERL_FLAGS env. `name` and `setcookie` flags are minimally required to -## establish connectivity between cluster nodes. -## ref: http://erlang.org/doc/man/erl.html#init_flags -erlangFlags: - name: couchdb - setcookie: monster - -## couchdbConfig will override default CouchDB configuration settings. -## The contents of this map are reformatted into a .ini file laid down -## by a ConfigMap object. -## ref: http://docs.couchdb.org/en/latest/config/index.html -couchdbConfig: - couchdb: - uuid: budibase-couchdb # REQUIRED: Unique identifier for this CouchDB server instance - # cluster: - # q: 8 # Create 8 shards for each database - chttpd: - bind_address: any - # chttpd.require_valid_user disables all the anonymous requests to the port - # 5984 when is set to true. - require_valid_user: false - -# Kubernetes local cluster domain. -# This is used to generate FQDNs for peers when joining the CouchDB cluster. -dns: - clusterDomainSuffix: cluster.local - -## Configure liveness and readiness probe values -## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes -livenessProbe: - enabled: true - failureThreshold: 3 - initialDelaySeconds: 0 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 -readinessProbe: - enabled: true - failureThreshold: 3 - initialDelaySeconds: 0 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - -# Configure arbitrary sidecar containers for CouchDB pods created by the -# StatefulSet -sidecars: {} - # - name: foo - # image: "busybox" - # imagePullPolicy: IfNotPresent - # resources: - # requests: - # cpu: "0.1" - # memory: 10Mi - # command: ['echo "foo";'] - # volumeMounts: - # - name: database-storage - # mountPath: /opt/couchdb/data/ diff --git a/hosting/kubernetes/budibase/values.yaml b/hosting/kubernetes/budibase/values.yaml deleted file mode 100644 index bd9f6543b3..0000000000 --- a/hosting/kubernetes/budibase/values.yaml +++ /dev/null @@ -1,153 +0,0 @@ -# Default values for budibase. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -# fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: true - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: - {} - # fsGroup: 2000 - -securityContext: - {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 10000 - -ingress: - enabled: false - aws: false - nginx: true - certificateArn: "" - className: "" - annotations: - kubernetes.io/ingress.class: nginx - hosts: - - host: # change if using custom domain - paths: - - path: / - pathType: Prefix - backend: - service: - name: proxy-service - port: - number: 10000 - -resources: - {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} - -globals: - budibaseEnv: PRODUCTION - enableAnalytics: true - sentryDSN: "" - posthogToken: "" - logLevel: info - selfHosted: "1" # set to 0 for budibase cloud environment, set to 1 for self-hosted setup - multiTenancy: "0" # set to 0 to disable multiple orgs, set to 1 to enable multiple orgs - accountPortalUrl: "" - accountPortalApiKey: "" - cookieDomain: "" - platformUrl: "" - - createSecrets: true # creates an internal API key, JWT secrets and redis password for you - - # if createSecrets is set to false, you can hard-code your secrets here - internalApiKey: "" - jwtSecret: "" - - smtp: - enabled: false - -services: - dns: cluster.local - - proxy: - port: 10000 - replicaCount: 1 - - apps: - port: 4002 - replicaCount: 1 - logLevel: info - - worker: - port: 4001 - replicaCount: 1 - - couchdb: - enabled: true - replicaCount: 3 - # url: "" # only change if pointing to existing couch server - # user: "" # only change if pointing to existing couch server - # password: "" # only change if pointing to existing couch server - port: 5984 - storage: 100Mi - - redis: - enabled: true # disable if using external redis - port: 6379 - replicaCount: 1 - url: "" # only change if pointing to existing redis cluster and enabled: false - password: "budibase" # recommended to override if using built-in redis - storage: 100Mi - - objectStore: - minio: true - browser: true - port: 9000 - replicaCount: 1 - accessKey: "" # AWS_ACCESS_KEY if using S3 or existing minio access key - secretKey: "" # AWS_SECRET_ACCESS_KEY if using S3 or existing minio secret - region: "" # AWS_REGION if using S3 or existing minio secret - url: "" # only change if pointing to existing minio cluster and minio: false - storage: 100Mi diff --git a/lerna.json b/lerna.json index 2582e41098..698e56dc5c 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.0.9-alpha.1", + "version": "1.0.15-alpha.1", "npmClient": "yarn", "packages": [ "packages/*" diff --git a/package.json b/package.json index 4be3fe1401..63de8251d4 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "eslint-plugin-cypress": "^2.11.3", "eslint-plugin-svelte3": "^3.2.0", "husky": "^7.0.1", + "js-yaml": "^4.1.0", "kill-port": "^1.6.1", "lerna": "3.14.1", "prettier": "^2.3.1", @@ -49,7 +50,7 @@ "build:docker:airgap": "node hosting/scripts/airgapped/airgappedDockerBuild", "build:digitalocean": "cd hosting/digitalocean && ./build.sh && cd -", "build:docs": "lerna run build:docs", - "release:helm": "./scripts/release_helm_chart.sh", + "release:helm": "node scripts/releaseHelmChart", "env:multi:enable": "lerna run env:multi:enable", "env:multi:disable": "lerna run env:multi:disable", "env:selfhost:enable": "lerna run env:selfhost:enable", diff --git a/packages/auth/package.json b/packages/auth/package.json index 489543a544..72dddf313d 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/auth", - "version": "1.0.9-alpha.1", + "version": "1.0.15-alpha.1", "description": "Authentication middlewares for budibase builder and apps", "main": "src/index.js", "author": "Budibase", diff --git a/packages/auth/src/db/utils.js b/packages/auth/src/db/utils.js index d23d407dab..2bad09c306 100644 --- a/packages/auth/src/db/utils.js +++ b/packages/auth/src/db/utils.js @@ -3,10 +3,15 @@ const Replication = require("./Replication") const { DEFAULT_TENANT_ID, Configs } = require("../constants") const env = require("../environment") const { StaticDatabases, SEPARATOR, DocumentTypes } = require("./constants") -const { getTenantId, getTenantIDFromAppID } = require("../tenancy") +const { + getTenantId, + getTenantIDFromAppID, + getGlobalDBName, +} = require("../tenancy") const fetch = require("node-fetch") const { getCouch } = require("./index") const { getAppMetadata } = require("../cache/appMetadata") +const { checkSlashesInUrl } = require("../helpers") const NO_APP_ERROR = "No app provided" @@ -194,6 +199,11 @@ exports.getCouchUrl = () => { return `${protocol}://${env.COUCH_DB_USERNAME}:${env.COUCH_DB_PASSWORD}@${rest}` } +exports.getStartEndKeyURL = (base, baseKey, tenantId = null) => { + const tenancy = tenantId ? `${SEPARATOR}${tenantId}` : "" + return `${base}?startkey="${baseKey}${tenancy}"&endkey="${baseKey}${tenancy}${UNICODE_MAX}"` +} + /** * if in production this will use the CouchDB _all_dbs call to retrieve a list of databases. If testing * when using Pouch it will use the pouchdb-all-dbs package. @@ -203,12 +213,34 @@ exports.getAllDbs = async () => { if (env.isTest()) { return getCouch().allDbs() } - const response = await fetch(`${exports.getCouchUrl()}/_all_dbs`) - if (response.status === 200) { - return response.json() - } else { - throw "Cannot connect to CouchDB instance" + let dbs = [] + async function addDbs(url) { + const response = await fetch(checkSlashesInUrl(encodeURI(url))) + if (response.status === 200) { + let json = await response.json() + dbs = dbs.concat(json) + } else { + throw "Cannot connect to CouchDB instance" + } } + let couchUrl = `${exports.getCouchUrl()}/_all_dbs` + if (env.MULTI_TENANCY) { + let tenantId = getTenantId() + // get prod apps + await addDbs( + exports.getStartEndKeyURL(couchUrl, DocumentTypes.APP, tenantId) + ) + // get dev apps + await addDbs( + exports.getStartEndKeyURL(couchUrl, DocumentTypes.APP_DEV, tenantId) + ) + // add global db name + dbs.push(getGlobalDBName(tenantId)) + } else { + // just get all DBs in self host + await addDbs(couchUrl) + } + return dbs } /** @@ -389,7 +421,7 @@ const getScopedFullConfig = async function (db, { type, user, workspace }) { } const getPlatformUrl = async settings => { - let platformUrl = env.PLATFORM_URL + let platformUrl = env.PLATFORM_URL || "http://localhost:10000" if (!env.SELF_HOSTED && env.MULTI_TENANCY) { // cloud and multi tenant - add the tenant to the default platform url @@ -404,7 +436,7 @@ const getPlatformUrl = async settings => { } } - return platformUrl ? platformUrl : "http://localhost:10000" + return platformUrl } async function getScopedConfig(db, params) { diff --git a/packages/auth/src/helpers.js b/packages/auth/src/helpers.js new file mode 100644 index 0000000000..b402a82cf3 --- /dev/null +++ b/packages/auth/src/helpers.js @@ -0,0 +1,9 @@ +/** + * Makes sure that a URL has the correct number of slashes, while maintaining the + * http(s):// double slashes. + * @param {string} url The URL to test and remove any extra double slashes. + * @return {string} The updated url. + */ +exports.checkSlashesInUrl = url => { + return url.replace(/(https?:\/\/)|(\/)+/g, "$1$2") +} diff --git a/packages/bbui/package.json b/packages/bbui/package.json index b0f36d4aef..1badc1b059 100644 --- a/packages/bbui/package.json +++ b/packages/bbui/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/bbui", "description": "A UI solution used in the different Budibase projects.", - "version": "1.0.9-alpha.1", + "version": "1.0.15-alpha.1", "license": "MPL-2.0", "svelte": "src/index.js", "module": "dist/bbui.es.js", diff --git a/packages/builder/package.json b/packages/builder/package.json index 5f473e086f..891b19e674 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/builder", - "version": "1.0.9-alpha.1", + "version": "1.0.15-alpha.1", "license": "GPL-3.0", "private": true, "scripts": { @@ -65,10 +65,10 @@ } }, "dependencies": { - "@budibase/bbui": "^1.0.9-alpha.1", - "@budibase/client": "^1.0.9-alpha.1", + "@budibase/bbui": "^1.0.15-alpha.1", + "@budibase/client": "^1.0.15-alpha.1", "@budibase/colorpicker": "1.1.2", - "@budibase/string-templates": "^1.0.9-alpha.1", + "@budibase/string-templates": "^1.0.15-alpha.1", "@sentry/browser": "5.19.1", "@spectrum-css/page": "^3.0.1", "@spectrum-css/vars": "^3.0.1", diff --git a/packages/cli/package.json b/packages/cli/package.json index b264d574fd..97428696df 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/cli", - "version": "1.0.9-alpha.1", + "version": "1.0.15-alpha.1", "description": "Budibase CLI, for developers, self hosting and migrations.", "main": "src/index.js", "bin": { diff --git a/packages/client/package.json b/packages/client/package.json index 951bc5e4e4..cf58b974c0 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/client", - "version": "1.0.9-alpha.1", + "version": "1.0.15-alpha.1", "license": "MPL-2.0", "module": "dist/budibase-client.js", "main": "dist/budibase-client.js", @@ -19,9 +19,9 @@ "dev:builder": "rollup -cw" }, "dependencies": { - "@budibase/bbui": "^1.0.9-alpha.1", + "@budibase/bbui": "^1.0.15-alpha.1", "@budibase/standard-components": "^0.9.139", - "@budibase/string-templates": "^1.0.9-alpha.1", + "@budibase/string-templates": "^1.0.15-alpha.1", "regexparam": "^1.3.0", "shortid": "^2.2.15", "svelte-spa-router": "^3.0.5" diff --git a/packages/server/package.json b/packages/server/package.json index 3cbf8183e4..ca6ef7bf3a 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/server", "email": "hi@budibase.com", - "version": "1.0.9-alpha.1", + "version": "1.0.15-alpha.1", "description": "Budibase Web Server", "main": "src/index.ts", "repository": { @@ -70,9 +70,9 @@ "license": "GPL-3.0", "dependencies": { "@apidevtools/swagger-parser": "^10.0.3", - "@budibase/auth": "^1.0.9-alpha.1", - "@budibase/client": "^1.0.9-alpha.1", - "@budibase/string-templates": "^1.0.9-alpha.1", + "@budibase/auth": "^1.0.15-alpha.1", + "@budibase/client": "^1.0.15-alpha.1", + "@budibase/string-templates": "^1.0.15-alpha.1", "@bull-board/api": "^3.7.0", "@bull-board/koa": "^3.7.0", "@elastic/elasticsearch": "7.10.0", diff --git a/packages/server/src/integrations/mysql.ts b/packages/server/src/integrations/mysql.ts index 98584e04d2..24a55a273d 100644 --- a/packages/server/src/integrations/mysql.ts +++ b/packages/server/src/integrations/mysql.ts @@ -143,7 +143,7 @@ module MySQLModule { const schema: TableSchema = {} const descResp = await internalQuery( this.client, - { sql: `DESCRIBE ${tableName};` }, + { sql: `DESCRIBE \`${tableName}\`;` }, false ) for (let column of descResp) { diff --git a/packages/string-templates/package.json b/packages/string-templates/package.json index 36dc24ca22..e06ee69e96 100644 --- a/packages/string-templates/package.json +++ b/packages/string-templates/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/string-templates", - "version": "1.0.9-alpha.1", + "version": "1.0.15-alpha.1", "description": "Handlebars wrapper for Budibase templating.", "main": "src/index.cjs", "module": "dist/bundle.mjs", diff --git a/packages/worker/package.json b/packages/worker/package.json index 9f0bda3c77..387e0a8b4a 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/worker", "email": "hi@budibase.com", - "version": "1.0.9-alpha.1", + "version": "1.0.15-alpha.1", "description": "Budibase background service", "main": "src/index.js", "repository": { @@ -29,8 +29,8 @@ "author": "Budibase", "license": "GPL-3.0", "dependencies": { - "@budibase/auth": "^1.0.9-alpha.1", - "@budibase/string-templates": "^1.0.9-alpha.1", + "@budibase/auth": "^1.0.15-alpha.1", + "@budibase/string-templates": "^1.0.15-alpha.1", "@koa/router": "^8.0.0", "@sentry/node": "^6.0.0", "@techpass/passport-openidconnect": "^0.3.0", diff --git a/scripts/releaseHelmChart.js b/scripts/releaseHelmChart.js new file mode 100755 index 0000000000..0e469bd012 --- /dev/null +++ b/scripts/releaseHelmChart.js @@ -0,0 +1,35 @@ +const yaml = require("js-yaml") +const fs = require("fs") +const path = require("path") + +const UpgradeTypes = { + MAJOR: "major", + MINOR: "minor", + PATCH: "patch" +} + +const CHART_PATH = path.join(__dirname, "../", "charts", "budibase", "Chart.yaml") +const UPGRADE_VERSION = process.env.BUDIBASE_RELEASE_VERSION +const UPGRADE_TYPE = process.env.HELM_CHART_UPGRADE_TYPE || UpgradeTypes.PATCH + +if (!UPGRADE_VERSION) { + throw new Error("BUDIBASE_RELEASE_VERSION env var must be set.") +} + +try { + const chartFile = fs.readFileSync(CHART_PATH, "utf-8") + const chart = yaml.load(chartFile) + + // Upgrade app version in chart to match budibase release version + chart.appVersion = UPGRADE_VERSION + + // semantically version the chart + const [major, minor, patch] = chart.version.split(".") + const newPatch = parseInt(patch) + 1 + chart.version = [major, minor, newPatch].join(".") + const updatedChartYaml = yaml.dump(chart) + fs.writeFileSync(CHART_PATH, updatedChartYaml) +} catch (err) { + console.error("Error releasing helm chart") + throw err +} diff --git a/scripts/release_helm_chart.sh b/scripts/release_helm_chart.sh deleted file mode 100755 index b1594cca91..0000000000 --- a/scripts/release_helm_chart.sh +++ /dev/null @@ -1,3 +0,0 @@ -cd docs -helm package ../hosting/kubernetes/budibase -helm repo index . --url https://budibase.github.io/budibase \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index aa02ce87f5..628e48bd0c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1082,6 +1082,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -3260,6 +3265,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"