Skip to content

Commit 9d3bae2

Browse files
committed
perf: alembic migrations
1 parent d187164 commit 9d3bae2

File tree

6 files changed

+75
-32
lines changed

6 files changed

+75
-32
lines changed

.github/workflows/k8s_db_rollback.yml renamed to .github/workflows/k8s_db_downgrade.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: 'K8: Database Rollback'
1+
name: 'K8: Database Downgrade'
22

33
on:
44
workflow_call:
@@ -21,8 +21,8 @@ permissions:
2121
actions: read
2222

2323
jobs:
24-
k8-db-rollback:
25-
name: 'K8: Database Rollback'
24+
k8-db-downgrade:
25+
name: 'K8: Database Downgrade'
2626
runs-on: [self-hosted, "${{ github.ref_name }}"]
2727
environment: ${{ github.ref_name }}
2828
env:
@@ -68,7 +68,7 @@ jobs:
6868
- name: Apply Alembic Rollback
6969
shell: bash
7070
run: |
71-
bash cicd-deployment-scripts/k8s/db_rollback.sh \
71+
bash cicd-deployment-scripts/k8s/db_downgrade.sh \
7272
-e ${{ github.ref_name }} \
7373
-d ${{ github.event.repository.name }} \
7474
-p ${{ github.workspace }}/${{ env.KUBERNETES_CLUSTER_REPO_NAME }} \

.github/workflows/k8s_db_migrate.yml renamed to .github/workflows/k8s_db_upgrade.yml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: 'K8: Database Migrate'
1+
name: 'K8: Database Upgrade'
22

33
on:
44
workflow_call:
@@ -13,6 +13,13 @@ on:
1313
required: false
1414
default: 'latest'
1515
type: string
16+
outputs:
17+
alembic_current_rev:
18+
description: 'Current Alembic Rev'
19+
value: ${{ jobs.k8-db-upgrade.outputs.ALEMBIC_CURRENT_REV }}
20+
alembic_upgraded_rev:
21+
description: 'Upgraded Alembic Rev'
22+
value: ${{ jobs.k8-db-upgrade.outputs.ALEMBIC_UPGRADED_REV }}
1623

1724
# Special permissions required for OIDC authentication
1825
permissions:
@@ -21,8 +28,8 @@ permissions:
2128
actions: read
2229

2330
jobs:
24-
k8-db-migrate:
25-
name: 'K8: Database Migrate'
31+
k8-db-upgrade:
32+
name: 'K8: Database Upgrade'
2633
runs-on: [self-hosted, "${{ github.event_name == 'pull_request' && github.event.pull_request.base.ref || github.ref_name }}"]
2734
environment: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.ref || github.ref_name }}
2835
env:
@@ -34,6 +41,9 @@ jobs:
3441
KUBERNETES_MANIFEST_PATH: "${{ vars.KUBERNETES_MANIFEST_PATH }}"
3542
AZURE_RESOURCE_GROUP: "${{ vars.AZURE_RESOURCE_GROUP }}"
3643
AZURE_CONTAINER_REGISTRY: "${{ vars.AZURE_CONTAINER_REGISTRY }}"
44+
outputs:
45+
ALEMBIC_CURRENT_REV: ${{ steps.alembic_command.outputs.ALEMBIC_CURRENT_REV }}
46+
ALEMBIC_UPGRADED_REV: ${{ steps.alembic_command.outputs.ALEMBIC_UPGRADED_REV }}
3747
steps:
3848
- name: Checkout
3949
uses: actions/checkout@v4
@@ -68,8 +78,9 @@ jobs:
6878

6979
- name: Apply Alembic Migrate
7080
shell: bash
81+
id: alembic_command
7182
run: |
72-
bash cicd-deployment-scripts/k8s/db_migrate.sh \
83+
bash cicd-deployment-scripts/k8s/db_upgrade.sh \
7384
-e ${{ env.ENVIRONMENT_NAME }} \
7485
-d ${{ github.event.repository.name }} \
7586
-p ${{ github.workspace }}/${{ env.KUBERNETES_CLUSTER_REPO_NAME }} \

.github/workflows/k8s_test.yml

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,20 @@ jobs:
1919
uses: code-kern-ai/cicd-deployment-scripts/.github/workflows/az_acr_test.yml@dev
2020
secrets: inherit
2121

22-
call-k8-db-migrate:
23-
uses: code-kern-ai/cicd-deployment-scripts/.github/workflows/k8s_db_migrate.yml@dev
22+
call-k8-db-upgrade:
23+
uses: code-kern-ai/cicd-deployment-scripts/.github/workflows/k8s_db_upgrade.yml@dev
2424
needs: [call-az-acr-push-test]
25+
if: ${{ github.event.repository.name == 'refinery-gateway' || github.event.repository.name == 'gates-gateway' || github.event.repository.name == 'cognition-gateway' }}
2526
secrets: inherit
2627
with:
28+
alembic_downgrade_rev: 'head'
2729
docker_image_tag: ${{ needs.call-az-acr-push-test.outputs.GH_REF_NAME }}
2830

2931
k8-test:
3032
name: 'K8: Test'
3133
runs-on: [self-hosted, dev]
32-
needs: [call-az-acr-push-test, call-k8-db-migrate]
34+
needs: [call-az-acr-push-test, call-k8-db-upgrade]
35+
if: !failure()
3336
environment: dev
3437
env:
3538
KUBELOGIN_VERSION: "v0.0.25"
@@ -79,3 +82,12 @@ jobs:
7982
-t ${{ needs.call-az-acr-push-test.outputs.GH_REF_NAME }} \
8083
-r ${{ env.AZURE_CONTAINER_REGISTRY }} \
8184
-c "${{ inputs.test_cmd }}"
85+
86+
call-k8-db-downgrade:
87+
uses: code-kern-ai/cicd-deployment-scripts/.github/workflows/k8s_db_downgrade.yml@dev
88+
needs: [call-az-acr-push-test, call-k8-db-upgrade, k8-test]
89+
if: ${{ failure() && (github.event.repository.name == 'refinery-gateway' || github.event.repository.name == 'gates-gateway' || github.event.repository.name == 'cognition-gateway') }}
90+
secrets: inherit
91+
with:
92+
alembic_downgrade_rev: ${{ needs.call-k8-db-upgrade.outputs.ALEMBIC_CURRENT_REV }}
93+
docker_image_tag: ${{ needs.call-az-acr-push-test.outputs.GH_REF_NAME }}

k8s/db_rollback.sh renamed to k8s/db_downgrade.sh

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ KUBERNETES_NAMESPACE=""
88
AZURE_CONTAINER_REGISTRY=""
99
IMAGE_TAG=""
1010
alembic_downgrade_rev=""
11+
alembic_command="downgrade"
1112

1213
while getopts e:d:p:n:r:t:a: flag
1314
do
@@ -22,37 +23,39 @@ do
2223
esac
2324
done
2425

26+
if [ $KUBERNETES_DEPLOYMENT_NAME = "cognition-gateway" ]; then
27+
KUBERNETES_DEPLOYMENT_NAME="refinery-gateway"
28+
fi
29+
2530
echo "::group::Kubernetes Context"
2631
kubectl config set-context --current --namespace=$KUBERNETES_NAMESPACE
2732
echo "Context set to namespace: \"$KUBERNETES_NAMESPACE\""
2833
echo "::endgroup::"
2934

30-
echo "::group::Migrating to revision: $alembic_downgrade_rev"
3135

32-
sed 's|${ALEMBIC_COMMAND}|downgrade|g' \
36+
echo "::group::Migrating to revision: $alembic_downgrade_rev"
37+
sed 's|${ALEMBIC_COMMAND}|'$alembic_command'|g' \
3338
$KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.tmpl \
3439
> $KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.yml
3540
sed -i.bak 's|${ALEMBIC_ARGS}|'${alembic_downgrade_rev}'|g' $KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.yml
3641
sed -i.bak 's|${IMAGE_TAG}|'${IMAGE_TAG}'|g' $KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.yml
37-
3842
rm $KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.yml.bak
3943
cat $KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.yml
4044
echo "::endgroup::"
4145

46+
4247
echo "::group::Apply Kubernetes Job"
4348
kubectl apply --filename $KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.yml
44-
4549
echo "Waiting for migration job to complete ..."
4650
kubectl wait --for=condition=complete --timeout 60s job/$KUBERNETES_DEPLOYMENT_NAME-migrate
4751
kubectl logs job/$KUBERNETES_DEPLOYMENT_NAME-migrate
52+
kubectl delete job/$KUBERNETES_DEPLOYMENT_NAME-migrate
4853
echo "::endgroup::"
4954

50-
echo "::group::Rolling out deployment"
55+
56+
echo "::group::Rolling out deployments"
5157
kubectl rollout restart deployment/$KUBERNETES_DEPLOYMENT_NAME
5258
kubectl rollout status deployment/$KUBERNETES_DEPLOYMENT_NAME
53-
5459
kubectl rollout restart deployment/cognition-gateway
5560
kubectl rollout status deployment/cognition-gateway
56-
57-
kubectl delete job/$KUBERNETES_DEPLOYMENT_NAME-migrate
5861
echo "::endgroup::"

k8s/db_migrate.sh renamed to k8s/db_upgrade.sh

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ KUBERNETES_NAMESPACE=""
88
AZURE_CONTAINER_REGISTRY=""
99
IMAGE_TAG=""
1010
alembic_upgrade_rev=""
11+
alembic_command="upgrade"
1112

1213
while getopts e:d:p:n:r:t:a: flag
1314
do
@@ -22,38 +23,53 @@ do
2223
esac
2324
done
2425

26+
if [ $KUBERNETES_DEPLOYMENT_NAME = "cognition-gateway" ]; then
27+
KUBERNETES_DEPLOYMENT_NAME="refinery-gateway"
28+
fi
2529

2630
echo "::group::Kubernetes Context"
2731
kubectl config set-context --current --namespace=$KUBERNETES_NAMESPACE
2832
echo "Context set to namespace: \"$KUBERNETES_NAMESPACE\""
2933
echo "::endgroup::"
3034

31-
echo "::group::Migrating to revision: $alembic_upgrade_rev"
3235

33-
sed 's|${ALEMBIC_COMMAND}|upgrade|g' \
36+
echo "::group::Get Alembic current revision"
37+
ALEMBIC_CURRENT_REV=$(kubectl exec -i deployment/${KUBERNETES_DEPLOYMENT_NAME} -- alembic current || true)
38+
echo "ALEMBIC_CURRENT_REV=${ALEMBIC_CURRENT_REV:0:12}" >> $GITHUB_OUTPUT
39+
echo "Alembic current revision: $ALEMBIC_CURRENT_REV"
40+
echo "::endgroup::"
41+
42+
43+
echo "::group::Migrating to revision: $alembic_upgrade_rev"
44+
sed 's|${ALEMBIC_COMMAND}|'$alembic_command'|g' \
3445
$KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.tmpl \
3546
> $KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.yml
3647
sed -i.bak 's|${ALEMBIC_ARGS}|'${alembic_upgrade_rev}'|g' $KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.yml
3748
sed -i.bak 's|${IMAGE_TAG}|'${IMAGE_TAG}'|g' $KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.yml
38-
3949
rm $KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.yml.bak
4050
cat $KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.yml
4151
echo "::endgroup::"
4252

53+
4354
echo "::group::Apply Kubernetes Job"
4455
kubectl apply --filename $KUBERNETES_DEPLOYMENT_REPO_PATH/infrastructure/$ENVIRONMENT_NAME/job/$KUBERNETES_DEPLOYMENT_NAME-migrate.yml
45-
4656
echo "Waiting for migration job to complete ..."
4757
kubectl wait --for=condition=complete --timeout 60s job/$KUBERNETES_DEPLOYMENT_NAME-migrate
4858
kubectl logs job/$KUBERNETES_DEPLOYMENT_NAME-migrate
59+
kubectl delete job/$KUBERNETES_DEPLOYMENT_NAME-migrate
60+
echo "::endgroup::"
61+
62+
63+
echo "::group::Get Alembic upgraded revision"
64+
ALEMBIC_UPGRADED_REV=$(kubectl exec -i deployment/${KUBERNETES_DEPLOYMENT_NAME} -- alembic current 2>/dev/null || true)
65+
echo "ALEMBIC_UPGRADED_REV=${ALEMBIC_UPGRADED_REV:0:12}" >> $GITHUB_OUTPUT
66+
echo "Alembic upgraded revision: $ALEMBIC_UPGRADED_REV"
4967
echo "::endgroup::"
5068

51-
echo "::group::Rolling out deployment"
69+
70+
echo "::group::Rolling out deployments"
5271
kubectl rollout restart deployment/$KUBERNETES_DEPLOYMENT_NAME
5372
kubectl rollout status deployment/$KUBERNETES_DEPLOYMENT_NAME
54-
5573
kubectl rollout restart deployment/cognition-gateway
5674
kubectl rollout status deployment/cognition-gateway
57-
58-
kubectl delete job/$KUBERNETES_DEPLOYMENT_NAME-migrate
5975
echo "::endgroup::"

k8s/test.sh

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,29 +23,30 @@ kubectl config set-context --current --namespace=$KUBERNETES_NAMESPACE
2323
echo "Context set to namespace: \"$KUBERNETES_NAMESPACE\""
2424
echo "::endgroup::"
2525

26-
echo "::notice::running test command: kubectl exec -i deployment/${KUBERNETES_DEPLOYMENT_NAME} -c $KUBERNETES_DEPLOYMENT_NAME -- '$TEST_CMD'"
2726

2827
echo "::group::Upgrade deployment image"
2928
KUBERNETES_POD_EXISTING_IMAGE=$(kubectl get pod --output json \
3029
--selector app=${KUBERNETES_DEPLOYMENT_NAME} \
3130
| jq -r '.items[0] | .spec.containers[0].image')
3231

3332
kubectl set image deployment/${KUBERNETES_DEPLOYMENT_NAME} ${KUBERNETES_DEPLOYMENT_NAME}=${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG}
34-
echo "::warning::using ${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG}"
35-
3633
kubectl rollout status deployment ${KUBERNETES_DEPLOYMENT_NAME}
3734
echo "::endgroup::"
3835

39-
echo "::group::Running test command"
36+
37+
echo "::warning::using ${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG}"
38+
39+
40+
echo "::group::Running test command: kubectl exec -i deployment/${KUBERNETES_DEPLOYMENT_NAME} -c $KUBERNETES_DEPLOYMENT_NAME -- '$TEST_CMD'"
4041
set +e
4142
exitcode=0
42-
echo "::warning::running test command: kubectl exec -i deployment/${KUBERNETES_DEPLOYMENT_NAME} -c $KUBERNETES_DEPLOYMENT_NAME -- '$TEST_CMD'"
4343
kubectl exec -i deployment/${KUBERNETES_DEPLOYMENT_NAME} -c $KUBERNETES_DEPLOYMENT_NAME -- ''$TEST_CMD''
4444
exitcode=$?
4545
set -e
4646
echo "::endgroup::"
4747

4848
kubectl set image deployment/${KUBERNETES_DEPLOYMENT_NAME} ${KUBERNETES_DEPLOYMENT_NAME}=${KUBERNETES_POD_EXISTING_IMAGE}
49+
4950
echo "::notice::using ${KUBERNETES_POD_EXISTING_IMAGE}"
5051

5152
exit $exitcode

0 commit comments

Comments
 (0)