]> git.mxchange.org Git - friendica.git/blobdiff - .drone.yml
Update src/Module/Help.php
[friendica.git] / .drone.yml
index ada824ab5eb40b8242de736f99395518aa0ee942..99692d32cf1ee67ec9d98c497400f3586fa1ddf4 100644 (file)
 kind: pipeline
-name: mysql8.0-php7.1
+type: docker
+name: Check messages.po
 
 steps:
-- name: mysql8.0-php7.1
-  image: friendicaci/php7.1:php7.1.32
-  commands:
-      - NOCOVERAGE=true ./autotest.sh mysql
-  environment:
-    MYSQL_USERNAME: friendica
-    MYSQL_PASSWORD: friendica
-    MYSQL_DATABASE: friendica
-    MYSQL_HOST: mysql
-
-node:
-  test: db
-
-services:
-- name: mysql
-  image: mysql:8.0
-  command: [ "--default-authentication-plugin=mysql_native_password" ]
-  environment:
-    MYSQL_ROOT_PASSWORD: friendica
-    MYSQL_USER: friendica
-    MYSQL_PASSWORD: friendica
-    MYSQL_DATABASE: friendica
-  volumes: 
-    - name: cache
-      path: /var/lib/mysql
-
-volumes:
-- name: cache
-  temp: {}
-
-trigger:
-  branch:
-    - master
-    - develop
-    - "*-rc"
-  event:
-    - pull_request
-    - push
+  - name: Run default Xgettext
+    image: friendicaci/transifex
+    commands:
+      - ./bin/run_xgettext.sh
+
+  - name: Check default
+    image: friendicaci/transifex
+    commands:
+      - /check-messages.sh
 ---
 kind: pipeline
-name: mysql8.0-php7.2
+type: docker
+name: Integrity checks
 
 steps:
-- name: mysql8.0-php7.2
-  image: friendicaci/php7.2:php7.2.22
-  commands:
-    - NOCOVERAGE=true ./autotest.sh mysql
-  environment:
-    MYSQL_USERNAME: friendica
-    MYSQL_PASSWORD: friendica
-    MYSQL_DATABASE: friendica
-    MYSQL_HOST: mysql
-
-node:
-  test: db
-
-services:
-- name: mysql
-  image: mysql:8.0
-  command: [ "--default-authentication-plugin=mysql_native_password" ]
-  environment:
-    MYSQL_ROOT_PASSWORD: friendica
-    MYSQL_USER: friendica
-    MYSQL_PASSWORD: friendica
-    MYSQL_DATABASE: friendica
-  volumes:
-    - name: cache
-      path: /var/lib/mysql
-
-volumes:
-  - name: cache
-    temp: {}
-
-trigger:
-  branch:
-    - master
-    - develop
-    - "*-rc"
-  event:
-    - pull_request
-    - push
+  - name: Check database version
+    image: alpine
+    commands:
+      - export DBSTRUCTURE_VERSION="$(sed -rn "s/.*'DB_UPDATE_VERSION', ([0-9]+).*/\1/p" static/dbstructure.config.php)"
+      - export DATABASE_VERSION="$(sed -rn 's/.*DB_UPDATE_VERSION ([0-9]+).*/\1/p' database.sql)"
+      - echo "Database $DATABASE_VERSION - DB-Structure $DBSTRUCTURE_VERSION"
+      - if [[ "$DBSTRUCTURE_VERSION" != "$DATABASE_VERSION" ]]; then
+          echo "Database version mismatch.";
+          exit 1;
+        fi
 ---
 kind: pipeline
-name: mysql8.0-php7.3
+type: docker
+name: php7.3-lint
 
 steps:
-- name: mysql8.0-php7.3
-  image: friendicaci/php7.3:php7.3.9
-  commands:
-      - NOCOVERAGE=true ./autotest.sh mysql
-  environment:
-      MYSQL_USERNAME: friendica
-      MYSQL_PASSWORD: friendica
-      MYSQL_DATABASE: friendica
-      MYSQL_HOST: mysql
-
-node:
-  test: db
-
-services:
-- name: mysql
-  image: mysql:8.0
-  command: [ "--default-authentication-plugin=mysql_native_password" ]
-  environment:
-      MYSQL_ROOT_PASSWORD: friendica
-      MYSQL_USER: friendica
-      MYSQL_PASSWORD: friendica
-      MYSQL_DATABASE: friendica
-  volumes:
-    - name: cache
-      path: /var/lib/mysql
-
-volumes:
-  - name: cache
-    temp: {}
-
-trigger:
-  branch:
-    - master
-    - develop
-    - "*-rc"
-  event:
-    - pull_request
-    - push
+  - name: Test
+    image: php:7.3
+    commands:
+      - ./bin/composer.phar run lint
 ---
 kind: pipeline
-name: mariadb10.1-php7.1
+type: docker
+name: php7.4-lint
 
 steps:
-- name: mariadb10.1-php7.1
-  image: friendicaci/php7.1:php7.1.32
-  commands:
-      - phpenmod xdebug
-      - sleep 20
-      - ./autotest.sh mariadb
-      - wget https://codecov.io/bash -O codecov.sh
-      - sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 5ce7d64e-07b4-4adf-8700-e2eae27e14ec -f tests/autotest-clover.xml; fi"
-      - sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 5ce7d64e-07b4-4adf-8700-e2eae27e14ec -f tests/autotest-clover.xml; fi"
-  environment:
-      MYSQL_USER: friendica
-      MYSQL_PASSWORD: friendica
-      MYSQL_DATABASE: friendica
-      MYSQL_HOST: mariadb
-
-node:
-  test: db
-
-services:
-- name: mariadb
-  image: mariadb:10.1
-  environment:
-      MYSQL_ROOT_PASSWORD: friendica
-      MYSQL_USER: friendica
-      MYSQL_PASSWORD: friendica
-      MYSQL_DATABASE: friendica
-  volumes:
-    - name: cache
-      path: /var/lib/mysql
-
-volumes:
-  - name: cache
-    temp: {}
-
-trigger:
-  branch:
-    - master
-    - develop
-    - "*-rc"
-  event:
-    - pull_request
-    - push
+  - name: Test
+    image: php:7.4
+    commands:
+      - ./bin/composer.phar run lint
 ---
 kind: pipeline
-name: mariadb10.1-php7.2
+type: docker
+name: php8.0-lint
 
 steps:
-- name: mariadb10.1-php7.2
-  image: friendicaci/php7.2:php7.2.22
-  commands:
-      - NOCOVERAGE=true ./autotest.sh mariadb
-  environment:
-      MYSQL_USER: friendica
-      MYSQL_PASSWORD: friendica
-      MYSQL_DATABASE: friendica
-      MYSQL_HOST: mariadb
-
-node:
-  test: db
-
-services:
-- name: mariadb
-  image: mariadb:10.1
-  environment:
-      MYSQL_ROOT_PASSWORD: friendica
-      MYSQL_USER: friendica
-      MYSQL_PASSWORD: friendica
-      MYSQL_DATABASE: friendica
-  volumes:
-    - name: cache
-      path: /var/lib/mysql
-
-volumes:
-  - name: cache
-    temp: {}
+  - name: Test
+    image: php:8.0
+    commands:
+      - ./bin/composer.phar run lint
+---
+kind: pipeline
+type: docker
+name: php-cs check
 
 trigger:
-  branch:
-    - master
-    - develop
-    - "*-rc"
   event:
     - pull_request
-    - push
----
-kind: pipeline
-name: mariadb10.1-php7.3
 
 steps:
-- name: mariadb10.1-php7.3
-  image: friendicaci/php7.3:php7.3.9
-  commands:
-      - NOCOVERAGE=true ./autotest.sh mariadb
-  environment:
-      MYSQL_USER: friendica
-      MYSQL_PASSWORD: friendica
-      MYSQL_DATABASE: friendica
-      MYSQL_HOST: mariadb
-
-node:
-  test: db
-
-services:
-- name: mariadb
-  image: mariadb:10.1
-  environment:
-      MYSQL_ROOT_PASSWORD: friendica
-      MYSQL_USER: friendica
-      MYSQL_PASSWORD: friendica
-      MYSQL_DATABASE: friendica
-  volumes:
-    - name: cache
-      path: /var/lib/mysql
+  - name: Restore cache
+    image: meltwater/drone-cache:dev
+    settings:
+      backend: "filesystem"
+      restore: true
+      cache_key: '{{ .Repo.Name }}_phpcs_{{ arch }}_{{ os }}'
+      archive_format: "gzip"
+      mount:
+        - '.composer'
+    volumes:
+      - name: cache
+        path: /tmp/cache
+  - name: Install dependencies
+    image: composer
+    commands:
+      - export COMPOSER_HOME=.composer
+      - ./bin/composer.phar run cs:install
+  - name: Rebuild cache
+    image: meltwater/drone-cache:dev
+    settings:
+      backend: "filesystem"
+      rebuild: true
+      cache_key: '{{ .Repo.Name }}_phpcs_{{ arch }}_{{ os }}'
+      archive_format: "gzip"
+      mount:
+        - '.composer'
+    volumes:
+      - name: cache
+        path: /tmp/cache
+  - name: Run coding standards check
+    image: friendicaci/php-cs
+    commands:
+      - export CHANGED_FILES="$(git diff --name-status ${DRONE_COMMIT_BEFORE}..${DRONE_COMMIT_AFTER} | grep ^A | cut -f2)"
+      - /check-php-cs.sh
 
 volumes:
   - name: cache
-    temp: {}
-
+    host:
+      path: /tmp/drone-cache
 ---
 kind: pipeline
-name: redis-php7.1
+type: docker
+name: php7.4-database-check
+
+depends_on:
+  - Integrity checks
 
 steps:
-- name: redis-php7.1
-  image: friendicaci/php7.1:php7.1.32
-  commands:
-    - phpenmod xdebug
-    - sleep 20
-    - NOINSTALL=true TEST_SELECTION=REDIS ./autotest.sh mysql
-    - wget https://codecov.io/bash -O codecov.sh
-    - sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 5ce7d64e-07b4-4adf-8700-e2eae27e14ec -f tests/autotest-clover.xml; fi"
-    - sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 5ce7d64e-07b4-4adf-8700-e2eae27e14ec -f tests/autotest-clover.xml; fi"
-  environment:
-      REDIS_HOST: redis
+  - name: Restore cache
+    image: meltwater/drone-cache:dev
+    settings:
+      backend: "filesystem"
+      restore: true
+      cache_key: '{{ .Repo.Name }}_php74_{{ arch }}_{{ os }}'
+      archive_format: "gzip"
+      mount:
+        - '.composer'
+    volumes:
+      - name: cache
+        path: /tmp/cache
+  - name: Composer install
+    image: friendicaci/php7.4:php7.4.18
+    commands:
+      - export COMPOSER_HOME=.composer
+      - ./bin/composer.phar validate
+      - ./bin/composer.phar install --prefer-dist
+  - name: Rebuild cache
+    image: meltwater/drone-cache:dev
+    settings:
+      backend: "filesystem"
+      rebuild: true
+      cache_key: '{{ .Repo.Name }}_php74_{{ arch }}_{{ os }}'
+      archive_format: "gzip"
+      mount:
+        - '.composer'
+    volumes:
+      - name: cache
+        path: /tmp/cache
+  - name: Recreate database.sql
+    image: friendicaci/php7.4:php7.4.18
+    environment:
+      MYSQL_HOST: "mariadb"
+      MYSQL_PORT: 3306
+      MYSQL_DATABASE: "test"
+      MYSQL_PASSWORD: "test"
+      MYSQL_USER: "test"
+      REDIS_HOST: "redis"
+      MEMCACHED_HOST: "memcached"
+      MEMCACHE_HOST: "memcached"
+      XDEBUG_MODE: "coverage"
+    commands:
+      - phpenmod xdebug
+      - cp config/local-sample.config.php config/local.config.php
+      - if ! bin/wait-for-connection $MYSQL_HOST $MYSQL_PORT 300; then echo "[ERROR] Waited 300 seconds, no response" >&2; exit 1; fi
+      - mysql -h$MYSQL_HOST -P$MYSQL_PORT -p$MYSQL_PASSWORD -u$MYSQL_USER $MYSQL_DATABASE < database.sql
+      - php ./bin/console.php dbstructure dumpsql > database.sql
+  - name: Check database.sql
+    image: alpine/git
+    commands:
+      - git update-index --refresh
+      - git diff-index --quiet HEAD --
+      - if [[ $? -ne 0 ]]; then
+          echo "database.sql mismatch.";
+          exit 1;
+        fi
 
 services:
-- name: redis
-  image: redis
+  - name: mariadb
+    image: mariadb:latest
+    environment:
+      MYSQL_ALLOW_EMPTY_PASSWORD: "true"
+      MYSQL_DATABASE: "test"
+      MYSQL_PASSWORD: "test"
+      MYSQL_USER: "test"
+    tmpfs:
+      - /var/lib/mysql
 
-trigger:
-  branch:
-    - master
-    - develop
-    - "*-rc"
-  event:
-    - pull_request
-    - push
+volumes:
+  - name: cache
+    host:
+      path: /tmp/drone-cache
 ---
 kind: pipeline
-name: redis-php7.2
+type: docker
+name: php7.3-mariadb
+
+depends_on:
+  - php7.3-lint
 
 steps:
-- name: redis-php7.2
-  image: friendicaci/php7.2:php7.2.22
-  commands:
-      - NOCOVERAGE=true NOINSTALL=true TEST_SELECTION=REDIS ./autotest.sh mysql
-  environment:
-    REDIS_HOST: redis
+  - name: Restore cache
+    image: meltwater/drone-cache:dev
+    settings:
+      backend: "filesystem"
+      restore: true
+      cache_key: '{{ .Repo.Name }}_php73_{{ arch }}_{{ os }}'
+      archive_format: "gzip"
+      mount:
+        - '.composer'
+    volumes:
+      - name: cache
+        path: /tmp/cache
+  - name: Composer install
+    image: friendicaci/php7.3:php7.3.28
+    commands:
+      - export COMPOSER_HOME=.composer
+      - ./bin/composer.phar validate
+      - ./bin/composer.phar install --prefer-dist
+  - name: Rebuild cache
+    image: meltwater/drone-cache:dev
+    settings:
+      backend: "filesystem"
+      rebuild: true
+      cache_key: '{{ .Repo.Name }}_php73_{{ arch }}_{{ os }}'
+      archive_format: "gzip"
+      mount:
+        - '.composer'
+    volumes:
+      - name: cache
+        path: /tmp/cache
+  - name: Test Friendica
+    image: friendicaci/php7.3:php7.3.28
+    environment:
+      MYSQL_HOST: "mariadb"
+      MYSQL_PORT: 3306
+      MYSQL_DATABASE: "test"
+      MYSQL_PASSWORD: "test"
+      MYSQL_USER: "test"
+      REDIS_HOST: "redis"
+      MEMCACHED_HOST: "memcached"
+      MEMCACHE_HOST: "memcached"
+    commands:
+      - cp config/local-sample.config.php config/local.config.php
+      - if ! bin/wait-for-connection $MYSQL_HOST $MYSQL_PORT 300; then echo "[ERROR] Waited 300 seconds, no response" >&2; exit 1; fi
+      - mysql -h$MYSQL_HOST -P$MYSQL_PORT -p$MYSQL_PASSWORD -u$MYSQL_USER $MYSQL_DATABASE < database.sql
+      - phpunit --configuration tests/phpunit.xml
 
 services:
-- name: redis
-  image: redis
+  - name: mariadb
+    image: mariadb:latest
+    environment:
+      MYSQL_ALLOW_EMPTY_PASSWORD: "true"
+      MYSQL_DATABASE: "test"
+      MYSQL_PASSWORD: "test"
+      MYSQL_USER: "test"
+    tmpfs:
+      - /var/lib/mysql
+
+  - name: memcached
+    image: memcached
+
+  - name: redis
+    image: redis
 
-trigger:
-  branch:
-    - master
-    - develop
-    - "*-rc"
-  event:
-    - pull_request
-    - push
+volumes:
+  - name: cache
+    host:
+      path: /tmp/drone-cache
 ---
 kind: pipeline
-name: redis-php7.3
+type: docker
+name: php7.4-mariadb
+
+depends_on:
+  - php7.4-lint
 
 steps:
-- name: redis-php7.3
-  image: friendicaci/php7.3:php7.3.9
-  commands:
-      - NOCOVERAGE=true NOINSTALL=true TEST_SELECTION=REDIS ./autotest.sh mysql
-  environment:
-    REDIS_HOST: redis
+  - name: Restore cache
+    image: meltwater/drone-cache:dev
+    settings:
+      backend: "filesystem"
+      restore: true
+      cache_key: '{{ .Repo.Name }}_php74_{{ arch }}_{{ os }}'
+      archive_format: "gzip"
+      mount:
+        - '.composer'
+    volumes:
+      - name: cache
+        path: /tmp/cache
+  - name: Composer install
+    image: friendicaci/php7.4:php7.4.18
+    commands:
+      - export COMPOSER_HOME=.composer
+      - ./bin/composer.phar validate
+      - ./bin/composer.phar install --prefer-dist
+  - name: Rebuild cache
+    image: meltwater/drone-cache:dev
+    settings:
+      backend: "filesystem"
+      rebuild: true
+      cache_key: '{{ .Repo.Name }}_php74_{{ arch }}_{{ os }}'
+      archive_format: "gzip"
+      mount:
+        - '.composer'
+    volumes:
+      - name: cache
+        path: /tmp/cache
+  - name: Test Friendica
+    image: friendicaci/php7.4:php7.4.18
+    environment:
+      MYSQL_HOST: "mariadb"
+      MYSQL_PORT: 3306
+      MYSQL_DATABASE: "test"
+      MYSQL_PASSWORD: "test"
+      MYSQL_USER: "test"
+      REDIS_HOST: "redis"
+      MEMCACHED_HOST: "memcached"
+      MEMCACHE_HOST: "memcached"
+      XDEBUG_MODE: "coverage"
+    commands:
+      - phpenmod xdebug
+      - cp config/local-sample.config.php config/local.config.php
+      - if ! bin/wait-for-connection $MYSQL_HOST $MYSQL_PORT 300; then echo "[ERROR] Waited 300 seconds, no response" >&2; exit 1; fi
+      - mysql -h$MYSQL_HOST -P$MYSQL_PORT -p$MYSQL_PASSWORD -u$MYSQL_USER $MYSQL_DATABASE < database.sql
+      - phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml
+  - name: Codecov
+    image: plugins/codecov
+    when:
+      repo:
+        - friendica/friendica
+    settings:
+      token:
+        from_secret: codecov-token
+      files:
+        - clover.xml
 
 services:
-- name: redis
-  image: redis
+  - name: mariadb
+    image: mariadb:latest
+    environment:
+      MYSQL_ALLOW_EMPTY_PASSWORD: "true"
+      MYSQL_DATABASE: "test"
+      MYSQL_PASSWORD: "test"
+      MYSQL_USER: "test"
+    tmpfs:
+      - /var/lib/mysql
+
+  - name: memcached
+    image: memcached
+
+  - name: redis
+    image: redis
 
+volumes:
+  - name: cache
+    host:
+      path: /tmp/drone-cache
 ---
 kind: pipeline
-name: memcache-php7.1
+type: docker
+name: php8.0-mariadb
+
+depends_on:
+  - php8.0-lint
 
 steps:
-- name: memcache-php7.1
-  image: friendicaci/php7.1:php7.1.32
-  commands:
-      - phpenmod xdebug
-      - sleep 20
-      - NOINSTALL=true TEST_SELECTION=MEMCACHE ./autotest.sh mysql
-      - wget https://codecov.io/bash -O codecov.sh
-      - sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 5ce7d64e-07b4-4adf-8700-e2eae27e14ec -f tests/autotest-clover.xml; fi"
-      - sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 5ce7d64e-07b4-4adf-8700-e2eae27e14ec -f tests/autotest-clover.xml; fi"
-  environment:
-      MEMCACHE_HOST: memcached
+  - name: Restore cache
+    image: meltwater/drone-cache:dev
+    settings:
+      backend: "filesystem"
+      restore: true
+      cache_key: '{{ .Repo.Name }}_php80_{{ arch }}_{{ os }}'
+      archive_format: "gzip"
+      mount:
+        - '.composer'
+    volumes:
+      - name: cache
+        path: /tmp/cache
+  - name: Composer install
+    image: friendicaci/php8.0:php8.0.5
+    commands:
+      - export COMPOSER_HOME=.composer
+      - ./bin/composer.phar validate
+      - ./bin/composer.phar install --prefer-dist
+  - name: Rebuild cache
+    image: meltwater/drone-cache:dev
+    settings:
+      backend: "filesystem"
+      rebuild: true
+      cache_key: '{{ .Repo.Name }}_php80_{{ arch }}_{{ os }}'
+      archive_format: "gzip"
+      mount:
+        - '.composer'
+    volumes:
+      - name: cache
+        path: /tmp/cache
+  - name: Test Friendica
+    image: friendicaci/php8.0:php8.0.5
+    environment:
+      MYSQL_HOST: "mariadb"
+      MYSQL_PORT: 3306
+      MYSQL_DATABASE: "test"
+      MYSQL_PASSWORD: "test"
+      MYSQL_USER: "test"
+      REDIS_HOST: "redis"
+      MEMCACHED_HOST: "memcached"
+      MEMCACHE_HOST: "memcached"
+    commands:
+      - cp config/local-sample.config.php config/local.config.php
+      - if ! bin/wait-for-connection $MYSQL_HOST $MYSQL_PORT 300; then echo "[ERROR] Waited 300 seconds, no response" >&2; exit 1; fi
+      - mysql -h$MYSQL_HOST -P$MYSQL_PORT -p$MYSQL_PASSWORD -u$MYSQL_USER $MYSQL_DATABASE < database.sql
+      - phpunit --configuration tests/phpunit.xml
 
 services:
-- name: memcached
-  image: memcached
+  - name: mariadb
+    image: mariadb:latest
+    environment:
+      MYSQL_ALLOW_EMPTY_PASSWORD: "true"
+      MYSQL_DATABASE: "test"
+      MYSQL_PASSWORD: "test"
+      MYSQL_USER: "test"
+    tmpfs:
+      - /var/lib/mysql
+
+  - name: memcached
+    image: memcached
+
+  - name: redis
+    image: redis
 
-trigger:
-  branch:
-    - master
-    - develop
-    - "*-rc"
-  event:
-    - pull_request
-    - push
+volumes:
+  - name: cache
+    host:
+      path: /tmp/drone-cache
 ---
 kind: pipeline
-name: memcache-php7.2
-
-steps:
-- name: memcache-php7.2
-  image: friendicaci/php7.2:php7.2.22
-  commands:
-      - NOCOVERAGE=true NOINSTALL=true TEST_SELECTION=MEMCACHE ./autotest.sh mysql
-  environment:
-      MEMCACHE_HOST: memcached
+type: docker
+name: continuous-deployment
 
-services:
-- name: memcached
-  image: memcached
+depends_on:
+  - php7.3-mariadb
+  - php7.4-mariadb
+  - php8.0-mariadb
 
 trigger:
+  repo:
+    - friendica/friendica
   branch:
-    - master
     - develop
-    - "*-rc"
+    - 20*-rc
   event:
-    - pull_request
     - push
----
-kind: pipeline
-name: memcache-php7.3
-
-steps:
-- name: memcache-php7.3
-  image: friendicaci/php7.3:php7.3.9
-  commands:
-      - NOCOVERAGE=true NOINSTALL=true TEST_SELECTION=MEMCACHE ./autotest.sh mysql
-  environment:
-      MEMCACHE_HOST: memcached
-
-services:
-- name: memcached
-  image: memcached
 
----
-kind: pipeline
-name: memcached-php7.1
+node:
+  node: releaser # This prevents executing this pipeline at other servers than drone.friendi.ca
 
 steps:
-- name: memcached-php7.1
-  image: friendicaci/php7.1:php7.1.32
-  commands:
-      - phpenmod xdebug
-      - sleep 20
-      - NOINSTALL=true TEST_SELECTION=MEMCACHED ./autotest.sh mysql
-      - wget https://codecov.io/bash -O codecov.sh
-      - sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 5ce7d64e-07b4-4adf-8700-e2eae27e14ec -f tests/autotest-clover.xml; fi"
-      - sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 5ce7d64e-07b4-4adf-8700-e2eae27e14ec -f tests/autotest-clover.xml; fi"
-  environment:
-      MEMCACHED_HOST: memcached
+  - name: Restore cache
+    image: meltwater/drone-cache:dev
+    settings:
+      backend: "filesystem"
+      restore: true
+      cache_key: '{{ .Repo.Name }}_php74_{{ arch }}_{{ os }}'
+      archive_format: "gzip"
+      mount:
+        - '.composer'
+    volumes:
+      - name: cache
+        path:
+          /tmp/cache
+  - name: Composer install
+    image: friendicaci/php7.4:php7.4.18
+    commands:
+      - export COMPOSER_HOME=.composer
+      - composer validate
+      - composer install --no-dev --optimize-autoloader
+  - name: Create artifacts
+    image: debian
+    commands:
+      - apt-get update
+      - apt-get install bzip2
+      - mkdir ./build
+      - export VERSION="$(cat VERSION)"
+      - # Create artifact
+      - export RELEASE="friendica-full-$VERSION"
+      - export ARTIFACT="$RELEASE.tar.gz"
+      - tar
+        --transform "s,^,$RELEASE/,"
+        -X mods/release-list-exclude.txt
+        -T mods/release-list-include.txt
+        -cvzf ./build/$ARTIFACT
+      - # calculate SHA256 checksum
+      - cd ./build
+      - sha256sum "$ARTIFACT" > "$ARTIFACT.sum256"
+      - chmod 664 ./*
+      - ls -lh
+      - # output the sha256 sum for checking
+      - cat "$ARTIFACT.sum256"
+      - sha256sum "$ARTIFACT"
+  - name: Sign artifacts
+    image: plugins/gpgsign
+    settings:
+      key:
+        from_secret: gpg_key
+      passphrase:
+        from_secret: gpg_password
+      files:
+        - build/*
+      exclude:
+        - build/*.sum256
+      detach_sign: true
+  - name: Upload artifacts
+    image: alpine
+    environment:
+      LFTP_HOST:
+        from_secret: sftp_host
+      LFTP_USER:
+        from_secret: sftp_user
+      LFTP_KEY:
+        from_secret: ssh_key
+      LFTP_PORT: "22"
+      LFTP_SOURCE: "build"
+      LFTP_TARGET: "/http"
+    commands:
+      - apk add lftp openssh openssl
+      - touch drone.key
+      - chmod 400 drone.key
+      - echo "$LFTP_KEY" | openssl base64 -A -d > drone.key
+      - lftp -c "
+          set net:timeout 5;
+          set net:max-retries 2;
+          set net:reconnect-interval-base 5;
+          set sftp:auto-confirm true;
+          set sftp:connect-program 'ssh -q -a -x -i drone.key';
+          connect sftp://$LFTP_USER:@$LFTP_HOST:$LFTP_PORT;
+          cd $LFTP_TARGET;
+          mput $LFTP_SOURCE/*;
+        "
+      - rm drone.key
 
-services:
-- name: memcached
-  image: memcached
-
-trigger:
-  branch:
-    - master
-    - develop
-    - "*-rc"
-  event:
-    - pull_request
-    - push
+volumes:
+  - name: cache
+    host:
+      path: /tmp/drone-cache
 ---
 kind: pipeline
-name: memcached-php7.2
+type: docker
+name: release-deployment
 
-steps:
-- name: memcached-php7.2
-  image: friendicaci/php7.2:php7.2.22
-  commands:
-      - NOCOVERAGE=true NOINSTALL=true TEST_SELECTION=MEMCACHED ./autotest.sh mysql
-  environment:
-      MEMCACHED_HOST: memcached
-
-services:
-- name: memcached
-  image: memcached
+depends_on:
+  - php7.3-mariadb
+  - php7.4-mariadb
+  - php8.0-mariadb
 
 trigger:
+  repo:
+    - friendica/friendica
   branch:
-    - master
-    - develop
-    - "*-rc"
+    - stable
   event:
-    - pull_request
-    - push
----
-kind: pipeline
-name: memcached-php7.3
+    - tag
+
+node:
+  node: releaser # This prevents executing this pipeline at other servers than drone.friendi.ca
 
 steps:
-- name: memcached-php7.3
-  image: friendicaci/php7.3:php7.3.9
-  commands:
-      - NOCOVERAGE=true NOINSTALL=true TEST_SELECTION=MEMCACHED ./autotest.sh mysql
-  environment:
-      MEMCACHED_HOST: memcached
+  - name: Restore cache
+    image: meltwater/drone-cache:dev
+    settings:
+      backend: "filesystem"
+      restore: true
+      cache_key: '{{ .Repo.Name }}_php74_{{ arch }}_{{ os }}'
+      archive_format: "gzip"
+      mount:
+        - '.composer'
+    volumes:
+      - name: cache
+        path:
+          /tmp/cache
+  - name: Composer install
+    image: friendicaci/php7.4:php7.4.18
+    commands:
+      - export COMPOSER_HOME=.composer
+      - composer validate
+      - composer install --no-dev --optimize-autoloader
+  - name: Create artifacts
+    image: debian
+    commands:
+      - apt-get update
+      - apt-get install bzip2
+      - mkdir ./build
+      - export VERSION="$(cat VERSION)"
+      - # Create artifact
+      - export RELEASE="friendica-full-$VERSION"
+      - export ARTIFACT="$RELEASE.tar.gz"
+      - tar
+        --transform "s,^,$RELEASE/,"
+        -X mods/release-list-exclude.txt
+        -T mods/release-list-include.txt
+        -cvzf ./build/$ARTIFACT
+      - # calculate SHA256 checksum
+      - cd ./build
+      - sha256sum "$ARTIFACT" > "$ARTIFACT.sum256"
+      - chmod 664 ./*
+      - ls -lh
+      - # output the sha256 sum for checking
+      - cat "$ARTIFACT.sum256"
+      - sha256sum "$ARTIFACT"
+  - name: Sign artifacts
+    image: plugins/gpgsign
+    settings:
+      key:
+        from_secret: gpg_key
+      passphrase:
+        from_secret: gpg_password
+      files:
+        - build/*
+      exclude:
+        - build/*.sum256
+      detach_sign: true
+  - name: Upload artifacts
+    image: alpine
+    environment:
+      LFTP_HOST:
+        from_secret: sftp_host
+      LFTP_USER:
+        from_secret: sftp_user
+      LFTP_KEY:
+        from_secret: ssh_key
+      LFTP_PORT: "22"
+      LFTP_SOURCE: "build"
+      LFTP_TARGET: "/http"
+    commands:
+      - apk add lftp openssh openssl
+      - touch drone.key
+      - chmod 400 drone.key
+      - echo "$LFTP_KEY" | openssl base64 -A -d > drone.key
+      - lftp -c "
+        set net:timeout 5;
+        set net:max-retries 2;
+        set net:reconnect-interval-base 5;
+        set sftp:auto-confirm true;
+        set sftp:connect-program 'ssh -q -a -x -i drone.key';
+        connect sftp://$LFTP_USER:@$LFTP_HOST:$LFTP_PORT;
+        cd $LFTP_TARGET;
+        mput $LFTP_SOURCE/*;
+        "
+      - rm drone.key
 
-services:
-- name: memcached
-  image: memcached
+volumes:
+  - name: cache
+    host:
+      path: /tmp/drone-cache