From a2caa43bc99ac280a26d93324613c0c21bc2becd Mon Sep 17 00:00:00 2001 From: Konstantinos Arvanitakis Date: Thu, 9 Jul 2026 01:09:44 +0300 Subject: [PATCH] Feature: Syncing composer .env.example and docker-compose.dev.yml from starter --- .env.example | 23 ++--- composer.json | 2 +- composer.lock | 190 ++++++++++++++++++++++++++++------------- docker-compose.dev.yml | 2 + docker/entrypoint.sh | 8 ++ 5 files changed, 152 insertions(+), 73 deletions(-) diff --git a/.env.example b/.env.example index e710a5e..89d6438 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,6 @@ # Unique per VPS deployment: namespaces containers/volumes/networks and the built image tag, # so multiple sites from this same starter can coexist on one host without collisions. -COMPOSE_PROJECT_NAME=boboko-starter +COMPOSE_PROJECT_NAME=3dealer APP_NAME=Laravel APP_ENV=local @@ -25,11 +25,11 @@ LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=pgsql -DB_HOST=127.0.0.1 +DB_HOST=postgres DB_PORT=5432 DB_DATABASE=boboko DB_USERNAME=root -DB_PASSWORD= +DB_PASSWORD=dev SESSION_DRIVER=database SESSION_LIFETIME=120 @@ -47,14 +47,14 @@ CACHE_STORE=database MEMCACHED_HOST=127.0.0.1 REDIS_CLIENT=phpredis -REDIS_HOST=127.0.0.1 +REDIS_HOST=valkey REDIS_PASSWORD=null REDIS_PORT=6379 -MAIL_MAILER=log +MAIL_MAILER=smtp MAIL_SCHEME=null -MAIL_HOST=127.0.0.1 -MAIL_PORT=2525 +MAIL_HOST=mailpit +MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_FROM_ADDRESS="hello@example.com" @@ -68,17 +68,18 @@ AWS_USE_PATH_STYLE_ENDPOINT=false VITE_APP_NAME="${APP_NAME}" -OTEL_SERVICE_NAME= +OTEL_SERVICE_NAME=boboko-starter OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf OTEL_PROPAGATORS=baggage,tracecontext OTEL_PHP_AUTOLOAD_ENABLED=true OTEL_EXPORTER_OTLP_ENDPOINT= -STOIC_SECRET= -STOIC_SSO_SECRET= +# Stoic is the headless CMS, proxied at /stoic/ behind the app in prod (see docker/nginx/prod.conf) +STOIC_SECRET=dev-secret-change-me +STOIC_SSO_SECRET=dev-sso-secret-change-me STOIC_HOST=http://localhost:2727 -# Host-side ports (change per app if multiple apps share this VPS, or per dev checkout) +# Host-side ports — change these if another project on this machine already uses the defaults APP_PORT=8090 STOIC_PORT=2727 VALKEY_PORT=6339 diff --git a/composer.json b/composer.json index 1a190e0..0587d66 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ "license": "MIT", "require": { "artesaos/seotools": "^1.4", - "boboko/core": "^0.0.2", + "boboko/core": "0.*", "open-telemetry/exporter-otlp": "^1.4", "open-telemetry/opentelemetry-auto-laravel": "^1.7", "open-telemetry/sdk": "^1.14", diff --git a/composer.lock b/composer.lock index 8d5910a..71919bb 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": "d159988b8e0edece23fcf2e7b59d1cfa", + "content-hash": "497fd57dba085798efccc5819904020f", "packages": [ { "name": "anourvalar/eloquent-serialize", @@ -565,16 +565,17 @@ }, { "name": "boboko/core", - "version": "0.0.2", + "version": "0.1.0", "source": { "type": "git", "url": "https://code.radical-elements.com/boboko/core.git", - "reference": "ebe905acfa4915a62b409f91480db46f01a5462c" + "reference": "1d2a90059daea13614fe8842d15fb0ea58cabda8" }, "require": { "laravel/framework": "^12.0", "laravel/tinker": "^3.0", "lunarphp/lunar": "1.3.0", + "lunarphp/table-rate-shipping": "^1.3", "php": "^8.5", "symfony/yaml": "^7.0" }, @@ -604,7 +605,7 @@ } }, "description": "Core module — authentication and shared panel behaviour", - "time": "2026-07-03T12:09:28+00:00" + "time": "2026-07-08T21:56:04+00:00" }, { "name": "brick/math", @@ -2472,22 +2473,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.13.1", + "version": "7.13.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "55901a76dfd2006a0cc012b9e3c5b487f796478d" + "reference": "caa5491e1030fd120247f42fb3331ecf38da3b26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/55901a76dfd2006a0cc012b9e3c5b487f796478d", - "reference": "55901a76dfd2006a0cc012b9e3c5b487f796478d", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/caa5491e1030fd120247f42fb3331ecf38da3b26", + "reference": "caa5491e1030fd120247f42fb3331ecf38da3b26", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^2.5", - "guzzlehttp/psr7": "^2.12.3", + "guzzlehttp/promises": "^2.5.1", + "guzzlehttp/psr7": "^2.12.4", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.5 || ^3.0", @@ -2499,7 +2500,7 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.2", + "guzzle/client-integration-tests": "3.0.3", "guzzlehttp/test-server": "^0.6", "php-http/message-factory": "^1.1", "phpunit/phpunit": "^8.5.52 || ^9.6.34", @@ -2580,7 +2581,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.13.1" + "source": "https://github.com/guzzle/guzzle/tree/7.13.3" }, "funding": [ { @@ -2596,20 +2597,20 @@ "type": "tidelift" } ], - "time": "2026-06-29T20:14:18+00:00" + "time": "2026-07-08T16:10:19+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.5.0", + "version": "2.5.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "4360e982f87f5f258bf872d094647791db2f4c8e" + "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/4360e982f87f5f258bf872d094647791db2f4c8e", - "reference": "4360e982f87f5f258bf872d094647791db2f4c8e", + "url": "https://api.github.com/repos/guzzle/promises/zipball/9ad1e4fc607446a055b95870c7f668e93b5cff29", + "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29", "shasum": "" }, "require": { @@ -2664,7 +2665,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.5.0" + "source": "https://github.com/guzzle/promises/tree/2.5.1" }, "funding": [ { @@ -2680,20 +2681,20 @@ "type": "tidelift" } ], - "time": "2026-06-02T12:23:43+00:00" + "time": "2026-07-08T15:48:39+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.12.3", + "version": "2.12.4", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "7ec62dc3f44aa218487dbed81a9bf9bc647be55d" + "reference": "51e27f9e2b332ab3e72f4520d5ff4f3c68c3577c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/7ec62dc3f44aa218487dbed81a9bf9bc647be55d", - "reference": "7ec62dc3f44aa218487dbed81a9bf9bc647be55d", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/51e27f9e2b332ab3e72f4520d5ff4f3c68c3577c", + "reference": "51e27f9e2b332ab3e72f4520d5ff4f3c68c3577c", "shasum": "" }, "require": { @@ -2783,7 +2784,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.12.3" + "source": "https://github.com/guzzle/psr7/tree/2.12.4" }, "funding": [ { @@ -2799,20 +2800,20 @@ "type": "tidelift" } ], - "time": "2026-06-23T15:21:08+00:00" + "time": "2026-07-08T15:56:20+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.8", + "version": "v1.0.9", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "9c19128923b05a5d7355e5d2318d7808b7e33bbd" + "reference": "d7580af6d3f8384325d9cd3e99b21c3ed1848176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/9c19128923b05a5d7355e5d2318d7808b7e33bbd", - "reference": "9c19128923b05a5d7355e5d2318d7808b7e33bbd", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/d7580af6d3f8384325d9cd3e99b21c3ed1848176", + "reference": "d7580af6d3f8384325d9cd3e99b21c3ed1848176", "shasum": "" }, "require": { @@ -2869,7 +2870,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.8" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.9" }, "funding": [ { @@ -2885,7 +2886,7 @@ "type": "tidelift" } ], - "time": "2026-06-23T13:02:23+00:00" + "time": "2026-07-08T16:19:22+00:00" }, { "name": "kalnoy/nestedset", @@ -3015,16 +3016,16 @@ }, { "name": "laravel/framework", - "version": "v12.62.0", + "version": "v12.63.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "f7e61eb1e0e06a38996802b769bce9127aec227c" + "reference": "7adfddbf4738f2e6cae5419b0e6bc46d4cccfbcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/f7e61eb1e0e06a38996802b769bce9127aec227c", - "reference": "f7e61eb1e0e06a38996802b769bce9127aec227c", + "url": "https://api.github.com/repos/laravel/framework/zipball/7adfddbf4738f2e6cae5419b0e6bc46d4cccfbcf", + "reference": "7adfddbf4738f2e6cae5419b0e6bc46d4cccfbcf", "shasum": "" }, "require": { @@ -3233,7 +3234,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-06-09T13:50:13+00:00" + "time": "2026-07-07T14:16:35+00:00" }, { "name": "laravel/prompts", @@ -3786,16 +3787,16 @@ }, { "name": "league/flysystem", - "version": "3.35.1", + "version": "3.35.2", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f23af6c5aafd958a7593029a271d77baf5ed793c" + "reference": "b277b5dc3d56650b68904117124e79c851e12376" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f23af6c5aafd958a7593029a271d77baf5ed793c", - "reference": "f23af6c5aafd958a7593029a271d77baf5ed793c", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b277b5dc3d56650b68904117124e79c851e12376", + "reference": "b277b5dc3d56650b68904117124e79c851e12376", "shasum": "" }, "require": { @@ -3863,9 +3864,9 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.35.1" + "source": "https://github.com/thephpleague/flysystem/tree/3.35.2" }, - "time": "2026-06-25T06:52:23+00:00" + "time": "2026-07-06T14:42:07+00:00" }, { "name": "league/flysystem-local", @@ -4575,6 +4576,74 @@ ], "time": "2026-01-29T11:24:01+00:00" }, + { + "name": "lunarphp/table-rate-shipping", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/lunarphp/table-rate-shipping.git", + "reference": "2d272a904136017d53556bb153b198162fa10918" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lunarphp/table-rate-shipping/zipball/2d272a904136017d53556bb153b198162fa10918", + "reference": "2d272a904136017d53556bb153b198162fa10918", + "shasum": "" + }, + "require": { + "lunarphp/lunar": "self.version", + "php": "^8.2" + }, + "type": "library", + "extra": { + "lunar": { + "name": "Table Rate Shipping" + }, + "laravel": { + "providers": [ + "Lunar\\Shipping\\ShippingServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Lunar\\Shipping\\": "src", + "Lunar\\Shipping\\Database\\Factories\\": "database/factories" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lunar", + "homepage": "https://lunarphp.io/" + } + ], + "description": "Lunar Table Rate Shipping Addon", + "keywords": [ + "cart", + "e-commerce", + "ecommerce", + "headless", + "laravel", + "lunar", + "shop", + "store" + ], + "support": { + "issues": "https://github.com/lunarphp/table-rate-shipping/issues", + "source": "https://github.com/lunarphp/table-rate-shipping/tree/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/lunar", + "type": "github" + } + ], + "time": "2025-12-08T13:52:29+00:00" + }, { "name": "maennchen/zipstream-php", "version": "3.2.2", @@ -5088,20 +5157,19 @@ }, { "name": "nikic/php-parser", - "version": "v5.7.0", + "version": "v5.8.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f", + "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f", "shasum": "" }, "require": { - "ext-ctype": "*", "ext-json": "*", "ext-tokenizer": "*", "php": ">=7.4" @@ -5140,9 +5208,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0" }, - "time": "2025-12-06T11:56:16+00:00" + "time": "2026-07-04T14:30:18+00:00" }, { "name": "nunomaduro/termwind", @@ -6438,16 +6506,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.3.2", + "version": "2.3.3", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" + "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", - "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fb19eedd2bb67ff8cf7a5502ad329e701d6398a3", + "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3", "shasum": "" }, "require": { @@ -6479,9 +6547,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.3" }, - "time": "2026-01-25T14:56:51+00:00" + "time": "2026-07-08T07:01:06+00:00" }, { "name": "pragmarx/google2fa", @@ -12315,16 +12383,16 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.6.3", + "version": "v5.6.4", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "955e7815d677a3eaa7075231212f2110983adecc" + "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", - "reference": "955e7815d677a3eaa7075231212f2110983adecc", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/416df702837983f8d5ff48c9c3fee4f5f57b980b", + "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b", "shasum": "" }, "require": { @@ -12383,7 +12451,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.4" }, "funding": [ { @@ -12395,7 +12463,7 @@ "type": "tidelift" } ], - "time": "2025-12-27T19:49:13+00:00" + "time": "2026-07-06T19:11:50+00:00" }, { "name": "voku/portable-ascii", diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index cb8094d..7ff5c1f 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -45,6 +45,7 @@ services: queue: image: boboko-app + restart: unless-stopped command: php artisan queue:work --tries=3 --max-jobs=500 --memory=256 env_file: .env environment: @@ -67,6 +68,7 @@ services: profiles: [full] image: boboko-app command: php artisan schedule:work + restart: unless-stopped env_file: .env environment: APP_ENV: local diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index a51547c..7e144ea 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -8,6 +8,14 @@ if [ "$APP_ENV" != "production" ] && [ ! -f vendor/autoload.php ]; then composer install --no-interaction --prefer-dist fi +# In development, re-resolve all boboko/* packages against their local path-repo +# checkouts on every boot, so editing boboko-core and running `./bin/dc-core.sh up` +# is enough. No-op unless the path repo in `_repositories` has been enabled. +if [ "$APP_ENV" != "production" ] && [ -d /var/www/boboko-core ]; then + echo "[entrypoint] Re-resolving boboko/* packages from local path repos..." + composer update "boboko/*" --no-interaction --with-all-dependencies +fi + # In development, the app dir is bind-mounted from a fresh checkout, so package # assets (which the Dockerfile publishes at build time in production) need to be # generated here instead. Cheap and idempotent, safe to repeat on every boot.