From fdeb7b1f0db73dba000f050cfc888bd0d7dd15b4 Mon Sep 17 00:00:00 2001 From: Denis Smetannikov Date: Sat, 23 Mar 2024 20:21:29 +0400 Subject: [PATCH] Improve Docker build workflow and update Composer setup (#72) Enhanced the Docker environment by configuring additional tagging options for different events and semantic versions in the Github Actions workflow. Debug information has also been included. Updated Composer setup in Dockerfile, by enabling the authoritative class map for better performance. The "classpreloader/classpreloader" and "classpreloader/console" dependencies were removed from Composer. --- .github/workflows/main.yml | 6 +- .github/workflows/release-docker.yml | 19 +- Makefile | 75 ++++---- composer.json | 7 +- composer.lock | 251 ++++++--------------------- Dockerfile => docker/Dockerfile | 3 +- tests/PackageTest.php | 8 - 7 files changed, 112 insertions(+), 257 deletions(-) rename Dockerfile => docker/Dockerfile (89%) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 02261820..3908cfca 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -233,13 +233,13 @@ jobs: run: make build-docker - name: Test help and logo - run: time docker run --rm jbzoo/csv-blueprint-local --ansi + run: time docker run --rm jbzoo/csv-blueprint:local --ansi - name: 👍 Valid CSV file run: | time docker run --rm \ -v `pwd`:/parent-host \ - jbzoo/csv-blueprint-local \ + jbzoo/csv-blueprint:local \ validate:csv \ --csv=/parent-host/tests/fixtures/demo.csv \ --schema=/parent-host/tests/schemas/demo_valid.yml \ @@ -249,7 +249,7 @@ jobs: run: | ! docker run --rm \ -v `pwd`:/parent-host \ - jbzoo/csv-blueprint-local \ + jbzoo/csv-blueprint:local \ validate:csv \ --csv=/parent-host/tests/fixtures/demo.csv \ --schema=/parent-host/tests/schemas/invalid_schema.yml \ diff --git a/.github/workflows/release-docker.yml b/.github/workflows/release-docker.yml index 6992e8a8..8c48a89a 100644 --- a/.github/workflows/release-docker.yml +++ b/.github/workflows/release-docker.yml @@ -13,16 +13,16 @@ name: Publish Docker on: - push: - branches: - - 'master' + release: + types: [ created ] jobs: docker: - name: Docker + name: Publish Docker runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v3 - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -39,6 +39,11 @@ jobs: - name: Build and push uses: docker/build-push-action@v5 with: - context: . push: true - tags: jbzoo/csv-blueprint:latest + context: . + file: ./docker/Dockerfile + tags: jbzoo/csv-blueprint:${{ github.event.release.tag_name }} + platforms: linux/amd64,linux/arm64/v8,linux/386, + + - name: Verify the Docker image + run: docker run --rm jbzoo/csv-blueprint:${{ github.event.release.tag_name }} diff --git a/Makefile b/Makefile index 1be48d10..7cc71451 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ .PHONY: build REPORT ?= table -COLUMNS ?= 150 +COLUMNS ?= 300 ifneq (, $(wildcard ./vendor/jbzoo/codestyle/src/init.Makefile)) include ./vendor/jbzoo/codestyle/src/init.Makefile @@ -27,26 +27,23 @@ build: ##@Project Install all 3rd party dependencies @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 --optimize-autoloader - @rm -f `pwd`/ci-report-converter - - update: ##@Project Install/Update all 3rd party dependencies @echo "Composer flags: $(JBZOO_COMPOSER_UPDATE_FLAGS)" @composer update $(JBZOO_COMPOSER_UPDATE_FLAGS) @make build-phar -test-all: ##@Project Run all project tests at once - @make test - @make codestyle +build-install: ##@Project Install all 3rd party dependencies as prod + $(call title,"Install/Update all 3rd party dependencies as prod") + @composer install --no-dev --classmap-authoritative + @rm -f `pwd`/ci-report-converter + +# Demo ################################################################################################################# -build-docker: - $(call title,"Building Docker Image") - @docker build -t jbzoo/csv-blueprint-local . +demo: ##@Project Run all demo commands + @make demo-valid + @make demo-invalid demo-valid: ##@Project Run demo valid CSV @@ -56,25 +53,6 @@ demo-valid: ##@Project Run demo valid CSV --schema=./tests/schemas/demo_valid.yml \ --skip-schema -v -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 -vvv - $(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 -vvv - - demo-invalid: ##@Project Run demo invalid CSV $(call title,"Demo - Invalid CSV") @${PHP_BIN} ./csv-blueprint validate:csv \ @@ -91,12 +69,31 @@ demo-github: ##@Project Run demo invalid CSV --ansi -demo: ##@Project Run all demo commands - @make demo-valid - @make demo-invalid +# Docker ############################################################################################################### +build-docker: + $(call title,"Building Docker Image") + @docker build -f ./docker/Dockerfile -t jbzoo/csv-blueprint:local . + + +docker-in: + @docker run -it --entrypoint /bin/sh jbzoo/csv-blueprint:local -preload: ##@Project Preload all classes - @${PHP_BIN} ./vendor/bin/classpreloader compile \ - --config=./docker/preload-config.php \ - --output=./docker/preload.php + +demo-docker: ##@Project Run demo via Docker + $(call title,"Demo - Valid CSV \(via Docker\)") + @docker run --rm \ + -v `pwd`:/parent-host \ + jbzoo/csv-blueprint:local \ + validate:csv \ + --csv=/parent-host/tests/fixtures/demo.csv \ + --schema=/parent-host/tests/schemas/demo_valid.yml \ + --ansi -vvv + $(call title,"Demo - Invalid CSV \(via Docker\)") + @docker run --rm \ + -v `pwd`:/parent-host \ + jbzoo/csv-blueprint:local \ + validate:csv \ + --csv=/parent-host/tests/fixtures/demo.csv \ + --schema=/parent-host/tests/schemas/demo_invalid.yml \ + --ansi -vvv diff --git a/composer.json b/composer.json index cde30aa5..9b43b8ec 100644 --- a/composer.json +++ b/composer.json @@ -40,10 +40,7 @@ "symfony/filesystem" : ">=6.4.3", "symfony/finder" : ">=6.4.0", "markrogoyski/math-php" : "^2.9.0", - "respect/validation" : "^2.3.5", - - "classpreloader/classpreloader" : "^4.2", - "classpreloader/console" : "^3.2" + "respect/validation" : "^2.3.5" }, "require-dev" : { @@ -62,7 +59,7 @@ }, "config" : { - "optimize-autoloader" : false, + "optimize-autoloader" : true, "allow-plugins" : {"composer/package-versions-deprecated" : true}, "platform-check" : true }, diff --git a/composer.lock b/composer.lock index 5993ae00..c79f8906 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b04776bf71361a38919613c8873eacd6", + "content-hash": "5b4ad969eaf8433f0f94fd864c697149", "packages": [ { "name": "bluepsyduck/symfony-process-manager", @@ -63,143 +63,6 @@ }, "time": "2021-12-03T21:30:28+00:00" }, - { - "name": "classpreloader/classpreloader", - "version": "4.2.0", - "source": { - "type": "git", - "url": "https://github.com/ClassPreloader/ClassPreloader.git", - "reference": "af9284543aedb45ed58359374918141c0ac7ae34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/af9284543aedb45ed58359374918141c0ac7ae34", - "reference": "af9284543aedb45ed58359374918141c0ac7ae34", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "nikic/php-parser": "^4.10.3", - "php": "^7.0.8 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "graham-campbell/analyzer": "^2.4.3 || ^3.0.4", - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19" - }, - "type": "library", - "autoload": { - "psr-4": { - "ClassPreloader\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk" - } - ], - "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case", - "keywords": [ - "autoload", - "class", - "preload", - "preloader" - ], - "support": { - "issues": "https://github.com/ClassPreloader/ClassPreloader/issues", - "source": "https://github.com/ClassPreloader/ClassPreloader/tree/4.2.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/classpreloader/classpreloader", - "type": "tidelift" - } - ], - "time": "2021-08-28T21:56:17+00:00" - }, - { - "name": "classpreloader/console", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/ClassPreloader/Console.git", - "reference": "b82d2d1600431442f37b406a2c08b1ddd65c9494" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ClassPreloader/Console/zipball/b82d2d1600431442f37b406a2c08b1ddd65c9494", - "reference": "b82d2d1600431442f37b406a2c08b1ddd65c9494", - "shasum": "" - }, - "require": { - "classpreloader/classpreloader": "^4.2", - "php": "^7.0.8 || ^8.0", - "symfony/console": "^3.4 || ^4.4 || ^5.0 || ^6.0", - "symfony/polyfill-ctype": "^1.9" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "graham-campbell/analyzer": "^2.4.3 || ^3.0.4", - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19" - }, - "bin": [ - "bin/classpreloader" - ], - "type": "library", - "autoload": { - "psr-4": { - "ClassPreloader\\Console\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk" - } - ], - "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case", - "keywords": [ - "autoload", - "class", - "preload", - "preloader" - ], - "support": { - "source": "https://github.com/ClassPreloader/Console/tree/3.2.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/classpreloader/console", - "type": "tidelift" - } - ], - "time": "2021-08-28T22:04:01+00:00" - }, { "name": "jbzoo/ci-report-converter", "version": "7.2.1", @@ -925,62 +788,6 @@ ], "time": "2023-10-27T15:32:31+00:00" }, - { - "name": "nikic/php-parser", - "version": "v4.19.1", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.1" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" - }, - "time": "2024-03-17T08:10:35+00:00" - }, { "name": "psr/container", "version": "2.0.2", @@ -3876,6 +3683,62 @@ }, "time": "2024-01-31T06:18:54+00:00" }, + { + "name": "nikic/php-parser", + "version": "v4.19.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.1" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" + }, + "time": "2024-03-17T08:10:35+00:00" + }, { "name": "pdepend/pdepend", "version": "2.16.2", diff --git a/Dockerfile b/docker/Dockerfile similarity index 89% rename from Dockerfile rename to docker/Dockerfile index 093076b0..416bf05b 100644 --- a/Dockerfile +++ b/docker/Dockerfile @@ -21,12 +21,13 @@ ENV COMPOSER_ALLOW_SUPERUSER=1 COPY . /app RUN cd /app \ && composer install --no-dev \ + --classmap-authoritative \ --no-progress \ && composer clear-cache \ && chmod +x /app/csv-blueprint RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" -COPY docker/php.ini /usr/local/etc/php/conf.d/docker-z99-php.ini +COPY ./docker/php.ini /usr/local/etc/php/conf.d/docker-z99-php.ini # Test and warmup opcache RUN /app/csv-blueprint validate:csv -h diff --git a/tests/PackageTest.php b/tests/PackageTest.php index 7067c2ed..10fbed34 100644 --- a/tests/PackageTest.php +++ b/tests/PackageTest.php @@ -16,8 +16,6 @@ namespace JBZoo\PHPUnit; -use function JBZoo\Data\json; - final class PackageTest extends \JBZoo\Codestyle\PHPUnit\AbstractPackageTest { protected string $packageName = 'Csv-Blueprint'; @@ -86,12 +84,6 @@ protected function setUp(): void parent::setUp(); } - public static function testComposerOptimizeAutoloader(): void - { - $composer = json(PROJECT_ROOT . '/composer.json'); - isSame(false, $composer->find('config.optimize-autoloader')); - } - protected function checkBadgeGithubActionsDemo(): ?string { $path = 'https://github.com/__VENDOR_ORIG__/__PACKAGE_ORIG__/actions/workflows';