-
-
Notifications
You must be signed in to change notification settings - Fork 7
141 lines (123 loc) · 5.11 KB
/
docker-test.yml
File metadata and controls
141 lines (123 loc) · 5.11 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
name: 🐳 Docker Test Environment
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
docker-test:
name: Build & Verify Docker Environment
runs-on: ubuntu-latest
steps:
- name: 📥 Checkout repository
uses: actions/checkout@v5
- name: 🐳 Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: 📄 Prepare environment files
run: |
# Create .env from the template 'env' file
cp env .env
# Configure for Docker CI environment
cat >> .env << 'EOF'
CI_ENVIRONMENT=development
app.baseURL='http://localhost/'
database.default.hostname=db
database.default.database=ci4ms_test
database.default.username=ci4ms_user
database.default.password=ci4ms_pass
database.default.DBDriver=MySQLi
database.default.DBPrefix=ci4ms_
database.default.port=3306
encryption.key=hex2bin:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2
EOF
# Prepare Routes file from default template
cp app/Config/DefaultRoutes.php app/Config/Routes.php
- name: 🔨 Build and start Docker containers
run: docker compose up -d --build
- name: ⏳ Wait for MariaDB to be ready
run: |
echo "Waiting for MariaDB..."
for i in $(seq 1 30); do
if docker exec ci4ms_db healthcheck.sh --connect --innodb_initialized 2>/dev/null; then
echo "✅ MariaDB is ready!"
break
fi
echo "Attempt $i/30 - waiting..."
sleep 5
done
# Final verification
docker exec ci4ms_db mariadb -u ci4ms_user -pci4ms_pass -e "SELECT 1;" ci4ms_test
echo "✅ Database connection verified."
- name: 📦 Install Composer dependencies
run: docker exec ci4ms_app composer install --no-interaction --prefer-dist --optimize-autoloader
- name: 📂 Set file permissions
run: |
docker exec ci4ms_app chmod -R 775 writable
docker exec ci4ms_app chown -R www-data:www-data writable
docker exec ci4ms_app mkdir -p writable/backups writable/cache writable/logs writable/session
docker exec ci4ms_app mkdir -p public/media/.tmb public/media/.trash
docker exec ci4ms_app chmod -R 775 public/media
- name: 🗄️ Run migrations & seed default data
run: |
docker exec ci4ms_app php spark ci4ms:setup \
--fname=CI \
--sname=Test \
--username=admin \
--email=admin@ci4ms.test \
--password=Test1234! \
--baseUrl=http://localhost/ \
--siteName="CI4MS Test"
echo "✅ Setup completed."
- name: 🧹 PHP syntax check
run: |
echo "Running PHP syntax check..."
ERRORS=$(docker exec ci4ms_app find app modules -name "*.php" -exec php -l {} \; 2>&1 | grep -c "Parse error" || true)
if [ "$ERRORS" -gt 0 ]; then
echo "❌ Found $ERRORS syntax errors!"
docker exec ci4ms_app find app modules -name "*.php" -exec php -l {} \; 2>&1 | grep "Parse error"
exit 1
fi
echo "✅ No PHP syntax errors found."
- name: 🌐 Check HTTP response (Homepage)
run: |
sleep 3
STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost)
echo "HTTP Status: $STATUS"
# 200 = page rendered, 302 = redirect, 401 = auth required (all mean app is running)
if [ "$STATUS" -eq 200 ] || [ "$STATUS" -eq 302 ] || [ "$STATUS" -eq 401 ]; then
echo "✅ Application is responding correctly."
else
echo "❌ Unexpected HTTP status: $STATUS"
docker compose logs app
exit 1
fi
- name: 🔒 Check backend responds
run: |
STATUS=$(curl -s -o /dev/null -w "%{http_code}" -L http://localhost/backend)
echo "Backend HTTP Status: $STATUS"
# 200 = login page, 302 = redirect to login, 401 = auth required (all valid)
if [ "$STATUS" -eq 200 ] || [ "$STATUS" -eq 302 ] || [ "$STATUS" -eq 401 ]; then
echo "✅ Backend is responding correctly."
else
echo "❌ Backend unexpected status: $STATUS"
docker compose logs app
exit 1
fi
- name: 🧪 Run PHPUnit tests (if available)
run: |
docker exec ci4ms_app vendor/bin/phpunit --no-coverage 2>/dev/null \
|| echo "⚠️ No tests defined or tests skipped."
- name: 📋 Show container logs on failure
if: failure()
run: |
echo "=== APP LOGS ==="
docker compose logs app
echo ""
echo "=== DB LOGS ==="
docker compose logs db
echo ""
echo "=== CI4 LOG ==="
docker exec ci4ms_app cat writable/logs/log-$(date +%Y-%m-%d).log 2>/dev/null || echo "No CI4 log file found."
- name: 🛑 Stop and clean up containers
if: always()
run: docker compose down -v