From 6cfe5a11cfdb7c6456bc4bbc4d27da241923d838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 14:10:33 +0100 Subject: [PATCH 01/13] Initial Github Actions commit, removed Travis CI --- .github/workflows/php.yml | 98 +++++++++++++++++++++++++++++++++++++++ .travis.yml | 38 --------------- composer.json | 5 ++ 3 files changed, 103 insertions(+), 38 deletions(-) create mode 100644 .github/workflows/php.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml new file mode 100644 index 0000000..7dd4f21 --- /dev/null +++ b/.github/workflows/php.yml @@ -0,0 +1,98 @@ +name: PHP Build + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +permissions: + contents: read + +env: + SPOT_DB_NAME: spot_test + SPOT_DB_PASSWORD: ${{ secrets.SPOT_DB_PASSWORD }} + SPOT_DB_HOSTNAME: 127.0.0.1 + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + php: [5.4, 5.5, 5.6, 7.0, 7.1] + type: [mysql, pgsql, sqlite] + + services: + mysql: + image: mysql + env: + # The MySQL docker container requires these environment variables to be set + # so we can create and migrate the test database. + # See: https://hub.docker.com/_/mysql + MYSQL_DATABASE: ${{ env.SPOT_DB_NAME }} + MYSQL_ROOT_PASSWORD: ${{ env.SPOT_DB_PASSWORD }} + ports: + # Opens port 3306 on service container and host + # https://docs.github.com/en/actions/using-containerized-services/about-service-containers + - 3306:3306 + # Before continuing, verify the mysql container is reachable from the ubuntu host + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + postgres: + image: postgres + env: + # Provide the password for postgres + POSTGRES_PASSWORD: ${{ env.SPOT_DB_PASSWORD }} + ports: + - 5432:5432 + # Set health checks to wait until postgres has started + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + + steps: + + - name: Set up environment + run: | + echo "TYPE=${{ matrix.type }}" >> $GITHUB_ENV + if [[ "$TYPE" == "mysql" ]]; then + echo "MYSQL_PWD=${{ env.SPOT_DB_PASSWORD }}" >> $GITHUB_ENV + mysql -e "create database IF NOT EXISTS ${{ env.SPOT_DB_NAME }};" -uroot; + echo "DSN=mysql://root:$MYSQL_PWD@${{ env.SPOT_DB_HOSTNAME }}/${{ env.SPOT_DB_NAME }}" >> $GITHUB_ENV + elif [[ "$TYPE" == "pgsql" ]]; then + echo "PGPASSWORD=${{ env.SPOT_DB_PASSWORD }}" >> $GITHUB_ENV + psql -c 'create database ${{ env.SPOT_DB_NAME }};' -U postgres; + echo "DSN=pgsql://postgres:$PGPASSWORD@${{ env.SPOT_DB_HOSTNAME }}/${{ env.SPOT_DB_NAME }}" >> $GITHUB_ENV + elif [[ "$TYPE" == "sqlite" ]]; then + echo "DSN=sqlite::memory" >> $GITHUB_ENV + fi + + - uses: actions/checkout@v4 + + - name: Install PHP ${{ matrix.php }} + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + + - name: Check PHP ${{ matrix.php }} + run: php -v + + - name: Validate composer.json and composer.lock + run: composer validate --strict + + - name: Cache Composer packages + id: composer-cache + uses: actions/cache@v4 + with: + path: vendor + key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-php- + + - name: Install dependencies + run: composer install --no-progress + + # Add a test script to composer.json, for instance: "test": "vendor/bin/phpunit" + # Docs: https://getcomposer.org/doc/articles/scripts.md + - name: Run test suite + run: composer run-script test_$TYPE + \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 54eaca7..0000000 --- a/.travis.yml +++ /dev/null @@ -1,38 +0,0 @@ -# see http://about.travis-ci.org/docs/user/languages/php/ for more hints -language: php - -sudo: false - -cache: - directories: - - $HOME/.composer/cache - -php: - - 5.4 - - 5.5 - - 5.6 - - 7.0 - - 7.1 - - hhvm - -matrix: - allow_failures: - - php: hhvm - - php: 7.1 - -env: - - TYPE=mysql DSN=mysql://root@localhost/spot_test - - TYPE=pgsql DSN=pgsql://postgres@localhost/spot_test" - - TYPE=sqlite DSN=sqlite::memory - -install: - - composer install - -# execute any number of scripts before the test run, custom env's are available as variables -before_script: - - if [[ "$TYPE" == "mysql" ]]; then mysql -e "create database IF NOT EXISTS spot_test;" -uroot; fi - - if [[ "$TYPE" == "pgsql" ]]; then psql -c 'create database spot_test;' -U postgres; fi - -# omitting "script:" will default to phpunit -# use the $TYPE env variable to determine the phpunit.xml to use -script: vendor/bin/phpunit --configuration phpunit_$TYPE.xml --coverage-text diff --git a/composer.json b/composer.json index 1be286f..d6ce6e5 100644 --- a/composer.json +++ b/composer.json @@ -30,5 +30,10 @@ "psr-4": { "SpotTest\\": "tests/" } + }, + "scripts": { + "test_mysql": "vendor/bin/phpunit --configuration phpunit_mysql.xml --coverage-text", + "test_pgsql": "vendor/bin/phpunit --configuration phpunit_pgsql.xml --coverage-text", + "test_sqlite": "vendor/bin/phpunit --configuration phpunit_sqlite.xml --coverage-text" } } From bd7b8f55cdf91e9dd79c708c845cd4fbeffcddfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 14:25:20 +0100 Subject: [PATCH 02/13] Fixed YAML typo --- .github/workflows/php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 7dd4f21..305a308 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -39,7 +39,7 @@ jobs: - 3306:3306 # Before continuing, verify the mysql container is reachable from the ubuntu host options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 - postgres: + postgres: image: postgres env: # Provide the password for postgres From 6b5df59d0d6eea4a64b74b5be785ef48c03f62a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 14:49:44 +0100 Subject: [PATCH 03/13] Moved TYPE variable to its own step --- .github/workflows/php.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 305a308..10a2177 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -51,9 +51,13 @@ jobs: steps: - - name: Set up environment + - name: Set up common environment variables run: | echo "TYPE=${{ matrix.type }}" >> $GITHUB_ENV + + # Has to be a different step othwerwise $TYPE is not yet available + - name: Set up database specific environment variables + run: | if [[ "$TYPE" == "mysql" ]]; then echo "MYSQL_PWD=${{ env.SPOT_DB_PASSWORD }}" >> $GITHUB_ENV mysql -e "create database IF NOT EXISTS ${{ env.SPOT_DB_NAME }};" -uroot; @@ -95,4 +99,3 @@ jobs: # Docs: https://getcomposer.org/doc/articles/scripts.md - name: Run test suite run: composer run-script test_$TYPE - \ No newline at end of file From 84a69338a942a0e75db4f069ee456f8325d71a3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 14:51:58 +0100 Subject: [PATCH 04/13] YAML typo fix --- .github/workflows/php.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 10a2177..3e3e264 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -55,8 +55,8 @@ jobs: run: | echo "TYPE=${{ matrix.type }}" >> $GITHUB_ENV - # Has to be a different step othwerwise $TYPE is not yet available - - name: Set up database specific environment variables + # Has to be a different step othwerwise $TYPE is not yet available + - name: Set up database specific environment variables run: | if [[ "$TYPE" == "mysql" ]]; then echo "MYSQL_PWD=${{ env.SPOT_DB_PASSWORD }}" >> $GITHUB_ENV From ab4ae1189a6aac28e7998c8299395d618903afe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 14:55:53 +0100 Subject: [PATCH 05/13] Added hostname to prevent connecting via socket --- .github/workflows/php.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 3e3e264..4b55a43 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -60,11 +60,11 @@ jobs: run: | if [[ "$TYPE" == "mysql" ]]; then echo "MYSQL_PWD=${{ env.SPOT_DB_PASSWORD }}" >> $GITHUB_ENV - mysql -e "create database IF NOT EXISTS ${{ env.SPOT_DB_NAME }};" -uroot; + mysql -e "create database IF NOT EXISTS ${{ env.SPOT_DB_NAME }};" -uroot -h ${{ env.SPOT_DB_HOSTNAME }}; echo "DSN=mysql://root:$MYSQL_PWD@${{ env.SPOT_DB_HOSTNAME }}/${{ env.SPOT_DB_NAME }}" >> $GITHUB_ENV elif [[ "$TYPE" == "pgsql" ]]; then echo "PGPASSWORD=${{ env.SPOT_DB_PASSWORD }}" >> $GITHUB_ENV - psql -c 'create database ${{ env.SPOT_DB_NAME }};' -U postgres; + psql -c 'create database ${{ env.SPOT_DB_NAME }};' -U postgres -h ${{ env.SPOT_DB_HOSTNAME }}; echo "DSN=pgsql://postgres:$PGPASSWORD@${{ env.SPOT_DB_HOSTNAME }}/${{ env.SPOT_DB_NAME }}" >> $GITHUB_ENV elif [[ "$TYPE" == "sqlite" ]]; then echo "DSN=sqlite::memory" >> $GITHUB_ENV From 2055b123672cd3f5ef41be9bc71c895b28066093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 15:00:37 +0100 Subject: [PATCH 06/13] Removed SPOT_DB_PASSWORD --- .github/workflows/php.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 4b55a43..cacafcb 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -11,7 +11,8 @@ permissions: env: SPOT_DB_NAME: spot_test - SPOT_DB_PASSWORD: ${{ secrets.SPOT_DB_PASSWORD }} + MYSQL_PWD: ${{ secrets.SPOT_DB_PASSWORD }} + PGPASSWORD: ${{ secrets.SPOT_DB_PASSWORD }} SPOT_DB_HOSTNAME: 127.0.0.1 jobs: @@ -32,7 +33,7 @@ jobs: # so we can create and migrate the test database. # See: https://hub.docker.com/_/mysql MYSQL_DATABASE: ${{ env.SPOT_DB_NAME }} - MYSQL_ROOT_PASSWORD: ${{ env.SPOT_DB_PASSWORD }} + MYSQL_ROOT_PASSWORD: ${{ env.MYSQL_PWD }} ports: # Opens port 3306 on service container and host # https://docs.github.com/en/actions/using-containerized-services/about-service-containers @@ -43,7 +44,7 @@ jobs: image: postgres env: # Provide the password for postgres - POSTGRES_PASSWORD: ${{ env.SPOT_DB_PASSWORD }} + POSTGRES_PASSWORD: ${{ env.PGPASSWORD }} ports: - 5432:5432 # Set health checks to wait until postgres has started @@ -59,13 +60,11 @@ jobs: - name: Set up database specific environment variables run: | if [[ "$TYPE" == "mysql" ]]; then - echo "MYSQL_PWD=${{ env.SPOT_DB_PASSWORD }}" >> $GITHUB_ENV mysql -e "create database IF NOT EXISTS ${{ env.SPOT_DB_NAME }};" -uroot -h ${{ env.SPOT_DB_HOSTNAME }}; - echo "DSN=mysql://root:$MYSQL_PWD@${{ env.SPOT_DB_HOSTNAME }}/${{ env.SPOT_DB_NAME }}" >> $GITHUB_ENV + echo "DSN=mysql://root:${{ env.MYSQL_PWD }}@${{ env.SPOT_DB_HOSTNAME }}/${{ env.SPOT_DB_NAME }}" >> $GITHUB_ENV elif [[ "$TYPE" == "pgsql" ]]; then - echo "PGPASSWORD=${{ env.SPOT_DB_PASSWORD }}" >> $GITHUB_ENV psql -c 'create database ${{ env.SPOT_DB_NAME }};' -U postgres -h ${{ env.SPOT_DB_HOSTNAME }}; - echo "DSN=pgsql://postgres:$PGPASSWORD@${{ env.SPOT_DB_HOSTNAME }}/${{ env.SPOT_DB_NAME }}" >> $GITHUB_ENV + echo "DSN=pgsql://postgres:${{ env.PGPASSWORD }}@${{ env.SPOT_DB_HOSTNAME }}/${{ env.SPOT_DB_NAME }}" >> $GITHUB_ENV elif [[ "$TYPE" == "sqlite" ]]; then echo "DSN=sqlite::memory" >> $GITHUB_ENV fi From 99993ec243851bd61addb31b23a2781aa5716f66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 15:08:13 +0100 Subject: [PATCH 07/13] Renamed env variables --- .github/workflows/php.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index cacafcb..e70168c 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -54,19 +54,19 @@ jobs: - name: Set up common environment variables run: | - echo "TYPE=${{ matrix.type }}" >> $GITHUB_ENV + echo "SPOT_DB_TYPE=${{ matrix.type }}" >> $GITHUB_ENV # Has to be a different step othwerwise $TYPE is not yet available - name: Set up database specific environment variables run: | - if [[ "$TYPE" == "mysql" ]]; then + if [[ "$SPOT_DB_TYPE" == "mysql" ]]; then mysql -e "create database IF NOT EXISTS ${{ env.SPOT_DB_NAME }};" -uroot -h ${{ env.SPOT_DB_HOSTNAME }}; - echo "DSN=mysql://root:${{ env.MYSQL_PWD }}@${{ env.SPOT_DB_HOSTNAME }}/${{ env.SPOT_DB_NAME }}" >> $GITHUB_ENV - elif [[ "$TYPE" == "pgsql" ]]; then + echo "SPOT_DB_DSN=mysql://root:${{ env.MYSQL_PWD }}@${{ env.SPOT_DB_HOSTNAME }}/${{ env.SPOT_DB_NAME }}" >> $GITHUB_ENV + elif [[ "$SPOT_DB_TYPE" == "pgsql" ]]; then psql -c 'create database ${{ env.SPOT_DB_NAME }};' -U postgres -h ${{ env.SPOT_DB_HOSTNAME }}; - echo "DSN=pgsql://postgres:${{ env.PGPASSWORD }}@${{ env.SPOT_DB_HOSTNAME }}/${{ env.SPOT_DB_NAME }}" >> $GITHUB_ENV - elif [[ "$TYPE" == "sqlite" ]]; then - echo "DSN=sqlite::memory" >> $GITHUB_ENV + echo "SPOT_DB_DSN=pgsql://postgres:${{ env.PGPASSWORD }}@${{ env.SPOT_DB_HOSTNAME }}/${{ env.SPOT_DB_NAME }}" >> $GITHUB_ENV + elif [[ "$SPOT_DB_TYPE" == "sqlite" ]]; then + echo "SPOT_DB_DSN=sqlite::memory" >> $GITHUB_ENV fi - uses: actions/checkout@v4 @@ -96,5 +96,5 @@ jobs: # Add a test script to composer.json, for instance: "test": "vendor/bin/phpunit" # Docs: https://getcomposer.org/doc/articles/scripts.md - - name: Run test suite - run: composer run-script test_$TYPE + - name: Run ${{ matrix.type }} test suite + run: composer run-script test_$SPOT_DB_TYPE From c6cfe1517b5a77742ea989c36fe089606fae82df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 15:14:58 +0100 Subject: [PATCH 08/13] Changed services --- .github/workflows/php.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index e70168c..f8fbc08 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -22,12 +22,12 @@ jobs: strategy: matrix: - php: [5.4, 5.5, 5.6, 7.0, 7.1] - type: [mysql, pgsql, sqlite] + php: ['5.4', '5.5', '5.6', '7.0', '7.1'] + type: ['mysql', 'pgsql', 'sqlite'] services: mysql: - image: mysql + image: ${{ (matrix.type == 'mysql') && 'mysql:5.7' || '' }} env: # The MySQL docker container requires these environment variables to be set # so we can create and migrate the test database. @@ -41,7 +41,7 @@ jobs: # Before continuing, verify the mysql container is reachable from the ubuntu host options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 postgres: - image: postgres + image: ${{ (matrix.type == 'postgres') && 'postgres' || '' }} env: # Provide the password for postgres POSTGRES_PASSWORD: ${{ env.PGPASSWORD }} From 6d387a49399ce1e5e5e76a3e803a0c7014acdf39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 15:21:17 +0100 Subject: [PATCH 09/13] postgres service fix --- .github/workflows/php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index f8fbc08..615e2a3 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -41,7 +41,7 @@ jobs: # Before continuing, verify the mysql container is reachable from the ubuntu host options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 postgres: - image: ${{ (matrix.type == 'postgres') && 'postgres' || '' }} + image: ${{ (matrix.type == 'postgres') && 'postgres:latest' || '' }} env: # Provide the password for postgres POSTGRES_PASSWORD: ${{ env.PGPASSWORD }} From 9977a59e2a5ebc4bf6a3024c8a78bad1c4673c66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 15:22:27 +0100 Subject: [PATCH 10/13] Fixed pgsql condition --- .github/workflows/php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 615e2a3..55d7cbf 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -41,7 +41,7 @@ jobs: # Before continuing, verify the mysql container is reachable from the ubuntu host options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 postgres: - image: ${{ (matrix.type == 'postgres') && 'postgres:latest' || '' }} + image: ${{ (matrix.type == 'pgsql') && 'postgres' || '' }} env: # Provide the password for postgres POSTGRES_PASSWORD: ${{ env.PGPASSWORD }} From ca20b35f4b5718a8b25125191435d109b069c59f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 15:30:06 +0100 Subject: [PATCH 11/13] Set fail-fast to false --- .github/workflows/php.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 55d7cbf..11298cb 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -21,13 +21,14 @@ jobs: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: php: ['5.4', '5.5', '5.6', '7.0', '7.1'] type: ['mysql', 'pgsql', 'sqlite'] services: mysql: - image: ${{ (matrix.type == 'mysql') && 'mysql:5.7' || '' }} + image: ${{ (matrix.type == 'mysql') && 'mysql:5.6' || '' }} env: # The MySQL docker container requires these environment variables to be set # so we can create and migrate the test database. From f7ae2caebc1f8bc0c33b38b49d0d082efe0d1856 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 15:33:05 +0100 Subject: [PATCH 12/13] Removed PHP 7.1 --- .github/workflows/php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 11298cb..f62a835 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -23,7 +23,7 @@ jobs: strategy: fail-fast: false matrix: - php: ['5.4', '5.5', '5.6', '7.0', '7.1'] + php: ['5.4', '5.5', '5.6', '7.0'] type: ['mysql', 'pgsql', 'sqlite'] services: From 16d3dba2f5cbd6d4ca4d4f8cbab75a86e116e09e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Dob=C3=B3?= Date: Thu, 21 Nov 2024 15:36:42 +0100 Subject: [PATCH 13/13] Updated README.md build badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8eabb8c..17ce00c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Spot DataMapper ORM v2.0 [![Build Status](https://travis-ci.org/spotorm/spot2.svg)](https://travis-ci.org/spotorm/spot2) +Spot DataMapper ORM v2.0 [![Build Status](https://github.com/spotorm/spot2/actions/workflows/php.yml/badge.svg)](https://github.com/spotorm/spot2/actions/workflows/php.yml) ======================== Spot v2.x is built on the [Doctrine DBAL](http://www.doctrine-project.org/projects/dbal.html), and targets PHP