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