Skip to content

Commit 497383c

Browse files
committed
test: DB and superuser creation from env vars
1 parent e61c4a4 commit 497383c

File tree

1 file changed

+144
-3
lines changed

1 file changed

+144
-3
lines changed

.github/workflows/test.yml

Lines changed: 144 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,158 @@
1-
name: Test PostgreSQL Upgrade Images
1+
name: Test
22

33
on:
44
push:
55
branches:
66
- main
7-
- master
87
pull_request:
98
branches:
109
- main
11-
- master
1210
workflow_dispatch:
1311

12+
env:
13+
TEST_DB: mission_control
14+
TEST_USER: testuser
15+
TEST_PASSWORD: testpass123
16+
1417
jobs:
18+
test-env-variables:
19+
runs-on: ubuntu-latest
20+
steps:
21+
- name: Checkout repository
22+
uses: actions/checkout@v4
23+
24+
- name: Set up Docker Buildx
25+
uses: docker/setup-buildx-action@v3
26+
27+
- name: Build Docker image (amd64 only)
28+
uses: docker/build-push-action@v5
29+
with:
30+
context: .
31+
platforms: linux/amd64
32+
load: true
33+
tags: postgres-test:local
34+
cache-from: type=gha
35+
cache-to: type=gha,mode=max
36+
37+
- name: Start PostgreSQL with environment variables
38+
run: |
39+
echo "Starting PostgreSQL container with:"
40+
echo " POSTGRES_DB=${{ env.TEST_DB }}"
41+
echo " POSTGRES_USER=${{ env.TEST_USER }}"
42+
echo " POSTGRES_PASSWORD=${{ env.TEST_PASSWORD }}"
43+
44+
CONTAINER_ID=$(docker run -d \
45+
-e POSTGRES_DB=${{ env.TEST_DB }} \
46+
-e POSTGRES_USER=${{ env.TEST_USER }} \
47+
-e POSTGRES_PASSWORD=${{ env.TEST_PASSWORD }} \
48+
postgres-test:local)
49+
50+
echo "CONTAINER_ID=$CONTAINER_ID" >> $GITHUB_ENV
51+
echo "Container started: $CONTAINER_ID"
52+
53+
- name: Wait for PostgreSQL to be ready
54+
run: |
55+
echo "Waiting for PostgreSQL to start..."
56+
sleep 15
57+
58+
echo "=== Container Logs ==="
59+
docker logs ${{ env.CONTAINER_ID }}
60+
echo "======================"
61+
62+
- name: Check if custom database was created
63+
run: |
64+
echo "Checking if database '${{ env.TEST_DB }}' exists..."
65+
66+
DATABASES=$(docker exec ${{ env.CONTAINER_ID }} \
67+
psql -h localhost -U ${{ env.TEST_USER }} -d ${{ env.TEST_DB }} -t -c "\l" 2>&1)
68+
69+
echo "=== All Databases ==="
70+
echo "$DATABASES"
71+
echo "====================="
72+
73+
if echo "$DATABASES" | grep -q "${{ env.TEST_DB }}"; then
74+
echo "✅ PASS: Database '${{ env.TEST_DB }}' exists"
75+
else
76+
echo "❌ FAIL: Database '${{ env.TEST_DB }}' was NOT created"
77+
echo "Only these databases exist:"
78+
docker exec ${{ env.CONTAINER_ID }} \
79+
psql -h localhost -U ${{ env.TEST_USER }} -d ${{ env.TEST_DB }} -t -c "SELECT datname FROM pg_database;"
80+
exit 1
81+
fi
82+
83+
- name: Check if custom user was created
84+
run: |
85+
echo "Checking if user '${{ env.TEST_USER }}' exists..."
86+
87+
USERS=$(docker exec ${{ env.CONTAINER_ID }} \
88+
psql -h localhost -U ${{ env.TEST_USER }} -d ${{ env.TEST_DB }} -t -c "SELECT usename FROM pg_user;")
89+
90+
echo "=== All Users ==="
91+
echo "$USERS"
92+
echo "================="
93+
94+
if echo "$USERS" | grep -q "${{ env.TEST_USER }}"; then
95+
echo "✅ PASS: User '${{ env.TEST_USER }}' exists"
96+
else
97+
echo "❌ FAIL: User '${{ env.TEST_USER }}' was NOT created"
98+
exit 1
99+
fi
100+
101+
- name: Test authentication with custom credentials
102+
run: |
103+
echo "Testing authentication as '${{ env.TEST_USER }}' to database '${{ env.TEST_DB }}'..."
104+
105+
if docker exec ${{ env.CONTAINER_ID }} \
106+
psql -h localhost -U ${{ env.TEST_USER }} -d ${{ env.TEST_DB }} -c "SELECT version();" > /dev/null 2>&1; then
107+
echo "✅ PASS: Authentication successful"
108+
else
109+
echo "❌ FAIL: Could not authenticate with provided credentials"
110+
exit 1
111+
fi
112+
113+
- name: Verify database permissions
114+
run: |
115+
echo "Verifying user can create tables in the database..."
116+
117+
docker exec ${{ env.CONTAINER_ID }} \
118+
psql -h localhost -U ${{ env.TEST_USER }} -d ${{ env.TEST_DB }} -c \
119+
"CREATE TABLE test_table (id SERIAL PRIMARY KEY, data TEXT);"
120+
121+
docker exec ${{ env.CONTAINER_ID }} \
122+
psql -h localhost -U ${{ env.TEST_USER }} -d ${{ env.TEST_DB }} -c \
123+
"INSERT INTO test_table (data) VALUES ('test data');"
124+
125+
RESULT=$(docker exec ${{ env.CONTAINER_ID }} \
126+
psql -h localhost -U ${{ env.TEST_USER }} -d ${{ env.TEST_DB }} -t -c \
127+
"SELECT data FROM test_table WHERE id = 1;")
128+
129+
if echo "$RESULT" | grep -q "test data"; then
130+
echo "✅ PASS: User has correct permissions"
131+
else
132+
echo "❌ FAIL: User permissions issue"
133+
exit 1
134+
fi
135+
136+
- name: Show final status
137+
if: always()
138+
run: |
139+
echo "========================================="
140+
echo "Environment Variable Test Results"
141+
echo "========================================="
142+
echo ""
143+
echo "Test Configuration:"
144+
echo " POSTGRES_DB: ${{ env.TEST_DB }}"
145+
echo " POSTGRES_USER: ${{ env.TEST_USER }}"
146+
echo " POSTGRES_PASSWORD: ********"
147+
echo ""
148+
docker logs ${{ env.CONTAINER_ID }} 2>&1 | tail -50
149+
150+
- name: Cleanup
151+
if: always()
152+
run: |
153+
docker stop ${{ env.CONTAINER_ID }} || true
154+
docker rm ${{ env.CONTAINER_ID }} || true
155+
15156
test-builds:
16157
# Disabled: This workflow tries to run Go tests that don't exist.
17158
# Use build-and-test.yml instead which provides comprehensive Docker-based testing.

0 commit comments

Comments
 (0)