Skip to content

GLPI CI

GLPI CI #152

Workflow file for this run

name: "GLPI CI"
on:
# Runs test suite when a new commit is pushed on "main" and "*/bugfixes" branches
# and when a new tag is created
push:
branches:
- main
- '*/bugfixes'
- 'feature/*'
- 'fix/*'
- 'security/*'
tags:
- '*'
# Runs test suite when a PR is opened or synchronyzed
pull_request:
# Runs test suite every night
schedule:
- cron: '0 0 * * *'
# Enable manual run
workflow_dispatch:
jobs:
lint:
# Do not run scheduled lint on tier repositories
if: github.repository == 'glpi-project/glpi' || github.event_name != 'schedule'
name: "Lint on PHP ${{ matrix.php-version }}"
runs-on: "${{ github.repository == 'glpi-network/glpi' && 'self-hosted' || 'ubuntu-latest' }}"
strategy:
fail-fast: false
matrix:
include:
- {php-version: "8.1"} # Lint on lower PHP version to detected too early usage of new syntaxes
- {php-version: "8.2"} # Lint on higher PHP version to detected deprecated elements usage
- {php-version: "8.3-rc"}
env:
COMPOSE_FILE: ".github/actions/docker-compose-app.yml"
APPLICATION_ROOT: "${{ github.workspace }}"
PHP_IMAGE: "githubactions-php:${{ matrix.php-version }}"
UPDATE_FILES_ACL: true
steps:
- name: "Clean workspace"
run: |
echo "APP_CONTAINER_HOME=${{ runner.temp }}/app_home" >> $GITHUB_ENV
rm -rf "${{ env.APPLICATION_ROOT }}/*"
rm -rf "${{ env.APP_CONTAINER_HOME }}/*"
- name: "Checkout"
uses: "actions/checkout@v4"
- name: "Restore dependencies cache"
uses: actions/cache@v3
with:
path: |
${{ env.APP_CONTAINER_HOME }}/.composer/cache/
${{ env.APP_CONTAINER_HOME }}/.npm/_cacache/
key: "app_home_deps-${{ matrix.php-version }}-${{ hashFiles('composer.lock', 'package-lock.json') }}"
restore-keys: |
app_home_deps-${{ matrix.php-version }}-
app_home_deps-
- name: "Restore lint cache"
uses: actions/cache@v3
with:
path: |
${{ env.APP_CONTAINER_HOME }}/phpcs.cache
key: "app_home_lint-${{ matrix.php-version }}-${{ github.base_ref || github.ref }}"
restore-keys: |
app_home_lint-${{ matrix.php-version }}
app_home_lint-
- name: "Initialize containers"
run: |
.github/actions/init_containers-start.sh
- name: "Show versions"
run: |
.github/actions/init_show-versions.sh
- name: "Build dependencies / translations"
run: |
docker-compose exec -T app .github/actions/init_build.sh
- name: "PHP lint"
run: |
docker-compose exec -T app .github/actions/lint_php-lint.sh
- name: "Twig lint"
run: |
docker-compose exec -T app .github/actions/lint_twig-lint.sh
- name: "JS lint"
run: |
docker-compose exec -T app .github/actions/lint_js-lint.sh
- name: "SCSS lint"
run: |
docker-compose exec -T app .github/actions/lint_scss-lint.sh
- name: "Misc lint"
run: |
docker-compose exec -T app .github/actions/lint_misc-lint.sh
- name: "Cleanup containers"
if: always()
run: |
.github/actions/teardown_containers-cleanup.sh
tests:
# Do not run scheduled tests on tier repositories
if: github.repository == 'glpi-project/glpi' || github.event_name != 'schedule'
name: "Test on PHP ${{ matrix.php-version }} using ${{ matrix.db-image }}"
runs-on: "${{ github.repository == 'glpi-network/glpi' && 'self-hosted' || 'ubuntu-latest' }}"
strategy:
fail-fast: false
matrix:
include:
# test higher PHP version with higher MariaDB and MySQL versions
- {php-version: "8.2", db-image: "mariadb:11.0", always: true}
- {php-version: "8.2", db-image: "mysql:8.1", always: true}
- {php-version: "8.3-rc", db-image: "mariadb:11.0", always: true}
# test other PHP versions
- {php-version: "8.1", db-image: "mariadb:11.0", always: false}
# test other DB servers/versions
- {php-version: "8.2", db-image: "mariadb:10.5", always: false}
- {php-version: "8.2", db-image: "mariadb:10.11", always: false}
- {php-version: "8.2", db-image: "mysql:8.0", always: false}
- {php-version: "8.2", db-image: "percona:8.0", always: false}
env:
# Skip jobs that should not be always run on pull requests or on push on tier repository (to limit workers usage).
# No jobs will be skipped on nightly build, manual dispatch or push on main branches (main and */bugfixes) or tags.
skip: ${{ matrix.always == false && (github.event_name == 'pull_request' || github.repository != 'glpi-project/glpi' || !(github.event_name == 'workflow_dispatch' || github.ref == 'refs/heads/main' || endsWith(github.ref, '/bugfixes') || startsWith(github.ref, 'refs/tags'))) }}
COMPOSE_FILE: ".github/actions/docker-compose-app.yml:.github/actions/docker-compose-services.yml"
APPLICATION_ROOT: "${{ github.workspace }}"
DB_IMAGE: "githubactions-${{ matrix.db-image }}"
PHP_IMAGE: "githubactions-php:${{ matrix.php-version }}"
UPDATE_FILES_ACL: true
steps:
- name: "Clean workspace"
if: env.skip != 'true'
run: |
echo "APP_CONTAINER_HOME=${{ runner.temp }}/app_home" >> $GITHUB_ENV
rm -rf "${{ env.APPLICATION_ROOT }}/*"
rm -rf "${{ env.APP_CONTAINER_HOME }}/*"
- name: "Checkout"
if: env.skip != 'true'
uses: "actions/checkout@v4"
- name: "Restore dependencies cache"
if: env.skip != 'true'
uses: actions/cache@v3
with:
path: |
${{ env.APP_CONTAINER_HOME }}/.composer/cache/
${{ env.APP_CONTAINER_HOME }}/.npm/_cacache/
key: "app_home_deps-${{ matrix.php-version }}-${{ hashFiles('composer.lock', 'package-lock.json') }}"
restore-keys: |
app_home_deps-${{ matrix.php-version }}-
app_home_deps-
- name: "Initialize containers"
if: env.skip != 'true'
run: |
.github/actions/init_containers-start.sh
- name: "Show versions"
if: env.skip != 'true'
run: |
.github/actions/init_show-versions.sh
- name: "Build dependencies / translations"
if: env.skip != 'true'
run: |
docker-compose exec -T app .github/actions/init_build.sh
- name: "Install DB tests"
if: env.skip != 'true'
run: |
docker-compose exec -T app .github/actions/test_install.sh
- name: "Update DB tests (from 0.85.5, not using utf8mb4)"
if: env.skip != 'true'
run: |
.github/actions/init_initialize-0.85.5-db.sh
docker-compose exec -T app .github/actions/test_update-from-older-version.sh
- name: "Update DB tests (from 9.5, using utf8mb4)"
if: env.skip != 'true'
run: |
.github/actions/init_initialize-9.5-db.sh
docker-compose exec -T app .github/actions/test_update-from-9.5.sh
- name: "Unit tests"
if: env.skip != 'true'
run: |
docker-compose exec -T app .github/actions/test_tests-units.sh
- name: "Functional tests"
if: env.skip != 'true'
run: |
docker-compose exec -T app .github/actions/test_tests-functional.sh
- name: "Cache tests"
if: env.skip != 'true'
run: |
docker-compose exec -T app .github/actions/test_tests-cache.sh
- name: "LDAP tests"
if: env.skip != 'true'
run: |
.github/actions/init_initialize-ldap-fixtures.sh
docker-compose exec -T app .github/actions/test_tests-ldap.sh
- name: "IMAP tests"
if: env.skip != 'true'
run: |
.github/actions/init_initialize-imap-fixtures.sh
docker-compose exec -T app .github/actions/test_tests-imap.sh
- name: "WEB tests"
if: env.skip != 'true'
run: |
docker-compose exec -T app .github/actions/test_tests-web.sh
- name: "Javascript tests"
if: env.skip != 'true'
run: |
docker-compose exec -T app .github/actions/test_javascript.sh
- name: "Cleanup containers"
if: env.skip != 'true' && always()
run: |
.github/actions/teardown_containers-cleanup.sh