diff options
| -rw-r--r-- | composer.json | 9 | ||||
| -rw-r--r-- | docker-compose.yml | 20 | ||||
| -rwxr-xr-x | scripts/test.sh | 28 |
3 files changed, 57 insertions, 0 deletions
diff --git a/composer.json b/composer.json index 07e888d..001780a 100644 --- a/composer.json +++ b/composer.json @@ -24,5 +24,14 @@ }, "require-dev": { "phpunit/phpunit": "^12" + }, + "scripts": { + "test": "phpunit", + "matrix": [ + "COMPOSER_FLAGS=--prefer-lowest docker compose run --rm php84", + "COMPOSER_FLAGS=--prefer-stable docker compose run --rm php84", + "COMPOSER_FLAGS=--prefer-lowest docker compose run --rm php85", + "COMPOSER_FLAGS=--prefer-stable docker compose run --rm php85" + ] } } diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..4a8aea4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,20 @@ +x-test: &test + environment: + - COMPOSER_FLAGS=${COMPOSER_FLAGS:-} + volumes: + - .:/app:ro + - composer-cache:/root/.composer + working_dir: /app + command: sh scripts/test.sh + +services: + php84: + <<: *test + image: php:8.4-cli-alpine + + php85: + <<: *test + image: php:8.5-cli-alpine + +volumes: + composer-cache: diff --git a/scripts/test.sh b/scripts/test.sh new file mode 100755 index 0000000..70554be --- /dev/null +++ b/scripts/test.sh @@ -0,0 +1,28 @@ +#!/bin/sh +set -e + +COMPOSER_PHAR="/root/.composer/composer.phar" +WORKDIR="/tmp/app" + +# Copy project to isolated working directory +rm -rf "$WORKDIR" +cp -r /app "$WORKDIR" +cd "$WORKDIR" + +# Remove lock file and vendor for fresh install +rm -f composer.lock +rm -rf vendor/ + +# Download Composer if not cached +if [ ! -f "$COMPOSER_PHAR" ]; then + echo "Downloading Composer..." + mkdir -p /root/.composer + curl -sS https://getcomposer.org/installer | php -- --install-dir=/root/.composer --filename=composer.phar +fi + +# Install dependencies +echo "COMPOSER_FLAGS: ${COMPOSER_FLAGS:-<empty>}" +php "$COMPOSER_PHAR" update --no-interaction ${COMPOSER_FLAGS:-} + +# Run tests +php "$COMPOSER_PHAR" test |
