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

Mario's avatar
Mario committed
6

7 8 9 10
stages:
  - test
  - deploy

11

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

Mario's avatar
Mario committed
18

19
# global variables for all jobs, if no job specific variables
Mario's avatar
Mario committed
20
variables:
21 22 23 24 25
  # 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
26 27
  MYSQL_DATABASE: hello_world_test
  MYSQL_ROOT_PASSWORD: mysql
28 29 30 31 32
  # 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
33 34

before_script:
Klaus Weidenbach's avatar
Klaus Weidenbach committed
35 36
# 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
37 38 39
# Install & enable Xdebug for code coverage reports
- pecl install xdebug
- docker-php-ext-enable xdebug
40
# Install composer
Mario's avatar
Mario committed
41
- curl -sS https://getcomposer.org/installer | php
42
# Install dev libraries from composer
Klaus Weidenbach's avatar
Klaus Weidenbach committed
43
- php ./composer.phar install --no-progress
44

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 53 54
  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"
  - vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-text

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 70
  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
  - 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 78 79 80 81 82
    expire_in: 1 week
    # Gitlab should show the results, but has problems parsing PHPUnit's junit file.
    reports:
      junit: tests/results/junit.xml
    # Archive test results (coverage, testdox, junit)
    name: "$CI_COMMIT_REF_SLUG-$CI_JOB_NAME"
    paths:
      - tests/results/
83 84


Klaus Weidenbach's avatar
Klaus Weidenbach committed
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
# PHP7.2 with MySQL 5.7
php7.2_mysql5.7:
  <<: *job_definition_mysql
  services:
  - mysql:5.7


# PHP7.2 with MySQL 8 (latest)
php7.2_mysql8:
  <<: *job_definition_mysql
  services:
  - name: mysql:8
    command: ["--default-authentication-plugin=mysql_native_password"]


# PHP7.2 with MariaDB 10.2
php7.2_mariadb10.2:
  <<: *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


# PHP7.2 with PostgreSQL latest (11)
php7.2_postgres11:
  <<: *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