diff --git a/.github/workflows/build-ci.yml b/.github/workflows/build-ci.yml
index 3664d752e..e69b2bfb9 100644
--- a/.github/workflows/build-ci.yml
+++ b/.github/workflows/build-ci.yml
@@ -1,4 +1,4 @@
-name: CI
+name: "CI"
on:
push:
@@ -6,29 +6,32 @@ on:
jobs:
build:
- runs-on: ${{ matrix.os }}
- name: PHP v${{ matrix.php }} with MongoDB ${{ matrix.mongodb }} ${{ matrix.mode }}
+ runs-on: "${{ matrix.os }}"
+
+ name: "PHP v${{ matrix.php }} with MongoDB ${{ matrix.mongodb }} ${{ matrix.mode }}"
+
strategy:
matrix:
os:
- - ubuntu-latest
+ - "ubuntu-latest"
mongodb:
- - '4.4'
- - '5.0'
- - '6.0'
- - '7.0'
+ - "4.4"
+ - "5.0"
+ - "6.0"
+ - "7.0"
php:
- - '8.1'
- - '8.2'
- - '8.3'
+ - "8.1"
+ - "8.2"
+ - "8.3"
include:
- - php: '8.1'
- mongodb: '5.0'
- mode: 'low-deps'
+ - php: "8.1"
+ mongodb: "5.0"
+ mode: "low-deps"
steps:
- - uses: actions/checkout@v4
- - name: Create MongoDB Replica Set
+ - uses: "actions/checkout@v4"
+
+ - name: "Create MongoDB Replica Set"
run: |
docker run --name mongodb -p 27017:27017 -e MONGO_INITDB_DATABASE=unittest --detach mongo:${{ matrix.mongodb }} mongod --replSet rs --setParameter transactionLifetimeLimitSeconds=5
@@ -37,35 +40,43 @@ jobs:
sleep 1
done
sudo docker exec --tty mongodb $MONGOSH_BIN 127.0.0.1:27017 --eval "rs.initiate({\"_id\":\"rs\",\"members\":[{\"_id\":0,\"host\":\"127.0.0.1:27017\" }]})"
- - name: Show MongoDB server status
+
+ - name: "Show MongoDB server status"
run: |
if [ "${{ matrix.mongodb }}" = "4.4" ]; then MONGOSH_BIN="mongo"; else MONGOSH_BIN="mongosh"; fi
docker exec --tty mongodb $MONGOSH_BIN 127.0.0.1:27017 --eval "db.runCommand({ serverStatus: 1 })"
+
- name: "Installing php"
- uses: shivammathur/setup-php@v2
+ uses: "shivammathur/setup-php@v2"
with:
php-version: ${{ matrix.php }}
- extensions: curl,mbstring,xdebug
- coverage: xdebug
- tools: composer
- - name: Show PHP version
- run: php -v && composer -V
- - name: Show Docker version
- run: if [[ "$DEBUG" == "true" ]]; then docker version && env; fi
- env:
- DEBUG: ${{ secrets.DEBUG }}
- - name: Download Composer cache dependencies from cache
- id: composer-cache
+ extensions: "curl,mbstring,xdebug"
+ coverage: "xdebug"
+ tools: "composer"
+
+ - name: "Show PHP version"
+ if: ${{ secrets.DEBUG == 'true' }}
+ run: "php -v && composer -V"
+
+ - name: "Show Docker version"
+ if: ${{ secrets.DEBUG == 'true' }}
+ run: "docker version && env"
+
+ - name: "Download Composer cache dependencies from cache"
+ id: "composer-cache"
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- - name: Cache Composer dependencies
- uses: actions/cache@v3
+
+ - name: "Cache Composer dependencies"
+ uses: "actions/cache@v3"
with:
path: ${{ steps.composer-cache.outputs.dir }}
- key: ${{ matrix.os }}-composer-${{ hashFiles('**/composer.json') }}
- restore-keys: ${{ matrix.os }}-composer-
- - name: Install dependencies
+ key: "${{ matrix.os }}-composer-${{ hashFiles('**/composer.json') }}"
+ restore-keys: "${{ matrix.os }}-composer-"
+
+ - name: "Install dependencies"
run: composer update --no-interaction $([[ "${{ matrix.mode }}" == low-deps ]] && echo ' --prefer-lowest --prefer-stable')
- - name: Run tests
- run: ./vendor/bin/phpunit --coverage-clover coverage.xml
+
+ - name: "Run tests"
+ run: "./vendor/bin/phpunit --coverage-clover coverage.xml"
env:
MONGODB_URI: 'mongodb://127.0.0.1/?replicaSet=rs'
diff --git a/.github/workflows/coding-standards.yml b/.github/workflows/coding-standards.yml
index c6f730d33..aa359be3d 100644
--- a/.github/workflows/coding-standards.yml
+++ b/.github/workflows/coding-standards.yml
@@ -22,16 +22,16 @@ jobs:
- name: "Checkout"
uses: "actions/checkout@v4"
- - name: Setup cache environment
- id: extcache
- uses: shivammathur/cache-extensions@v1
+ - name: "Setup cache environment"
+ id: "extcache"
+ uses: "shivammathur/cache-extensions@v1"
with:
php-version: ${{ env.PHP_VERSION }}
extensions: "mongodb-${{ env.DRIVER_VERSION }}"
key: "extcache-v1"
- - name: Cache extensions
- uses: actions/cache@v3
+ - name: "Cache extensions"
+ uses: "actions/cache@v3"
with:
path: ${{ steps.extcache.outputs.dir }}
key: ${{ steps.extcache.outputs.key }}
@@ -42,7 +42,7 @@ jobs:
with:
coverage: "none"
extensions: "mongodb-${{ env.DRIVER_VERSION }}"
- php-version: "${{ env.PHP_VERSION }}"
+ php-version: ${{ env.PHP_VERSION }}
tools: "cs2pr"
- name: "Show driver information"
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4de5b27bd..419828755 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -38,27 +38,27 @@ Before submitting a pull request:
## Run Tests
-The full test suite requires PHP cli with mongodb extension, a running MongoDB server and a running MySQL server.
+The full test suite requires PHP cli with mongodb extension, a running MongoDB server.
Duplicate the `phpunit.xml.dist` file to `phpunit.xml` and edit the environment variables to match your setup.
```bash
-$ docker-compose up -d mongodb
-$ docker-compose run tests
+$ docker-compose run app
```
-Docker can be slow to start. You can run the command `php vendor/bin/phpunit --testdox` locally or in a docker container.
+Docker can be slow to start. You can run the command `composer run test` locally or in a docker container.
```bash
$ docker-compose run -it tests bash
# Inside the container
$ composer install
-$ vendor/bin/phpunit --testdox
+$ composer run test
```
-For fixing style issues, you can run the PHP Code Beautifier and Fixer:
+For fixing style issues, you can run the PHP Code Beautifier and Fixer, some issues can't be fixed automatically:
```bash
-$ php vendor/bin/phpcbf
+$ composer run cs:fix
+$ composer run cs
```
## Requirements
diff --git a/Dockerfile b/Dockerfile
index 5d22eb513..43529d9e4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,18 +2,15 @@ ARG PHP_VERSION=8.1
FROM php:${PHP_VERSION}-cli
+# Install extensions
RUN apt-get update && \
apt-get install -y autoconf pkg-config libssl-dev git unzip libzip-dev zlib1g-dev && \
pecl install mongodb && docker-php-ext-enable mongodb && \
pecl install xdebug && docker-php-ext-enable xdebug && \
docker-php-ext-install -j$(nproc) zip
-COPY --from=composer:2.6.2 /usr/bin/composer /usr/local/bin/composer
+# Create php.ini
+RUN cp "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"
-ENV COMPOSER_ALLOW_SUPERUSER=1
-
-WORKDIR /code
-
-COPY ./ ./
-
-CMD ["bash", "-c", "composer install && ./vendor/bin/phpunit --testdox"]
+# Install Composer
+COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer
diff --git a/composer.json b/composer.json
index b04425751..22b75f58f 100644
--- a/composer.json
+++ b/composer.json
@@ -59,6 +59,12 @@
]
}
},
+ "scripts": {
+ "test": "phpunit",
+ "test:coverage": "phpunit --coverage-clover ./coverage.xml",
+ "cs": "phpcs",
+ "cs:fix": "phpcbf"
+ },
"config": {
"platform": {
"php": "8.1"
diff --git a/docker-compose.yml b/docker-compose.yml
index fec4aa191..f757ec3cd 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,17 +1,15 @@
version: '3.5'
services:
- tests:
- container_name: tests
+ app:
tty: true
- build:
- context: .
- dockerfile: Dockerfile
- volumes:
- - .:/code
- working_dir: /code
+ build: .
+ working_dir: /var/www/laravel-mongodb
+ command: "bash -c 'composer install && composer run test'"
environment:
MONGODB_URI: 'mongodb://mongodb/'
+ volumes:
+ - .:/var/www/laravel-mongodb
depends_on:
mongodb:
condition: service_healthy
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 8e5e9d3d6..b1aa3a8eb 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -18,7 +18,7 @@
-
+