mirror of
https://github.com/archtechx/tenancy.git
synced 2025-12-12 08:04:03 +00:00
[WIP] Use a lighter Docker image, use it in CI (#793)
* Use action services and setup-php in workflow
* Fix codecov
* exclude master from CI
* Add space after 'up' in 'docker-compose up-d' (#900)
* Fix ArgumentCountError on the TenantAssetsController (#894)
* Fix ArgumentCount exception on the TenantAssetsController when no `$path` is provided
* CS
* CS
* Handle null case explicitly
* code style
Co-authored-by: Bram Wubs <bram@sibi.nl>
Co-authored-by: Samuel Štancl <samuel@archte.ch>
* Improve Dockerfile and use it in CI
* Update Dockerfile
* mssql CI health check
* cache key
* Update ci.yml
* Update ci.yml
* Update composer.json
* register dumcommand when L8
* Update ci.yml
* Update composer.json
* Update composer.json
* Update composer.json
* wip
* removed extensions config and php version from matrix
* introduce php-cs-fixer issue for testing
* Fix code style (php-cs-fixer)
* install composer in Docker and remove setup-php step
* added pcov for coverage
* on master branch
* composer test command
* tests above services
* Update ci.yml
* Revert "register dumcommand when L8"
This reverts commit f165fc58ba.
* removed composer cache dependencies
Co-authored-by: Samuel Štancl <samuel.stancl@gmail.com>
Co-authored-by: lukinovec <lukinovec@gmail.com>
Co-authored-by: Bram Wubs <megawubs@users.noreply.github.com>
Co-authored-by: Bram Wubs <bram@sibi.nl>
Co-authored-by: Samuel Štancl <samuel@archte.ch>
Co-authored-by: Abrar Ahmad <abrar.dev99@gmail.com>
Co-authored-by: PHP CS Fixer <phpcsfixer@example.com>
This commit is contained in:
parent
931c76d697
commit
ca2eefa30a
3 changed files with 93 additions and 52 deletions
81
.github/workflows/ci.yml
vendored
81
.github/workflows/ci.yml
vendored
|
|
@ -1,32 +1,91 @@
|
||||||
name: CI
|
name: CI
|
||||||
|
|
||||||
env:
|
env:
|
||||||
COMPOSE_INTERACTIVE_NO_CLI: 1
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ master ]
|
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
tests:
|
tests:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
container: abrardev/tenancy:latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
php: ["8.1"]
|
laravel: ['^8.0', '^9.0']
|
||||||
laravel: ["^9.0"]
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- name: Checkout
|
||||||
- name: Start docker containers
|
uses: actions/checkout@v2
|
||||||
run: PHP_VERSION=${{ matrix.php }} docker-compose up -d
|
|
||||||
- name: Install dependencies
|
- name: Install Composer dependencies
|
||||||
run: docker-compose exec -T test composer require --no-interaction "laravel/framework:${{ matrix.laravel }}"
|
run: |
|
||||||
- name: Run tests
|
composer require "laravel/framework:${{ matrix.laravel }}" --no-interaction --no-update
|
||||||
run: ./test
|
composer update --prefer-dist --no-interaction
|
||||||
|
- name: Run tests
|
||||||
|
run: ./vendor/bin/pest
|
||||||
|
env:
|
||||||
|
DB_PASSWORD: password
|
||||||
|
DB_USERNAME: root
|
||||||
|
DB_DATABASE: main
|
||||||
|
TENANCY_TEST_MYSQL_HOST: mysql
|
||||||
|
TENANCY_TEST_PGSQL_HOST: postgres
|
||||||
|
TENANCY_TEST_REDIS_HOST: redis
|
||||||
|
TENANCY_TEST_SQLSRV_HOST: mssql
|
||||||
|
|
||||||
|
- name: Upload coverage to Codecov
|
||||||
|
uses: codecov/codecov-action@v2
|
||||||
|
with:
|
||||||
|
token: 24382d15-84e7-4a55-bea4-c4df96a24a9b
|
||||||
|
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:latest
|
||||||
|
env:
|
||||||
|
POSTGRES_PASSWORD: password
|
||||||
|
POSTGRES_USER: root
|
||||||
|
POSTGRES_DB: main
|
||||||
|
ports:
|
||||||
|
- 5432/tcp
|
||||||
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||||
|
|
||||||
|
mysql:
|
||||||
|
image: mysql:5.7
|
||||||
|
env:
|
||||||
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
|
MYSQL_ROOT_PASSWORD: password
|
||||||
|
MYSQL_DATABASE: main
|
||||||
|
ports:
|
||||||
|
- 3306/tcp
|
||||||
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
|
||||||
|
mysql2:
|
||||||
|
image: mysql:5.7
|
||||||
|
env:
|
||||||
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
|
MYSQL_ROOT_PASSWORD: password
|
||||||
|
MYSQL_DATABASE: main
|
||||||
|
ports:
|
||||||
|
- 3306/tcp
|
||||||
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
|
||||||
|
mssql:
|
||||||
|
image: mcr.microsoft.com/mssql/server:2019-latest
|
||||||
|
ports:
|
||||||
|
- 1433/tcp
|
||||||
|
env:
|
||||||
|
ACCEPT_EULA: Y
|
||||||
|
SA_PASSWORD: P@ssword
|
||||||
|
options: --health-cmd "echo quit | /opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -l 1 -U sa -P P@ssword"
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: redis
|
||||||
|
ports:
|
||||||
|
- 6379/tcp
|
||||||
|
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
|
||||||
php-cs-fixer:
|
php-cs-fixer:
|
||||||
name: Code style (php-cs-fixer)
|
name: Code style (php-cs-fixer)
|
||||||
|
|
|
||||||
52
Dockerfile
52
Dockerfile
|
|
@ -1,9 +1,7 @@
|
||||||
ARG PHP_VERSION=7.4
|
# add amd64 platform to support Mac M1
|
||||||
ARG PHP_TARGET=php:${PHP_VERSION}-cli
|
FROM --platform=linux/amd64 shivammathur/node:latest-amd64
|
||||||
|
|
||||||
FROM --platform=linux/amd64 ${PHP_TARGET}
|
ARG PHP_VERSION=8.1
|
||||||
|
|
||||||
ARG COMPOSER_TARGET=2.0.3
|
|
||||||
|
|
||||||
WORKDIR /var/www/html
|
WORKDIR /var/www/html
|
||||||
|
|
||||||
|
|
@ -17,43 +15,27 @@ LABEL org.opencontainers.image.source=https://github.com/stancl/tenancy \
|
||||||
ENV TZ=Europe/London
|
ENV TZ=Europe/London
|
||||||
ENV LANG=en_GB.UTF-8
|
ENV LANG=en_GB.UTF-8
|
||||||
|
|
||||||
# Note: we only install reliable/core 1st-party php extensions here.
|
# install MYSSQL ODBC Driver
|
||||||
# If your app needs custom ones install them in the apps own
|
|
||||||
# Dockerfile _and pin the versions_! Eg:
|
|
||||||
# RUN pecl install memcached-2.2.0 && docker-php-ext-enable memcached
|
|
||||||
|
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y gnupg2 \
|
&& apt-get install -y gnupg2 \
|
||||||
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
|
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
|
||||||
&& curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list \
|
&& curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list \
|
||||||
&& apt-get update \
|
&& apt-get update \
|
||||||
&& ACCEPT_EULA=Y apt-get install -y unixodbc-dev msodbcsql17
|
&& ACCEPT_EULA=Y apt-get install -y unixodbc-dev msodbcsql17
|
||||||
|
|
||||||
RUN apt-get install -y --no-install-recommends locales apt-transport-https libfreetype6-dev libjpeg62-turbo-dev libpng-dev libgmp-dev libldap2-dev netcat curl mariadb-client sqlite3 libsqlite3-dev libpq-dev libzip-dev unzip vim-tiny gosu git
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends libhiredis0.14 libjemalloc2 liblua5.1-0 lua-bitop lua-cjson redis redis-server redis-tools
|
||||||
|
|
||||||
|
RUN pecl install redis-5.3.7 sqlsrv pdo_sqlsrv pcov \
|
||||||
|
&& printf "; priority=20\nextension=redis.so\n" > /etc/php/$PHP_VERSION/mods-available/redis.ini \
|
||||||
|
&& printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/$PHP_VERSION/mods-available/sqlsrv.ini \
|
||||||
|
&& printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/$PHP_VERSION/mods-available/pdo_sqlsrv.ini \
|
||||||
|
&& printf "; priority=40\nextension=pcov.so\n" > /etc/php/$PHP_VERSION/mods-available/pcov.ini \
|
||||||
|
&& phpenmod -v $PHP_VERSION redis sqlsrv pdo_sqlsrv pcov
|
||||||
|
|
||||||
|
# install composer
|
||||||
|
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
|
||||||
|
|
||||||
RUN docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
|
|
||||||
# && if [ "${PHP_VERSION}" = "7.4" ]; then docker-php-ext-configure gd --with-freetype --with-jpeg; else docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/; fi \
|
|
||||||
&& docker-php-ext-install -j$(nproc) gd pdo pdo_mysql pdo_pgsql pdo_sqlite pgsql zip gmp bcmath pcntl ldap sysvmsg exif \
|
|
||||||
# install the redis php extension
|
|
||||||
&& pecl install redis-5.3.7 \
|
|
||||||
&& docker-php-ext-enable redis \
|
|
||||||
# install the pcov extention
|
|
||||||
&& pecl install pcov \
|
|
||||||
&& docker-php-ext-enable pcov \
|
|
||||||
&& echo "pcov.enabled = 1" > /usr/local/etc/php/conf.d/pcov.ini \
|
|
||||||
# install sqlsrv
|
|
||||||
&& pecl install sqlsrv pdo_sqlsrv \
|
|
||||||
&& docker-php-ext-enable sqlsrv pdo_sqlsrv
|
|
||||||
# clear the apt cache
|
|
||||||
RUN rm -rf /var/lib/apt/lists/* \
|
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
|
||||||
# install composer
|
|
||||||
&& curl -o /tmp/composer-setup.php https://getcomposer.org/installer \
|
|
||||||
&& curl -o /tmp/composer-setup.sig https://composer.github.io/installer.sig \
|
|
||||||
&& php -r "if (hash('SHA384', file_get_contents('/tmp/composer-setup.php')) !== trim(file_get_contents('/tmp/composer-setup.sig'))) { unlink('/tmp/composer-setup.php'); echo 'Invalid installer' . PHP_EOL; exit(1); }" \
|
|
||||||
&& php /tmp/composer-setup.php --version=${COMPOSER_TARGET} --no-ansi --install-dir=/usr/local/bin --filename=composer --snapshot \
|
|
||||||
&& rm -f /tmp/composer-setup.*
|
|
||||||
# set the system timezone
|
# set the system timezone
|
||||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
|
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
|
||||||
&& echo $TZ > /etc/timezone
|
&& echo $TZ > /etc/timezone
|
||||||
|
|
|
||||||
|
|
@ -17,16 +17,16 @@
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.1",
|
"php": "^8.1",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"illuminate/support": "^9.0",
|
"illuminate/support": "^8.0|^9.0",
|
||||||
"facade/ignition-contracts": "^1.0",
|
"facade/ignition-contracts": "^1.0",
|
||||||
"ramsey/uuid": "^4.0",
|
"ramsey/uuid": "^4.0",
|
||||||
"stancl/jobpipeline": "^1.6",
|
"stancl/jobpipeline": "^1.0",
|
||||||
"stancl/virtualcolumn": "^1.2"
|
"stancl/virtualcolumn": "^1.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"laravel/framework": "^9.0",
|
"laravel/framework": "^8.0|^9.0",
|
||||||
"orchestra/testbench": "^7.0",
|
"orchestra/testbench": "^6.0|^7.0",
|
||||||
"league/flysystem-aws-s3-v3": "^3.0",
|
"league/flysystem-aws-s3-v3": "^1.0|^3.0",
|
||||||
"doctrine/dbal": "^2.10",
|
"doctrine/dbal": "^2.10",
|
||||||
"spatie/valuestore": "^1.2.5",
|
"spatie/valuestore": "^1.2.5",
|
||||||
"pestphp/pest": "^1.21"
|
"pestphp/pest": "^1.21"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue