From 7aaaeea4c8adddc4e3412929e49dea46c8411308 Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 11:33:19 +0200 Subject: [PATCH 01/14] run froxlor stack and its phpunit tests in github actions Signed-off-by: Michael Kaufmann --- .github/workflows/run-unit-tests.yml | 75 ++++++++++++++++++++++++++++ docker-compose.ci.yml | 38 ++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 .github/workflows/run-unit-tests.yml create mode 100644 docker-compose.ci.yml diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml new file mode 100644 index 0000000..b7cd3ff --- /dev/null +++ b/.github/workflows/run-unit-tests.yml @@ -0,0 +1,75 @@ +name: Framework Package Tests + +on: + push: + branches: [main, "feature/**"] + pull_request: + +jobs: + core-tests: + runs-on: ubuntu-latest + timeout-minutes: 30 + + steps: + - name: Checkout framework + uses: actions/checkout@v4 + with: + path: framework + + - name: Checkout froxlor app + uses: actions/checkout@v4 + with: + repository: froxlor/froxlor + path: froxlor + + - name: Prepare Laravel env + working-directory: froxlor + run: | + cp .env.example .env + { + echo "APP_ENV=testing" + echo "APP_KEY=base64:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + echo "APP_DEBUG=true" + echo "APP_URL=http://localhost" + echo "DB_CONNECTION=mysql" + echo "DB_HOST=db" + echo "DB_PORT=3306" + echo "DB_DATABASE=froxlor" + echo "DB_USERNAME=froxlor" + echo "DB_PASSWORD=froxlor" + echo "CACHE_STORE=array" + echo "QUEUE_CONNECTION=sync" + echo "SESSION_DRIVER=array" + echo "MAIL_MAILER=array" + echo "DEV_NODE=local" + echo "DEV_EMAIL=admin@froxlor.test" + echo "DEV_FIRST_NAME=Admin" + echo "DEV_LAST_NAME=User" + echo "DEV_PASSWORD=secret-password" + echo "DEV_SEED_DEVELOPMENT_DATA=true" + } >> .env + + - name: Use local framework checkout + working-directory: froxlor + run: | + php -r '$file = "composer.json"; $json = json_decode(file_get_contents($file), true, 512, JSON_THROW_ON_ERROR); $json["repositories"] = [["name" => "framework", "type" => "path", "url" => "../framework", "options" => ["reference" => "config", "symlink" => true]]]; file_put_contents($file, json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL);' + + - name: Start docker stack + run: docker compose -f framework/docker-compose.ci.yml up -d + + - name: Install dependencies + run: docker compose -f framework/docker-compose.ci.yml exec -T froxlor composer update froxlor/framework --with-dependencies --working-dir=/var/www/html/froxlor --no-interaction --prefer-dist + + - name: Fresh database with seeders + run: docker compose -f framework/docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan migrate:fresh --seed --force + + - name: Run tests + run: docker compose -f framework/docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan test + + - name: Docker logs on failure + if: failure() + run: docker compose -f framework/docker-compose.ci.yml logs --no-color + + - name: Stop docker stack + if: always() + run: docker compose -f framework/docker-compose.ci.yml down -v --remove-orphans diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml new file mode 100644 index 0000000..d9a5fcb --- /dev/null +++ b/docker-compose.ci.yml @@ -0,0 +1,38 @@ +services: + froxlor: + image: hub.froxlor.io/froxlor/froxlor:latest + privileged: true + pid: "host" + depends_on: + - db + - redis + env_file: + - ../froxlor/.env + volumes: + - ../froxlor:/var/www/html/froxlor + - ../framework:/var/www/html/framework + - environments:/srv/environments + networks: + - internal + + db: + image: mariadb:latest + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: froxlor + MYSQL_USER: froxlor + MYSQL_PASSWORD: froxlor + networks: + - internal + + redis: + image: redis:latest + networks: + - internal + +volumes: + environments: + +networks: + internal: + driver: bridge From a88d638507d8c0a2dcdc1fe126c4460e6b5dd5ce Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 11:41:09 +0200 Subject: [PATCH 02/14] correct paths after checkout, update checkout-action (node 24) Signed-off-by: Michael Kaufmann --- .github/workflows/run-unit-tests.yml | 18 ++++++++---------- docker-compose.ci.yml | 6 +++--- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index b7cd3ff..e4db291 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -12,12 +12,10 @@ jobs: steps: - name: Checkout framework - uses: actions/checkout@v4 - with: - path: framework + uses: actions/checkout@v7 - name: Checkout froxlor app - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: repository: froxlor/froxlor path: froxlor @@ -55,21 +53,21 @@ jobs: php -r '$file = "composer.json"; $json = json_decode(file_get_contents($file), true, 512, JSON_THROW_ON_ERROR); $json["repositories"] = [["name" => "framework", "type" => "path", "url" => "../framework", "options" => ["reference" => "config", "symlink" => true]]]; file_put_contents($file, json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL);' - name: Start docker stack - run: docker compose -f framework/docker-compose.ci.yml up -d + run: docker compose -f docker-compose.ci.yml up -d - name: Install dependencies - run: docker compose -f framework/docker-compose.ci.yml exec -T froxlor composer update froxlor/framework --with-dependencies --working-dir=/var/www/html/froxlor --no-interaction --prefer-dist + run: docker compose -f docker-compose.ci.yml exec -T froxlor composer update froxlor/framework --with-dependencies --working-dir=/var/www/html/froxlor --no-interaction --prefer-dist - name: Fresh database with seeders - run: docker compose -f framework/docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan migrate:fresh --seed --force + run: docker compose -f docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan migrate:fresh --seed --force - name: Run tests - run: docker compose -f framework/docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan test + run: docker compose -f docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan test - name: Docker logs on failure if: failure() - run: docker compose -f framework/docker-compose.ci.yml logs --no-color + run: docker compose -f docker-compose.ci.yml logs --no-color - name: Stop docker stack if: always() - run: docker compose -f framework/docker-compose.ci.yml down -v --remove-orphans + run: docker compose -f docker-compose.ci.yml down -v --remove-orphans diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index d9a5fcb..85401db 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -7,10 +7,10 @@ services: - db - redis env_file: - - ../froxlor/.env + - ./froxlor/.env volumes: - - ../froxlor:/var/www/html/froxlor - - ../framework:/var/www/html/framework + - ./froxlor:/var/www/html/froxlor + - ./:/var/www/html/framework - environments:/srv/environments networks: - internal From 259167d88b17649528197850ff0cf4dce5877a76 Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 11:47:45 +0200 Subject: [PATCH 03/14] correct paths after checkout, part 2 Signed-off-by: Michael Kaufmann --- .github/workflows/run-unit-tests.yml | 2 +- docker-compose.ci.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index e4db291..fd7406c 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -18,7 +18,7 @@ jobs: uses: actions/checkout@v7 with: repository: froxlor/froxlor - path: froxlor + path: ../froxlor - name: Prepare Laravel env working-directory: froxlor diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index 85401db..4f32d34 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -9,7 +9,7 @@ services: env_file: - ./froxlor/.env volumes: - - ./froxlor:/var/www/html/froxlor + - ../froxlor:/var/www/html/froxlor - ./:/var/www/html/framework - environments:/srv/environments networks: From 96c4289af7437bc5abe4fec4e03ec4f4d966823c Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 11:54:34 +0200 Subject: [PATCH 04/14] correct paths after checkout, part 3 Signed-off-by: Michael Kaufmann --- .github/workflows/run-unit-tests.yml | 10 +++++++++- docker-compose.ci.yml | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index fd7406c..5e07602 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -13,12 +13,14 @@ jobs: steps: - name: Checkout framework uses: actions/checkout@v7 + with: + path: framework - name: Checkout froxlor app uses: actions/checkout@v7 with: repository: froxlor/froxlor - path: ../froxlor + path: froxlor - name: Prepare Laravel env working-directory: froxlor @@ -53,21 +55,27 @@ jobs: php -r '$file = "composer.json"; $json = json_decode(file_get_contents($file), true, 512, JSON_THROW_ON_ERROR); $json["repositories"] = [["name" => "framework", "type" => "path", "url" => "../framework", "options" => ["reference" => "config", "symlink" => true]]]; file_put_contents($file, json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL);' - name: Start docker stack + working-directory: framework run: docker compose -f docker-compose.ci.yml up -d - name: Install dependencies + working-directory: framework run: docker compose -f docker-compose.ci.yml exec -T froxlor composer update froxlor/framework --with-dependencies --working-dir=/var/www/html/froxlor --no-interaction --prefer-dist - name: Fresh database with seeders + working-directory: framework run: docker compose -f docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan migrate:fresh --seed --force - name: Run tests + working-directory: framework run: docker compose -f docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan test - name: Docker logs on failure + working-directory: framework if: failure() run: docker compose -f docker-compose.ci.yml logs --no-color - name: Stop docker stack + working-directory: framework if: always() run: docker compose -f docker-compose.ci.yml down -v --remove-orphans diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index 4f32d34..e1c3c03 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -9,8 +9,8 @@ services: env_file: - ./froxlor/.env volumes: - - ../froxlor:/var/www/html/froxlor - - ./:/var/www/html/framework + - ./froxlor:/var/www/html/froxlor + - ./framework:/var/www/html/framework - environments:/srv/environments networks: - internal From 090aeaa257319ca16a48c6c0722a1771c9e644cb Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 11:55:38 +0200 Subject: [PATCH 05/14] correct paths after checkout, part 4 Signed-off-by: Michael Kaufmann --- docker-compose.ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index e1c3c03..a3f4586 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -7,10 +7,10 @@ services: - db - redis env_file: - - ./froxlor/.env + - ../froxlor/.env volumes: - - ./froxlor:/var/www/html/froxlor - - ./framework:/var/www/html/framework + - ../froxlor:/var/www/html/froxlor + - ./:/var/www/html/framework - environments:/srv/environments networks: - internal From 0a062781e885df8b8d7e552e8abb051a0f7f4c96 Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 12:07:03 +0200 Subject: [PATCH 06/14] correct paths after checkout, part 5 Signed-off-by: Michael Kaufmann --- .github/workflows/run-unit-tests.yml | 10 ++++++++++ docker-compose.ci.yml | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index 5e07602..acaf135 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -9,6 +9,9 @@ jobs: core-tests: runs-on: ubuntu-latest timeout-minutes: 30 + env: + FROXLOR_APP_DIR: ${{ github.workspace }}/froxlor + FROXLOR_FRAMEWORK_DIR: ${{ github.workspace }}/framework steps: - name: Checkout framework @@ -54,6 +57,13 @@ jobs: run: | php -r '$file = "composer.json"; $json = json_decode(file_get_contents($file), true, 512, JSON_THROW_ON_ERROR); $json["repositories"] = [["name" => "framework", "type" => "path", "url" => "../framework", "options" => ["reference" => "config", "symlink" => true]]]; file_put_contents($file, json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL);' + - name: Verify CI paths + run: | + pwd + ls -la "$FROXLOR_APP_DIR" + test -f "$FROXLOR_APP_DIR/.env" + test -d "$FROXLOR_FRAMEWORK_DIR" + - name: Start docker stack working-directory: framework run: docker compose -f docker-compose.ci.yml up -d diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index a3f4586..4322c37 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -7,10 +7,10 @@ services: - db - redis env_file: - - ../froxlor/.env + - ${FROXLOR_APP_DIR:-../froxlor}/.env volumes: - - ../froxlor:/var/www/html/froxlor - - ./:/var/www/html/framework + - ${FROXLOR_APP_DIR:-../froxlor}:/var/www/html/froxlor + - ${FROXLOR_FRAMEWORK_DIR:-.}:/var/www/html/framework - environments:/srv/environments networks: - internal From 19fb702a970eef2f474afa7f5d80ffcfa60db965 Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 12:39:17 +0200 Subject: [PATCH 07/14] correct paths after checkout, part 6 Signed-off-by: Michael Kaufmann --- .github/workflows/run-unit-tests.yml | 31 ++++++++++++++-------------- docker-compose.ci.yml | 2 -- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index acaf135..6d7415f 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -25,6 +25,21 @@ jobs: repository: froxlor/froxlor path: froxlor + - name: Use local framework checkout + working-directory: froxlor + run: | + php -r '$file = "composer.json"; $json = json_decode(file_get_contents($file), true, 512, JSON_THROW_ON_ERROR); $json["repositories"] = [["name" => "framework", "type" => "path", "url" => "../framework", "options" => ["reference" => "config", "symlink" => true]]]; file_put_contents($file, json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL);' + + - name: Verify CI paths + run: | + pwd + ls -la "$FROXLOR_APP_DIR" + test -d "$FROXLOR_FRAMEWORK_DIR" + + - name: Start docker stack + working-directory: framework + run: docker compose -f docker-compose.ci.yml up -d + - name: Prepare Laravel env working-directory: froxlor run: | @@ -52,22 +67,6 @@ jobs: echo "DEV_SEED_DEVELOPMENT_DATA=true" } >> .env - - name: Use local framework checkout - working-directory: froxlor - run: | - php -r '$file = "composer.json"; $json = json_decode(file_get_contents($file), true, 512, JSON_THROW_ON_ERROR); $json["repositories"] = [["name" => "framework", "type" => "path", "url" => "../framework", "options" => ["reference" => "config", "symlink" => true]]]; file_put_contents($file, json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL);' - - - name: Verify CI paths - run: | - pwd - ls -la "$FROXLOR_APP_DIR" - test -f "$FROXLOR_APP_DIR/.env" - test -d "$FROXLOR_FRAMEWORK_DIR" - - - name: Start docker stack - working-directory: framework - run: docker compose -f docker-compose.ci.yml up -d - - name: Install dependencies working-directory: framework run: docker compose -f docker-compose.ci.yml exec -T froxlor composer update froxlor/framework --with-dependencies --working-dir=/var/www/html/froxlor --no-interaction --prefer-dist diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index 4322c37..86a8f8d 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -6,8 +6,6 @@ services: depends_on: - db - redis - env_file: - - ${FROXLOR_APP_DIR:-../froxlor}/.env volumes: - ${FROXLOR_APP_DIR:-../froxlor}:/var/www/html/froxlor - ${FROXLOR_FRAMEWORK_DIR:-.}:/var/www/html/framework From f35beebbfc8ad4ee22ec691174e05c036be51b5b Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 12:41:36 +0200 Subject: [PATCH 08/14] correct paths after checkout, part 7 Signed-off-by: Michael Kaufmann --- .github/workflows/run-unit-tests.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index 6d7415f..16ee037 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -69,7 +69,12 @@ jobs: - name: Install dependencies working-directory: framework - run: docker compose -f docker-compose.ci.yml exec -T froxlor composer update froxlor/framework --with-dependencies --working-dir=/var/www/html/froxlor --no-interaction --prefer-dist + run: | + docker compose -f docker-compose.ci.yml exec -T froxlor sh -lc ' + git config --global --add safe.directory /var/www/html/froxlor && + git config --global --add safe.directory /var/www/html/framework && + composer update --working-dir=/var/www/html/froxlor --no-interaction --prefer-dist + ' - name: Fresh database with seeders working-directory: framework From 07c2111777629916c42dddc15cc838b9b643ef0e Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 13:17:45 +0200 Subject: [PATCH 09/14] try to avoid error code 137 Signed-off-by: Michael Kaufmann --- .github/workflows/run-unit-tests.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index 16ee037..581e4db 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -36,6 +36,14 @@ jobs: ls -la "$FROXLOR_APP_DIR" test -d "$FROXLOR_FRAMEWORK_DIR" + - name: Add swap space + run: | + sudo fallocate -l 4G /swapfile + sudo chmod 600 /swapfile + sudo mkswap /swapfile + sudo swapon /swapfile + free -h + - name: Start docker stack working-directory: framework run: docker compose -f docker-compose.ci.yml up -d @@ -73,7 +81,7 @@ jobs: docker compose -f docker-compose.ci.yml exec -T froxlor sh -lc ' git config --global --add safe.directory /var/www/html/froxlor && git config --global --add safe.directory /var/www/html/framework && - composer update --working-dir=/var/www/html/froxlor --no-interaction --prefer-dist + composer update --working-dir=/var/www/html/froxlor --no-interaction --prefer-dist --no-progress ' - name: Fresh database with seeders From 5760fd53decbf0a06cc207c68b6e1b105398abfe Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 13:19:40 +0200 Subject: [PATCH 10/14] try to avoid error code 137, part 2 Signed-off-by: Michael Kaufmann --- .github/workflows/run-unit-tests.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index 581e4db..d077d39 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -38,10 +38,12 @@ jobs: - name: Add swap space run: | - sudo fallocate -l 4G /swapfile - sudo chmod 600 /swapfile - sudo mkswap /swapfile - sudo swapon /swapfile + sudo swapoff /mnt/froxlor-swapfile 2>/dev/null || true + sudo rm -f /mnt/froxlor-swapfile + sudo fallocate -l 4G /mnt/froxlor-swapfile + sudo chmod 600 /mnt/froxlor-swapfile + sudo mkswap /mnt/froxlor-swapfile + sudo swapon /mnt/froxlor-swapfile free -h - name: Start docker stack From cae771fa8757bb75434e279257c15d5157d412b0 Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 13:28:29 +0200 Subject: [PATCH 11/14] try to avoid error code 137, part 3 Signed-off-by: Michael Kaufmann --- .github/workflows/run-unit-tests.yml | 46 ++++++++++++++-------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index d077d39..2fad69d 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -25,26 +25,35 @@ jobs: repository: froxlor/froxlor path: froxlor + - name: Verify CI paths + run: | + pwd + test -d "$FROXLOR_APP_DIR" + test -d "$FROXLOR_FRAMEWORK_DIR" + - name: Use local framework checkout working-directory: froxlor run: | php -r '$file = "composer.json"; $json = json_decode(file_get_contents($file), true, 512, JSON_THROW_ON_ERROR); $json["repositories"] = [["name" => "framework", "type" => "path", "url" => "../framework", "options" => ["reference" => "config", "symlink" => true]]]; file_put_contents($file, json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL);' - - name: Verify CI paths - run: | - pwd - ls -la "$FROXLOR_APP_DIR" - test -d "$FROXLOR_FRAMEWORK_DIR" + - name: Install PHP + uses: shivammathur/setup-php@v2 + with: + php-version: "8.5" + coverage: none + tools: composer:v2 + + - name: Cache composer downloads + uses: actions/cache@v4 + with: + path: ~/.composer/cache/files + key: composer-${{ runner.os }}-${{ hashFiles('froxlor/composer.json', 'framework/composer.json') }} + restore-keys: composer-${{ runner.os }}- - - name: Add swap space + - name: Install dependencies + working-directory: froxlor run: | - sudo swapoff /mnt/froxlor-swapfile 2>/dev/null || true - sudo rm -f /mnt/froxlor-swapfile - sudo fallocate -l 4G /mnt/froxlor-swapfile - sudo chmod 600 /mnt/froxlor-swapfile - sudo mkswap /mnt/froxlor-swapfile - sudo swapon /mnt/froxlor-swapfile - free -h + composer update --no-interaction --prefer-dist --no-progress - name: Start docker stack working-directory: framework @@ -77,22 +86,13 @@ jobs: echo "DEV_SEED_DEVELOPMENT_DATA=true" } >> .env - - name: Install dependencies - working-directory: framework - run: | - docker compose -f docker-compose.ci.yml exec -T froxlor sh -lc ' - git config --global --add safe.directory /var/www/html/froxlor && - git config --global --add safe.directory /var/www/html/framework && - composer update --working-dir=/var/www/html/froxlor --no-interaction --prefer-dist --no-progress - ' - - name: Fresh database with seeders working-directory: framework run: docker compose -f docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan migrate:fresh --seed --force - name: Run tests working-directory: framework - run: docker compose -f docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan test + run: docker compose -f docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan test /var/www/html/framework/packages/core/tests - name: Docker logs on failure working-directory: framework From 6932022e09a01b93adb795c2c5a945cb64092375 Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 13:32:21 +0200 Subject: [PATCH 12/14] wait for db container to be ready/reachable Signed-off-by: Michael Kaufmann --- .github/workflows/run-unit-tests.yml | 5 +++++ docker-compose.ci.yml | 11 +++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index 2fad69d..0bbe9da 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -86,6 +86,11 @@ jobs: echo "DEV_SEED_DEVELOPMENT_DATA=true" } >> .env + - name: Wait for database + working-directory: framework + run: | + docker compose -f docker-compose.ci.yml exec -T db mariadb-admin ping -h localhost -uroot -proot --wait=60 + - name: Fresh database with seeders working-directory: framework run: docker compose -f docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan migrate:fresh --seed --force diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index 86a8f8d..e613e02 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -4,8 +4,10 @@ services: privileged: true pid: "host" depends_on: - - db - - redis + db: + condition: service_healthy + redis: + condition: service_started volumes: - ${FROXLOR_APP_DIR:-../froxlor}:/var/www/html/froxlor - ${FROXLOR_FRAMEWORK_DIR:-.}:/var/www/html/framework @@ -20,6 +22,11 @@ services: MYSQL_DATABASE: froxlor MYSQL_USER: froxlor MYSQL_PASSWORD: froxlor + healthcheck: + test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-uroot", "-proot"] + interval: 2s + timeout: 5s + retries: 30 networks: - internal From 8af1ff87d221fe9674e4055fc32a2e126abc7936 Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 13:49:22 +0200 Subject: [PATCH 13/14] test the whole test-suite defined in froxlor/froxlor:phpunit.xml Signed-off-by: Michael Kaufmann --- .github/workflows/run-unit-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index 0bbe9da..3c97b4f 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -97,7 +97,7 @@ jobs: - name: Run tests working-directory: framework - run: docker compose -f docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan test /var/www/html/framework/packages/core/tests + run: docker compose -f docker-compose.ci.yml exec -T froxlor php /var/www/html/froxlor/artisan test - name: Docker logs on failure working-directory: framework From 7b6a83e075608673435dba0259e42d7a65b6a060 Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 19 Jun 2026 17:03:08 +0200 Subject: [PATCH 14/14] Update run-unit-tests.yml update actions/cache to v5 (node 24) --- .github/workflows/run-unit-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index 3c97b4f..eda8e88 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -44,7 +44,7 @@ jobs: tools: composer:v2 - name: Cache composer downloads - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.composer/cache/files key: composer-${{ runner.os }}-${{ hashFiles('froxlor/composer.json', 'framework/composer.json') }}