aboutsummaryrefslogtreecommitdiffstats
path: root/.gitlab-ci.yml
blob: 938cb52cab5bf2bbdddc41d67ecd09225a31af3c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# Select image from https://hub.docker.com/_/php/
#image: php:7.3
# Use a prepared Hubzilla image to optimise pipeline duration
# image: registry.gitlab.com/dawnbreak/hubzilla/core:php7.3

image: php:8.1

stages:
  - test
  - deploy


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


# global variables for all jobs, if no job specific variables
variables:
  # 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/)
  MYSQL_DATABASE: hello_world_test
  MYSQL_ROOT_PASSWORD: mysql
  # Configure PostgreSQL service (https://hub.docker.com/_/postgres/)
  POSTGRES_DB: ci-db
  POSTGRES_USER: ci-user
  POSTGRES_PASSWORD: ci-pass


before_script:
# 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
# Install & enable Xdebug for code coverage reports
- pecl install xdebug
- apt-get update
- apt-get install zip unzip libjpeg-dev libpng-dev -yqq
- docker-php-ext-enable xdebug
- docker-php-ext-install gd


# Install composer
- curl -sS https://getcomposer.org/installer | php
# Install dev libraries from composer
- php ./composer.phar install --no-progress
# php.ini settings
- echo 'xdebug.mode=coverage' >> /usr/local/etc/php/php.ini

# hidden job definition with template for PHP
.job_template_php: &job_definition_php
  stage: test
  script:
  - vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-text


# hidden job definition with template for MySQL/MariaDB
#.job_template_mysql: &job_definition_mysql
#  stage: test
#  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

# hidden job definition with template for PostgreSQL
#.job_template_postgres: &job_definition_postgres
#  stage: test
#  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

# hidden job definition with artifacts config template
.artifacts_template:
  artifacts: &artifacts_template
    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/


# PHP8.1
php8.1:
  <<: *job_definition_php

# PHP8.0 with MySQL 5.7
#php8.0_mysql5.7:
#  <<: *job_definition_mysql
#  services:
#  - mysql:5.7


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


# PHP8.0 with MariaDB 10.2
#php8.0_mariadb10.2:
#  <<: *job_definition_mysql
#  services:
#  - name: mariadb:10.2
#    alias: mysql


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


# PHP7.3 with PostgreSQL latest (11)
#php7.3_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
pages:
  stage: deploy
  cache: {}
  image: php:8-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