From 81c13664a225bbd063c708e5590733c8b7ce253f Mon Sep 17 00:00:00 2001 From: Ralf Lang Date: Fri, 27 Mar 2026 09:50:42 +0100 Subject: [PATCH 1/5] ci: add Ubuntu 24.04 LAMP integration test workflow --- .../ubuntu-2404-lamp-integration-test.yml | 259 ++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 .github/workflows/ubuntu-2404-lamp-integration-test.yml diff --git a/.github/workflows/ubuntu-2404-lamp-integration-test.yml b/.github/workflows/ubuntu-2404-lamp-integration-test.yml new file mode 100644 index 0000000..20752e4 --- /dev/null +++ b/.github/workflows/ubuntu-2404-lamp-integration-test.yml @@ -0,0 +1,259 @@ +name: Ubuntu 24.04 LAMP Integration Test + +on: + workflow_dispatch: + schedule: + - cron: "23 2 * * *" + +jobs: + lamp-integration: + runs-on: ubuntu-24.04 + timeout-minutes: 20 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install PHP 8.4 and prerequisites + run: | + set -ex + + # Add PHP PPA + sudo add-apt-repository ppa:ondrej/php -y + sudo apt update + + # Install PHP 8.4 with required extensions + sudo apt install -y \ + php8.4 \ + php8.4-cli \ + php8.4-fpm \ + php8.4-mysql \ + php8.4-xml \ + php8.4-mbstring \ + php8.4-curl \ + php8.4-gd \ + php8.4-intl \ + php8.4-bcmath \ + php8.4-zip \ + mysql-server \ + apache2 \ + composer + + # Verify installations + php -v + composer --version + apache2 -v + + - name: Configure MySQL database + run: | + set -ex + + # Stop MySQL + sudo systemctl stop mysql + + # Recreate data directory with correct permissions + sudo rm -rf /var/lib/mysql + sudo mkdir -p /var/lib/mysql + sudo chown -R mysql:mysql /var/lib/mysql + sudo chmod 750 /var/lib/mysql + + # Initialize MySQL + sudo mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql + + # Start MySQL + sudo systemctl start mysql + sleep 5 + + # Create test database + sudo mysql -u root << 'EOF' + CREATE DATABASE horde_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + CREATE USER 'horde'@'localhost' IDENTIFIED BY 'test123'; + GRANT ALL PRIVILEGES ON horde_test.* TO 'horde'@'localhost'; + FLUSH PRIVILEGES; + EOF + + # Verify + sudo mysql -u root -e "SHOW DATABASES LIKE 'horde_test';" + + - name: Download hordectl + run: | + set -ex + + # Download from org variable + PHAR_URL="${{ vars.HORDECTL_PHAR_URL }}" + + curl -L "$PHAR_URL" -o hordectl.phar + chmod +x hordectl.phar + sudo mv hordectl.phar /usr/local/bin/hordectl + + # Verify installation + hordectl version + + - name: Install bundle to /var/www/horde + run: | + set -ex + + # Copy checked-out bundle to production path + sudo mkdir -p /var/www/horde + sudo cp -r $GITHUB_WORKSPACE/. /var/www/horde/ + + # Install composer dependencies + cd /var/www/horde + sudo composer install --no-dev --no-interaction --prefer-dist + + # Set ownership for Apache + sudo chown -R www-data:www-data /var/www/horde + sudo chmod -R 755 /var/www/horde + + # Ensure var directories are writable + sudo chmod -R 775 /var/www/horde/var + + # Verify installation structure + test -f /var/www/horde/composer.json || exit 1 + test -d /var/www/horde/vendor || exit 1 + test -d /var/www/horde/vendor/horde || exit 1 + test -d /var/www/horde/web || exit 1 + test -f /var/www/horde/web/index.php || exit 1 + + echo "✅ Bundle installation validated" + + - name: Register bundle as hordectl target + run: | + set -ex + + # Add production path as target + sudo hordectl target add ci-test --type=local --path=/var/www/horde + + # Set as current target + sudo hordectl target use ci-test + + # Verify target + sudo hordectl target current + + - name: Configure Apache web server + run: | + set -ex + + # Start PHP-FPM + sudo systemctl start php8.4-fpm + sudo systemctl enable php8.4-fpm + + # Create vhost config + sudo tee /etc/apache2/sites-available/horde.conf > /dev/null << 'EOF' + + ServerName localhost + DocumentRoot /var/www/horde/web + + + Options -Indexes +FollowSymLinks + AllowOverride All + Require all granted + + + SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost" + + + + ErrorLog ${APACHE_LOG_DIR}/horde-test-error.log + CustomLog ${APACHE_LOG_DIR}/horde-test-access.log combined + + EOF + + # Enable modules + sudo a2enmod rewrite + sudo a2enmod proxy_fcgi + sudo a2enmod setenvif + + # Enable site + sudo a2dissite 000-default + sudo a2ensite horde + + # Restart Apache + sudo systemctl restart apache2 + + # Verify services + sudo systemctl status php8.4-fpm --no-pager + sudo systemctl status apache2 --no-pager + + - name: Activate Horde installation + run: | + set -ex + + sudo hordectl activate + sudo chown -R www-data:www-data /var/www/horde/var + + - name: Configure database connection + run: | + set -ex + + sudo hordectl configure database \ + --type=mysql \ + --host=localhost \ + --port=3306 \ + --username=horde \ + --password=test123 \ + --database=horde_test \ + --charset=utf8mb4 + + - name: Configure session handler + run: | + set -ex + + sudo hordectl configure session --cookie-domain='' --type=builtin + + - name: Configure authentication + run: | + set -ex + + sudo hordectl configure auth --driver=sql --encryption=ssha + + sudo -u www-data /var/www/horde/vendor/bin/horde-db-migrate up + + - name: Configure admin secret for API + run: | + set -ex + + sudo hordectl target update ci-test --endpoint=http://localhost + sudo hordectl secret generate + + - name: Create test user + run: | + set -ex + + sudo hordectl create user --username=administrator --password=admin123 + + - name: Run subsystem tests + run: | + set -ex + + sudo hordectl test db + sudo hordectl test session + sudo hordectl test auth + + - name: Verify web accessibility + run: | + set -ex + + # Test Apache is serving the site + curl -f http://localhost/ || exit 1 + + # Check for Horde in response + curl -s http://localhost/ | grep -i "horde" || echo "⚠️ Horde string not found in response" + + echo "✅ Web server responding" + + - name: Upload logs on failure + if: failure() + run: | + set +e + echo "=== Apache Error Log ===" + sudo cat /var/log/apache2/horde-test-error.log + echo "" + echo "=== Apache Access Log ===" + sudo cat /var/log/apache2/horde-test-access.log + echo "" + echo "=== PHP Error Log ===" + sudo cat /var/log/php8.4-fpm.log || echo "No FPM log" + echo "" + echo "=== Horde Config ===" + sudo cat /var/www/horde/var/config/horde/conf.php || echo "No conf.php" From f6098a0e547449f63555edcb01df7dcbe0a3d7ee Mon Sep 17 00:00:00 2001 From: Ralf Lang Date: Fri, 27 Mar 2026 10:00:51 +0100 Subject: [PATCH 2/5] ci: use apache vhost fixture with rewrite rules for API auth --- .../ubuntu-2404-lamp-integration-test.yml | 22 ++---------- test/fixtures/apache-horde.conf | 35 +++++++++++++++++++ 2 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 test/fixtures/apache-horde.conf diff --git a/.github/workflows/ubuntu-2404-lamp-integration-test.yml b/.github/workflows/ubuntu-2404-lamp-integration-test.yml index 20752e4..4f7f554 100644 --- a/.github/workflows/ubuntu-2404-lamp-integration-test.yml +++ b/.github/workflows/ubuntu-2404-lamp-integration-test.yml @@ -138,26 +138,8 @@ jobs: sudo systemctl start php8.4-fpm sudo systemctl enable php8.4-fpm - # Create vhost config - sudo tee /etc/apache2/sites-available/horde.conf > /dev/null << 'EOF' - - ServerName localhost - DocumentRoot /var/www/horde/web - - - Options -Indexes +FollowSymLinks - AllowOverride All - Require all granted - - - SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost" - - - - ErrorLog ${APACHE_LOG_DIR}/horde-test-error.log - CustomLog ${APACHE_LOG_DIR}/horde-test-access.log combined - - EOF + # Copy vhost config + sudo cp test/fixtures/apache-horde.conf /etc/apache2/sites-available/horde.conf # Enable modules sudo a2enmod rewrite diff --git a/test/fixtures/apache-horde.conf b/test/fixtures/apache-horde.conf new file mode 100644 index 0000000..9c4ee5d --- /dev/null +++ b/test/fixtures/apache-horde.conf @@ -0,0 +1,35 @@ + + ServerName localhost + DocumentRoot /var/www/horde/web + + ErrorLog ${APACHE_LOG_DIR}/horde-test-error.log + CustomLog ${APACHE_LOG_DIR}/horde-test-access.log combined + + + Options -Indexes +FollowSymLinks + AllowOverride None + Require all granted + + # PHP-FPM handler INSIDE the Directory block + + SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost" + + + RewriteEngine On + RewriteBase / + + # Pass auth header -- both original and redirect-prefixed + RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + RewriteRule .* - [env=REDIRECT_HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + RewriteRule ^rpc\.php$ horde/rpc.php [QSA,L] + + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ horde/rampage.php [QSA,L] + + + + Require all denied + + From 3a63ed6285a591b6c66279c5ff46054767f2a980 Mon Sep 17 00:00:00 2001 From: Ralf Lang Date: Fri, 27 Mar 2026 13:10:36 +0100 Subject: [PATCH 3/5] ci: prototype of a LEPP equivalent of the apache workflow --- .../ubuntu-2404-lepp-integration-test.yml | 236 ++++++++++++++++++ test/fixtures/nginx-horde.conf | 35 +++ 2 files changed, 271 insertions(+) create mode 100644 .github/workflows/ubuntu-2404-lepp-integration-test.yml create mode 100644 test/fixtures/nginx-horde.conf diff --git a/.github/workflows/ubuntu-2404-lepp-integration-test.yml b/.github/workflows/ubuntu-2404-lepp-integration-test.yml new file mode 100644 index 0000000..fc04880 --- /dev/null +++ b/.github/workflows/ubuntu-2404-lepp-integration-test.yml @@ -0,0 +1,236 @@ +name: Ubuntu 24.04 LEPP Integration Test + +on: + workflow_dispatch: + schedule: + - cron: "27 2 * * *" + +jobs: + lepp-integration: + runs-on: ubuntu-24.04 + timeout-minutes: 20 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install PHP 8.4 and prerequisites + run: | + set -ex + + # Add PHP PPA + sudo add-apt-repository ppa:ondrej/php -y + sudo apt update + + # Install PHP 8.4 with required extensions + sudo apt install -y \ + php8.4 \ + php8.4-cli \ + php8.4-fpm \ + php8.4-pgsql \ + php8.4-xml \ + php8.4-mbstring \ + php8.4-curl \ + php8.4-gd \ + php8.4-intl \ + php8.4-bcmath \ + php8.4-zip \ + postgresql \ + postgresql-contrib \ + nginx \ + composer + + # Verify installations + php -v + composer --version + nginx -v + psql --version + + - name: Configure PostgreSQL database + run: | + set -ex + + # Start PostgreSQL + sudo systemctl start postgresql + sudo systemctl enable postgresql + + # Create test database and user + sudo -u postgres psql << 'EOF' + CREATE DATABASE horde_test WITH ENCODING 'UTF8' LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8'; + CREATE USER horde WITH PASSWORD 'test123'; + GRANT ALL PRIVILEGES ON DATABASE horde_test TO horde; + \c horde_test + GRANT ALL ON SCHEMA public TO horde; + EOF + + # Verify + sudo -u postgres psql -c "\l horde_test" + + - name: Download hordectl + run: | + set -ex + + # Download from org variable + PHAR_URL="${{ vars.HORDECTL_PHAR_URL }}" + + curl -L "$PHAR_URL" -o hordectl.phar + chmod +x hordectl.phar + sudo mv hordectl.phar /usr/local/bin/hordectl + + # Verify installation + hordectl version + + - name: Install bundle to /var/www/horde + run: | + set -ex + + # Copy checked-out bundle to production path + sudo mkdir -p /var/www/horde + sudo cp -r $GITHUB_WORKSPACE/. /var/www/horde/ + + # Install composer dependencies + cd /var/www/horde + sudo COMPOSER_ALLOW_SUPERUSER=1 composer config minimum-stability dev + sudo COMPOSER_ALLOW_SUPERUSER=1 composer install --no-interaction --prefer-dist + + # Set ownership for Nginx + sudo chown -R www-data:www-data /var/www/horde + + # Set correct permissions: directories 755, files 644 + sudo find /var/www/horde -type d -exec chmod 755 {} \; + sudo find /var/www/horde -type f -exec chmod 644 {} \; + + # Make scripts executable + sudo chmod +x /var/www/horde/vendor/bin/* + + # Ensure var directories are writable + sudo chmod -R 775 /var/www/horde/var + + # Verify installation structure + test -f /var/www/horde/composer.json || exit 1 + test -d /var/www/horde/vendor || exit 1 + test -d /var/www/horde/vendor/horde || exit 1 + test -d /var/www/horde/web || exit 1 + test -f /var/www/horde/web/index.php || exit 1 + + echo "✅ Bundle installation validated" + + - name: Register bundle as hordectl target + run: | + set -ex + + # Add production path as target + sudo hordectl target add ci-test --type=local --path=/var/www/horde + + # Set as current target + sudo hordectl target use ci-test + + # Verify target + sudo hordectl target current + + - name: Configure Nginx web server + run: | + set -ex + + # Start PHP-FPM + sudo systemctl start php8.4-fpm + sudo systemctl enable php8.4-fpm + + # Copy nginx config + sudo cp test/fixtures/nginx-horde.conf /etc/nginx/sites-available/horde.conf + + # Enable site + sudo rm -f /etc/nginx/sites-enabled/default + sudo ln -s /etc/nginx/sites-available/horde.conf /etc/nginx/sites-enabled/horde.conf + + # Test config and restart + sudo nginx -t + sudo systemctl restart nginx + + # Verify services + sudo systemctl status php8.4-fpm --no-pager + sudo systemctl status nginx --no-pager + + - name: Activate Horde installation + run: | + set -ex + + sudo hordectl activate + sudo chown -R www-data:www-data /var/www/horde/var + + - name: Configure database connection + run: | + set -ex + + sudo hordectl configure database \ + --type=pgsql \ + --host=localhost \ + --port=5432 \ + --username=horde \ + --password=test123 \ + --database=horde_test \ + --charset=utf8 + + - name: Configure session handler + run: | + set -ex + + sudo hordectl configure session --cookie-domain='' --type=builtin + + - name: Configure authentication + run: | + set -ex + + sudo hordectl configure auth --driver=sql --encryption=ssha + + cd /var/www/horde + sudo -u www-data vendor/bin/horde-db-migrate up + + - name: Configure admin secret for API + run: | + set -ex + + sudo hordectl target update ci-test --endpoint=http://localhost + sudo hordectl secret generate + + - name: Create test user + run: | + set -ex + + sudo hordectl create user --username=administrator --password=admin123 + + - name: Run subsystem tests + run: | + set -ex + + sudo hordectl test db + sudo hordectl test session + sudo hordectl test auth + + - name: Verify web accessibility + run: | + set -ex + + # Test Nginx is serving the site + curl -f http://localhost/ || exit 1 + + # Check for Horde in response + curl -s http://localhost/ | grep -i "horde" || echo "⚠️ Horde string not found in response" + + echo "✅ Web server responding" + + - name: Upload logs on failure + if: failure() + run: | + set +e + echo "=== Nginx Error Log ===" + sudo cat /var/log/nginx/horde-test-error.log + echo "" + echo "=== Nginx Access Log ===" + sudo cat /var/log/nginx/horde-test-access.log + echo "" + echo "=== PHP Error Log ===" + sudo cat /var/log/php8.4-fpm.log || echo "No FPM log" + echo "" + echo "=== Horde Config ===" + sudo cat /var/www/horde/var/config/horde/conf.php || echo "No conf.php" diff --git a/test/fixtures/nginx-horde.conf b/test/fixtures/nginx-horde.conf new file mode 100644 index 0000000..3234d35 --- /dev/null +++ b/test/fixtures/nginx-horde.conf @@ -0,0 +1,35 @@ +server { + listen 80; + server_name localhost; + root /var/www/horde/web; + index index.php; + + access_log /var/log/nginx/horde-test-access.log; + error_log /var/log/nginx/horde-test-error.log; + + location / { + try_files $uri $uri/ /horde/rampage.php?$query_string; + } + + location ~ ^/rpc\.php$ { + rewrite ^/rpc\.php$ /horde/rpc.php last; + } + + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/run/php/php8.4-fpm.sock; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + + # Pass Authorization header + fastcgi_param HTTP_AUTHORIZATION $http_authorization; + } + + location ~ /\.(ht|git) { + deny all; + } + + location ~ /(composer|package)\.json$ { + deny all; + } +} From 6a4bf0736939bdf4ce0f03e04ad5790651a39b1e Mon Sep 17 00:00:00 2001 From: Ralf Lang Date: Sat, 28 Mar 2026 06:50:06 +0100 Subject: [PATCH 4/5] ci: Delete older workflows --- .github/workflows/php.yml | 61 ------------------------------ .github/workflows/php83.yml | 75 ------------------------------------- 2 files changed, 136 deletions(-) delete mode 100644 .github/workflows/php.yml delete mode 100644 .github/workflows/php83.yml diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml deleted file mode 100644 index 11695c4..0000000 --- a/.github/workflows/php.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: PHP Composer install tests - Ubuntu builtin PHP - -on: - push: - branches: [ "FRAMEWORK_6_0" ] - pull_request: - branches: [ "FRAMEWORK_6_0" ] - schedule: - - cron: "0 0 */2 * *" - workflow_dispatch: - -permissions: - contents: read - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - name: Validate composer.json and composer.lock - run: composer validate --strict - - - name: Print PHP verson used for transparency - run: which php; php --version - - - name: Cache Composer packages - id: composer-cache - uses: actions/cache@v3 - with: - path: vendor - key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} - restore-keys: | - ${{ runner.os }}-php- - - - name: Install dependencies for composer.json as-is - run: composer install --prefer-dist --no-progress - - name: Install passwd app - run: composer require horde/passwd --prefer-dist --no-progress - - name: Install content tagger app - run: composer require horde/content --prefer-dist --no-progress - - name: Install timeobjects app - run: composer require horde/timeobjects --prefer-dist --no-progress - - name: Install mnemo notes app - run: composer require horde/mnemo --prefer-dist --no-progress - - name: Install ingo mail filter app - run: composer require horde/ingo --prefer-dist --no-progress - - name: Install turba addressbook app - run: composer require horde/turba --prefer-dist --no-progress - - name: Install kronolith calendar app - run: composer require horde/kronolith --prefer-dist --no-progress - - name: Install whups ticketing app - run: composer require horde/kronolith --prefer-dist --no-progress - - # Add a test script to composer.json, for instance: "test": "vendor/bin/phpunit" - # Docs: https://getcomposer.org/doc/articles/scripts.md - - # - name: Run test suite - # run: composer run-script test diff --git a/.github/workflows/php83.yml b/.github/workflows/php83.yml deleted file mode 100644 index d750d60..0000000 --- a/.github/workflows/php83.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: PHP Composer install tests - Ubuntu PPA PHP 8.3 - -on: - push: - branches: [ "FRAMEWORK_6_0" ] - pull_request: - branches: [ "FRAMEWORK_6_0" ] - schedule: - - cron: "0 0 */2 * *" - workflow_dispatch: - -permissions: - contents: read - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - name: Upgrade to PHP 8.3 from PPA and print PHP version - run: | - sudo add-apt-repository ppa:ondrej/php - sudo apt -o Dpkg::Progress-Fancy=0 update - sudo apt -o Dpkg::Progress-Fancy=0 install php8.3 php8.3-dom php8.3-pdo php8.3-sqlite3 php8.3-mysql php8.3-curl php8.3-intl php8.3-mbstring php8.3-cli php8.3-fpm - sudo update-alternatives --set php /usr/bin/php8.3 - which php - php --version - - - name: Validate composer.json and composer.lock - run: composer validate --strict - - - name: Cache Composer packages - id: composer-cache - uses: actions/cache@v3 - with: - path: vendor - key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} - restore-keys: | - ${{ runner.os }}-php- - - - name: Install dependencies for composer.json as-is - run: composer install --prefer-dist --no-progress - - name: Install passwd app - run: composer require horde/passwd --prefer-dist --no-progress - - name: Install content tagger app - run: composer require horde/content --prefer-dist --no-progress - - name: Install timeobjects app - run: composer require horde/timeobjects --prefer-dist --no-progress - - name: Install mnemo notes app - run: composer require horde/mnemo --prefer-dist --no-progress - - name: Install ingo mail filter app - run: composer require horde/ingo --prefer-dist --no-progress - - name: Install turba addressbook app - run: composer require horde/turba --prefer-dist --no-progress - - name: Install kronolith calendar app - run: composer require horde/kronolith --prefer-dist --no-progress - - name: Install whups ticketing app - run: composer require horde/whups --prefer-dist --no-progress - - name: Install trean bookmarks app - run: composer require horde/trean --prefer-dist --no-progress - - name: Install chora version control system viewer - run: composer require horde/chora --prefer-dist --no-progress - - name: Install jonah rss feed app - run: composer require horde/jonah --prefer-dist --no-progress - - name: Install trean bookmarks app - run: composer require horde/trean --prefer-dist --no-progress - - # Add a test script to composer.json, for instance: "test": "vendor/bin/phpunit" - # Docs: https://getcomposer.org/doc/articles/scripts.md - - # - name: Run test suite - # run: composer run-script test From e9d517d947a20143731454e4f1f6d879f2ba8f15 Mon Sep 17 00:00:00 2001 From: Ralf Lang Date: Fri, 3 Apr 2026 06:59:09 +0200 Subject: [PATCH 5/5] doc: Update README --- .horde.yml | 34 ++++++++++++++++++++++++++++++++++ README.md | 25 ++++++++++++++++++------- composer.json | 10 ++++------ 3 files changed, 56 insertions(+), 13 deletions(-) diff --git a/.horde.yml b/.horde.yml index e69de29..42c5da3 100644 --- a/.horde.yml +++ b/.horde.yml @@ -0,0 +1,34 @@ +--- +id: bundle +name: Horde Bundle +full: Horde Bundle deployment project +description: >- + A base project for a Horde installation. Provides structure and tooling + for deploying a complete Horde suite via Composer. +list: horde +type: project +authors: + - + name: Ralf Lang + user: rlang + email: ralf.lang@ralf-lang.de + active: true + role: lead +version: + release: 1.1.0 + api: 1.0.0 +state: + release: stable + api: stable +license: + identifier: GPL-3.0-only + uri: https://www.gnu.org/licenses/gpl-3.0.html +dependencies: + required: + php: ^8.1 + composer: + horde/horde-installer-plugin: ^3 + horde/horde: ^6 + horde/routes: ^3 + hordectl: ^1 +vendor: horde diff --git a/README.md b/README.md index ca6c647..3f02fa2 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,22 @@ -# horde-deployment +# horde/bundle A composer deployed horde suite Versions: -- FRAMEWORK_6_0 A Horde Base with versioned/tagged releases to the FRAMEWORK_6 branch (currently alpha) -- FRAMEWORK_6_0_GROUPWARE A setup with with versioned/tagged releases. (currently alpha) Contains ansel (photo), content (tagger), imp (webmail), ingo (mail filters), kronolith (calendar), mnemo (notes), nag (tasks), passwd (password changing), timeobjects (misc data sources), turba (contacts) +- FRAMEWORK_6_0 A Horde Base with versioned/tagged releases to the FRAMEWORK_6 branch (currently beta) ## Directory Structure - web/ dir contains web readable content, installed horde apps, javascript and themes - web/js contains links to all javascript exposed by horde-library or horde-application type composer packages - web/themes contains links to installed themes. Do NOT put them in web/horde/themes as they would get deleted on upgrade - - web/horde/static contains autogenerated, web-readable content like cached css. It will be lost on composer upgrades + - web/static contains autogenerated, web-readable content like cached css. It will be lost on composer upgrades - vendor/ dir is managed by composer. It will contain libraries and tools - presets/ dir contains configs to kickstart your horde apps right on installation or update. These files will be copied into the var/config/$app folder but changes there will not be copied back. Warning: At the current state of the composer2 installer, you will lose your web/$app/config files on install or upgrade - var/ contains some default locations for variable data which you might want to backup - - var/config/ contains persistent configuration set by the administrator or automated tools. These will be symlinked into the traditional web/$app/config/ location. Any custom files or modifications directly stored in web/$app/config are lost on package upgrades. + - var/config/ contains persistent configuration set by the administrator or automated tools. These will be symlinked to vendor/horde/$app/config/ location. + Any custom files or modifications directly stored in vendor/horde/$app/config are lost on package upgrades. - var/cache/ for any filesystem based cache files - var/log/ default location for any logs you might configure (horde log, sync logs, ...) - var/sessions/ default location to store session data (you should rather use either PHP's builtin or a DHT) @@ -26,8 +26,8 @@ Versions: ## usage ``` -git clone https://github.com/maintaina-com/horde-deployment.git horde -cd horde +git clone https://github.com/horde/bundle.git bundle +cd bundle composer install ``` Then copy the main horde config file to @@ -37,6 +37,17 @@ For CI/CD scenarios, best fork and customize your deployment ## Customization +### Alpha and beta support + +Not all horde apps have already been released as beta quality apps yet. +You must specifically allow installing alpha quality apps and libraries if you want to use them. + +Adding alpha quality apps + +``` +composer config minimum-stability alpha +``` + ### Adding official horde apps Install applications by requiring them on the commandline in the deployment dir diff --git a/composer.json b/composer.json index 972bed2..4473e5c 100644 --- a/composer.json +++ b/composer.json @@ -4,13 +4,10 @@ "type": "project", "require": { "composer-plugin-api": "^2.2", - "horde/horde-installer-plugin": "^3 || ^2.5.1 || dev-FRAMEWORK_6_0 || dev-master", + "horde/horde-installer-plugin": "^3 || dev-FRAMEWORK_6_0", "horde/horde": "^6 || dev-FRAMEWORK_6_0", "horde/routes": "^3 || dev-FRAMEWORK_6_0", - "horde/hordectl": "^1 || dev-FRAMEWORK_6_0 || dev-master" - }, - "require-dev": { - "horde/test": "^3 || dev-FRAMEWORK_6_0 || dev-master" + "horde/hordectl": "^1 || dev-FRAMEWORK_6_0" }, "license": "GPL-3.0-only", "authors": [ @@ -19,11 +16,12 @@ "email": "ralf.lang@ralf-lang.de" } ], - "minimum-stability": "dev", + "minimum-stability": "alpha", "prefer-stable": true, "extra": { "installer-types": [ "horde-library", + "horde-theme", "horde-application" ] },