From e65bdad4b26a685bf645251806b6c721cd2c698e Mon Sep 17 00:00:00 2001 From: Mohmn Date: Fri, 14 Jun 2024 02:03:59 +0530 Subject: [PATCH] feat: add deployment and ci cd files --- .dockerignore | 5 ++ .../build-docker-img-and-release-dev-env.yml | 81 +++++++++++++++++++ .github/workflows/deploy-dev.yml | 38 +++++++++ .github/workflows/deploy-prod.yml | 38 +++++++++ .github/workflows/pull-request-ci.yml | 54 +++++++++++++ Dockerfile | 19 +++++ apps/like/prisma/schema.prisma | 6 +- apps/like/src/main.ts | 2 +- deployment/base/cluster-role-binding.yaml | 13 +++ deployment/base/cluster-role.yaml | 12 +++ deployment/base/database-migration-job.yaml | 42 ++++++++++ .../base/db-connection-sealed-secret.yaml | 12 +++ deployment/base/deployment.yaml | 37 +++++++++ deployment/base/kustomization.yaml | 9 +++ deployment/base/mapping.yaml | 7 ++ deployment/base/namespace.yaml | 4 + deployment/base/service.yaml | 13 +++ .../db-connection-sealed-secret.yaml | 13 +++ .../overlays/development/kustomization.yaml | 5 ++ deployment/overlays/development/mapping.yaml | 11 +++ .../db-connection-sealed-secret.yaml | 12 +++ .../overlays/production/kustomization.yaml | 4 + .../test/db-connection-sealed-secret.yaml | 13 +++ deployment/overlays/test/kustomization.yaml | 5 ++ deployment/overlays/test/mapping.yaml | 11 +++ package.json | 4 +- 26 files changed, 465 insertions(+), 5 deletions(-) create mode 100644 .dockerignore create mode 100644 .github/workflows/build-docker-img-and-release-dev-env.yml create mode 100644 .github/workflows/deploy-dev.yml create mode 100644 .github/workflows/deploy-prod.yml create mode 100644 .github/workflows/pull-request-ci.yml create mode 100644 Dockerfile create mode 100644 deployment/base/cluster-role-binding.yaml create mode 100644 deployment/base/cluster-role.yaml create mode 100644 deployment/base/database-migration-job.yaml create mode 100644 deployment/base/db-connection-sealed-secret.yaml create mode 100644 deployment/base/deployment.yaml create mode 100644 deployment/base/kustomization.yaml create mode 100644 deployment/base/mapping.yaml create mode 100644 deployment/base/namespace.yaml create mode 100644 deployment/base/service.yaml create mode 100644 deployment/overlays/development/db-connection-sealed-secret.yaml create mode 100644 deployment/overlays/development/kustomization.yaml create mode 100644 deployment/overlays/development/mapping.yaml create mode 100644 deployment/overlays/production/db-connection-sealed-secret.yaml create mode 100644 deployment/overlays/production/kustomization.yaml create mode 100644 deployment/overlays/test/db-connection-sealed-secret.yaml create mode 100644 deployment/overlays/test/kustomization.yaml create mode 100644 deployment/overlays/test/mapping.yaml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..7f109fb --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +node_modules +dist +.git +.cache +.env \ No newline at end of file diff --git a/.github/workflows/build-docker-img-and-release-dev-env.yml b/.github/workflows/build-docker-img-and-release-dev-env.yml new file mode 100644 index 0000000..e6ec91e --- /dev/null +++ b/.github/workflows/build-docker-img-and-release-dev-env.yml @@ -0,0 +1,81 @@ +name: Service CI/CD Pipeline to Release and Deploy to Dev Env + +on: + push: + branches: + - main + +jobs: + release: + name: build docker image + runs-on: ubuntu-latest + if: | + !contains(github.event.head_commit.message, 'skip-ci') + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: '18.x' + + - name: npm clean install + run: npm ci + + - run: npm i -g semantic-release @semantic-release/{git,exec,changelog} + + - run: semantic-release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: make build + run: npx nx build like + + - name: get-npm-version + id: package-version + uses: martinbeentjes/npm-get-version-action@master + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build snapshot and push on merge + id: docker_build_release + uses: docker/build-push-action@v5 + with: + context: ./ + file: ./Dockerfile + push: true + tags: greenstand/treetracker-like:${{ steps.package-version.outputs.current-version }} + + outputs: + bumped_version: ${{ steps.export_bumped_version.outputs.bumped_version }} + + deploy: + name: Deploy to dev env + runs-on: ubuntu-latest + needs: release + if: | + !contains(github.event.head_commit.message, 'skip-ci') + steps: + - uses: actions/checkout@v2 + - name: Install kustomize + run: curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash + - name: Run kustomize + run: (cd deployment/base && ../../kustomize edit set image greenstand/treetracker-like:${{ needs.release.outputs.bumped_version }} ) + - name: Install doctl for kubernetes + uses: digitalocean/action-doctl@v2 + with: + token: ${{ secrets.DEV_DIGITALOCEAN_TOKEN }} + - name: Save DigitalOcean kubeconfig + run: doctl kubernetes cluster kubeconfig save ${{ secrets.DEV_CLUSTER_NAME }} + - name: Update kubernetes resources + run: kustomize build deployment/overlays/development | kubectl apply -n ${{ secrets.K8S_NAMESPACE }} --wait -f - diff --git a/.github/workflows/deploy-dev.yml b/.github/workflows/deploy-dev.yml new file mode 100644 index 0000000..7979103 --- /dev/null +++ b/.github/workflows/deploy-dev.yml @@ -0,0 +1,38 @@ +name: Deploy to dev Env + +on: + workflow_dispatch: + inputs: + git-tag: + description: "tag" + required: true + +jobs: + deploy: + name: Deploy treetracker-like to dev + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.inputs.git-tag }} + + - name: get-npm-version + id: package-version + uses: martinbeentjes/npm-get-version-action@master + + - name: Install kustomize + run: curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash + + - name: Run kustomize + run: (cd ./deployment/base && ../../kustomize edit set image greenstand/treetracker-like:${{ steps.package-version.outputs.current-version }} ) + + - name: Install doctl for kubernetes + uses: digitalocean/action-doctl@v2 + with: + token: ${{ secrets.DIGITALOCEAN_PRODUCTION_TOKEN }} + + - name: Save DigitalOcean kubeconfig + run: doctl kubernetes cluster kubeconfig save ${{ secrets.PRODUCTION_CLUSTER_NAME }} + + - name: Update kubernetes resources + run: kustomize build deployment/overlays/development | kubectl apply -n webmap --wait -f - diff --git a/.github/workflows/deploy-prod.yml b/.github/workflows/deploy-prod.yml new file mode 100644 index 0000000..47474aa --- /dev/null +++ b/.github/workflows/deploy-prod.yml @@ -0,0 +1,38 @@ +name: Deploy to Prod Env + +on: + workflow_dispatch: + inputs: + git-tag: + description: "tag" + required: true + +jobs: + deploy: + name: Deploy treetracker-like to production + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.inputs.git-tag }} + + - name: get-npm-version + id: package-version + uses: martinbeentjes/npm-get-version-action@master + + - name: Install kustomize + run: curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash + + - name: Run kustomize + run: (cd ./deployment/base && ../../kustomize edit set image greenstand/treetracker-like:${{ steps.package-version.outputs.current-version }} ) + + - name: Install doctl for kubernetes + uses: digitalocean/action-doctl@v2 + with: + token: ${{ secrets.DIGITALOCEAN_PRODUCTION_TOKEN }} + + - name: Save DigitalOcean kubeconfig + run: doctl kubernetes cluster kubeconfig save ${{ secrets.PRODUCTION_CLUSTER_NAME }} + + - name: Update kubernetes resources + run: kustomize build deployment/overlays/prodiction | kubectl apply -n webmap --wait -f - diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml new file mode 100644 index 0000000..ccf9f87 --- /dev/null +++ b/.github/workflows/pull-request-ci.yml @@ -0,0 +1,54 @@ + +name: CI for New Pull Requests + +on: + push: + branches: + - '*' + + + +jobs: + + test: + name: Run all tests + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:14 + env: + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + # Set health checks to wait until postgres has started + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + steps: + - uses: actions/checkout@v4 + - name: Use Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: '18.x' + + - name: npm clean install + run: npm ci + + - name: Typescript compiles + run: npx nx build like + + - name: Eslint + run: npx nx lint like + continue-on-error: true + + - name: database migration + run: npm run migration + env: + DATABASE_URL: postgresql://postgres:postgres@localhost:5432/postgres + + - name: run tests + run: npx nx test like + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8965a3e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +FROM node:18-alpine as builder +WORKDIR /app +ENV PATH /app/node_modules/.bin:$PATH +COPY package.json ./ +COPY package-lock.json ./ +RUN npm ci --silent +COPY . . +RUN npx prisma generate --schema=apps/like/prisma/schema.prisma +RUN npx nx build like --configuration=production +RUN npm prune --production + +FROM node:18-alpine as prod +WORKDIR /app +COPY --from=builder app/dist/apps/like ./dist +COPY --from=builder app/node_modules ./node_modules +COPY --from=builder /app/node_modules/.prisma/ ./node_modules/.prisma/ +COPY --from=builder /app/apps/like/prisma/schema.prisma ./prisma/schema.prisma +EXPOSE 3000 +CMD ["node", "dist/main.js"] diff --git a/apps/like/prisma/schema.prisma b/apps/like/prisma/schema.prisma index d117020..7ac02ab 100644 --- a/apps/like/prisma/schema.prisma +++ b/apps/like/prisma/schema.prisma @@ -6,9 +6,9 @@ generator client { } datasource db { - provider = "sqlite" - url = "file:../postDB" - // url = env("DATABASE_URL") + provider = "postgresql" + url = env("DATABASE_URL") + //url = "file:../postDB" } model User { diff --git a/apps/like/src/main.ts b/apps/like/src/main.ts index 64f27f0..326a1cc 100644 --- a/apps/like/src/main.ts +++ b/apps/like/src/main.ts @@ -4,7 +4,7 @@ import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); - const port = process.env.PORT || 3010; + const port = process.env.PORT || 3006; await app.listen(port); Logger.log( `🚀 Application is running on: http://localhost:${port}` diff --git a/deployment/base/cluster-role-binding.yaml b/deployment/base/cluster-role-binding.yaml new file mode 100644 index 0000000..e48007d --- /dev/null +++ b/deployment/base/cluster-role-binding.yaml @@ -0,0 +1,13 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: k8s-wait-for + # annotations: +subjects: + - kind: ServiceAccount + name: default + namespace: treetracker-like-api +roleRef: + kind: ClusterRole + name: k8s-wait-for + apiGroup: rbac.authorization.k8s.io diff --git a/deployment/base/cluster-role.yaml b/deployment/base/cluster-role.yaml new file mode 100644 index 0000000..2f47811 --- /dev/null +++ b/deployment/base/cluster-role.yaml @@ -0,0 +1,12 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: k8s-wait-for + # annotations: +rules: + - apiGroups: [''] + resources: ['services', 'pods', 'jobs'] + verbs: ['get', 'watch', 'list'] + - apiGroups: ['batch'] + resources: ['services', 'pods', 'jobs'] + verbs: ['get', 'watch', 'list'] diff --git a/deployment/base/database-migration-job.yaml b/deployment/base/database-migration-job.yaml new file mode 100644 index 0000000..c8fa688 --- /dev/null +++ b/deployment/base/database-migration-job.yaml @@ -0,0 +1,42 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: database-migration-job + namespace: treetracker-like-api +spec: + backoffLimit: 1 # allow for one re-try of the migration + template: + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: doks.digitalocean.com/node-pool + operator: In + values: + - microservices-node-pool + containers: + - name: migration + image: treetracker-like + imagePullPolicy: IfNotPresent + + env: + - name: DATABASE_URL + valueFrom: + secretKeyRef: + name: database-connection + key: db + command: ['node'] + args: + [ + 'node_modules/prisma', + 'migrate', + 'deploy', + '--schema=./prisma/schema.prisma' + ] + restartPolicy: Never + # initContainers: + # - name: wait-for-postgres + # image: busybox + # command: ['sh', '-c', 'until nslookup postgres-srv.treetracker-like-api.svc.cluster.local; do echo waiting for postgres; sleep 2; done'] diff --git a/deployment/base/db-connection-sealed-secret.yaml b/deployment/base/db-connection-sealed-secret.yaml new file mode 100644 index 0000000..fc1f50c --- /dev/null +++ b/deployment/base/db-connection-sealed-secret.yaml @@ -0,0 +1,12 @@ +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + name: database-connection + namespace: treetracker-like-api +spec: + encryption: + db: PLACEHOLDER + template: + metadata: + name: database-connection + namespace: treetracker-like-api \ No newline at end of file diff --git a/deployment/base/deployment.yaml b/deployment/base/deployment.yaml new file mode 100644 index 0000000..89553db --- /dev/null +++ b/deployment/base/deployment.yaml @@ -0,0 +1,37 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: treetracker-like-api + labels: + app: treetracker-like-api + namespace: treetracker-like-api +spec: + replicas: 2 + selector: + matchLabels: + app: treetracker-like-api + template: + metadata: + labels: + app: treetracker-like-api + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: doks.digitalocean.com/node-pool + operator: In + values: + - microservices-node-pool + containers: + - name: treetracker-like-api + image: treetracker-like + ports: + - containerPort: 3006 + env: + - name: DATABASE_URL + valueFrom: + secretKeyRef: + name: database-connection + key: db diff --git a/deployment/base/kustomization.yaml b/deployment/base/kustomization.yaml new file mode 100644 index 0000000..b3e6382 --- /dev/null +++ b/deployment/base/kustomization.yaml @@ -0,0 +1,9 @@ +resources: + - deployment.yaml + - mapping.yaml + - service.yaml + - db-connection-sealed-secret.yaml + - namespace.yaml + - cluster-role.yaml + - cluster-role-binding.yaml + - database-migration-job.yaml diff --git a/deployment/base/mapping.yaml b/deployment/base/mapping.yaml new file mode 100644 index 0000000..b168045 --- /dev/null +++ b/deployment/base/mapping.yaml @@ -0,0 +1,7 @@ +apiVersion: getambassador.io/v2 +kind: Mapping +metadata: + name: treetracker-like-api +spec: + prefix: /like/ + service: treetracker-like-api-service diff --git a/deployment/base/namespace.yaml b/deployment/base/namespace.yaml new file mode 100644 index 0000000..37cc65f --- /dev/null +++ b/deployment/base/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: treetracker-like-api diff --git a/deployment/base/service.yaml b/deployment/base/service.yaml new file mode 100644 index 0000000..a4e680c --- /dev/null +++ b/deployment/base/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: treetracker-like-api-service + namespace: treetracker-like-api +spec: + selector: + app: treetracker-like-api + ports: + - protocol: TCP + port: 3006 + targetPort: 3006 + type: ClusterIP diff --git a/deployment/overlays/development/db-connection-sealed-secret.yaml b/deployment/overlays/development/db-connection-sealed-secret.yaml new file mode 100644 index 0000000..5f03922 --- /dev/null +++ b/deployment/overlays/development/db-connection-sealed-secret.yaml @@ -0,0 +1,13 @@ +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + name: database-connection + namespace: treetracker-like-api +spec: + encryptedData: + db: AgCCxKBvzLs9wvmn4OdxT1ZX0DEDxcUozFb3alvgBuTKGeFB1N5e9SGDz0vSck4EveAxofA1nosRD0WPuF3Aic/x4wt0rz5Uzv0iU166rVUcL5fG/hf5Y0+LRsDZg4+fja12bT13wRMF9bPSI6bdptDyF5nKYhBdcHLvOE6OC5xHP7zbMknkH+LQ6ikZodaarIX+rN9oXMN6QrOL6TqY+/b3Bh/KvPLtiT8iHMO189DIlG1UB676jQKGteY7hZLBk2QIV1ixds6WAECjP8Qiwegaui/j75/scaOlM8RSeuII6GCme2D2zvCQnl7uEPdQ3fNhhbBAd6QmTlen9+/XvqQNeLRLZy2V8iHcALxK4gCtfgFNhLjXKPEpYQ65TwknsFT5SnUAjntIpYDFpJf86xSiPbBOSHpbEDz2frtoLgA0mTcRAyDxkk/jyp59OOL15Q3WB5GepQ46q0l8dVUXYJ3lGfQT8gWKUhZBQgvk6l6Uw14q4ifDgXdAbl0iPzlAIlbzwdx2lucWMf5fPe90dFG19EpfCSGTEDWnMOsQgEsZnttg9gS8iqdjgC3BIQhpo8NX47yntGS/txI626/zce050gdohDPag77TCbfqn86X8OpOdBUoPmQPvwlzKM9pYMoSaKMsA9sIf0Dfa7xYskssCQLTGWQpagxTW5dppTB0kRCLmCkbYpgC8+6JQjybsfuYg4dPDM0Otxz0ClOwtrhP6SXKI54aQ1tgmFVTR1JN2947gxqHtsljhjUHFYGM5XCgYjIRCKIOG+od2SsxOpJhFrSJpmrw8xntZtJ7GTsoVy7x4zJCle2LEjr6LeWsvyHXBWAxLG78ai/HiBjiAOnsE3V4fkpiU3G8fL6BGZwttiwQ2ZDgJjdxX2E= + template: + metadata: + name: database-connection + namespace: treetracker-like-api + diff --git a/deployment/overlays/development/kustomization.yaml b/deployment/overlays/development/kustomization.yaml new file mode 100644 index 0000000..8cc9674 --- /dev/null +++ b/deployment/overlays/development/kustomization.yaml @@ -0,0 +1,5 @@ +resources: + - ../../base +patchesStrategicMerge: + - db-connection-sealed-secret.yaml + - mapping.yaml diff --git a/deployment/overlays/development/mapping.yaml b/deployment/overlays/development/mapping.yaml new file mode 100644 index 0000000..f0ddab0 --- /dev/null +++ b/deployment/overlays/development/mapping.yaml @@ -0,0 +1,11 @@ +apiVersion: getambassador.io/v2 +kind: Mapping +metadata: + name: treetracker-like-api +spec: + cors: + origins: '*' + methods: GET, POST, PATCH, OPTIONS + headers: + - Content-Type + - Authorization \ No newline at end of file diff --git a/deployment/overlays/production/db-connection-sealed-secret.yaml b/deployment/overlays/production/db-connection-sealed-secret.yaml new file mode 100644 index 0000000..fc1f50c --- /dev/null +++ b/deployment/overlays/production/db-connection-sealed-secret.yaml @@ -0,0 +1,12 @@ +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + name: database-connection + namespace: treetracker-like-api +spec: + encryption: + db: PLACEHOLDER + template: + metadata: + name: database-connection + namespace: treetracker-like-api \ No newline at end of file diff --git a/deployment/overlays/production/kustomization.yaml b/deployment/overlays/production/kustomization.yaml new file mode 100644 index 0000000..b796f7a --- /dev/null +++ b/deployment/overlays/production/kustomization.yaml @@ -0,0 +1,4 @@ +resources: + - ../../base +patchesStrategicMerge: + - db-connection-sealed-secret.yaml diff --git a/deployment/overlays/test/db-connection-sealed-secret.yaml b/deployment/overlays/test/db-connection-sealed-secret.yaml new file mode 100644 index 0000000..aaf768d --- /dev/null +++ b/deployment/overlays/test/db-connection-sealed-secret.yaml @@ -0,0 +1,13 @@ +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + name: database-connection + namespace: treetracker-like-api +spec: + encryptedData: + db: AgAKZhV7Wqo1M+yT6or2PWmEcabQfNfUO79GmKZ0U5erXIpD6d33bG+QY83TnMrt6iqAETb7jaWQ16VK9ahqNr8WMPhxaPfMY0WhwJYeySXPWpuXVYKPLBTxjV2tACupi7Iv5h8LmNmN/IlWWqFueKj4ZYM5MzEug3vw860OC52Y/0MesPy/qZqCHFdebL/AqcCyqFSvGelSTEqLXeVbkNO7YpGmWJrqtejf/1pfc9IvrrIQSMLtoKHW4eLKp5h/7/g4L+plHvyUKUOPHZ+gY0LvGyKxKiesC/l1v0yqdaQnbI9sQhKaCFZBe2dC0C31M7LhMDUnO9RVIi8kK6nrHX5lXV0DceMYrs9vGlf4FuXYWgsFR/13d5D6V0UDyWx902i41psuFGFrUvalcJ5hgb3R5zdY2rBFPkkrP2kIN/CulbPwKZnrn1Wzu+NaBA9IgFlIPjerCOPKdg0lIcO7IANrR5ErGjVtRtCxFkDcDimCT9LUJz6VsXUAk+W0wp46TL2pOsGlOSFj8J8FkBwyTpani7fRMcobfW5lmkou3dicQ3m2G/XCiFoKZGdleB5JTjovKqSQq8pFGnoQdZt4vA0GsoH7ipLhe/bK9U3OItfgZ5/DiFxrvRFWQ/wSi/wBnj2Lj2Gg/ydN+GQnoW8aaEczbRopGdud1QR2emo2AAbvddX7RDEWTk/AgDj18vpbO/FFVjVbTpZjIuh6nXSF9Vm0pGH3/W5fbBVW6jU4Yfxi3XBXM2gGHE+sCVjLhyvE9UK+CBcnVZzGHIwWracAClYrxiEfH/0kfhH4hP5Pry6Lue9CjzwyY5pskwjMfZ5XMpJhWfiJcWfW3O84+OVQnHIW8Oouy116PGCcNyt49yU/NAve/QGZKdmR + template: + metadata: + name: database-connection + namespace: treetracker-like-api + diff --git a/deployment/overlays/test/kustomization.yaml b/deployment/overlays/test/kustomization.yaml new file mode 100644 index 0000000..8cc9674 --- /dev/null +++ b/deployment/overlays/test/kustomization.yaml @@ -0,0 +1,5 @@ +resources: + - ../../base +patchesStrategicMerge: + - db-connection-sealed-secret.yaml + - mapping.yaml diff --git a/deployment/overlays/test/mapping.yaml b/deployment/overlays/test/mapping.yaml new file mode 100644 index 0000000..f0ddab0 --- /dev/null +++ b/deployment/overlays/test/mapping.yaml @@ -0,0 +1,11 @@ +apiVersion: getambassador.io/v2 +kind: Mapping +metadata: + name: treetracker-like-api +spec: + cors: + origins: '*' + methods: GET, POST, PATCH, OPTIONS + headers: + - Content-Type + - Authorization \ No newline at end of file diff --git a/package.json b/package.json index 71451a6..289a86f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,9 @@ "name": "@like-button-sample/source", "version": "0.0.0", "license": "MIT", - "scripts": {}, + "scripts": { + "migration": "node node_modules/prisma migrate deploy --schema=./apps/like/prisma/schema.prisma" + }, "private": true, "dependencies": { "@nestjs/axios": "^3.0.0",