1
+ #! /bin/bash
2
+
3
+ # Exit immediately if a command exits with a non-zero status.
4
+ set -e
5
+
6
+ echo " --- Starting Joomla Core Post-Creation Setup ---"
7
+
8
+ # Configuration variables
9
+ DB_NAME=" test_joomla"
10
+ DB_USER=" joomla_ut"
11
+ DB_PASS=" joomla_ut"
12
+ ADMIN_USER=" ci-admin"
13
+ ADMIN_REAL_NAME=" jane doe"
14
+ ADMIN_PASS=" joomla-17082005"
15
+
16
+ JOOMLA_ROOT=" /workspaces/joomla-cms"
17
+
18
+ # Allow git commands to run safely in the container
19
+ git config --global --add safe.directory $JOOMLA_ROOT
20
+
21
+ # --- 1. Wait for MariaDB Service ---
22
+ echo " --> Waiting for MariaDB to become available..."
23
+ while ! mysqladmin ping -h" mysql" --silent; do
24
+ sleep 1
25
+ done
26
+ echo " ✅ MariaDB is ready."
27
+
28
+ # --- 2. Install Core Dependencies ---
29
+ echo " --> Installing Composer and NPM dependencies..."
30
+ composer install
31
+ npm install
32
+ echo " ✅ Dependencies installed."
33
+
34
+ # --- 3. Install Joomla from Repository Source ---
35
+ echo " --> Installing Joomla using the local repository source..."
36
+ php installation/joomla.php install \
37
+ --site-name=" Joomla CMS Test" \
38
+ --admin-user=" $ADMIN_REAL_NAME " \
39
+ --admin-username=" $ADMIN_USER " \
40
+ --admin-password=" $ADMIN_PASS " \
41
+ --admin-email=" $ADMIN_EMAIL " \
42
+ --db-type=" mysqli" \
43
+ --db-host=" mysql" \
44
+ --db-name=" $DB_NAME " \
45
+ --db-user=" $DB_USER " \
46
+ --db-pass=" $DB_PASS " \
47
+ --db-prefix=" jos_" \
48
+ --db-encryption=" 0" \
49
+ --public-folder=" "
50
+ echo " ✅ Joomla installed."
51
+
52
+ # --- 4. Configure Joomla for Development ---
53
+ echo " --> Applying development settings..."
54
+ # Enable debug mode and maximum error reporting for easier troubleshooting.
55
+ php cli/joomla.php config:set error_reporting=maximum
56
+ echo " ✅ Development settings applied."
57
+
58
+ # --- 5. Install and Configure phpMyAdmin ---
59
+ PMA_ROOT=" ${JOOMLA_ROOT} /phpmyadmin"
60
+ echo " --> Downloading phpMyAdmin into $PMA_ROOT ..."
61
+ PMA_VERSION=5.2.2
62
+ mkdir -p $PMA_ROOT
63
+ curl -o /tmp/phpmyadmin.tar.gz https://files.phpmyadmin.net/phpMyAdmin/${PMA_VERSION} /phpMyAdmin-${PMA_VERSION} -all-languages.tar.gz
64
+ tar xf /tmp/phpmyadmin.tar.gz --strip-components=1 -C $PMA_ROOT
65
+ rm /tmp/phpmyadmin.tar.gz
66
+ cp $PMA_ROOT /config.sample.inc.php $PMA_ROOT /config.inc.php
67
+ sed -i " /\['AllowNoPassword'\] = false/a \$ cfg['Servers'][\$ i]['host'] = 'mysql';" $PMA_ROOT /config.inc.php
68
+
69
+ # --- 6. Apply Codespaces Host Fix ---
70
+ # This ensures Joomla generates correct URLs when accessed through the forwarded port.
71
+ echo " --> Applying Codespaces URL fix..."
72
+ cat > " ${JOOMLA_ROOT} /fix.php" << 'EOF '
73
+ <?php
74
+ // Fix for incorrect host when running behind the Codespaces reverse proxy.
75
+ if (isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST'] === 'localhost:80') {
76
+ if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
77
+ $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
78
+ $_SERVER['SERVER_NAME'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
79
+ }
80
+ }
81
+ EOF
82
+
83
+ # Include fix in both entry points
84
+ cp $JOOMLA_ROOT /fix.php $JOOMLA_ROOT /administrator/fix.php
85
+ sed -i ' 2i require_once __DIR__ . "/fix.php";' $JOOMLA_ROOT /index.php
86
+ sed -i ' 2i require_once __DIR__ . "/../fix.php";' $JOOMLA_ROOT /administrator/index.php
87
+
88
+ echo " --> Ignoring local changes..."
89
+ # For TRACKED files, tell Git to stop watching them for changes
90
+ git update-index --assume-unchanged " index.php"
91
+ git update-index --assume-unchanged " administrator/index.php"
92
+ git update-index --assume-unchanged " package-lock.json"
93
+ git update-index --assume-unchanged " tests/System/integration/install/Installation.cy.js"
94
+ git update-index --assume-unchanged " tests/System/support/commands/config.mjs"
95
+
96
+ # For NEW UNTRACKED files, add them to the local exclude file
97
+ echo " cypress.config.js" >> " .git/info/exclude"
98
+ echo " fix.php" >> " .git/info/exclude"
99
+ echo " administrator/fix.php" >> " .git/info/exclude"
100
+ echo " phpmyadmin" >> " .git/info/exclude"
101
+ echo " codespace-details.txt" >> " .git/info/exclude"
102
+
103
+ # --- 7. Finalize Permissions and Testing Tools ---
104
+ echo " --> Setting up file permissions and Cypress..."
105
+ sed -i \
106
+ -e " /\/\/ If exists, delete PHP configuration file to force a new installation/d" \
107
+ -e " /cy.task('deleteRelativePath', 'configuration.php');/d" \
108
+ -e " /cy.installJoomla(config);/d" \
109
+ tests/System/integration/install/Installation.cy.js
110
+ sed -i " s/return cy.task('writeRelativeFile', { path: 'configuration.php', content });/return cy.task('writeRelativeFile', { path: 'configuration.php', content, mode: 0o775 });/" tests/System/support/commands/config.mjs
111
+
112
+ # Ensure Cypress is executable and owned by the web server user
113
+ chmod +x ./node_modules/.bin/cypress
114
+ cp cypress.config.dist.mjs cypress.config.js
115
+ npx cypress install
116
+ sed -i -e " s|baseUrl:.*|baseUrl: 'http://localhost:80',|" -e " s/db_host: 'localhost'/db_host: 'mysql'/g" -e " s/db_user: 'root'/db_user: 'joomla_ut'/g" -e " s/db_password: ''/db_password: 'joomla_ut'/g" cypress.config.js
117
+
118
+ # Restart Apache to apply all changes
119
+ echo ' <Directory /workspaces/joomla-cms>
120
+ AllowOverride All
121
+ Require all granted
122
+ </Directory>' | sudo tee -a /etc/apache2/apache2.conf
123
+ service apache2 restart
124
+
125
+ # Set the group to www-data and enforce group permissions
126
+ echo " --> Applying final group ownership and permissions..."
127
+ chgrp -R www-data $JOOMLA_ROOT
128
+ chmod -R g+rws $JOOMLA_ROOT
129
+
130
+ echo " ✅ Environment finalized."
131
+
132
+ # --- 8. Display Setup Details ---
133
+ # Save the details to a file for easy reference.
134
+ DETAILS_FILE=" ${JOOMLA_ROOT} /codespace-details.txt"
135
+ {
136
+ echo " "
137
+ echo " ---"
138
+ echo " 🚀 Joomla Core development environment is ready! 🚀"
139
+ echo " "
140
+ echo " This information has been saved to codespace-details.txt"
141
+ echo " "
142
+ echo " Joomla Admin Login:"
143
+ echo " URL: Open the 'Ports' tab, find the 'Web Server' (80), and click the Globe icon. Then add /administrator"
144
+ echo " Username: $ADMIN_USER "
145
+ echo " Password: $ADMIN_PASS "
146
+ echo " "
147
+ echo " phpMyAdmin Login:"
148
+ echo " URL: Open the 'Web Server' port and add /phpmyadmin"
149
+ echo " Username: $DB_USER "
150
+ echo " Password: $DB_PASS "
151
+ echo " "
152
+ echo " Cypress E2E Testing:"
153
+ echo " Run interactive tests: npx cypress open"
154
+ echo " Run headless tests: npx cypress run"
155
+ echo " "
156
+ echo " Xdebug for PHP Debugging:"
157
+ echo " Xdebug is pre-configured on port 9003. Use the 'Run and Debug' panel in VS Code and select 'Listen for Xdebug'."
158
+ echo " ---"
159
+ } | tee " $DETAILS_FILE "
0 commit comments