# GitLab CI for Laravel
# GitLab reads this file automatically when it is committed at the repository root as `.gitlab-ci.yml`.

workflow:
  rules:
    - if: '$CI_COMMIT_MESSAGE =~ /(\[ci skip\]|\[skip ci\])/i'
      when: never
    - if: '$CI_PIPELINE_SOURCE == "push"'
      when: always
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      when: always
    - if: '$CI_COMMIT_TAG'
      when: always
    - when: never

stages:
  - test

variables:
  APP_ENV: testing
  APP_DEBUG: "false"
  LOG_CHANNEL: stderr
  DB_CONNECTION: sqlite
  DB_DATABASE: "$CI_PROJECT_DIR/database/database.sqlite"
  CACHE_DRIVER: array
  CACHE_STORE: array
  SESSION_DRIVER: array
  QUEUE_CONNECTION: sync
  MAIL_MAILER: array
  BROADCAST_CONNECTION: log
  FILESYSTEM_DISK: local
  COMPOSER_CACHE_DIR: "$CI_PROJECT_DIR/.composer-cache"
  XDEBUG_MODE: coverage

cache:
  key:
    files:
      - composer.lock
  paths:
    - .composer-cache/
    - vendor/

phpunit:
  image: php:8.3-cli
  stage: test
  before_script:
    - apt-get update
    - apt-get install -y --no-install-recommends git unzip curl libzip-dev libpng-dev libonig-dev libxml2-dev libsqlite3-dev libcurl4-openssl-dev
    - docker-php-ext-install curl dom gd mbstring pdo pdo_sqlite xml xmlwriter zip
    - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    - php composer-setup.php --install-dir=/usr/local/bin --filename=composer
    - rm composer-setup.php
    - composer install --prefer-dist --no-interaction --no-progress
    - |
      cat > .env <<EOF
      APP_NAME=school_api
      APP_ENV=testing
      APP_KEY=
      APP_DEBUG=false
      APP_URL=http://localhost
      LOG_CHANNEL=stderr
      LOG_LEVEL=debug
      DB_CONNECTION=sqlite
      DB_DATABASE=$CI_PROJECT_DIR/database/database.sqlite
      CACHE_DRIVER=array
      CACHE_STORE=array
      SESSION_DRIVER=array
      QUEUE_CONNECTION=sync
      MAIL_MAILER=array
      BROADCAST_CONNECTION=log
      FILESYSTEM_DISK=local
      JWT_SECRET=ci_dummy_secret_not_for_production
      EOF
    - mkdir -p database storage/framework/cache storage/framework/sessions storage/framework/views storage/logs bootstrap/cache reports
    - touch database/database.sqlite
    - php artisan key:generate --force
    - php artisan config:clear
    - php artisan migrate --force
  script:
    - php artisan test --no-interaction --log-junit reports/phpunit.xml
  artifacts:
    when: always
    expire_in: 7 days
    reports:
      junit: reports/phpunit.xml
    paths:
      - reports/
      - storage/logs/
