Skip to content

Commit b04abc1

Browse files
Merge pull request #11 from code-kern-ai/db-migration-tests
DB migration tests
2 parents bff2622 + 37fcfb2 commit b04abc1

File tree

1 file changed

+58
-53
lines changed

1 file changed

+58
-53
lines changed

k8s/test.sh

Lines changed: 58 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,6 @@ do
2525
esac
2626
done
2727

28-
echo "::group::Kubernetes Context"
29-
kubectl config set-context --current --namespace=$KUBERNETES_NAMESPACE
30-
echo "Context set to namespace: \"$KUBERNETES_NAMESPACE\""
31-
echo "::endgroup::"
32-
33-
34-
REFINERY_ALEMBIC_VERSION=""
35-
KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION=""
36-
37-
KUBERNETES_POD_EXISTING_IMAGE=$(kubectl get pod --output json \
38-
--selector app=${KUBERNETES_DEPLOYMENT_NAME} \
39-
| jq -r '.items[0] | .spec.containers[0].image')
40-
41-
REFINERY_POD_EXISTING_IMAGE=$(kubectl get pod --output json \
42-
--selector app=${REFINERY_DEPLOYMENT_NAME} \
43-
| jq -r '.items[0] | .spec.containers[0].image')
44-
45-
REFINERY_IMAGE_TAG_EXISTS=$(az acr repository show --name ${AZURE_CONTAINER_REGISTRY} --image ${REFINERY_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG} 2> /dev/null || true)
46-
4728
__safe_migration_rollout() {
4829
deploy=$1
4930

@@ -67,31 +48,61 @@ __safe_migration_rollout() {
6748
fi
6849
}
6950

51+
echo "::group::Kubernetes Context & Test Infrastructure"
52+
kubectl config set-context --current --namespace=$KUBERNETES_NAMESPACE
53+
echo "Context set to namespace: \"$KUBERNETES_NAMESPACE\""
54+
kubectl apply --kustomize infrastructure/test
55+
__safe_migration_rollout test-postgres
56+
kubectl exec -i deployment/test-postgres -- sh -c "psql -U postgres -c '$(cat infrastructure/test/deployment/assets/init.sql)'" || true
57+
echo "::endgroup::"
58+
59+
60+
REFINERY_ALEMBIC_VERSION=""
61+
KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION=""
62+
63+
KUBERNETES_POD_EXISTING_IMAGE=$(kubectl get pod --output json \
64+
--selector app=${KUBERNETES_DEPLOYMENT_NAME} \
65+
| jq -r '.items[0] | .spec.containers[0].image')
66+
67+
REFINERY_POD_EXISTING_IMAGE=$(kubectl get pod --output json \
68+
--selector app=${REFINERY_DEPLOYMENT_NAME} \
69+
| jq -r '.items[0] | .spec.containers[0].image')
70+
71+
REFINERY_IMAGE_TAG_EXISTS=$(az acr repository show --name ${AZURE_CONTAINER_REGISTRY} --image ${REFINERY_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG} 2> /dev/null || true)
72+
7073
upgrade_alembic_migrations() {
7174
echo "::group::Upgrade alembic migrations for test"
7275
if [ $KUBERNETES_DEPLOYMENT_NAME != "refinery-gateway" ] && [ $KUBERNETES_DEPLOYMENT_NAME != "gates-gateway" ] && [ $KUBERNETES_DEPLOYMENT_NAME != "hosted-inference-api" ]; then
7376
if [ -n "$REFINERY_IMAGE_TAG_EXISTS" ]; then
74-
REFINERY_ALEMBIC_VERSION=$(kubectl exec -i deployment/${REFINERY_DEPLOYMENT_NAME} -c ${REFINERY_DEPLOYMENT_NAME} -- alembic current)
77+
kubectl apply --kustomize apps/${REFINERY_DEPLOYMENT_NAME}/test
78+
__safe_migration_rollout test-${REFINERY_DEPLOYMENT_NAME}
79+
echo "Applied test-${REFINERY_DEPLOYMENT_NAME} deployment"
80+
81+
REFINERY_ALEMBIC_VERSION=$(kubectl exec -i deployment/test-${REFINERY_DEPLOYMENT_NAME} -c test-${REFINERY_DEPLOYMENT_NAME} -- alembic current)
7582
REFINERY_ALEMBIC_VERSION=${REFINERY_ALEMBIC_VERSION:0:12}
7683
echo "::warning::current $REFINERY_DEPLOYMENT_NAME alembic version: $REFINERY_ALEMBIC_VERSION"
77-
kubectl set image deployment/${REFINERY_DEPLOYMENT_NAME} \
78-
${REFINERY_DEPLOYMENT_NAME}-migrate=${AZURE_CONTAINER_REGISTRY}/${REFINERY_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG} \
79-
${REFINERY_DEPLOYMENT_NAME}=${AZURE_CONTAINER_REGISTRY}/${REFINERY_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG} 1> /dev/null
80-
__safe_migration_rollout ${REFINERY_DEPLOYMENT_NAME}
84+
kubectl set image deployment/test-${REFINERY_DEPLOYMENT_NAME} \
85+
test-${REFINERY_DEPLOYMENT_NAME}-migrate=${AZURE_CONTAINER_REGISTRY}/${REFINERY_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG} \
86+
test-${REFINERY_DEPLOYMENT_NAME}=${AZURE_CONTAINER_REGISTRY}/${REFINERY_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG} 1> /dev/null
87+
__safe_migration_rollout test-${REFINERY_DEPLOYMENT_NAME}
8188
echo "::warning::using ${AZURE_CONTAINER_REGISTRY}/${REFINERY_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG}"
82-
_REFINERY_ALEMBIC_VERSION=$(kubectl exec -i deployment/${REFINERY_DEPLOYMENT_NAME} -c ${REFINERY_DEPLOYMENT_NAME} -- alembic current)
89+
_REFINERY_ALEMBIC_VERSION=$(kubectl exec -i deployment/test-${REFINERY_DEPLOYMENT_NAME} -c test-${REFINERY_DEPLOYMENT_NAME} -- alembic current)
8390
echo "::warning::upgraded $REFINERY_DEPLOYMENT_NAME alembic version: $_REFINERY_ALEMBIC_VERSION"
8491
fi
8592
else
86-
KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION=$(kubectl exec -i deployment/${KUBERNETES_DEPLOYMENT_NAME} -c ${KUBERNETES_DEPLOYMENT_NAME} -- alembic current)
93+
kubectl apply --kustomize apps/${KUBERNETES_DEPLOYMENT_NAME}/test
94+
__safe_migration_rollout test-${KUBERNETES_DEPLOYMENT_NAME}
95+
echo "Applied test-${KUBERNETES_DEPLOYMENT_NAME} deployment"
96+
97+
KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION=$(kubectl exec -i deployment/test-${KUBERNETES_DEPLOYMENT_NAME} -c test-${KUBERNETES_DEPLOYMENT_NAME} -- alembic current)
8798
KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION=${KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION:0:12}
8899
echo "::warning::current $KUBERNETES_DEPLOYMENT_NAME alembic version: $KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION"
89-
kubectl set image deployment/${KUBERNETES_DEPLOYMENT_NAME} \
90-
${KUBERNETES_DEPLOYMENT_NAME}-migrate=${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG} \
91-
${KUBERNETES_DEPLOYMENT_NAME}=${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG} 1> /dev/null
92-
__safe_migration_rollout ${KUBERNETES_DEPLOYMENT_NAME}
100+
kubectl set image deployment/test-${KUBERNETES_DEPLOYMENT_NAME} \
101+
test-${KUBERNETES_DEPLOYMENT_NAME}-migrate=${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG} \
102+
test-${KUBERNETES_DEPLOYMENT_NAME}=${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG} 1> /dev/null
103+
__safe_migration_rollout test-${KUBERNETES_DEPLOYMENT_NAME}
93104
echo "::warning::using ${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG}"
94-
_KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION=$(kubectl exec -i deployment/${KUBERNETES_DEPLOYMENT_NAME} -c ${KUBERNETES_DEPLOYMENT_NAME} -- alembic current)
105+
_KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION=$(kubectl exec -i deployment/test-${KUBERNETES_DEPLOYMENT_NAME} -c test-${KUBERNETES_DEPLOYMENT_NAME} -- alembic current)
95106
echo "::warning::upgraded $KUBERNETES_DEPLOYMENT_NAME alembic version: $_KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION"
96107
fi
97108
echo "::endgroup::"
@@ -101,22 +112,18 @@ downgrade_alembic_migrations() {
101112
echo "::group::Downgrade alembic migrations"
102113
if [ $KUBERNETES_DEPLOYMENT_NAME != "refinery-gateway" ] && [ $KUBERNETES_DEPLOYMENT_NAME != "gates-gateway" ] && [ $KUBERNETES_DEPLOYMENT_NAME != "hosted-inference-api" ]; then
103114
if [ -n "$REFINERY_IMAGE_TAG_EXISTS" ]; then
104-
kubectl exec -i deployment/${REFINERY_DEPLOYMENT_NAME} -c ${REFINERY_DEPLOYMENT_NAME} -- alembic downgrade $REFINERY_ALEMBIC_VERSION
105-
echo "::warning::downgraded $REFINERY_DEPLOYMENT_NAME alembic version to $REFINERY_ALEMBIC_VERSION"
106-
kubectl set image deployment/${REFINERY_DEPLOYMENT_NAME} \
107-
${REFINERY_DEPLOYMENT_NAME}-migrate=${REFINERY_POD_EXISTING_IMAGE} \
108-
${REFINERY_DEPLOYMENT_NAME}=${REFINERY_POD_EXISTING_IMAGE}
109-
kubectl rollout status deployment ${REFINERY_DEPLOYMENT_NAME}
110-
echo "::warning::using ${REFINERY_POD_EXISTING_IMAGE}"
115+
set +e
116+
kubectl exec -i deployment/test-${REFINERY_DEPLOYMENT_NAME} -c test-${REFINERY_DEPLOYMENT_NAME} -- alembic downgrade $REFINERY_ALEMBIC_VERSION
117+
echo "::warning::downgraded test-$REFINERY_DEPLOYMENT_NAME alembic version to $REFINERY_ALEMBIC_VERSION"
118+
set -e
119+
kubectl delete --kustomize apps/${REFINERY_DEPLOYMENT_NAME}/test
111120
fi
112121
else
113-
kubectl exec -i deployment/${KUBERNETES_DEPLOYMENT_NAME} -c ${KUBERNETES_DEPLOYMENT_NAME} -- alembic downgrade $KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION
114-
echo "::warning::downgraded $KUBERNETES_DEPLOYMENT_NAME alembic version to $KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION"
115-
kubectl set image deployment/${KUBERNETES_DEPLOYMENT_NAME} \
116-
${KUBERNETES_DEPLOYMENT_NAME}-migrate=${KUBERNETES_POD_EXISTING_IMAGE} \
117-
${KUBERNETES_DEPLOYMENT_NAME}=${KUBERNETES_POD_EXISTING_IMAGE}
118-
kubectl rollout status deployment ${KUBERNETES_DEPLOYMENT_NAME}
119-
echo "::warning::using ${KUBERNETES_POD_EXISTING_IMAGE}"
122+
set +e
123+
kubectl exec -i deployment/test-${KUBERNETES_DEPLOYMENT_NAME} -c test-${KUBERNETES_DEPLOYMENT_NAME} -- alembic downgrade $KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION
124+
echo "::warning::downgraded test-$KUBERNETES_DEPLOYMENT_NAME alembic version to $KUBERNETES_DEPLOYMENT_ALEMBIC_VERSION"
125+
set -e
126+
kubectl delete --kustomize apps/${KUBERNETES_DEPLOYMENT_NAME}/test
120127
fi
121128
echo "::endgroup::"
122129
}
@@ -126,15 +133,15 @@ if [ "$ENABLE_ALEMBIC_MIGRATIONS" = "true" ]; then
126133
fi
127134

128135
echo "::group::Set test image: ${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG}"
129-
kubectl set image deployment/${KUBERNETES_DEPLOYMENT_NAME} ${KUBERNETES_DEPLOYMENT_NAME}=${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG} 1> /dev/null
130-
__safe_migration_rollout ${KUBERNETES_DEPLOYMENT_NAME}
136+
kubectl set image deployment/test-${KUBERNETES_DEPLOYMENT_NAME} test-${KUBERNETES_DEPLOYMENT_NAME}=${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG} 1> /dev/null
137+
__safe_migration_rollout test-${KUBERNETES_DEPLOYMENT_NAME}
131138
echo "::notice::using ${AZURE_CONTAINER_REGISTRY}/${KUBERNETES_DEPLOYMENT_NAME}:${TEST_IMAGE_TAG}"
132139
echo "::endgroup::"
133140

134-
echo "::group::Running test command: kubectl exec -i deployment/${KUBERNETES_DEPLOYMENT_NAME} -c $KUBERNETES_DEPLOYMENT_NAME -- '$TEST_CMD'"
141+
echo "::group::Running test command: kubectl exec -i deployment/test-${KUBERNETES_DEPLOYMENT_NAME} -c $KUBERNETES_DEPLOYMENT_NAME -- '$TEST_CMD'"
135142
set +e
136143
exitcode=0
137-
kubectl exec -i deployment/${KUBERNETES_DEPLOYMENT_NAME} -c $KUBERNETES_DEPLOYMENT_NAME -- ''$TEST_CMD''
144+
kubectl exec -i deployment/test-${KUBERNETES_DEPLOYMENT_NAME} -c test-$KUBERNETES_DEPLOYMENT_NAME -- ''$TEST_CMD''
138145
exitcode=$?
139146
set -e
140147
echo "::endgroup::"
@@ -143,10 +150,8 @@ if [ "$ENABLE_ALEMBIC_MIGRATIONS" = "true" ]; then
143150
downgrade_alembic_migrations
144151
fi
145152

146-
echo "::group::Revert test image: ${KUBERNETES_POD_EXISTING_IMAGE}"
147-
kubectl set image deployment/${KUBERNETES_DEPLOYMENT_NAME} ${KUBERNETES_DEPLOYMENT_NAME}=${KUBERNETES_POD_EXISTING_IMAGE} 1> /dev/null
148-
kubectl rollout status deployment ${KUBERNETES_DEPLOYMENT_NAME}
149-
echo "::notice::using ${KUBERNETES_POD_EXISTING_IMAGE}"
153+
echo "::group::Delete Test Infrastructure"
154+
kubectl delete --kustomize infrastructure/test
150155
echo "::endgroup::"
151156

152157
exit $exitcode

0 commit comments

Comments
 (0)