From a1a6c22a080fe58f80183f3737972155fc9c8220 Mon Sep 17 00:00:00 2001 From: Matthew Baggett Date: Fri, 18 Aug 2023 08:22:13 +0200 Subject: [PATCH] Fixup bug with monolog 2->3 --- bouncer/composer.json | 2 +- bouncer/composer.lock | 53 +++++++++++----------- bouncer/docker-bake.hcl | 21 +++++++++ bouncer/grey-ooo-test.yml | 62 ++++++++++++++++---------- bouncer/test/public-web-a/favicon.ico | Bin 0 -> 34494 bytes bouncer/test/public-web-b/favicon.ico | Bin 0 -> 34494 bytes bouncer/test/public-web-c/favicon.ico | Bin 0 -> 34494 bytes 7 files changed, 86 insertions(+), 52 deletions(-) create mode 100644 bouncer/docker-bake.hcl create mode 100644 bouncer/test/public-web-a/favicon.ico create mode 100644 bouncer/test/public-web-b/favicon.ico create mode 100644 bouncer/test/public-web-c/favicon.ico diff --git a/bouncer/composer.json b/bouncer/composer.json index d557b34..2859dcf 100644 --- a/bouncer/composer.json +++ b/bouncer/composer.json @@ -14,7 +14,7 @@ "guzzlehttp/guzzle": "^7.3", "twig/twig": "^3.0", "league/flysystem": "^2.1", - "monolog/monolog": "^2.2", + "monolog/monolog": "^3.4", "bramus/monolog-colored-line-formatter": "~3.0", "adambrett/shell-wrapper": "~1.0", "league/flysystem-aws-s3-v3": "^2.1", diff --git a/bouncer/composer.lock b/bouncer/composer.lock index 7fb833d..2d7715b 100644 --- a/bouncer/composer.lock +++ b/bouncer/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": "958e2173310514bbba6c4e97cb64d5a1", + "content-hash": "9d0282b41840d0b06ccd2411ce298ea9", "packages": [ { "name": "adambrett/shell-wrapper", @@ -246,24 +246,24 @@ }, { "name": "bramus/monolog-colored-line-formatter", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/bramus/monolog-colored-line-formatter.git", - "reference": "cd1ada798fec11a5862cb67944c651b6a8e04911" + "reference": "bbbffb43b0cbfff5cb6bb8e2c1dd15c99de8bd32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bramus/monolog-colored-line-formatter/zipball/cd1ada798fec11a5862cb67944c651b6a8e04911", - "reference": "cd1ada798fec11a5862cb67944c651b6a8e04911", + "url": "https://api.github.com/repos/bramus/monolog-colored-line-formatter/zipball/bbbffb43b0cbfff5cb6bb8e2c1dd15c99de8bd32", + "reference": "bbbffb43b0cbfff5cb6bb8e2c1dd15c99de8bd32", "shasum": "" }, "require": { "bramus/ansi-php": "^3.0.3", + "monolog/monolog": "~3.0", "php": "^8.1" }, "require-dev": { - "monolog/monolog": "~3.0", "phpunit/phpunit": "~9.6" }, "type": "library", @@ -286,7 +286,7 @@ "description": "Colored Line Formatter for Monolog", "support": { "issues": "https://github.com/bramus/monolog-colored-line-formatter/issues", - "source": "https://github.com/bramus/monolog-colored-line-formatter/tree/3.1.0" + "source": "https://github.com/bramus/monolog-colored-line-formatter/tree/3.1.1" }, "funding": [ { @@ -294,7 +294,7 @@ "type": "github" } ], - "time": "2023-03-29T13:28:41+00:00" + "time": "2023-04-11T12:52:29+00:00" }, { "name": "guzzlehttp/guzzle", @@ -908,42 +908,41 @@ }, { "name": "monolog/monolog", - "version": "2.9.1", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" + "reference": "e2392369686d420ca32df3803de28b5d6f76867d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d", + "reference": "e2392369686d420ca32df3803de28b5d6f76867d", "shasum": "" }, "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + "psr/log-implementation": "3.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "aws/aws-sdk-php": "^3.0", "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", - "guzzlehttp/guzzle": "^7.4", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", - "predis/predis": "^1.1 || ^2.0", - "rollbar/rollbar": "^1.3 || ^2 || ^3", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^10.1", + "predis/predis": "^1.1 || ^2", "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -966,7 +965,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -994,7 +993,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.1" + "source": "https://github.com/Seldaek/monolog/tree/3.4.0" }, "funding": [ { @@ -1006,7 +1005,7 @@ "type": "tidelift" } ], - "time": "2023-02-06T13:44:46+00:00" + "time": "2023-06-21T08:46:11+00:00" }, { "name": "mtdowling/jmespath.php", diff --git a/bouncer/docker-bake.hcl b/bouncer/docker-bake.hcl new file mode 100644 index 0000000..15ec7eb --- /dev/null +++ b/bouncer/docker-bake.hcl @@ -0,0 +1,21 @@ +group "default" { + targets = [ + "bouncer", + ] +} +variable "PLATFORMS" { + default = [ + "arm64", + "amd64", + ] +} +target "bouncer" { + context = "." + dockerfile = "Dockerfile" + platforms = PLATFORMS + tags = [ + "benzine/bouncer:latest", + "ghcr.io/benzine-framework/bouncer:latest", + ] + target = "bouncer" +} diff --git a/bouncer/grey-ooo-test.yml b/bouncer/grey-ooo-test.yml index d38058f..2fb389f 100644 --- a/bouncer/grey-ooo-test.yml +++ b/bouncer/grey-ooo-test.yml @@ -2,42 +2,56 @@ version: "3.4" services: bouncer: - image: benzine/bouncer + build: + context: . + target: bouncer volumes: - /var/run/docker.sock:/var/run/docker.sock - environment: - - BOUNCER_LETSENCRYPT_MODE=production - - BOUNCER_LETSENCRYPT_EMAIL=matthew@baggett.me - - BOUNCER_S3_ENDPOINT=http://grey.ooo:9000 - - BOUNCER_S3_KEY_ID=geusebio - - BOUNCER_S3_KEY_SECRET=teblE0neTf2NQcVFaZIRkSF44RscyQ3G - - BOUNCER_S3_BUCKET=bouncer-certificates - - BOUNCER_S3_USE_PATH_STYLE_ENDPOINT="yes" +# environment: +# - BOUNCER_LETSENCRYPT_MODE=production +# - BOUNCER_LETSENCRYPT_EMAIL=matthew@baggett.me +# - BOUNCER_S3_ENDPOINT=http://grey.ooo:9000 +# - BOUNCER_S3_KEY_ID=geusebio +# - BOUNCER_S3_KEY_SECRET=teblE0neTf2NQcVFaZIRkSF44RscyQ3G +# - BOUNCER_S3_BUCKET=bouncer-certificates +# - BOUNCER_S3_USE_PATH_STYLE_ENDPOINT="yes" ports: - - 80:80 - - 443:443 + - 127.0.0.5:80:80 + - 127.0.0.5:443:443 + depends_on: + - web-a + - web-b + - web-c web-a: - image: benzine/php:nginx - volumes: - - ./test/public-web-a:/app/public + build: + context: . + target: test-app-a environment: - BOUNCER_DOMAIN=a.web.grey.ooo - - BOUNCER_LETSENCRYPT=true + - BOUNCER_LETSENCRYPT=false + - BOUNCER_TARGET_PORT=80 + ports: + - 127.0.0.5:81:80 web-b: - image: benzine/php:nginx - volumes: - - ./test/public-web-b:/app/public + build: + context: . + target: test-app-b environment: - BOUNCER_DOMAIN=b.web.grey.ooo - - BOUNCER_LETSENCRYPT=true + - BOUNCER_LETSENCRYPT=false + - BOUNCER_TARGET_PORT=80 + ports: + - 127.0.0.5:82:80 web-c: - image: benzine/php:nginx - volumes: - - ./test/public-web-c:/app/public + build: + context: . + target: test-app-c environment: - BOUNCER_DOMAIN=c.web.grey.ooo - - BOUNCER_LETSENCRYPT=true - + - BOUNCER_LETSENCRYPT=false + - BOUNCER_TARGET_PORT=80 + ports: + - 127.0.0.5:83:80 diff --git a/bouncer/test/public-web-a/favicon.ico b/bouncer/test/public-web-a/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1d741baafc962315536c288db18bbb5e914ab259 GIT binary patch literal 34494 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