diff --git a/ci/Makefile b/ci/Makefile new file mode 100644 index 00000000..9a021d8f --- /dev/null +++ b/ci/Makefile @@ -0,0 +1,28 @@ +HOSTNAME=ci.local +PUBLIC_IP=127.0.0.1 +OPENEXCHANGERATES_API_KEY=dummy +FIREBASE_API_KEY=dummy +PWD=$(shell pwd) + +configure: + cd .. ; \ + cp ci/env.local src/env.local ; \ + sed -i 's/{{ host }}/${HOSTNAME}/g' src/env.local ; \ + sed -i 's/{{ public_ip }}/${PUBLIC_IP}/g' src/env.local ; \ + sed -i 's/{{ openexchangerates_api_key }}/${OPENEXCHANGERATES_API_KEY}/g' src/env.local ; \ + sed -i 's/{{ firebase_api_key }}/${FIREBASE_API_KEY}/g' src/env.local ; + +setup: + cd .. && bin/quickstart.sh --nodev + +build: + cd .. && docker compose build swoole tests && cd ci + +lint: + docker run -v ${PWD}/../:/src/kolab.orig -t kolab-tests /lint.sh + +test: + docker run --network=host -v ${PWD}/../src:/src/kolabsrc.orig -t kolab-tests /init.sh + +all: configure setup build lint test + diff --git a/ci/env.local b/ci/env.local new file mode 100644 index 00000000..5b322dd7 --- /dev/null +++ b/ci/env.local @@ -0,0 +1,46 @@ +MFA_DSN=mysql://root:Welcome2KolabSystems@127.0.0.1/roundcube +APP_DOMAIN={{ host }} +APP_WEBSITE_DOMAIN={{ host }} +APP_KEY=base64:FG6ECzyAMSmyX+eYwO/FW3bwnarbKkBhqtO65vlMb1E= +APP_PUBLIC_URL=https://{{ host }} +COTURN_STATIC_SECRET=uzYguvIl9tpZFMuQOE78DpOi6Jc7VFSD0UAnvgMsg5n4e74MgIf6vQvbc6LWzZjz +COTURN_PUBLIC_IP='{{ public_ip }}' +MEET_TURN_SERVER='turn:{{ public_ip }}:3478' +MEET_WEBRTC_LISTEN_IP='{{ public_ip }}' +MEET_PUBLIC_DOMAIN={{ host }} +MEET_SERVER_URLS=https://{{ host }}/meetmedia/api/ +WEBMAIL_URL=/roundcubemail +APP_URL=https://{{ host }} +ASSET_URL=https://{{ host }} + +MOLLIE_KEY= +STRIPE_KEY= +STRIPE_PUBLIC_KEY= +STRIPE_WEBHOOK_SECRET= + +OCTANE_HTTP_HOST={{ host }} +OPENEXCHANGERATES_API_KEY={{ openexchangerates_api_key }} +FIREBASE_API_KEY={{ firebase_api_key }} + +#Generated by php artisan passport:client --password, but can be left hardcoded (the seeder will pick it up) +PASSPORT_PROXY_OAUTH_CLIENT_ID=942edef5-3dbd-4a14-8e3e-d5d59b727bee +PASSPORT_PROXY_OAUTH_CLIENT_SECRET=L6L0n56ecvjjK0cJMjeeV1pPAeffUBO0YSSH63wf + +#Generated by php artisan passport:client --password, but can be left hardcoded (the seeder will pick it up) +PASSPORT_COMPANIONAPP_OAUTH_CLIENT_ID=9566e018-f05d-425c-9915-420cdb9258bb +PASSPORT_COMPANIONAPP_OAUTH_CLIENT_SECRET=XjgV6SU9shO0QFKaU6pQPRC5rJpyRezDJTSoGLgz + +APP_TENANT_ID=42 +APP_PASSPHRASE=simple123 + +MAIL_DRIVER=log + +KOLAB_SSL_CERTIFICATE=/etc/pki/tls/certs/kolab.hosted.com.cert +KOLAB_SSL_CERTIFICATE_FULLCHAIN=/etc/pki/tls/certs/kolab.hosted.com.chain.pem +KOLAB_SSL_CERTIFICATE_KEY=/etc/pki/tls/certs/kolab.hosted.com.key + +PROXY_SSL_CERTIFICATE=/etc/pki/tls/certs/imap.hosted.com.cert +PROXY_SSL_CERTIFICATE_KEY=/etc/pki/tls/certs/imap.hosted.com.key + +NGINX_SSL_CERTIFICATE=/etc/pki/tls/certs/imap.hosted.com.cert +NGINX_SSL_CERTIFICATE_KEY=/etc/pki/tls/certs/imap.hosted.com.key diff --git a/docker/tests/Dockerfile b/docker/tests/Dockerfile index c7edc167..b7d54d63 100644 --- a/docker/tests/Dockerfile +++ b/docker/tests/Dockerfile @@ -1,12 +1,21 @@ FROM apheleia/swoole:4.8.x MAINTAINER Jeroen van Meeuwen USER root RUN dnf -y install findutils php-phpunit-PHPUnit chromium php-xdebug +RUN mkdir /src/ && chown 1001:100 /src/ + +RUN usermod -G wheel default +RUN echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers +RUN chmod 777 /opt/app-root/src + +USER default + EXPOSE 8000 COPY init.sh /init.sh +COPY lint.sh /lint.sh CMD [ "/init.sh" ] diff --git a/docker/tests/init.sh b/docker/tests/init.sh index 30df50e1..dbc98f3f 100755 --- a/docker/tests/init.sh +++ b/docker/tests/init.sh @@ -1,74 +1,75 @@ #!/bin/bash -set -e -cp -a /src/kolabsrc.orig /src/kolabsrc +#set -e +sudo cp -a /src/kolabsrc.orig /src/kolabsrc +sudo chmod 777 -R /src/kolabsrc cd /src/kolabsrc -rm -rf vendor/ composer.lock +sudo rm -rf vendor/ composer.lock php -dmemory_limit=-1 $(command -v composer) install +sudo rm -rf node_modules +mkdir node_modules npm install find bootstrap/cache/ -type f ! -name ".gitignore" -delete ./artisan key:generate ./artisan clear-compiled ./artisan cache:clear ./artisan horizon:install if [ ! -f storage/oauth-public.key -o ! -f storage/oauth-private.key ]; then ./artisan passport:keys --force fi cat >> .env << EOF PASSPORT_PRIVATE_KEY="$(cat storage/oauth-private.key)" PASSPORT_PUBLIC_KEY="$(cat storage/oauth-public.key)" EOF if rpm -qv chromium 2>/dev/null; then chver=$(rpmquery --queryformat="%{VERSION}" chromium | awk -F'.' '{print $1}') ./artisan dusk:chrome-driver ${chver} fi if [ ! -f 'resources/countries.php' ]; then ./artisan data:countries fi npm run dev - - - -# Tests\Feature\Controller\PaymentsMollieEuroTest # /usr/bin/chromium-browser --no-sandbox --headless --disable-gpu --remote-debugging-port=9222 http://localhost & rm -rf database/database.sqlite ./artisan db:ping --wait php -dmemory_limit=512M ./artisan migrate:refresh --seed ./artisan data:import || : # nohup ./artisan horizon >/dev/null 2>&1 & ./artisan octane:start --host=$(grep OCTANE_HTTP_HOST .env | tail -n1 | sed "s/OCTANE_HTTP_HOST=//") >/dev/null 2>&1 & -# phpunit --verbose tests/Feature/Controller/PaymentsMollieEuroTest.php php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ + --exclude flaky \ --verbose \ --stop-on-defect \ --stop-on-error \ --stop-on-failure \ --testsuite Unit php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ + --exclude flaky \ --verbose \ --stop-on-defect \ --stop-on-error \ --stop-on-failure \ --testsuite Functional php \ -dmemory_limit=-1 \ vendor/bin/phpunit \ + --exclude flaky \ --verbose \ --stop-on-defect \ --stop-on-error \ --stop-on-failure \ --testsuite Feature diff --git a/docker/tests/lint.sh b/docker/tests/lint.sh new file mode 100755 index 00000000..cf509b4e --- /dev/null +++ b/docker/tests/lint.sh @@ -0,0 +1,21 @@ +#!/bin/bash +set -e +sudo cp -a /src/kolab.orig /src/kolab +sudo chmod 777 -R /src/kolab +cd /src/kolab/src + +sudo rm -rf vendor/ composer.lock +php -dmemory_limit=-1 $(command -v composer) install +sudo rm -rf node_modules +mkdir node_modules +npm install + +php -dmemory_limit=500M \ + vendor/bin/phpcs \ + -s + +php -dmemory_limit=500M \ + vendor/bin/phpstan \ + analyse + +npm run lint