-
Notifications
You must be signed in to change notification settings - Fork 1
156 lines (139 loc) · 6.59 KB
/
local-deploy.yml
File metadata and controls
156 lines (139 loc) · 6.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# This workflow deploys docker images on a local kubernetes cluster.
name: Deploy K8s Locally
on:
workflow_call:
secrets:
DATABASE_PASSWORD:
required: true
RABBITMQ_PASSWORD:
required: true
API_TOKEN_SECRET:
required: true
GPT_API_KEY:
required: true
TWELVEDATA_API_KEY_1:
required: true
TWELVEDATA_API_KEY_2:
required: true
FINNHUB_API_KEY:
required: true
STOCKSALOT_TLS_KEY:
required: true
STOCKSALOT_TLS_CERT:
required: true
GHCR_PAT:
required: true
inputs:
DATABASE_USER:
required: true
type: string
DATABASE_NAME:
required: true
type: string
RABBITMQ_USER:
required: true
type: string
API_TOKEN_EXPIRY_DAYS:
required: true
type: string
workflow_dispatch:
jobs:
build:
uses: ./.github/workflows/build.yml
test:
env:
DATABASE_USER: ${{ vars.DATABASE_USER || inputs.DATABASE_USER }}
DATABASE_NAME: ${{ vars.DATABASE_NAME || inputs.DATABASE_NAME }}
RABBITMQ_USER: ${{ vars.RABBITMQ_USER || inputs.RABBITMQ_USER }}
API_TOKEN_EXPIRY_DAYS: ${{ vars.API_TOKEN_EXPIRY_DAYS || inputs.API_TOKEN_EXPIRY_DAYS }}
needs: build
runs-on: ubuntu-latest
strategy:
matrix:
# kde: [kind, minikube]
kde: [minikube]
fail-fast: false
steps:
- uses: actions/checkout@v3
- name: Create k8s Cluster (Kind)
if: matrix.kde == 'kind'
uses: helm/kind-action@v1.5.0
- name: Create k8s Cluster (Minikube)
if: matrix.kde == 'minikube'
uses: medyagh/setup-minikube@master
- name: Create Configmaps and Secrets
run: |
kubectl create configmap db-config \
--from-literal=DATABASE_USER=${{ env.DATABASE_USER }} \
--from-literal=DATABASE_NAME=${{ env.DATABASE_NAME }}
kubectl create configmap db-server-config \
--from-literal=DATABASE_USER=${{ env.DATABASE_USER }} \
--from-literal=DATABASE_NAME=${{ env.DATABASE_NAME }} \
--from-literal=RABBITMQ_USER=${{ env.RABBITMQ_USER }} \
--from-literal=API_TOKEN_EXPIRY_DAYS=${{ env.API_TOKEN_EXPIRY_DAYS }}
kubectl create configmap ingestion-config \
--from-literal=RABBITMQ_USER=${{ env.RABBITMQ_USER }}
kubectl create configmap init-script-config \
--from-file=initdb.sh=./database/init/initdb.sh
kubectl create configmap rabbitmq-config \
--from-literal=RABBITMQ_DEFAULT_USER=${{ env.RABBITMQ_USER }}
kubectl create secret generic db-secrets \
--from-literal=POSTGRES_PASSWORD=${{ secrets.DATABASE_PASSWORD }}
kubectl create secret generic db-server-secrets \
--from-literal=DATABASE_PASSWORD=${{ secrets.DATABASE_PASSWORD }} \
--from-literal=RABBITMQ_PASSWORD=${{ secrets.RABBITMQ_PASSWORD }} \
--from-literal=API_TOKEN_SECRET=${{ secrets.API_TOKEN_SECRET }} \
--from-literal=GPT_API_KEY=${{ secrets.GPT_API_KEY }}
kubectl create secret generic ingestion-secrets \
--from-literal=RABBITMQ_PASSWORD=${{ secrets.RABBITMQ_PASSWORD }} \
--from-literal=TWELVEDATA_API_KEY_1=${{ secrets.TWELVEDATA_API_KEY_1 }} \
--from-literal=TWELVEDATA_API_KEY_2=${{ secrets.TWELVEDATA_API_KEY_2 }} \
--from-literal=FINNHUB_API_KEY=${{ secrets.FINNHUB_API_KEY }}
kubectl create secret generic rabbitmq-secrets \
--from-literal=RABBITMQ_DEFAULT_PASS=${{ secrets.RABBITMQ_PASSWORD }}
kubectl create secret docker-registry ghcr \
--docker-server=https://ghcr.io \
--docker-username=${{ github.actor }} \
--docker-password=${{ secrets.GHCR_PAT }} \
--docker-email=${{ github.event.pusher.email }}
echo "${{ secrets.STOCKSALOT_TLS_KEY }}" > stocksalot-tls.key
echo "${{ secrets.STOCKSALOT_TLS_CERT }}" > stocksalot-tls.crt
kubectl create secret tls stocksalot-tls \
--key=stocksalot-tls.key \
--cert=stocksalot-tls.crt
- name: Apply Kubernetes Manifests
run: |
kubectl apply -f k8s/database.yml
kubectl apply -f k8s/rabbitmq.yml
kubectl apply -f k8s/db-server.yml
kubectl apply -f k8s/ingestion.yml
kubectl apply -f k8s/db-server-service-account.yml
- name: Start Cron Job Manually
run: kubectl create job --from=cronjob/ingestion-cronjob-a ingestion-job
- name: Check Running resources
id: resource_check
continue-on-error: true
run: |
kubectl wait --for=condition=Ready pods --all --timeout=120s
kubectl get all
- name: Examine resource_check result
if: steps.resource_check.outcome == 'failure'
run: |
kubectl get pods --field-selector status.phase!="Running" -o=jsonpath='{.items[*].metadata.name}' \
| xargs -n 1 kubectl describe pods
kubectl get pods --field-selector status.phase!="Running" -o=jsonpath='{.items[*].metadata.name}' \
| xargs -n 1 kubectl logs
- name: Describe the Node
if: steps.resource_check.outcome == 'failure'
run: kubectl describe node
- name: Fail if resource_check failed
if: steps.resource_check.outcome == 'failure'
continue-on-error: false
run: exit 1
- name: Sleep for 1 minute
run: sleep 60
- name: Check ingestion-job logs
run: |
kubectl logs -l job-name=ingestion-job
- name: Check db-server logs
run: kubectl logs -l app=db-server