Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions .github/workflows/run-unit-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Framework Package Tests

on:
push:
branches: [main, "feature/**"]
pull_request:

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
uses: actions/checkout@v7
with:
path: framework

- name: Checkout froxlor app
uses: actions/checkout@v7
with:
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: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: "8.5"
coverage: none
tools: composer:v2

- name: Cache composer downloads
uses: actions/cache@v5
with:
path: ~/.composer/cache/files
key: composer-${{ runner.os }}-${{ hashFiles('froxlor/composer.json', 'framework/composer.json') }}
restore-keys: composer-${{ runner.os }}-

- name: Install dependencies
working-directory: froxlor
run: |
composer update --no-interaction --prefer-dist --no-progress

- 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: |
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: 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

- 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
43 changes: 43 additions & 0 deletions docker-compose.ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
services:
froxlor:
image: hub.froxlor.io/froxlor/froxlor:latest
privileged: true
pid: "host"
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
volumes:
- ${FROXLOR_APP_DIR:-../froxlor}:/var/www/html/froxlor
- ${FROXLOR_FRAMEWORK_DIR:-.}:/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
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-uroot", "-proot"]
interval: 2s
timeout: 5s
retries: 30
networks:
- internal

redis:
image: redis:latest
networks:
- internal

volumes:
environments:

networks:
internal:
driver: bridge
Loading