From 4efd6740f2ad8f9b28078baf6523faf581debb7c Mon Sep 17 00:00:00 2001
From: Roman Morozov <rom@local>
Date: Sun, 21 Jan 2024 14:19:34 -0800
Subject: [PATCH 1/9] chore: consumer ci and charts,deployments

---
 .github/workflows/build-images.yaml         | 64 +++++++++++++++++++++
 packages/cloud/helmfile.yaml                |  4 +-
 packages/consumer/Chart.yaml                |  5 ++
 packages/consumer/Dockerfile                | 20 +++++++
 packages/consumer/templates/Deployment.yaml | 21 +++++++
 packages/consumer/templates/_helpers.tpl    | 24 ++++++++
 packages/consumer/values.yaml               | 14 +++++
 7 files changed, 151 insertions(+), 1 deletion(-)
 create mode 100644 .github/workflows/build-images.yaml
 create mode 100644 packages/consumer/Chart.yaml
 create mode 100644 packages/consumer/Dockerfile
 create mode 100644 packages/consumer/templates/Deployment.yaml
 create mode 100644 packages/consumer/templates/_helpers.tpl
 create mode 100644 packages/consumer/values.yaml

diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml
new file mode 100644
index 0000000..eb29f05
--- /dev/null
+++ b/.github/workflows/build-images.yaml
@@ -0,0 +1,64 @@
+name: Build and Push to GHCR
+
+on:
+  workflow_dispatch:
+  push:
+    branches:
+      - main
+    paths:
+      - "**/consumer/**"
+  pull_request:
+    branches:
+      - main
+
+jobs:
+  build-and-push:
+    runs-on: ubuntu-latest
+    permissions:
+      contents: read
+      packages: write
+    steps:
+      - name: Check Out Repo
+        uses: actions/checkout@v4
+
+      - name: Set up Docker Buildx
+        uses: docker/setup-buildx-action@v1
+
+      - name: Login to GitHub Container Registry
+        uses: docker/login-action@v1
+        with:
+          registry: ghcr.io
+          username: ${{ github.repository_owner }}
+          password: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Extract metadata (tags, labels) for Docker
+        id: meta
+        uses: docker/metadata-action@v3
+        with:
+          images: ghcr.io/${{ github.repository }}/consumer
+          tags: |
+            type=sha,prefix=commit,length=7
+
+      - name: Build and push to GHCR
+        uses: docker/build-push-action@v2
+        with:
+          context: packages/consumer
+          push: true
+          tags: ${{ steps.meta.outputs.tags }}
+
+      # - name: Build and push to GHCR
+      #   uses: docker/build-push-action@v2
+      #   with:
+      #     context: packages/consumer
+      #     file: ./Dockerfile
+      #     push: true
+      #     tags: ghcr.io/${{ github.repository }}/consumer:latest
+
+    # - name: Helm Deploy
+    #   uses: deliverybot/helm@v1
+    #   with:
+    #     release: your-release
+    #     namespace: your-namespace
+    #     chart: ./helm-chart
+    #     values: ./helm-chart/values.yaml
+    #     token: ${{ secrets.KUBE_TOKEN }}
diff --git a/packages/cloud/helmfile.yaml b/packages/cloud/helmfile.yaml
index a49b00e..2cdfbc3 100644
--- a/packages/cloud/helmfile.yaml
+++ b/packages/cloud/helmfile.yaml
@@ -47,4 +47,6 @@ releases:
           service:
             omitClusterIP: true
         tcp:
-          '9092': "default/kafka:9092"
+          "9092": "default/kafka:9092"
+  - name: consumer
+    chart: ../consumer
diff --git a/packages/consumer/Chart.yaml b/packages/consumer/Chart.yaml
new file mode 100644
index 0000000..4ccb0ce
--- /dev/null
+++ b/packages/consumer/Chart.yaml
@@ -0,0 +1,5 @@
+apiVersion: v2
+name: go
+description: Go Web Application
+version: 1.0.0
+type: application
diff --git a/packages/consumer/Dockerfile b/packages/consumer/Dockerfile
new file mode 100644
index 0000000..a8b35d9
--- /dev/null
+++ b/packages/consumer/Dockerfile
@@ -0,0 +1,20 @@
+# Start from the latest golang base image
+FROM golang:latest
+
+# Set the Current Working Directory inside the container
+WORKDIR /app
+
+# Copy go mod and sum files
+COPY go.mod go.sum ./
+
+# Download all dependencies. Dependencies will be cached if the go.mod and go.sum files are not changed
+RUN go mod download
+
+# Copy the source from the current directory to the Working Directory inside the container
+COPY . .
+
+# Build the Go app
+RUN go build -o main .
+
+# Command to run the executable
+CMD ["./main"]
diff --git a/packages/consumer/templates/Deployment.yaml b/packages/consumer/templates/Deployment.yaml
new file mode 100644
index 0000000..7de44dd
--- /dev/null
+++ b/packages/consumer/templates/Deployment.yaml
@@ -0,0 +1,21 @@
+{{ $fullname := include "app.fullname" . }}
+{{ $registry := .Values.image.registry }}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: {{ $fullname }}
+spec:
+  replicas: {{ .Values.replicaCount }}
+  template:
+    spec: {{ if and $registry.url $registry.username $registry.password }}
+      imagePullSecrets:
+        - name: {{ include "app.registry" . }} {{ else }} {{ with $imagePullSecrets := .Values.image.pullSecrets }}
+      imagePullSecrets: {{ range $imagePullSecrets }}
+        - name: {{ tpl . $ }} {{ end }} {{ end }}  {{ end }}
+
+      containers:
+        - name: go-app
+          image: {{ printf "%s/%s:%s" .Values.image.registry.url .Values.image.repository .Values.image.tag | quote }}
+          env:
+            - name: XPERM
+              value: "1.2.3"
diff --git a/packages/consumer/templates/_helpers.tpl b/packages/consumer/templates/_helpers.tpl
new file mode 100644
index 0000000..7497bc0
--- /dev/null
+++ b/packages/consumer/templates/_helpers.tpl
@@ -0,0 +1,24 @@
+{{- define "app.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{- define "app.registry" -}}
+{{- printf "%s-%s" .Release.Name "registry" }}
+{{- end }}
+
+{{- define "app.fullname" -}}
+{{- if .Values.fullnameOverride }}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{- define "app.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
diff --git a/packages/consumer/values.yaml b/packages/consumer/values.yaml
new file mode 100644
index 0000000..e372e23
--- /dev/null
+++ b/packages/consumer/values.yaml
@@ -0,0 +1,14 @@
+image:
+  registry:
+    url: ghcr.io/hiberbee
+    username: "fromEnv"
+    password: "fromEnv"
+  repository: vortexia/consumer
+  tag: commit9d918aef
+
+  pullSecrets: []
+
+replicaCount: 1
+
+nameOverride: ""
+fullnameOverride: ""

From b8a06a326425bb75d71beea406cca4062ccaf960 Mon Sep 17 00:00:00 2001
From: Vlad Volkov <vlad@peoplevine.com>
Date: Mon, 29 Jan 2024 01:31:49 +0200
Subject: [PATCH 2/9] Added secrets management with env vars & github actions.
 Helmfile manifest update

---
 .github/workflows/build-images.yaml         | 55 +++++++++++++++------
 packages/cloud/helmfile.yaml                |  6 +++
 packages/consumer/templates/Deployment.yaml | 11 +++--
 packages/consumer/templates/Secret.yaml     |  8 +++
 packages/consumer/values.yaml               |  5 +-
 5 files changed, 64 insertions(+), 21 deletions(-)
 create mode 100644 packages/consumer/templates/Secret.yaml

diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml
index eb29f05..fe10e1e 100644
--- a/.github/workflows/build-images.yaml
+++ b/.github/workflows/build-images.yaml
@@ -12,7 +12,7 @@ on:
       - main
 
 jobs:
-  build-and-push:
+  build:
     runs-on: ubuntu-latest
     permissions:
       contents: read
@@ -38,6 +38,7 @@ jobs:
           images: ghcr.io/${{ github.repository }}/consumer
           tags: |
             type=sha,prefix=commit,length=7
+            type=raw,value=latest,enable=true
 
       - name: Build and push to GHCR
         uses: docker/build-push-action@v2
@@ -46,19 +47,41 @@ jobs:
           push: true
           tags: ${{ steps.meta.outputs.tags }}
 
-      # - name: Build and push to GHCR
-      #   uses: docker/build-push-action@v2
-      #   with:
-      #     context: packages/consumer
-      #     file: ./Dockerfile
-      #     push: true
-      #     tags: ghcr.io/${{ github.repository }}/consumer:latest
+  deploy:
+    needs: build
+    runs-on: ubuntu-latest
+    steps:
+      - name: Check Out Repo
+        uses: actions/checkout@v4
 
-    # - name: Helm Deploy
-    #   uses: deliverybot/helm@v1
-    #   with:
-    #     release: your-release
-    #     namespace: your-namespace
-    #     chart: ./helm-chart
-    #     values: ./helm-chart/values.yaml
-    #     token: ${{ secrets.KUBE_TOKEN }}
+      - name: Set up Cloud SDK
+        uses: google-github-actions/setup-gcloud@v0.2.0
+        with:
+          service_account_key: '${{ secrets.GCP_CREDENTIALS }}'
+          project_id: '${{ secrets.GCP_PROJECT_ID }}'
+
+      - name: Get kubernetes config
+        env:
+          USE_GKE_GCLOUD_AUTH_PLUGIN: "true"
+        run: |
+          gcloud components install kubectl
+          gcloud components install gke-gcloud-auth-plugin
+          gcloud container clusters get-credentials ${{ secrets.GCP_CLUSTER_NAME }} --zone ${{ secrets.GCP_ZONE }} --project ${{ secrets.GCP_PROJECT_ID }}
+
+      - name: Verify kubernetes config
+        run: |
+          kubectl cluster-info dump
+
+      - name: Apply Helmfile
+        uses: hiberbee/github-action-helm@1.3.0
+        working-directory: packages/cloud
+        env:
+          IMAGE_TAG: '${GITHUB_SHA::7}'
+          DOCKER_USERNAME: '${{ github.repository_owner }}'
+          DOCKER_PASSWORD: '${{ secrets.GITHUB_TOKEN }}'
+          INTERBROKER_PASSWORD: '{{ secrets.INTERBROKER_PASSWORD }}'
+          CONTROLLER_PASSWORD: '{{ secrets.CONTROLLER_PASSWORD }}'
+          KRAFT_CLUSTER_ID: '{{ secrets.KRAFT_CLUSTER_ID }}'
+        with:
+          helmfile: diff
+          helmfile-version: 0.160.0
diff --git a/packages/cloud/helmfile.yaml b/packages/cloud/helmfile.yaml
index 2cdfbc3..c8f7a9c 100644
--- a/packages/cloud/helmfile.yaml
+++ b/packages/cloud/helmfile.yaml
@@ -50,3 +50,9 @@ releases:
           "9092": "default/kafka:9092"
   - name: consumer
     chart: ../consumer
+    values:
+      - image:
+          tag: '{{ requiredEnv "IMAGE_TAG" }}'
+          registry:
+            username: '{{ requiredEnv "DOCKER_USERNAME" }}'
+            password: '{{ requiredEnv "DOCKER_PASSWORD" }}'
diff --git a/packages/consumer/templates/Deployment.yaml b/packages/consumer/templates/Deployment.yaml
index 7de44dd..827e67b 100644
--- a/packages/consumer/templates/Deployment.yaml
+++ b/packages/consumer/templates/Deployment.yaml
@@ -6,13 +6,16 @@ metadata:
   name: {{ $fullname }}
 spec:
   replicas: {{ .Values.replicaCount }}
+  selector:
+    matchLabels:
+      app: {{ $fullname }}
   template:
+    metadata:
+      labels:
+        app: {{ $fullname }}
     spec: {{ if and $registry.url $registry.username $registry.password }}
       imagePullSecrets:
-        - name: {{ include "app.registry" . }} {{ else }} {{ with $imagePullSecrets := .Values.image.pullSecrets }}
-      imagePullSecrets: {{ range $imagePullSecrets }}
-        - name: {{ tpl . $ }} {{ end }} {{ end }}  {{ end }}
-
+        - name: {{ include "app.registry" . }} {{ end }}
       containers:
         - name: go-app
           image: {{ printf "%s/%s:%s" .Values.image.registry.url .Values.image.repository .Values.image.tag | quote }}
diff --git a/packages/consumer/templates/Secret.yaml b/packages/consumer/templates/Secret.yaml
new file mode 100644
index 0000000..6cac260
--- /dev/null
+++ b/packages/consumer/templates/Secret.yaml
@@ -0,0 +1,8 @@
+{{ with .Values.image.registry }} {{ if and .url .username .password }}
+kind: Secret
+apiVersion: v1
+metadata:
+  name: {{ include "app.registry" $ }}
+type: kubernetes.io/dockerconfigjson
+data:
+  .dockerconfigjson: {{ printf "{\"auths\":{\"%s\":{\"username\":\"%s\",\"password\":\"%s\",\"email\":\"%s\",\"auth\":\"%s\"}}}" .url .username .password (printf "%s@%s" $.Values.app.name .url) (printf "%s:%s" .username .password | b64enc) | b64enc | quote }} {{ end }} {{ end }}
diff --git a/packages/consumer/values.yaml b/packages/consumer/values.yaml
index e372e23..775c61f 100644
--- a/packages/consumer/values.yaml
+++ b/packages/consumer/values.yaml
@@ -4,10 +4,13 @@ image:
     username: "fromEnv"
     password: "fromEnv"
   repository: vortexia/consumer
-  tag: commit9d918aef
+  tag: latest
 
   pullSecrets: []
 
+app:
+  name: vortexia
+
 replicaCount: 1
 
 nameOverride: ""

From 7565c71ba31acc8534a04b48d30d8145d9226edd Mon Sep 17 00:00:00 2001
From: Vlad Volkov <vlad@peoplevine.com>
Date: Mon, 29 Jan 2024 01:32:52 +0200
Subject: [PATCH 3/9] Fixed path to config

---
 .github/workflows/build-images.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml
index fe10e1e..6268033 100644
--- a/.github/workflows/build-images.yaml
+++ b/.github/workflows/build-images.yaml
@@ -74,7 +74,6 @@ jobs:
 
       - name: Apply Helmfile
         uses: hiberbee/github-action-helm@1.3.0
-        working-directory: packages/cloud
         env:
           IMAGE_TAG: '${GITHUB_SHA::7}'
           DOCKER_USERNAME: '${{ github.repository_owner }}'
@@ -84,4 +83,5 @@ jobs:
           KRAFT_CLUSTER_ID: '{{ secrets.KRAFT_CLUSTER_ID }}'
         with:
           helmfile: diff
+          helmfile-config: packages/cloud/helmfile.yaml
           helmfile-version: 0.160.0

From 801203718e940cf3c9c06a972aa2111bf267e518 Mon Sep 17 00:00:00 2001
From: Vlad Volkov <vlad@peoplevine.com>
Date: Mon, 29 Jan 2024 01:35:26 +0200
Subject: [PATCH 4/9] Fixed path to config

---
 .github/workflows/build-images.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml
index 6268033..5be16b6 100644
--- a/.github/workflows/build-images.yaml
+++ b/.github/workflows/build-images.yaml
@@ -66,7 +66,7 @@ jobs:
         run: |
           gcloud components install kubectl
           gcloud components install gke-gcloud-auth-plugin
-          gcloud container clusters get-credentials ${{ secrets.GCP_CLUSTER_NAME }} --zone ${{ secrets.GCP_ZONE }} --project ${{ secrets.GCP_PROJECT_ID }}
+          gcloud container clusters get-credentials ${{ secrets.GCP_CLUSTER_NAME }} --zone=${{ secrets.GCP_ZONE }} --project=${{ secrets.GCP_PROJECT_ID }}
 
       - name: Verify kubernetes config
         run: |

From eb89a4a3d83fef5dd60a9e70501e9d1b870017a6 Mon Sep 17 00:00:00 2001
From: Vlad Volkov <vlad@peoplevine.com>
Date: Mon, 29 Jan 2024 01:39:04 +0200
Subject: [PATCH 5/9] Fixed path to config

---
 .github/workflows/build-images.yaml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml
index 5be16b6..b643694 100644
--- a/.github/workflows/build-images.yaml
+++ b/.github/workflows/build-images.yaml
@@ -63,10 +63,11 @@ jobs:
       - name: Get kubernetes config
         env:
           USE_GKE_GCLOUD_AUTH_PLUGIN: "true"
+          GCP_CLUSTER_NAME: ${{ secrets.GCP_CLUSTER_NAME }}
+          GCP_ZONE: ${{ secrets.GCP_ZONE }}
         run: |
-          gcloud components install kubectl
           gcloud components install gke-gcloud-auth-plugin
-          gcloud container clusters get-credentials ${{ secrets.GCP_CLUSTER_NAME }} --zone=${{ secrets.GCP_ZONE }} --project=${{ secrets.GCP_PROJECT_ID }}
+          gcloud container clusters get-credentials $GCP_CLUSTER_NAME --zone=$GCP_ZONE
 
       - name: Verify kubernetes config
         run: |

From 1101370a57628ee3b883ad71219bd332b7913d8d Mon Sep 17 00:00:00 2001
From: Vlad Volkov <vlad@peoplevine.com>
Date: Mon, 29 Jan 2024 01:43:05 +0200
Subject: [PATCH 6/9] Fixed path to config

---
 .github/workflows/build-images.yaml | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml
index b643694..f9a8ab6 100644
--- a/.github/workflows/build-images.yaml
+++ b/.github/workflows/build-images.yaml
@@ -50,6 +50,8 @@ jobs:
   deploy:
     needs: build
     runs-on: ubuntu-latest
+    environment:
+      name: production
     steps:
       - name: Check Out Repo
         uses: actions/checkout@v4
@@ -63,20 +65,22 @@ jobs:
       - name: Get kubernetes config
         env:
           USE_GKE_GCLOUD_AUTH_PLUGIN: "true"
-          GCP_CLUSTER_NAME: ${{ secrets.GCP_CLUSTER_NAME }}
-          GCP_ZONE: ${{ secrets.GCP_ZONE }}
         run: |
           gcloud components install gke-gcloud-auth-plugin
-          gcloud container clusters get-credentials $GCP_CLUSTER_NAME --zone=$GCP_ZONE
+          gcloud container clusters get-credentials ${{ secrets.GCP_CLUSTER_NAME }} --zone=${{ secrets.GCP_ZONE }}
 
       - name: Verify kubernetes config
         run: |
           kubectl cluster-info dump
 
+      - name: Get tag name
+        id: tag
+        run: echo "::set-output name=sha::${GITHUB_SHA::7}"
+
       - name: Apply Helmfile
         uses: hiberbee/github-action-helm@1.3.0
         env:
-          IMAGE_TAG: '${GITHUB_SHA::7}'
+          IMAGE_TAG: '${{ steps.tag.outputs.name }}'
           DOCKER_USERNAME: '${{ github.repository_owner }}'
           DOCKER_PASSWORD: '${{ secrets.GITHUB_TOKEN }}'
           INTERBROKER_PASSWORD: '{{ secrets.INTERBROKER_PASSWORD }}'

From d9ce3f720304ea9eaf7d8874b052ee9ca838bef7 Mon Sep 17 00:00:00 2001
From: Vlad Volkov <vlad@peoplevine.com>
Date: Mon, 29 Jan 2024 01:46:35 +0200
Subject: [PATCH 7/9] Fixed path to config

---
 .github/workflows/build-images.yaml | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml
index f9a8ab6..6418b1f 100644
--- a/.github/workflows/build-images.yaml
+++ b/.github/workflows/build-images.yaml
@@ -69,16 +69,12 @@ jobs:
           gcloud components install gke-gcloud-auth-plugin
           gcloud container clusters get-credentials ${{ secrets.GCP_CLUSTER_NAME }} --zone=${{ secrets.GCP_ZONE }}
 
-      - name: Verify kubernetes config
-        run: |
-          kubectl cluster-info dump
-
       - name: Get tag name
         id: tag
         run: echo "::set-output name=sha::${GITHUB_SHA::7}"
 
       - name: Apply Helmfile
-        uses: hiberbee/github-action-helm@1.3.0
+        uses: hiberbee/github-action-helm@latest
         env:
           IMAGE_TAG: '${{ steps.tag.outputs.name }}'
           DOCKER_USERNAME: '${{ github.repository_owner }}'

From 421ea274380b062d03bf78c6bac2f7d5970f3e86 Mon Sep 17 00:00:00 2001
From: Vlad Volkov <vlad@peoplevine.com>
Date: Mon, 29 Jan 2024 01:51:02 +0200
Subject: [PATCH 8/9] Fixed helmfile version

---
 .github/workflows/build-images.yaml | 1 -
 packages/cloud/helmfile.lock        | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml
index 6418b1f..71615f3 100644
--- a/.github/workflows/build-images.yaml
+++ b/.github/workflows/build-images.yaml
@@ -85,4 +85,3 @@ jobs:
         with:
           helmfile: diff
           helmfile-config: packages/cloud/helmfile.yaml
-          helmfile-version: 0.160.0
diff --git a/packages/cloud/helmfile.lock b/packages/cloud/helmfile.lock
index 26aee66..a622762 100644
--- a/packages/cloud/helmfile.lock
+++ b/packages/cloud/helmfile.lock
@@ -1,4 +1,4 @@
-version: 0.160.0
+version: 0.144.0
 dependencies:
 - name: ingress-nginx
   repository: https://kubernetes.github.io/ingress-nginx

From 2b188cae46500520f433a9b55bfdefbf113ae19b Mon Sep 17 00:00:00 2001
From: Vlad Volkov <vlad@peoplevine.com>
Date: Mon, 29 Jan 2024 01:54:01 +0200
Subject: [PATCH 9/9] Fixed tag name

---
 .github/workflows/build-images.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml
index 71615f3..4f0a71c 100644
--- a/.github/workflows/build-images.yaml
+++ b/.github/workflows/build-images.yaml
@@ -76,7 +76,7 @@ jobs:
       - name: Apply Helmfile
         uses: hiberbee/github-action-helm@latest
         env:
-          IMAGE_TAG: '${{ steps.tag.outputs.name }}'
+          IMAGE_TAG: '${{ steps.tag.outputs.sha }}'
           DOCKER_USERNAME: '${{ github.repository_owner }}'
           DOCKER_PASSWORD: '${{ secrets.GITHUB_TOKEN }}'
           INTERBROKER_PASSWORD: '{{ secrets.INTERBROKER_PASSWORD }}'