# Select what we should cache
cache:
  paths:
    - vendor/

# Run tests for php:8.2
job_lint_app_82:
  image: php:8.2
  before_script: &before_linter_script
    # Install git, the docker php image doesn't have it installed by default
    - apt-get update -yqq
    - apt-get install git -yqq
    - apt-get install zip -yqq
    # Enable necessary php extensions
    - docker-php-ext-enable curl && docker-php-ext-enable json && docker-php-ext-enable zip && docker-php-ext-enable mbstring && docker-php-ext-enable gd && docker-php-ext-enable pdo_mysql
    # Install composer
    - curl -sS https://getcomposer.org/installer | php
    # Create composer.json file manually, since this is a project without any non-dev dependencies yet
    - php composer.phar require --dev php-parallel-lint/php-parallel-lint
    - php composer.phar require --dev friendsofphp/php-cs-fixer:3.64.0
    # Install all project dependencies
    - php composer.phar install
  script: &linter_script
    - ./vendor/bin/parallel-lint --exclude vendor .
    - ./vendor/bin/php-cs-fixer -vvv check . --using-cache=no --rules=@PSR12,-single_space_around_construct

# Run tests for php:8.1
job_lint_app_81:
  image: php:8.1
  before_script: *before_linter_script
  script: *linter_script

# Run tests for php:7.4
job_lint_app_74:
  image: php:7.4
  before_script: *before_linter_script
  script: *linter_script

publish:
  image: docker:latest
  stage: deploy
  services:
    - docker:dind
  script:
    # Login to GitLab's Docker registry
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
    # Create a new builder instance and switch to it
    - docker buildx create --use
    # Build the image:
    # 1. Build a Docker image for linux/arm/v7, linux/arm64/v8 and linux/amd64
    # 2. Tag it with the current commit tag and "latest"
    # 3. Push it to GitLab's Docker registry
    - docker buildx build --push --platform linux/arm/v7,linux/arm64/v8,linux/amd64 --tag $CI_REGISTRY/$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG --tag $CI_REGISTRY/$CI_REGISTRY_IMAGE:latest .
  only:
    - tags
