From 8b8135c222e4c31a5c50ae4fd361bd2ed3fd04d2 Mon Sep 17 00:00:00 2001 From: incubator4 Date: Mon, 1 Jan 2024 11:29:46 +0800 Subject: [PATCH 01/10] chore(deploy): prod --- deploy/prod/cm.yaml | 86 ---------------------------------- deploy/prod/deploy.yaml | 77 +----------------------------- deploy/prod/hpa.yaml | 22 +-------- deploy/prod/kustomization.yaml | 8 ++++ deploy/prod/secret.yaml | 16 +++++++ deploy/prod/secrets.yaml | 27 ----------- deploy/prod/svc.yaml | 10 ++-- 7 files changed, 30 insertions(+), 216 deletions(-) delete mode 100644 deploy/prod/cm.yaml create mode 100644 deploy/prod/kustomization.yaml create mode 100644 deploy/prod/secret.yaml delete mode 100644 deploy/prod/secrets.yaml diff --git a/deploy/prod/cm.yaml b/deploy/prod/cm.yaml deleted file mode 100644 index be0ac140..00000000 --- a/deploy/prod/cm.yaml +++ /dev/null @@ -1,86 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: xlog-caddy - namespace: crossbell -data: - Caddyfile: | - { - storage redis { - } - - on_demand_tls { - ask http://localhost:5000/ - } - } - - xlog.app, *.xlog.app { - tls jeff@rss3.io { - dns cloudflare {env.CF_API_TOKEN} - } - - reverse_proxy xlog-internal.crossbell.svc:3000 { - header_up x-forwarded-proto http - } - } - - :8080 { - metrics - } - - :80, :443 { - tls jeff@rss3.io { - on_demand - } - - reverse_proxy xlog-internal.crossbell.svc:3000 { - header_up x-forwarded-proto http - } - } ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: xlog-caddy-validator - namespace: crossbell -data: - app.py: | - import requests - from flask import Flask, request, Response - - app = Flask(__name__) - - - @app.route("/") - def check_domain(): - domain = request.args.get("domain") - if not domain: - return Response(status=404) - if domain.endswith('.xlog.app') or domain == "xlog.app": - return Response(status=200) - - # get TXT - res = requests.get("https://cloudflare-dns.com/dns-query", params={ - "name": f"_xlog-challenge.{domain}", - "type": "TXT", - }, headers={"Accept": "application/dns-json"}) - if res.status_code != 200: - return Response(status=res.status_code) - answer = res.json().get("Answer") or [{}] - tenant = answer[0].get("data", "").replace('"', "") - if not tenant: - return Response(status=404) - - # check crossbell - res = requests.get(f"https://indexer.crossbell.io/v1/handles/{tenant}/character") - if res.status_code != 200: - return Response(status=404) - attributes = res.json().get("metadata", {}).get("content", {}).get("attributes", []) - for d in attributes: - if d.get("trait_type") == "xlog_custom_domain": - print(d) - xlog_custom_domain = d.get("value", "").lower() - if xlog_custom_domain == domain: - return Response(status=200) - - return Response(status=404) diff --git a/deploy/prod/deploy.yaml b/deploy/prod/deploy.yaml index c4c18d7e..6ea32e6f 100644 --- a/deploy/prod/deploy.yaml +++ b/deploy/prod/deploy.yaml @@ -25,13 +25,8 @@ spec: prometheus.io/scrape: "true" spec: enableServiceLinks: false - tolerations: - - key: "rss3.io/usage" - operator: "Equal" - value: "csb-others" - effect: "NoSchedule" initContainers: - - image: $IMAGE_TAG_RELEASE + - image: rss3/xlog envFrom: - secretRef: name: xlog @@ -40,7 +35,7 @@ spec: command: ["/bin/sh", "-c"] args: ["npm install -g prisma; npm run prisma:migrate:deploy"] containers: - - image: $IMAGE_TAG_RELEASE + - image: rss3/xlog imagePullPolicy: Always name: xlog envFrom: @@ -74,71 +69,3 @@ spec: schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: xlog-caddy - namespace: crossbell -spec: - replicas: 3 - selector: - matchLabels: - app: xlog-caddy - template: - metadata: - labels: - app: xlog-caddy - annotations: - prometheus.io/path: /metrics - prometheus.io/port: "8080" - prometheus.io/scrape: "true" - spec: - containers: - - name: caddy - image: kindjeff/caddy-tlsredis-docker - imagePullPolicy: Always - command: ["caddy", "run", "-config", "/app/Caddyfile"] - resources: - requests: - cpu: 100m - memory: 128Mi - limits: - cpu: 500m - memory: 512Mi - envFrom: - - secretRef: - name: xlog-caddy - ports: - - containerPort: 80 - name: http - - containerPort: 443 - name: https - volumeMounts: - - name: caddyfile - mountPath: /app - - name: caddy-validator - image: python - command: ["/bin/sh", "-c"] - args: ["pip install flask requests; flask --app=app run"] - resources: - requests: - cpu: 50m - memory: 64Mi - limits: - cpu: 100m - memory: 128Mi - ports: - - containerPort: 5000 - name: http - volumeMounts: - - name: validator - mountPath: /app.py - subPath: app.py - volumes: - - name: caddyfile - configMap: - name: xlog-caddy - - name: validator - configMap: - name: xlog-caddy-validator diff --git a/deploy/prod/hpa.yaml b/deploy/prod/hpa.yaml index 5f5deb9b..d05c9b37 100644 --- a/deploy/prod/hpa.yaml +++ b/deploy/prod/hpa.yaml @@ -4,7 +4,7 @@ metadata: name: xlog namespace: crossbell spec: - maxReplicas: 11 + maxReplicas: 14 minReplicas: 7 scaleTargetRef: apiVersion: apps/v1 @@ -17,23 +17,3 @@ spec: target: type: Utilization averageUtilization: 300 ---- -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: xlog-caddy - namespace: crossbell -spec: - maxReplicas: 20 - minReplicas: 3 - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: xlog-caddy - metrics: - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: 300 diff --git a/deploy/prod/kustomization.yaml b/deploy/prod/kustomization.yaml new file mode 100644 index 00000000..cfa4e781 --- /dev/null +++ b/deploy/prod/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - deploy.yaml + - secret.yaml + - svc.yaml + - hpa diff --git a/deploy/prod/secret.yaml b/deploy/prod/secret.yaml new file mode 100644 index 00000000..83d1d542 --- /dev/null +++ b/deploy/prod/secret.yaml @@ -0,0 +1,16 @@ +# Remember to add it in env.production because it is the nextjs project +apiVersion: v1 +stringData: + REDIS_URL: + DATABASE_URL: + SIMPLEHASH_API_KEY: + OPENAI_API_KEY: + ANONYMOUS_ACCOUNT_PRIVATEKEY: + PORTFOLIO_GITHUB_TOKEN: +kind: Secret +metadata: + name: xlog + namespace: crossbell + annotations: + avp.kubernetes.io/path: "kv/data/crossbell/xlog" +type: Opaque diff --git a/deploy/prod/secrets.yaml b/deploy/prod/secrets.yaml deleted file mode 100644 index 62575c79..00000000 --- a/deploy/prod/secrets.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Remember to add it in env.production because it is the nextjs project -apiVersion: v1 -stringData: - REDIS_URL: ${REDIS_URL} - DATABASE_URL: ${PG_CONN_STRING} - SIMPLEHASH_API_KEY: ${SIMPLEHASH_API_KEY} - OPENAI_API_KEY: ${OPENAI_API_KEY} - ANONYMOUS_ACCOUNT_PRIVATEKEY: ${ANONYMOUS_ACCOUNT_PRIVATEKEY} -kind: Secret -metadata: - name: xlog - namespace: crossbell -type: Opaque ---- -apiVersion: v1 -stringData: - CADDY_CLUSTERING_REDIS_HOST: ${CADDY_CLUSTERING_REDIS_HOST} - CADDY_CLUSTERING_REDIS_PORT: "6379" - CADDY_CLUSTERING_REDIS_USERNAME: "" - CADDY_CLUSTERING_REDIS_PASSWORD: ${CADDY_CLUSTERING_REDIS_PASSWORD} - CADDY_CLUSTERING_REDIS_DB: "0" - CF_API_TOKEN: ${CF_API_TOKEN} -kind: Secret -metadata: - name: xlog-caddy - namespace: crossbell -type: Opaque diff --git a/deploy/prod/svc.yaml b/deploy/prod/svc.yaml index 2418cb2a..cc2cce1f 100644 --- a/deploy/prod/svc.yaml +++ b/deploy/prod/svc.yaml @@ -1,18 +1,14 @@ apiVersion: v1 kind: Service metadata: - name: xlog-lb + name: xlog-internal namespace: crossbell spec: - type: LoadBalancer + type: ClusterIP selector: app: xlog ports: - name: http protocol: TCP port: 80 - targetPort: 80 - - name: https - protocol: TCP - port: 443 - targetPort: 443 + targetPort: 3000 From 056268fa9dcf2a35d9b353d049085487ff21a7e9 Mon Sep 17 00:00:00 2001 From: incubator4 Date: Mon, 1 Jan 2024 02:49:38 +0800 Subject: [PATCH 02/10] chore(deploy): gcp --- .github/workflows/docker-build-push-dev.yml | 54 +++++++------ deploy/dev/cm.yaml | 90 --------------------- deploy/dev/deploy.yaml | 67 +-------------- deploy/dev/kustomization.yaml | 7 ++ deploy/dev/secrets.yaml | 28 ++----- deploy/dev/svc.yaml | 28 +------ 6 files changed, 49 insertions(+), 225 deletions(-) delete mode 100644 deploy/dev/cm.yaml create mode 100644 deploy/dev/kustomization.yaml diff --git a/.github/workflows/docker-build-push-dev.yml b/.github/workflows/docker-build-push-dev.yml index 52f59c24..9a14ef17 100644 --- a/.github/workflows/docker-build-push-dev.yml +++ b/.github/workflows/docker-build-push-dev.yml @@ -25,9 +25,10 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ${{ env.IMAGE_NAME }} + images: rss3/xlog tags: | type=sha,prefix={{branch}}- + type=sha,format=long,prefix={{branch}}- - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to DockerHub @@ -53,25 +54,32 @@ jobs: "NEXT_PUBLIC_IPFS_GATEWAY=${{ vars.NEXT_PUBLIC_IPFS_GATEWAY }}" deploy-dev: - runs-on: ubuntu-latest - environment: Preview - needs: build - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Set K8s context - uses: aliyun/ack-set-context@v1 - with: - access-key-id: "${{ secrets.ACCESS_KEY_ID }}" - access-key-secret: "${{ secrets.ACCESS_KEY_SECRET }}" - cluster-id: "${{ env.ACK_CLUSTER_ID }}" - - run: | - wget https://github.com/mikefarah/yq/releases/download/v4.25.1/yq_linux_amd64.tar.gz -O - | tar xz && mv yq_linux_amd64 /usr/local/bin/yq - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.22.10/bin/linux/amd64/kubectl && chmod +x kubectl && mv kubectl /usr/local/bin/kubectl - - uses: sljeff/secrets2env@main - with: - secrets-json: ${{ toJson(secrets) }} - - env: - IMAGE_TAG_RELEASE: ${{ env.IMAGE_NAME }}:${{ needs.build.outputs.version }} - run: | - sh apply.sh deploy/dev/* + if: github.ref == 'refs/heads/dev' + uses: NaturalSelectionLabs/Daedalus/.github/workflows/deploy-v3-tpl.yaml@main + needs: + - build + with: + images: rss3/xlog + tag: dev-${{ github.sha }} + cluster: dev + namespace: crossbell + releaseName: xlog + revision: main + dir: deploy/dev + secrets: + GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }} + deploy-prod: + if: github.ref == 'refs/heads/main' + uses: NaturalSelectionLabs/Daedalus/.github/workflows/deploy-v3-tpl.yaml@main + needs: + - build + with: + images: rss3/xlog + tag: main-${{ github.sha }} + cluster: prod + namespace: crossbell + releaseName: xlog + revision: main + dir: deploy/prod + secrets: + GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }} diff --git a/deploy/dev/cm.yaml b/deploy/dev/cm.yaml deleted file mode 100644 index a91663b8..00000000 --- a/deploy/dev/cm.yaml +++ /dev/null @@ -1,90 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: xlog-caddy - namespace: crossbell -data: - Caddyfile: | - { - storage redis { - } - - on_demand_tls { - ask http://localhost:5000/ - } - } - - xlog.page, *.xlog.page { - tls jeff@rss3.io { - dns cloudflare {env.CF_API_TOKEN} - } - - reverse_proxy xlog-internal.crossbell.svc:3000 { - header_up x-forwarded-proto http - header_up X-Real-IP {remote_host} - header_up X-Forwarded-For {remote_host} - } - } - - :8080 { - metrics - } - - :80, :443 { - tls jeff@rss3.io { - on_demand - } - - reverse_proxy xlog-internal.crossbell.svc:3000 { - header_up x-forwarded-proto http - header_up X-Real-IP {remote_host} - header_up X-Forwarded-For {remote_host} - } - } ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: xlog-caddy-validator - namespace: crossbell -data: - app.py: | - import requests - from flask import Flask, request, Response - - app = Flask(__name__) - - - @app.route("/") - def check_domain(): - domain = request.args.get("domain") - if not domain: - return Response(status=404) - if domain.endswith('.xlog.page') or domain == "xlog.page": - return Response(status=200) - - # get TXT - res = requests.get("https://cloudflare-dns.com/dns-query", params={ - "name": f"_xlog-challenge.{domain}", - "type": "TXT", - }, headers={"Accept": "application/dns-json"}) - if res.status_code != 200: - return Response(status=res.status_code) - answer = res.json().get("Answer") or [{}] - tenant = answer[0].get("data", "").replace('"', "") - if not tenant: - return Response(status=404) - - # check crossbell - res = requests.get(f"https://indexer.crossbell.io/v1/handles/{tenant}/character") - if res.status_code != 200: - return Response(status=404) - attributes = res.json().get("metadata", {}).get("content", {}).get("attributes", []) - for d in attributes: - if d.get("trait_type") == "xlog_custom_domain": - print(d) - xlog_custom_domain = d.get("value", "").lower() - if xlog_custom_domain == domain: - return Response(status=200) - - return Response(status=404) diff --git a/deploy/dev/deploy.yaml b/deploy/dev/deploy.yaml index f21a9625..6c4daa09 100644 --- a/deploy/dev/deploy.yaml +++ b/deploy/dev/deploy.yaml @@ -26,7 +26,7 @@ spec: spec: enableServiceLinks: false initContainers: - - image: $IMAGE_TAG_RELEASE + - image: rss3/xlog envFrom: - secretRef: name: xlog @@ -35,7 +35,7 @@ spec: command: ["/bin/sh", "-c"] args: ["npm install -g prisma; npm run prisma:migrate:deploy"] containers: - - image: $IMAGE_TAG_RELEASE + - image: rss3/xlog imagePullPolicy: Always name: xlog args: @@ -74,66 +74,3 @@ spec: schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: xlog-caddy - namespace: crossbell -spec: - selector: - matchLabels: - app: xlog-caddy - template: - metadata: - labels: - app: xlog-caddy - spec: - containers: - - name: caddy - image: kindjeff/caddy-tlsredis-docker - imagePullPolicy: Always - command: ["caddy", "run", "-config", "/app/Caddyfile"] - resources: - requests: - cpu: 50m - memory: 64Mi - limits: - cpu: 100m - memory: 128Mi - envFrom: - - secretRef: - name: xlog-caddy - ports: - - containerPort: 80 - name: http - - containerPort: 443 - name: https - volumeMounts: - - name: caddyfile - mountPath: /app - - name: caddy-validator - image: python - command: ["/bin/sh", "-c"] - args: ["pip install flask requests; flask --app=app run"] - resources: - requests: - cpu: 50m - memory: 64Mi - limits: - cpu: 100m - memory: 128Mi - ports: - - containerPort: 5000 - name: http - volumeMounts: - - name: validator - mountPath: /app.py - subPath: app.py - volumes: - - name: caddyfile - configMap: - name: xlog-caddy - - name: validator - configMap: - name: xlog-caddy-validator diff --git a/deploy/dev/kustomization.yaml b/deploy/dev/kustomization.yaml new file mode 100644 index 00000000..39be2ec5 --- /dev/null +++ b/deploy/dev/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - deploy.yaml + - secret.yaml + - svc.yaml diff --git a/deploy/dev/secrets.yaml b/deploy/dev/secrets.yaml index 8101f9c4..df29164e 100644 --- a/deploy/dev/secrets.yaml +++ b/deploy/dev/secrets.yaml @@ -1,28 +1,16 @@ # Remember to add it in env.production because it is the nextjs project apiVersion: v1 stringData: - REDIS_URL: ${REDIS_URL_DEV} - DATABASE_URL: ${PG_CONN_STRING_DEV} - SIMPLEHASH_API_KEY: ${SIMPLEHASH_API_KEY} - OPENAI_API_KEY: ${OPENAI_API_KEY} - ANONYMOUS_ACCOUNT_PRIVATEKEY: ${ANONYMOUS_ACCOUNT_PRIVATEKEY} - PORTFOLIO_GITHUB_TOKEN: ${PORTFOLIO_GITHUB_TOKEN} + REDIS_URL: + DATABASE_URL: + SIMPLEHASH_API_KEY: + OPENAI_API_KEY: + ANONYMOUS_ACCOUNT_PRIVATEKEY: + PORTFOLIO_GITHUB_TOKEN: kind: Secret metadata: name: xlog namespace: crossbell -type: Opaque ---- -apiVersion: v1 -stringData: - CADDY_CLUSTERING_REDIS_HOST: ${CADDY_CLUSTERING_REDIS_HOST_DEV} - CADDY_CLUSTERING_REDIS_PORT: "6379" - CADDY_CLUSTERING_REDIS_USERNAME: "" - CADDY_CLUSTERING_REDIS_PASSWORD: ${CADDY_CLUSTERING_REDIS_PASSWORD_DEV} - CADDY_CLUSTERING_REDIS_DB: "6" - CF_API_TOKEN: ${CF_API_TOKEN} -kind: Secret -metadata: - name: xlog-caddy - namespace: crossbell + annotations: + avp.kubernetes.io/path: "kv/data/crossbell/xlog-caddy" type: Opaque diff --git a/deploy/dev/svc.yaml b/deploy/dev/svc.yaml index 65bda0ae..cc2cce1f 100644 --- a/deploy/dev/svc.yaml +++ b/deploy/dev/svc.yaml @@ -1,31 +1,5 @@ apiVersion: v1 kind: Service -metadata: - name: xlog-lb - namespace: crossbell - annotations: - service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name: "xlog-dev" - service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s1.small" - service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-id: acl-7go649a51gt3cw7qgsvls - service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-status: "on" - service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-type: black -spec: - type: LoadBalancer - externalTrafficPolicy: Local - selector: - app: xlog-caddy - ports: - - name: http - protocol: TCP - port: 80 - targetPort: 80 - - name: https - protocol: TCP - port: 443 - targetPort: 443 ---- -apiVersion: v1 -kind: Service metadata: name: xlog-internal namespace: crossbell @@ -36,5 +10,5 @@ spec: ports: - name: http protocol: TCP - port: 3000 + port: 80 targetPort: 3000 From bfea77525e596ca01f5ffd4d9cddc72bf26f4ce4 Mon Sep 17 00:00:00 2001 From: incubator4 Date: Mon, 1 Jan 2024 02:50:59 +0800 Subject: [PATCH 03/10] chore(deploy): fix ci --- .github/workflows/docker-build-push-prod.yml | 77 ------------------- ...ld-push-dev.yml => docker-build-push.yaml} | 2 +- 2 files changed, 1 insertion(+), 78 deletions(-) delete mode 100644 .github/workflows/docker-build-push-prod.yml rename .github/workflows/{docker-build-push-dev.yml => docker-build-push.yaml} (99%) diff --git a/.github/workflows/docker-build-push-prod.yml b/.github/workflows/docker-build-push-prod.yml deleted file mode 100644 index d256d340..00000000 --- a/.github/workflows/docker-build-push-prod.yml +++ /dev/null @@ -1,77 +0,0 @@ -# build and push docker image to docker hub -name: Build & Deploy Prod - -on: - push: - branches: - - "main" - -env: - IMAGE_NAME: rss3/xlog - REGION_ID: us-east-1 - ACK_CLUSTER_ID: cfc647c22fd6848b5a602ad4d7470632b - -jobs: - build: - runs-on: ubuntu-latest - environment: Production - outputs: - version: ${{ steps.meta.outputs.version }} - steps: - - uses: hmarr/debug-action@v2 - - name: Checkout - uses: actions/checkout@v4 - - name: docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.IMAGE_NAME }} - tags: | - type=sha,prefix={{branch}}- - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Login to DockerHub - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: . - file: Dockerfile - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - "NEXT_PUBLIC_DISCORD_LINK=${{ vars.NEXT_PUBLIC_DISCORD_LINK }}" - "NEXT_PUBLIC_GITHUB_LINK=${{ vars.NEXT_PUBLIC_GITHUB_LINK }}" - "NEXT_PUBLIC_OUR_DOMAIN=${{ vars.NEXT_PUBLIC_OUR_DOMAIN }}" - "NEXT_PUBLIC_TWITTER_LINK=${{ vars.NEXT_PUBLIC_TWITTER_LINK }}" - "NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID=${{ vars.NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID }}" - "NEXT_PUBLIC_IPFS_GATEWAY=${{ vars.NEXT_PUBLIC_IPFS_GATEWAY }}" - - deploy-prod: - runs-on: ubuntu-latest - environment: Production - needs: build - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Set K8s context - uses: aliyun/ack-set-context@v1 - with: - access-key-id: "${{ secrets.ACCESS_KEY_ID }}" - access-key-secret: "${{ secrets.ACCESS_KEY_SECRET }}" - cluster-id: "${{ env.ACK_CLUSTER_ID }}" - - run: | - wget https://github.com/mikefarah/yq/releases/download/v4.25.1/yq_linux_amd64.tar.gz -O - | tar xz && mv yq_linux_amd64 /usr/local/bin/yq - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.22.10/bin/linux/amd64/kubectl && chmod +x kubectl && mv kubectl /usr/local/bin/kubectl - - uses: sljeff/secrets2env@main - with: - secrets-json: ${{ toJson(secrets) }} - - run: | - sh apply.sh deploy/prod/* - env: - IMAGE_TAG_RELEASE: ${{ env.IMAGE_NAME }}:${{ needs.build.outputs.version }} diff --git a/.github/workflows/docker-build-push-dev.yml b/.github/workflows/docker-build-push.yaml similarity index 99% rename from .github/workflows/docker-build-push-dev.yml rename to .github/workflows/docker-build-push.yaml index 9a14ef17..e1688f2f 100644 --- a/.github/workflows/docker-build-push-dev.yml +++ b/.github/workflows/docker-build-push.yaml @@ -64,7 +64,7 @@ jobs: cluster: dev namespace: crossbell releaseName: xlog - revision: main + revision: dev dir: deploy/dev secrets: GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }} From 2d54b8105771a442aebb5451139ea72123e9418e Mon Sep 17 00:00:00 2001 From: incubator4 Date: Mon, 1 Jan 2024 03:04:14 +0800 Subject: [PATCH 04/10] chore(deploy): fix xlog secret name --- deploy/dev/{secrets.yaml => secret.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename deploy/dev/{secrets.yaml => secret.yaml} (100%) diff --git a/deploy/dev/secrets.yaml b/deploy/dev/secret.yaml similarity index 100% rename from deploy/dev/secrets.yaml rename to deploy/dev/secret.yaml From cab12e59ca0540583d985009d654bdf8f4819c1e Mon Sep 17 00:00:00 2001 From: incubator4 Date: Mon, 1 Jan 2024 03:08:35 +0800 Subject: [PATCH 05/10] chore(deploy): fix xlog secret --- deploy/dev/secret.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/dev/secret.yaml b/deploy/dev/secret.yaml index df29164e..83d1d542 100644 --- a/deploy/dev/secret.yaml +++ b/deploy/dev/secret.yaml @@ -12,5 +12,5 @@ metadata: name: xlog namespace: crossbell annotations: - avp.kubernetes.io/path: "kv/data/crossbell/xlog-caddy" + avp.kubernetes.io/path: "kv/data/crossbell/xlog" type: Opaque From dba6f2f7159f9fcb48cc62be899c7278455b8ce9 Mon Sep 17 00:00:00 2001 From: incubator4 Date: Mon, 1 Jan 2024 11:39:47 +0800 Subject: [PATCH 06/10] chore(deploy): fix ci --- .github/workflows/docker-build-push.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/docker-build-push.yaml b/.github/workflows/docker-build-push.yaml index e1688f2f..dd7f1134 100644 --- a/.github/workflows/docker-build-push.yaml +++ b/.github/workflows/docker-build-push.yaml @@ -5,6 +5,7 @@ on: push: branches: - "dev" + - "main" env: IMAGE_NAME: rss3/xlog From fe44527e7283621fa3982c027bf3b696536b6060 Mon Sep 17 00:00:00 2001 From: incubator4 Date: Mon, 1 Jan 2024 11:46:26 +0800 Subject: [PATCH 07/10] chore(deploy): fix hpa resource name --- deploy/prod/kustomization.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/prod/kustomization.yaml b/deploy/prod/kustomization.yaml index cfa4e781..9425a82b 100644 --- a/deploy/prod/kustomization.yaml +++ b/deploy/prod/kustomization.yaml @@ -5,4 +5,4 @@ resources: - deploy.yaml - secret.yaml - svc.yaml - - hpa + - hpa.yaml From 518b839aa37e610cc03c4d7ffabe9e6219115263 Mon Sep 17 00:00:00 2001 From: incubator4 Date: Mon, 1 Jan 2024 13:37:41 +0800 Subject: [PATCH 08/10] chore(deploy): fix ci env --- .github/workflows/docker-build-push.yaml | 45 +++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker-build-push.yaml b/.github/workflows/docker-build-push.yaml index dd7f1134..61570927 100644 --- a/.github/workflows/docker-build-push.yaml +++ b/.github/workflows/docker-build-push.yaml @@ -13,7 +13,8 @@ env: ACK_CLUSTER_ID: cd1d0ffc40b5242b39ddda1864e71e30d jobs: - build: + build-dev: + if: github.ref == 'refs/heads/dev' runs-on: ubuntu-latest environment: Preview outputs: @@ -54,6 +55,48 @@ jobs: "NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID=${{ vars.NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID }}" "NEXT_PUBLIC_IPFS_GATEWAY=${{ vars.NEXT_PUBLIC_IPFS_GATEWAY }}" + build-prod: + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + environment: Production + outputs: + version: ${{ steps.meta.outputs.version }} + steps: + - uses: hmarr/debug-action@v2 + - name: Checkout + uses: actions/checkout@v4 + - name: docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: rss3/xlog + tags: | + type=sha,prefix={{branch}}- + type=sha,format=long,prefix={{branch}}- + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + file: Dockerfile + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + "NEXT_PUBLIC_DISCORD_LINK=${{ vars.NEXT_PUBLIC_DISCORD_LINK }}" + "NEXT_PUBLIC_GITHUB_LINK=${{ vars.NEXT_PUBLIC_GITHUB_LINK }}" + "NEXT_PUBLIC_OUR_DOMAIN=${{ vars.NEXT_PUBLIC_OUR_DOMAIN }}" + "NEXT_PUBLIC_TWITTER_LINK=${{ vars.NEXT_PUBLIC_TWITTER_LINK }}" + "NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID=${{ vars.NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID }}" + "NEXT_PUBLIC_IPFS_GATEWAY=${{ vars.NEXT_PUBLIC_IPFS_GATEWAY }}" + deploy-dev: if: github.ref == 'refs/heads/dev' uses: NaturalSelectionLabs/Daedalus/.github/workflows/deploy-v3-tpl.yaml@main From 7adc5e2f9d618b5538f3b525ce14291409959ffb Mon Sep 17 00:00:00 2001 From: incubator4 Date: Mon, 1 Jan 2024 13:41:48 +0800 Subject: [PATCH 09/10] chore(deploy): fix ci branch env --- .github/workflows/docker-build-push-dev.yaml | 65 +++++++++ .github/workflows/docker-build-push-prod.yaml | 64 +++++++++ .github/workflows/docker-build-push.yaml | 129 ------------------ 3 files changed, 129 insertions(+), 129 deletions(-) create mode 100644 .github/workflows/docker-build-push-dev.yaml create mode 100644 .github/workflows/docker-build-push-prod.yaml delete mode 100644 .github/workflows/docker-build-push.yaml diff --git a/.github/workflows/docker-build-push-dev.yaml b/.github/workflows/docker-build-push-dev.yaml new file mode 100644 index 00000000..4a050e0c --- /dev/null +++ b/.github/workflows/docker-build-push-dev.yaml @@ -0,0 +1,65 @@ +# build and push docker image to docker hub +name: Build & Deploy Dev + +on: + push: + branches: + - "dev" + +jobs: + build: + runs-on: ubuntu-latest + environment: Preview + outputs: + version: ${{ steps.meta.outputs.version }} + steps: + - uses: hmarr/debug-action@v2 + - name: Checkout + uses: actions/checkout@v4 + - name: docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: rss3/xlog + tags: | + type=sha,prefix={{branch}}- + type=sha,format=long,prefix={{branch}}- + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + file: Dockerfile + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + "NEXT_PUBLIC_DISCORD_LINK=${{ vars.NEXT_PUBLIC_DISCORD_LINK }}" + "NEXT_PUBLIC_GITHUB_LINK=${{ vars.NEXT_PUBLIC_GITHUB_LINK }}" + "NEXT_PUBLIC_OUR_DOMAIN=${{ vars.NEXT_PUBLIC_OUR_DOMAIN }}" + "NEXT_PUBLIC_TWITTER_LINK=${{ vars.NEXT_PUBLIC_TWITTER_LINK }}" + "NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID=${{ vars.NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID }}" + "NEXT_PUBLIC_IPFS_GATEWAY=${{ vars.NEXT_PUBLIC_IPFS_GATEWAY }}" + + deploy: + if: github.ref == 'refs/heads/dev' + uses: NaturalSelectionLabs/Daedalus/.github/workflows/deploy-v3-tpl.yaml@main + needs: + - build + with: + images: rss3/xlog + tag: dev-${{ github.sha }} + cluster: dev + namespace: crossbell + releaseName: xlog + revision: dev + dir: deploy/dev + secrets: + GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }} diff --git a/.github/workflows/docker-build-push-prod.yaml b/.github/workflows/docker-build-push-prod.yaml new file mode 100644 index 00000000..ac2b8305 --- /dev/null +++ b/.github/workflows/docker-build-push-prod.yaml @@ -0,0 +1,64 @@ +# build and push docker image to docker hub +name: Build & Deploy Dev + +on: + push: + branches: + - "main" + +jobs: + build: + runs-on: ubuntu-latest + environment: Production + outputs: + version: ${{ steps.meta.outputs.version }} + steps: + - uses: hmarr/debug-action@v2 + - name: Checkout + uses: actions/checkout@v4 + - name: docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: rss3/xlog + tags: | + type=sha,prefix={{branch}}- + type=sha,format=long,prefix={{branch}}- + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + file: Dockerfile + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + "NEXT_PUBLIC_DISCORD_LINK=${{ vars.NEXT_PUBLIC_DISCORD_LINK }}" + "NEXT_PUBLIC_GITHUB_LINK=${{ vars.NEXT_PUBLIC_GITHUB_LINK }}" + "NEXT_PUBLIC_OUR_DOMAIN=${{ vars.NEXT_PUBLIC_OUR_DOMAIN }}" + "NEXT_PUBLIC_TWITTER_LINK=${{ vars.NEXT_PUBLIC_TWITTER_LINK }}" + "NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID=${{ vars.NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID }}" + "NEXT_PUBLIC_IPFS_GATEWAY=${{ vars.NEXT_PUBLIC_IPFS_GATEWAY }}" + + deploy: + uses: NaturalSelectionLabs/Daedalus/.github/workflows/deploy-v3-tpl.yaml@main + needs: + - build + with: + images: rss3/xlog + tag: main-${{ github.sha }} + cluster: prod + namespace: crossbell + releaseName: xlog + revision: main + dir: deploy/prod + secrets: + GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }} diff --git a/.github/workflows/docker-build-push.yaml b/.github/workflows/docker-build-push.yaml deleted file mode 100644 index 61570927..00000000 --- a/.github/workflows/docker-build-push.yaml +++ /dev/null @@ -1,129 +0,0 @@ -# build and push docker image to docker hub -name: Build & Deploy Dev - -on: - push: - branches: - - "dev" - - "main" - -env: - IMAGE_NAME: rss3/xlog - REGION_ID: us-east-1 - ACK_CLUSTER_ID: cd1d0ffc40b5242b39ddda1864e71e30d - -jobs: - build-dev: - if: github.ref == 'refs/heads/dev' - runs-on: ubuntu-latest - environment: Preview - outputs: - version: ${{ steps.meta.outputs.version }} - steps: - - uses: hmarr/debug-action@v2 - - name: Checkout - uses: actions/checkout@v4 - - name: docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: rss3/xlog - tags: | - type=sha,prefix={{branch}}- - type=sha,format=long,prefix={{branch}}- - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Login to DockerHub - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: . - file: Dockerfile - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - "NEXT_PUBLIC_DISCORD_LINK=${{ vars.NEXT_PUBLIC_DISCORD_LINK }}" - "NEXT_PUBLIC_GITHUB_LINK=${{ vars.NEXT_PUBLIC_GITHUB_LINK }}" - "NEXT_PUBLIC_OUR_DOMAIN=${{ vars.NEXT_PUBLIC_OUR_DOMAIN }}" - "NEXT_PUBLIC_TWITTER_LINK=${{ vars.NEXT_PUBLIC_TWITTER_LINK }}" - "NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID=${{ vars.NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID }}" - "NEXT_PUBLIC_IPFS_GATEWAY=${{ vars.NEXT_PUBLIC_IPFS_GATEWAY }}" - - build-prod: - if: github.ref == 'refs/heads/main' - runs-on: ubuntu-latest - environment: Production - outputs: - version: ${{ steps.meta.outputs.version }} - steps: - - uses: hmarr/debug-action@v2 - - name: Checkout - uses: actions/checkout@v4 - - name: docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: rss3/xlog - tags: | - type=sha,prefix={{branch}}- - type=sha,format=long,prefix={{branch}}- - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Login to DockerHub - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: . - file: Dockerfile - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - "NEXT_PUBLIC_DISCORD_LINK=${{ vars.NEXT_PUBLIC_DISCORD_LINK }}" - "NEXT_PUBLIC_GITHUB_LINK=${{ vars.NEXT_PUBLIC_GITHUB_LINK }}" - "NEXT_PUBLIC_OUR_DOMAIN=${{ vars.NEXT_PUBLIC_OUR_DOMAIN }}" - "NEXT_PUBLIC_TWITTER_LINK=${{ vars.NEXT_PUBLIC_TWITTER_LINK }}" - "NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID=${{ vars.NEXT_PUBLIC_WALLET_CONNECT_V2_PROJECT_ID }}" - "NEXT_PUBLIC_IPFS_GATEWAY=${{ vars.NEXT_PUBLIC_IPFS_GATEWAY }}" - - deploy-dev: - if: github.ref == 'refs/heads/dev' - uses: NaturalSelectionLabs/Daedalus/.github/workflows/deploy-v3-tpl.yaml@main - needs: - - build - with: - images: rss3/xlog - tag: dev-${{ github.sha }} - cluster: dev - namespace: crossbell - releaseName: xlog - revision: dev - dir: deploy/dev - secrets: - GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }} - deploy-prod: - if: github.ref == 'refs/heads/main' - uses: NaturalSelectionLabs/Daedalus/.github/workflows/deploy-v3-tpl.yaml@main - needs: - - build - with: - images: rss3/xlog - tag: main-${{ github.sha }} - cluster: prod - namespace: crossbell - releaseName: xlog - revision: main - dir: deploy/prod - secrets: - GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }} From 723e3769527616faadec65640d6dc95080fab3eb Mon Sep 17 00:00:00 2001 From: incubator4 Date: Wed, 10 Jan 2024 15:18:20 +0800 Subject: [PATCH 10/10] chore(deploy): update deploy auth --- .github/workflows/docker-build-push-dev.yaml | 2 +- .github/workflows/docker-build-push-prod.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-build-push-dev.yaml b/.github/workflows/docker-build-push-dev.yaml index 4a050e0c..d4e32f44 100644 --- a/.github/workflows/docker-build-push-dev.yaml +++ b/.github/workflows/docker-build-push-dev.yaml @@ -62,4 +62,4 @@ jobs: revision: dev dir: deploy/dev secrets: - GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }} + ARGOCD_TOKEN: ${{ secrets.ARGOCD_TOKEN }} diff --git a/.github/workflows/docker-build-push-prod.yaml b/.github/workflows/docker-build-push-prod.yaml index ac2b8305..6b047262 100644 --- a/.github/workflows/docker-build-push-prod.yaml +++ b/.github/workflows/docker-build-push-prod.yaml @@ -61,4 +61,4 @@ jobs: revision: main dir: deploy/prod secrets: - GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }} + ARGOCD_TOKEN: ${{ secrets.ARGOCD_TOKEN }}