From cea4a8cb6cb68af113a0f845fdedad4b53a832d9 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 18 Dec 2021 20:28:14 +0100 Subject: [PATCH] Replace .drone.yml with .woodpecker tests --- .drone.yml | 653 ------------------------- .woodpecker/.code_standards_check.yml | 33 ++ .woodpecker/.continuous-deployment.yml | 116 +++++ .woodpecker/.database_checks.yml | 85 ++++ .woodpecker/.messages.po_check.yml | 12 + .woodpecker/.phpunit.yml | 96 ++++ .woodpecker/.releaser.yml | 112 +++++ 7 files changed, 454 insertions(+), 653 deletions(-) delete mode 100644 .drone.yml create mode 100644 .woodpecker/.code_standards_check.yml create mode 100644 .woodpecker/.continuous-deployment.yml create mode 100644 .woodpecker/.database_checks.yml create mode 100644 .woodpecker/.messages.po_check.yml create mode 100644 .woodpecker/.phpunit.yml create mode 100644 .woodpecker/.releaser.yml diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index 99692d32c..000000000 --- a/.drone.yml +++ /dev/null @@ -1,653 +0,0 @@ -kind: pipeline -type: docker -name: Check messages.po - -steps: - - name: Run default Xgettext - image: friendicaci/transifex - commands: - - ./bin/run_xgettext.sh - - - name: Check default - image: friendicaci/transifex - commands: - - /check-messages.sh ---- -kind: pipeline -type: docker -name: Integrity checks - -steps: - - 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 -type: docker -name: php7.3-lint - -steps: - - name: Test - image: php:7.3 - commands: - - ./bin/composer.phar run lint ---- -kind: pipeline -type: docker -name: php7.4-lint - -steps: - - name: Test - image: php:7.4 - commands: - - ./bin/composer.phar run lint ---- -kind: pipeline -type: docker -name: php8.0-lint - -steps: - - name: Test - image: php:8.0 - commands: - - ./bin/composer.phar run lint ---- -kind: pipeline -type: docker -name: php-cs check - -trigger: - event: - - pull_request - -steps: - - 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 - host: - path: /tmp/drone-cache ---- -kind: pipeline -type: docker -name: php7.4-database-check - -depends_on: - - Integrity checks - -steps: - - 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: mariadb - image: mariadb:latest - environment: - MYSQL_ALLOW_EMPTY_PASSWORD: "true" - MYSQL_DATABASE: "test" - MYSQL_PASSWORD: "test" - MYSQL_USER: "test" - tmpfs: - - /var/lib/mysql - -volumes: - - name: cache - host: - path: /tmp/drone-cache ---- -kind: pipeline -type: docker -name: php7.3-mariadb - -depends_on: - - php7.3-lint - -steps: - - 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: 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 -type: docker -name: php7.4-mariadb - -depends_on: - - php7.4-lint - -steps: - - 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: 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 -type: docker -name: php8.0-mariadb - -depends_on: - - php8.0-lint - -steps: - - 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: 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 -type: docker -name: continuous-deployment - -depends_on: - - php7.3-mariadb - - php7.4-mariadb - - php8.0-mariadb - -trigger: - repo: - - friendica/friendica - branch: - - develop - - 20*-rc - event: - - push - -node: - node: releaser # This prevents executing this pipeline at other servers than drone.friendi.ca - -steps: - - 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 - -volumes: - - name: cache - host: - path: /tmp/drone-cache ---- -kind: pipeline -type: docker -name: release-deployment - -depends_on: - - php7.3-mariadb - - php7.4-mariadb - - php8.0-mariadb - -trigger: - repo: - - friendica/friendica - branch: - - stable - event: - - tag - -node: - node: releaser # This prevents executing this pipeline at other servers than drone.friendi.ca - -steps: - - 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 - -volumes: - - name: cache - host: - path: /tmp/drone-cache diff --git a/.woodpecker/.code_standards_check.yml b/.woodpecker/.code_standards_check.yml new file mode 100644 index 000000000..d348b41af --- /dev/null +++ b/.woodpecker/.code_standards_check.yml @@ -0,0 +1,33 @@ +pipeline: + 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: + - /tmp/drone-cache:/tmp/cache + composer_install: + image: composer + commands: + - export COMPOSER_HOME=.composer + - ./bin/composer.phar run cs:install + 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: + - /tmp/drone-cache:/tmp/cache + check: + image: friendicaci/php-cs + commands: + - export CHANGED_FILES="$(git diff --name-status ${CI_PREV_COMMIT_SHA}..${CI_COMMIT_SHA} | grep ^A | cut -f2)" + - /check-php-cs.sh diff --git a/.woodpecker/.continuous-deployment.yml b/.woodpecker/.continuous-deployment.yml new file mode 100644 index 000000000..e2642f1fe --- /dev/null +++ b/.woodpecker/.continuous-deployment.yml @@ -0,0 +1,116 @@ +matrix: + include: + - PHP_MAJOR_VERSION: 7.4 + PHP_VERSION: 7.4.18 + +depends_on: + - phpunit + - code_standards_check + - database_checks + - messages.po_check + +platform: releaser/release # This prevents executing this pipeline at other servers than ci.friendi.ca + +pipeline: + restore_cache: + image: meltwater/drone-cache:dev + settings: + backend: "filesystem" + restore: true + cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}" + archive_format: "gzip" + mount: + - '.composer' + volumes: + - /tmp/drone-cache:/tmp/cache + when: + repo: friendica/friendica + branch: [ develop, '*-rc' ] + event: push + composer_install: + image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION} + commands: + - export COMPOSER_HOME=.composer + - composer validate + - composer install --no-dev --optimize-autoloader + volumes: + - /etc/hosts:/etc/hosts + when: + repo: friendica/friendica + branch: [ develop, '*-rc' ] + event: push + create_artifacts: + image: debian + commands: + - apt-get update + - apt-get install bzip2 + - mkdir ./build + - export VERSION="$(cat VERSION)" + - 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 + - cd ./build + - sha256sum "$ARTIFACT" > "$ARTIFACT.sum256" + - chmod 664 ./* + - ls -lh + - cat "$ARTIFACT.sum256" + - sha256sum "$ARTIFACT" + when: + repo: friendica/friendica + branch: [ develop, '*-rc' ] + event: push + sign_artifacts: + image: plugins/gpgsign + settings: + key: + from_secret: gpg_key + passphrase: + from_secret: gpg_password + files: + - build/* + exclude: + - build/*.sum256 + detach_sign: true + when: + repo: friendica/friendica + branch: [ develop, '*-rc' ] + event: push + upload_artifacts: + image: alpine + secrets: + - source: sftp_host + target: lftp_host + - source: sftp_user + target: lftp_user + - source: ssh_key + target: lftp_key + environment: + LFTP_PORT: "22" + LFTP_SOURCE: "build" + LFTP_TARGET: "/http" + volumes: + - /etc/hosts:/etc/hosts + 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 + when: + repo: friendica/friendica + branch: [ develop, '*-rc' ] + event: push diff --git a/.woodpecker/.database_checks.yml b/.woodpecker/.database_checks.yml new file mode 100644 index 000000000..867638264 --- /dev/null +++ b/.woodpecker/.database_checks.yml @@ -0,0 +1,85 @@ +matrix: + include: + - PHP_MAJOR_VERSION: 7.4 + PHP_VERSION: 7.4.18 + +branches: + exclude: [ stable ] + +pipeline: + db_version_match: + image: friendicaci/transifex + 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 + restore_cache: + image: meltwater/drone-cache:dev + settings: + backend: "filesystem" + restore: true + cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}" + archive_format: "gzip" + mount: + - '.composer' + volumes: + - /tmp/drone-cache:/tmp/cache + composer_install: + image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION} + commands: + - export COMPOSER_HOME=.composer + - ./bin/composer.phar validate + - ./bin/composer.phar install --prefer-dist + volumes: + - /etc/hosts:/etc/hosts + rebuild_cache: + image: meltwater/drone-cache:dev + settings: + backend: "filesystem" + rebuild: true + cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}" + archive_format: "gzip" + mount: + - '.composer' + volumes: + - /tmp/drone-cache:/tmp/cache + recreate_database.sql: + image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION} + 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 + 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: + mariadb: + image: mariadb:latest + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: "true" + MYSQL_DATABASE: "test" + MYSQL_PASSWORD: "test" + MYSQL_USER: "test" diff --git a/.woodpecker/.messages.po_check.yml b/.woodpecker/.messages.po_check.yml new file mode 100644 index 000000000..c5b283e1d --- /dev/null +++ b/.woodpecker/.messages.po_check.yml @@ -0,0 +1,12 @@ +pipeline: + build_xgettext: + image: friendicaci/transifex + commands: + - ./bin/run_xgettext.sh + check: + image: friendicaci/transifex + commands: + - /check-messages.sh + +branches: + exclude: [ stable ] \ No newline at end of file diff --git a/.woodpecker/.phpunit.yml b/.woodpecker/.phpunit.yml new file mode 100644 index 000000000..7cb91eff7 --- /dev/null +++ b/.woodpecker/.phpunit.yml @@ -0,0 +1,96 @@ +matrix: + include: + - PHP_MAJOR_VERSION: 7.3 + PHP_VERSION: 7.3.28 + - PHP_MAJOR_VERSION: 7.4 + PHP_VERSION: 7.4.18 + - PHP_MAJOR_VERSION: 8.0 + PHP_VERSION: 8.0.5 + +pipeline: + php-lint: + image: php:${PHP_MAJOR_VERSION} + group: lint + commands: + - ./bin/composer.phar run lint + restore_cache: + image: meltwater/drone-cache:dev + settings: + backend: "filesystem" + restore: true + cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}" + archive_format: "gzip" + mount: + - '.composer' + volumes: + - /tmp/drone-cache:/tmp/cache + composer_install: + image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION} + commands: + - export COMPOSER_HOME=.composer + - ./bin/composer.phar validate + - ./bin/composer.phar install --prefer-dist + volumes: + - /etc/hosts:/etc/hosts + rebuild_cache: + image: meltwater/drone-cache:dev + settings: + backend: "filesystem" + rebuild: true + cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}" + archive_format: "gzip" + mount: + - '.composer' + volumes: + - /tmp/drone-cache:/tmp/cache + test: + image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION} + 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 + - if [ "${PHP_MAJOR_VERSION}" = "7.4" -a "${CI_REPO}" = "friendica/friendica" ]; then + phpenmod xdebug; + export XDEBUG_MODE=coverage; + phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml; + else + phpunit --configuration tests/phpunit.xml; + fi + + codecov: + image: plugins/codecov + when: + matrix: + PHP_MAJOR_VERSION: 7.4 + PHP_VERSION: 7.4.18 + repo: + - friendica/friendica + settings: + token: + from_secret: codecov-token + files: + - clover.xml + +services: + mariadb: + image: mariadb:latest + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: "true" + MYSQL_DATABASE: "test" + MYSQL_PASSWORD: "test" + MYSQL_USER: "test" + + memcached: + image: memcached + + redis: + image: redis diff --git a/.woodpecker/.releaser.yml b/.woodpecker/.releaser.yml new file mode 100644 index 000000000..de0d6ba0e --- /dev/null +++ b/.woodpecker/.releaser.yml @@ -0,0 +1,112 @@ +matrix: + include: + - PHP_MAJOR_VERSION: 7.4 + PHP_VERSION: 7.4.18 + +depends_on: + - phpunit + - code_standards_check + +platform: releaser/release # This prevents executing this pipeline at other servers than ci.friendi.ca + +pipeline: + restore_cache: + image: meltwater/drone-cache:dev + settings: + backend: "filesystem" + restore: true + cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}" + archive_format: "gzip" + mount: + - '.composer' + volumes: + - /tmp/drone-cache:/tmp/cache + when: + repo: friendica/friendica + branch: stable + event: tag + composer_install: + image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION} + commands: + - export COMPOSER_HOME=.composer + - composer validate + - composer install --no-dev --optimize-autoloader + when: + repo: friendica/friendica + branch: stable + event: tag + create_artifacts: + image: debian + commands: + - apt-get update + - apt-get install bzip2 + - mkdir ./build + - export VERSION="$(cat VERSION)" + - 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 + - cd ./build + - sha256sum "$ARTIFACT" > "$ARTIFACT.sum256" + - chmod 664 ./* + - ls -lh + - cat "$ARTIFACT.sum256" + - sha256sum "$ARTIFACT" + when: + repo: friendica/friendica + branch: stable + event: tag + sign_artifacts: + image: plugins/gpgsign + settings: + key: + from_secret: gpg_key + passphrase: + from_secret: gpg_password + files: + - build/* + exclude: + - build/*.sum256 + detach_sign: true + when: + repo: friendica/friendica + branch: stable + event: tag + upload_artifacts: + image: alpine + secrets: + - source: sftp_host + target: lftp_host + - source: sftp_user + target: lftp_user + - source: ssh_key + target: lftp_key + environment: + LFTP_PORT: "22" + LFTP_SOURCE: "build" + LFTP_TARGET: "/http" + volumes: + - /etc/hosts:/etc/hosts + 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 + when: + repo: friendica/friendica + branch: stable + event: tag