.gitlab-ci.yml 4.45 KB
Newer Older
Mario's avatar
Mario committed
1
# Select image from https://hub.docker.com/_/php/
Mario's avatar
Mario committed
2
#image: php:7.3
Klaus Weidenbach's avatar
Klaus Weidenbach committed
3
# Use a prepared Hubzilla image to optimise pipeline duration
Mario's avatar
Mario committed
4
image: registry.gitlab.com/dawnbreak/hubzilla/core:php7.3
Mario's avatar
Mario committed
5

6 7 8 9
stages:
  - test
  - deploy

10

Mario's avatar
Mario committed
11 12 13 14
# Select what we should cache
cache:
  paths:
  - vendor/
15 16
  - .cache/

Mario's avatar
Mario committed
17

18
# global variables for all jobs, if no job specific variables
Mario's avatar
Mario committed
19
variables:
20 21 22 23 24
  # Tell composer to use the project workspace .cache folder
  COMPOSER_CACHE_DIR: "$CI_PROJECT_DIR/.cache/composer"
  # Ignore a Composer warning
  COMPOSER_ALLOW_SUPERUSER: 1
  # Configure MySQL/MariaDB service (https://hub.docker.com/_/mysql/, https://hub.docker.com/_/mariadb/)
Mario's avatar
Mario committed
25 26
  MYSQL_DATABASE: hello_world_test
  MYSQL_ROOT_PASSWORD: mysql
27 28 29 30 31
  # Configure PostgreSQL service (https://hub.docker.com/_/postgres/)
  POSTGRES_DB: ci-db
  POSTGRES_USER: ci-user
  POSTGRES_PASSWORD: ci-pass

Mario's avatar
Mario committed
32 33

before_script:
Klaus Weidenbach's avatar
Klaus Weidenbach committed
34 35
# pecl and composer do not work with PHP production restrictions (from Hubzilla Docker image)
- if [ -f /usr/local/etc/php/conf.d/z_prod.ini ]; then mv /usr/local/etc/php/conf.d/z_prod.ini /usr/local/etc/php/conf.d/z_prod.ini.off; fi
Mario's avatar
Mario committed
36
# Install & enable Xdebug for code coverage reports
37 38
- pecl install xdebug
- docker-php-ext-enable xdebug
39
# Install composer
Mario's avatar
Mario committed
40
- curl -sS https://getcomposer.org/installer | php
41
# Install dev libraries from composer
Klaus Weidenbach's avatar
Klaus Weidenbach committed
42
- php ./composer.phar install --no-progress
Mario's avatar
Mario committed
43
# php.ini settings
Mario's avatar
Mario committed
44
- echo 'xdebug.mode=coverage' >> /usr/local/etc/php/php.ini
Mario's avatar
Mario committed
45

Klaus Weidenbach's avatar
Klaus Weidenbach committed
46 47
# hidden job definition with template for MySQL/MariaDB
.job_template_mysql: &job_definition_mysql
48
  stage: test
49 50 51 52
  script:
  - echo "USE $MYSQL_DATABASE; $(cat ./install/schema_mysql.sql)" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
  - echo "SHOW DATABASES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
  - echo "USE $MYSQL_DATABASE; SHOW TABLES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
Mario's avatar
Mario committed
53
  - vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-text
54

Klaus Weidenbach's avatar
Klaus Weidenbach committed
55 56
# hidden job definition with template for PostgreSQL
.job_template_postgres: &job_definition_postgres
57
  stage: test
58 59 60 61 62 63 64 65 66 67 68 69
  services:
  - postgres:latest
  script:
  - export PGPASSWORD=$POSTGRES_PASSWORD
  - psql --version
  - psql -h "postgres" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "SELECT VERSION();"
  # Import hubzilla's DB schema
  - psql -h "postgres" -U "$POSTGRES_USER" -v ON_ERROR_STOP=1 --quiet "$POSTGRES_DB" < ./install/schema_postgres.sql
  # Show databases and relations/tables of hubzilla's database
  #- psql -h "postgres" -U "$POSTGRES_USER" -l
  #- psql -h "postgres" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "\dt;"
  # Run the actual tests
Mario's avatar
Mario committed
70
  - vendor/bin/phpunit --configuration tests/phpunit-pgsql.xml --testdox
Klaus Weidenbach's avatar
Klaus Weidenbach committed
71 72 73 74

# hidden job definition with artifacts config template
.artifacts_template:
  artifacts: &artifacts_template
75 76 77
    expire_in: 1 week
    # Gitlab should show the results, but has problems parsing PHPUnit's junit file.
    reports:
Mario's avatar
Mario committed
78
      junit: tests/results/junit.xml
79 80 81
    # Archive test results (coverage, testdox, junit)
    name: "$CI_COMMIT_REF_SLUG-$CI_JOB_NAME"
    paths:
Mario's avatar
Mario committed
82
      - tests/results/
83 84


Mario's avatar
Mario committed
85 86
# PHP7.3 with MySQL 5.7
php7.3_mysql5.7:
Klaus Weidenbach's avatar
Klaus Weidenbach committed
87 88 89 90 91
  <<: *job_definition_mysql
  services:
  - mysql:5.7


Mario's avatar
Mario committed
92 93
# PHP7.3 with MySQL 8 (latest)
php7.3_mysql8:
Klaus Weidenbach's avatar
Klaus Weidenbach committed
94 95 96 97 98 99
  <<: *job_definition_mysql
  services:
  - name: mysql:8
    command: ["--default-authentication-plugin=mysql_native_password"]


Mario's avatar
Mario committed
100 101
# PHP7.3 with MariaDB 10.2
php7.3_mariadb10.2:
Klaus Weidenbach's avatar
Klaus Weidenbach committed
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
  <<: *job_definition_mysql
  services:
  - name: mariadb:10.2
    alias: mysql


# PHP7.3 with MariaDB 10.3 (latest)
php7.3_mariadb10.3:
  <<: *job_definition_mysql
  image: registry.gitlab.com/dawnbreak/hubzilla/core:php7.3
  services:
  - name: mariadb:10.3
    alias: mysql


Mario's avatar
Mario committed
117 118
# PHP7.3 with PostgreSQL latest (11)
php7.3_postgres11:
Klaus Weidenbach's avatar
Klaus Weidenbach committed
119 120 121 122 123 124 125 126 127 128 129 130
  <<: *job_definition_postgres
  artifacts: *artifacts_template


# PHP7.3 with PostgreSQL latest (11)
php7.3_postgres11:
  <<: *job_definition_postgres
  image: registry.gitlab.com/dawnbreak/hubzilla/core:php7.3
  artifacts: *artifacts_template


# Generate Doxygen API Documentation and deploy it as GitLab pages
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
pages:
  stage: deploy
  cache: {}
  image: php:7-cli-alpine
  before_script:
    - apk update
    - apk add doxygen ttf-freefont graphviz
  script:
    - doxygen util/Doxyfile
    - mv doc/html/ public/
    - echo "API documentation should be accessible at https://hubzilla.frama.io/core/ soon"
  artifacts:
    paths:
      - public
  only:
    # Only generate it on main repo's master branch
    - master@hubzilla/core