diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..f2c3051a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,29 @@ +# +# JBZoo Toolbox - CI-Report-Converter. +# +# This file is part of the JBZoo Toolbox project. +# For the full copyright and license information, please view the LICENSE +# file that was distributed with this source code. +# +# @license MIT +# @copyright Copyright (C) JBZoo.com, All rights reserved. +# @see https://github.com/JBZoo/CI-Report-Converter +# + +.git +.idea +.github +build +tests +vendor +schema-examples +.DS_Store +.editorconfig +.gitattributes +.gitignore +.phan.php +.phpunit.result.cache +action.yml +box.json.dist +phpunit.xml.dist +Makefile diff --git a/.github/workflows/demo.yml b/.github/workflows/demo.yml index 99138151..f64add42 100644 --- a/.github/workflows/demo.yml +++ b/.github/workflows/demo.yml @@ -25,8 +25,8 @@ env: TERM_PROGRAM: Hyper jobs: - pure-php: - name: Pure PHP + reports: + name: All Report Types runs-on: ubuntu-latest steps: - name: Checkout code @@ -43,28 +43,61 @@ jobs: - name: Build the Project run: make update - - name: Validate CSV (default is table) - run: make demo-github + - name: Report - Table (Default) + run: make demo-github --no-print-directory continue-on-error: true - - name: Validate CSV (text) - run: OUTPUT=text make demo-github + - name: Report - Text + run: OUTPUT=text make demo-github --no-print-directory continue-on-error: true - - name: Validate CSV (github) - run: OUTPUT=github make demo-github + - name: Report - Github Actions + run: OUTPUT=github make demo-github --no-print-directory continue-on-error: true - - name: Validate CSV (gitlab) - run: OUTPUT=gitlab make demo-github + - name: Report - GitLab + run: OUTPUT=gitlab make demo-github --no-print-directory continue-on-error: true - - name: Validate CSV (teamcity) - run: OUTPUT=teamcity make demo-github + - name: Report - TeamCity CI + run: OUTPUT=teamcity make demo-github --no-print-directory continue-on-error: true - - name: Validate CSV (junit) - run: OUTPUT=junit make demo-github + - name: Report - JUnit + run: OUTPUT=junit make demo-github --no-print-directory + continue-on-error: true + + php: + name: Pure PHP + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.3 + tools: composer + + - name: Build the Project + run: make build-install --no-print-directory + + - name: 👍 Valid CSV file + run: | + ./csv-blueprint \ + validate:csv \ + --csv=./tests/fixtures/demo.csv \ + --schema=./tests/schemas/demo_valid.yml + + - name: 👎 Invalid CSV file + run: | + ./csv-blueprint \ + validate:csv \ + --csv=./tests/fixtures/demo.csv \ + --schema=./tests/schemas/demo_invalid.yml continue-on-error: true phar: @@ -85,6 +118,48 @@ jobs: - name: Build the project run: make build --no-print-directory - - name: Trying to use the phar file - run: ./build/csv-blueprint.phar validate:csv --csv=./tests/fixtures/demo.csv --schema=./tests/schemas/demo_invalid.yml + - name: 👍 Valid CSV file + run: | + ./build/csv-blueprint.phar \ + validate:csv \ + --csv=./tests/fixtures/demo.csv \ + --schema=./tests/schemas/demo_valid.yml + + - name: 👎 Invalid CSV file + run: | + ./build/csv-blueprint.phar \ + validate:csv \ + --csv=./tests/fixtures/demo.csv \ + --schema=./tests/schemas/demo_invalid.yml + continue-on-error: true + + docker: + name: Docker + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: 🐳 Building Docker Image + run: make build-docker + + - name: 👍 Valid CSV file + run: | + docker run \ + -v `pwd`:/parent-host \ + --rm jbzoo/csv-blueprint \ + validate:csv \ + --csv=/parent-host/tests/fixtures/demo.csv \ + --schema=/parent-host/tests/schemas/demo_valid.yml + + - name: 👎 Invalid CSV file + run: | + docker run \ + -v `pwd`:/parent-host \ + --rm jbzoo/csv-blueprint \ + validate:csv \ + --csv=/parent-host/tests/fixtures/demo.csv \ + --schema=/parent-host/tests/schemas/demo_invalid.yml continue-on-error: true diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bc869c47..26fa8d94 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -174,3 +174,22 @@ jobs: with: name: Reports - ${{ matrix.php-version }} path: build/ + + docker: + name: Docker + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: 🐳 Building Docker Image + run: make build-docker + + - name: Trying to use the Docker Image + run: docker run --rm jbzoo/csv-blueprint --ansi + + - name: Reporting example via Docker + run: make demo-docker --no-print-directory + continue-on-error: true diff --git a/.github/workflows/release-docker.yml b/.github/workflows/release-docker.yml new file mode 100644 index 00000000..47ed32ce --- /dev/null +++ b/.github/workflows/release-docker.yml @@ -0,0 +1,36 @@ +# +# JBZoo Toolbox - Csv-Blueprint. +# +# This file is part of the JBZoo Toolbox project. +# For the full copyright and license information, please view the LICENSE +# file that was distributed with this source code. +# +# @license MIT +# @copyright Copyright (C) JBZoo.com, All rights reserved. +# @see https://github.com/JBZoo/Csv-Blueprint +# + +name: Publish Docker Image + +on: + release: + types: [ published ] + push: + branches: + - 'master' + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v3 + with: + push: true + tags: jbzoo/csv-blueprint:${{ env.GITHUB_REF_NAME }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..eba500d5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,31 @@ +# +# JBZoo Toolbox - Csv-Blueprint. +# +# This file is part of the JBZoo Toolbox project. +# For the full copyright and license information, please view the LICENSE +# file that was distributed with this source code. +# +# @license MIT +# @copyright Copyright (C) JBZoo.com, All rights reserved. +# @see https://github.com/JBZoo/Csv-Blueprint +# + +FROM php:8.1-cli-alpine +RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" + +# Install PHP extensions +ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ +RUN install-php-extensions opcache gd @composer + +# Install application +ENV COMPOSER_ALLOW_SUPERUSER=1 +COPY . /app +RUN cd /app \ + && composer install --no-dev --optimize-autoloader --no-progress \ + && composer clear-cache +RUN chmod +x app/csv-blueprint + +# Color output by default +ENV TERM_PROGRAM=Hyper + +ENTRYPOINT ["/app/csv-blueprint"] diff --git a/Makefile b/Makefile index 2f8cfa4d..1254fc7f 100644 --- a/Makefile +++ b/Makefile @@ -22,8 +22,12 @@ build: ##@Project Install all 3rd party dependencies $(call title,"Install/Update all 3rd party dependencies") @composer install @make build-phar - @make create-symlink + @rm -f `pwd`/ci-report-converter +build-install: ##@Project Install all 3rd party dependencies as prod + $(call title,"Install/Update all 3rd party dependencies as prod") + @composer install --no-dev --no-progress --no-interaction --no-suggest + @rm -f `pwd`/ci-report-converter update: ##@Project Install/Update all 3rd party dependencies @echo "Composer flags: $(JBZOO_COMPOSER_UPDATE_FLAGS)" @@ -31,21 +35,40 @@ update: ##@Project Install/Update all 3rd party dependencies @make build-phar -create-symlink: ##@Project Create Symlink (alias for testing) - @ln -sfv `pwd`/csv-blueprint `pwd`/vendor/bin/csv-blueprint - - test-all: ##@Project Run all project tests at once @make test @make codestyle +build-docker: + $(call title,"Building Docker Image") + @docker build -t jbzoo/csv-blueprint . + + demo-valid: ##@Project Run demo valid CSV $(call title,"Demo - Valid CSV") @${PHP_BIN} ./csv-blueprint validate:csv \ --csv=./tests/fixtures/demo.csv \ --schema=./tests/schemas/demo_valid.yml +demo-docker: ##@Project Run demo via Docker + $(call title,"Demo - Valid CSV \(via Docker\)") + @docker run --rm \ + -v `pwd`:/parent-host \ + jbzoo/csv-blueprint \ + validate:csv \ + --csv=/parent-host/tests/fixtures/demo.csv \ + --schema=/parent-host/tests/schemas/demo_valid.yml \ + --ansi + $(call title,"Demo - Invalid CSV \(via Docker\)") + @docker run --rm \ + -v `pwd`:/parent-host \ + jbzoo/csv-blueprint \ + validate:csv \ + --csv=/parent-host/tests/fixtures/demo.csv \ + --schema=/parent-host/tests/schemas/demo_invalid.yml \ + --ansi + demo-invalid: ##@Project Run demo invalid CSV $(call title,"Demo - Invalid CSV") diff --git a/README.md b/README.md index 20a8749a..113a93bd 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # JBZoo / Csv-Blueprint [![CI](https://github.com/JBZoo/Csv-Blueprint/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/JBZoo/Csv-Blueprint/actions/workflows/main.yml?query=branch%3Amaster) [![Coverage Status](https://coveralls.io/repos/github/JBZoo/Csv-Blueprint/badge.svg?branch=master)](https://coveralls.io/github/JBZoo/Csv-Blueprint?branch=master) [![Psalm Coverage](https://shepherd.dev/github/JBZoo/Csv-Blueprint/coverage.svg)](https://shepherd.dev/github/JBZoo/Csv-Blueprint) [![Psalm Level](https://shepherd.dev/github/JBZoo/Csv-Blueprint/level.svg)](https://shepherd.dev/github/JBZoo/Csv-Blueprint) [![CodeFactor](https://www.codefactor.io/repository/github/jbzoo/csv-blueprint/badge)](https://www.codefactor.io/repository/github/jbzoo/csv-blueprint/issues) -[![Stable Version](https://poser.pugx.org/jbzoo/csv-blueprint/version)](https://packagist.org/packages/jbzoo/csv-blueprint/) [![Total Downloads](https://poser.pugx.org/jbzoo/csv-blueprint/downloads)](https://packagist.org/packages/jbzoo/csv-blueprint/stats) [![Dependents](https://poser.pugx.org/jbzoo/csv-blueprint/dependents)](https://packagist.org/packages/jbzoo/csv-blueprint/dependents?order_by=downloads) [![GitHub License](https://img.shields.io/github/license/jbzoo/csv-blueprint)](https://github.com/JBZoo/Csv-Blueprint/blob/master/LICENSE) +[![Stable Version](https://poser.pugx.org/jbzoo/csv-blueprint/version)](https://packagist.org/packages/jbzoo/csv-blueprint/) [![Total Downloads](https://poser.pugx.org/jbzoo/csv-blueprint/downloads)](https://packagist.org/packages/jbzoo/csv-blueprint/stats) [![Docker Pulls](https://img.shields.io/docker/pulls/jbzoo/csv-blueprint.svg)](https://hub.docker.com/r/jbzoo/csv-blueprint) [![Dependents](https://poser.pugx.org/jbzoo/csv-blueprint/dependents)](https://packagist.org/packages/jbzoo/csv-blueprint/dependents?order_by=downloads) [![GitHub License](https://img.shields.io/github/license/jbzoo/csv-blueprint)](https://github.com/JBZoo/Csv-Blueprint/blob/master/LICENSE) @@ -15,6 +15,18 @@ composer require jbzoo/csv-blueprint ### Usage +As Docker container: + +```sh +@docker run --rm \ + -v `pwd`:/parent-host \ + jbzoo/csv-blueprint \ + validate:csv \ + --csv=/parent-host/tests/fixtures/demo.csv \ + --schema=/parent-host/tests/schemas/demo_invalid.yml \ + --ansi +``` + ### Schema file examples @@ -55,7 +67,7 @@ columns: only_uppercase: true # String is only upper-case. Example: "HELLO WORLD" only_capitalize: true # String is only capitalized. Example: "Hello World" - # Deciaml and integer numbers + # Decimal and integer numbers min: 10 # Can be integer or float, negative and positive max: 100.50 # Can be integer or float, negative and positive precision: 2 # Strict(!) number of digits after the decimal point diff --git a/composer.json b/composer.json index f1085b3d..2cc18867 100644 --- a/composer.json +++ b/composer.json @@ -55,7 +55,8 @@ "config" : { "optimize-autoloader" : true, - "allow-plugins" : {"composer/package-versions-deprecated" : true} + "allow-plugins" : {"composer/package-versions-deprecated" : true}, + "platform-check" : true }, "extra" : { diff --git a/composer.lock b/composer.lock index 9ff9a5bd..5f62fb9b 100644 --- a/composer.lock +++ b/composer.lock @@ -5071,12 +5071,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "83b3589bb774f27084c7f358c13f465d94afa036" + "reference": "bb15a6dc9a8493ace041a6de2929eb63ba0809ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/83b3589bb774f27084c7f358c13f465d94afa036", - "reference": "83b3589bb774f27084c7f358c13f465d94afa036", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/bb15a6dc9a8493ace041a6de2929eb63ba0809ef", + "reference": "bb15a6dc9a8493ace041a6de2929eb63ba0809ef", "shasum": "" }, "conflict": { @@ -5803,7 +5803,7 @@ "type": "tidelift" } ], - "time": "2024-03-08T12:05:25+00:00" + "time": "2024-03-10T05:04:21+00:00" }, { "name": "sabre/event", @@ -8027,16 +8027,16 @@ }, { "name": "vimeo/psalm", - "version": "5.22.2", + "version": "5.23.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "d768d914152dbbf3486c36398802f74e80cfde48" + "reference": "005e3184fb6de4350a873b9b8c4dc3cede9db762" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/d768d914152dbbf3486c36398802f74e80cfde48", - "reference": "d768d914152dbbf3486c36398802f74e80cfde48", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/005e3184fb6de4350a873b9b8c4dc3cede9db762", + "reference": "005e3184fb6de4350a873b9b8c4dc3cede9db762", "shasum": "" }, "require": { @@ -8133,7 +8133,7 @@ "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, - "time": "2024-02-22T23:39:07+00:00" + "time": "2024-03-09T19:39:11+00:00" }, { "name": "webmozart/assert", diff --git a/csv-blueprint b/csv-blueprint old mode 100644 new mode 100755 diff --git a/schema-examples/full.yml b/schema-examples/full.yml index b49102eb..402d526d 100644 --- a/schema-examples/full.yml +++ b/schema-examples/full.yml @@ -43,7 +43,7 @@ columns: only_uppercase: true # String is only upper-case. Example: "HELLO WORLD" only_capitalize: true # String is only capitalized. Example: "Hello World" - # Deciaml and integer numbers + # Decimal and integer numbers min: 10 # Can be integer or float, negative and positive max: 100.50 # Can be integer or float, negative and positive precision: 2 # Strict(!) number of digits after the decimal point diff --git a/tests/CsvBlueprintPackageTest.php b/tests/CsvBlueprintPackageTest.php index e88aca12..ae6e4ec0 100644 --- a/tests/CsvBlueprintPackageTest.php +++ b/tests/CsvBlueprintPackageTest.php @@ -19,4 +19,11 @@ final class CsvBlueprintPackageTest extends \JBZoo\Codestyle\PHPUnit\AbstractPackageTest { protected string $packageName = 'Csv-Blueprint'; + + protected function setUp(): void + { + $this->params['docker_pulls'] = true; + + parent::setUp(); + } }