Merge branch 'master' into elv

This commit is contained in:
elvira
2026-07-10 16:56:34 +03:00
9 changed files with 230 additions and 116 deletions
+12 -11
View File
@@ -1,6 +1,6 @@
# Unique per VPS deployment: namespaces containers/volumes/networks and the built image tag, # 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. # 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_NAME=Laravel
APP_ENV=local APP_ENV=local
@@ -25,11 +25,11 @@ LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug LOG_LEVEL=debug
DB_CONNECTION=pgsql DB_CONNECTION=pgsql
DB_HOST=127.0.0.1 DB_HOST=postgres
DB_PORT=5432 DB_PORT=5432
DB_DATABASE=boboko DB_DATABASE=boboko
DB_USERNAME=root DB_USERNAME=root
DB_PASSWORD= DB_PASSWORD=dev
SESSION_DRIVER=database SESSION_DRIVER=database
SESSION_LIFETIME=120 SESSION_LIFETIME=120
@@ -47,14 +47,14 @@ CACHE_STORE=database
MEMCACHED_HOST=127.0.0.1 MEMCACHED_HOST=127.0.0.1
REDIS_CLIENT=phpredis REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1 REDIS_HOST=valkey
REDIS_PASSWORD=null REDIS_PASSWORD=null
REDIS_PORT=6379 REDIS_PORT=6379
MAIL_MAILER=log MAIL_MAILER=smtp
MAIL_SCHEME=null MAIL_SCHEME=null
MAIL_HOST=127.0.0.1 MAIL_HOST=mailpit
MAIL_PORT=2525 MAIL_PORT=1025
MAIL_USERNAME=null MAIL_USERNAME=null
MAIL_PASSWORD=null MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_ADDRESS="hello@example.com"
@@ -68,17 +68,18 @@ AWS_USE_PATH_STYLE_ENDPOINT=false
VITE_APP_NAME="${APP_NAME}" VITE_APP_NAME="${APP_NAME}"
OTEL_SERVICE_NAME= OTEL_SERVICE_NAME=boboko-starter
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_PROPAGATORS=baggage,tracecontext OTEL_PROPAGATORS=baggage,tracecontext
OTEL_PHP_AUTOLOAD_ENABLED=true OTEL_PHP_AUTOLOAD_ENABLED=true
OTEL_EXPORTER_OTLP_ENDPOINT= OTEL_EXPORTER_OTLP_ENDPOINT=
STOIC_SECRET= # Stoic is the headless CMS, proxied at /stoic/ behind the app in prod (see docker/nginx/prod.conf)
STOIC_SSO_SECRET= STOIC_SECRET=dev-secret-change-me
STOIC_SSO_SECRET=dev-sso-secret-change-me
STOIC_HOST=http://localhost:2727 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 APP_PORT=8090
STOIC_PORT=2727 STOIC_PORT=2727
VALKEY_PORT=6339 VALKEY_PORT=6339
+1
View File
@@ -20,6 +20,7 @@
/public/logos/core /public/logos/core
/public/storage /public/storage
/storage/*.key /storage/*.key
/storage/framework/migrated
/storage/pail /storage/pail
/vendor /vendor
_ide_helper.php _ide_helper.php
+2 -1
View File
@@ -127,7 +127,8 @@ RUN composer install \
--ignore-platform-reqs --ignore-platform-reqs
COPY docker/entrypoint.sh /entrypoint.sh COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh COPY docker/entrypoint-worker.sh /entrypoint-worker.sh
RUN chmod +x /entrypoint.sh /entrypoint-worker.sh
EXPOSE 9000 EXPOSE 9000
ENTRYPOINT ["/entrypoint.sh"] ENTRYPOINT ["/entrypoint.sh"]
+1 -1
View File
@@ -10,7 +10,7 @@
"license": "MIT", "license": "MIT",
"require": { "require": {
"artesaos/seotools": "^1.4", "artesaos/seotools": "^1.4",
"boboko/core": "^0.0.2", "boboko/core": "0.*",
"open-telemetry/exporter-otlp": "^1.4", "open-telemetry/exporter-otlp": "^1.4",
"open-telemetry/opentelemetry-auto-laravel": "^1.7", "open-telemetry/opentelemetry-auto-laravel": "^1.7",
"open-telemetry/sdk": "^1.14", "open-telemetry/sdk": "^1.14",
Generated
+154 -86
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "d159988b8e0edece23fcf2e7b59d1cfa", "content-hash": "497fd57dba085798efccc5819904020f",
"packages": [ "packages": [
{ {
"name": "anourvalar/eloquent-serialize", "name": "anourvalar/eloquent-serialize",
@@ -565,16 +565,17 @@
}, },
{ {
"name": "boboko/core", "name": "boboko/core",
"version": "0.0.2", "version": "0.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://code.radical-elements.com/boboko/core.git", "url": "https://code.radical-elements.com/boboko/core.git",
"reference": "ebe905acfa4915a62b409f91480db46f01a5462c" "reference": "0524380ab0922729d177e7bf000c61be1fba440a"
}, },
"require": { "require": {
"laravel/framework": "^12.0", "laravel/framework": "^12.0",
"laravel/tinker": "^3.0", "laravel/tinker": "^3.0",
"lunarphp/lunar": "1.3.0", "lunarphp/lunar": "1.3.0",
"lunarphp/table-rate-shipping": "^1.3",
"php": "^8.5", "php": "^8.5",
"symfony/yaml": "^7.0" "symfony/yaml": "^7.0"
}, },
@@ -604,7 +605,7 @@
} }
}, },
"description": "Core module — authentication and shared panel behaviour", "description": "Core module — authentication and shared panel behaviour",
"time": "2026-07-03T12:09:28+00:00" "time": "2026-07-10T12:21:42+00:00"
}, },
{ {
"name": "brick/math", "name": "brick/math",
@@ -2472,22 +2473,22 @@
}, },
{ {
"name": "guzzlehttp/guzzle", "name": "guzzlehttp/guzzle",
"version": "7.13.1", "version": "7.14.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/guzzle.git", "url": "https://github.com/guzzle/guzzle.git",
"reference": "55901a76dfd2006a0cc012b9e3c5b487f796478d" "reference": "aef242412e13128b5049864867bb49fc37dd39de"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/55901a76dfd2006a0cc012b9e3c5b487f796478d", "url": "https://api.github.com/repos/guzzle/guzzle/zipball/aef242412e13128b5049864867bb49fc37dd39de",
"reference": "55901a76dfd2006a0cc012b9e3c5b487f796478d", "reference": "aef242412e13128b5049864867bb49fc37dd39de",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-json": "*", "ext-json": "*",
"guzzlehttp/promises": "^2.5", "guzzlehttp/promises": "^2.5.1",
"guzzlehttp/psr7": "^2.12.3", "guzzlehttp/psr7": "^2.12.4",
"php": "^7.2.5 || ^8.0", "php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0", "psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.5 || ^3.0", "symfony/deprecation-contracts": "^2.5 || ^3.0",
@@ -2499,7 +2500,7 @@
"require-dev": { "require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2", "bamarni/composer-bin-plugin": "^1.8.2",
"ext-curl": "*", "ext-curl": "*",
"guzzle/client-integration-tests": "3.0.2", "guzzle/client-integration-tests": "3.0.3",
"guzzlehttp/test-server": "^0.6", "guzzlehttp/test-server": "^0.6",
"php-http/message-factory": "^1.1", "php-http/message-factory": "^1.1",
"phpunit/phpunit": "^8.5.52 || ^9.6.34", "phpunit/phpunit": "^8.5.52 || ^9.6.34",
@@ -2580,7 +2581,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/guzzle/issues", "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.14.0"
}, },
"funding": [ "funding": [
{ {
@@ -2596,20 +2597,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2026-06-29T20:14:18+00:00" "time": "2026-07-08T22:54:09+00:00"
}, },
{ {
"name": "guzzlehttp/promises", "name": "guzzlehttp/promises",
"version": "2.5.0", "version": "2.5.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/promises.git", "url": "https://github.com/guzzle/promises.git",
"reference": "4360e982f87f5f258bf872d094647791db2f4c8e" "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/4360e982f87f5f258bf872d094647791db2f4c8e", "url": "https://api.github.com/repos/guzzle/promises/zipball/9ad1e4fc607446a055b95870c7f668e93b5cff29",
"reference": "4360e982f87f5f258bf872d094647791db2f4c8e", "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2664,7 +2665,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/promises/issues", "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": [ "funding": [
{ {
@@ -2680,20 +2681,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2026-06-02T12:23:43+00:00" "time": "2026-07-08T15:48:39+00:00"
}, },
{ {
"name": "guzzlehttp/psr7", "name": "guzzlehttp/psr7",
"version": "2.12.3", "version": "2.12.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/psr7.git", "url": "https://github.com/guzzle/psr7.git",
"reference": "7ec62dc3f44aa218487dbed81a9bf9bc647be55d" "reference": "51e27f9e2b332ab3e72f4520d5ff4f3c68c3577c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/7ec62dc3f44aa218487dbed81a9bf9bc647be55d", "url": "https://api.github.com/repos/guzzle/psr7/zipball/51e27f9e2b332ab3e72f4520d5ff4f3c68c3577c",
"reference": "7ec62dc3f44aa218487dbed81a9bf9bc647be55d", "reference": "51e27f9e2b332ab3e72f4520d5ff4f3c68c3577c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2783,7 +2784,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/psr7/issues", "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": [ "funding": [
{ {
@@ -2799,20 +2800,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2026-06-23T15:21:08+00:00" "time": "2026-07-08T15:56:20+00:00"
}, },
{ {
"name": "guzzlehttp/uri-template", "name": "guzzlehttp/uri-template",
"version": "v1.0.8", "version": "v1.0.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/uri-template.git", "url": "https://github.com/guzzle/uri-template.git",
"reference": "9c19128923b05a5d7355e5d2318d7808b7e33bbd" "reference": "d7580af6d3f8384325d9cd3e99b21c3ed1848176"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/uri-template/zipball/9c19128923b05a5d7355e5d2318d7808b7e33bbd", "url": "https://api.github.com/repos/guzzle/uri-template/zipball/d7580af6d3f8384325d9cd3e99b21c3ed1848176",
"reference": "9c19128923b05a5d7355e5d2318d7808b7e33bbd", "reference": "d7580af6d3f8384325d9cd3e99b21c3ed1848176",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2869,7 +2870,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/uri-template/issues", "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": [ "funding": [
{ {
@@ -2885,7 +2886,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2026-06-23T13:02:23+00:00" "time": "2026-07-08T16:19:22+00:00"
}, },
{ {
"name": "kalnoy/nestedset", "name": "kalnoy/nestedset",
@@ -3015,16 +3016,16 @@
}, },
{ {
"name": "laravel/framework", "name": "laravel/framework",
"version": "v12.62.0", "version": "v12.63.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/framework.git", "url": "https://github.com/laravel/framework.git",
"reference": "f7e61eb1e0e06a38996802b769bce9127aec227c" "reference": "7adfddbf4738f2e6cae5419b0e6bc46d4cccfbcf"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/f7e61eb1e0e06a38996802b769bce9127aec227c", "url": "https://api.github.com/repos/laravel/framework/zipball/7adfddbf4738f2e6cae5419b0e6bc46d4cccfbcf",
"reference": "f7e61eb1e0e06a38996802b769bce9127aec227c", "reference": "7adfddbf4738f2e6cae5419b0e6bc46d4cccfbcf",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -3233,7 +3234,7 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "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", "name": "laravel/prompts",
@@ -3786,16 +3787,16 @@
}, },
{ {
"name": "league/flysystem", "name": "league/flysystem",
"version": "3.35.1", "version": "3.35.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/thephpleague/flysystem.git", "url": "https://github.com/thephpleague/flysystem.git",
"reference": "f23af6c5aafd958a7593029a271d77baf5ed793c" "reference": "b277b5dc3d56650b68904117124e79c851e12376"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f23af6c5aafd958a7593029a271d77baf5ed793c", "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b277b5dc3d56650b68904117124e79c851e12376",
"reference": "f23af6c5aafd958a7593029a271d77baf5ed793c", "reference": "b277b5dc3d56650b68904117124e79c851e12376",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -3863,9 +3864,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/thephpleague/flysystem/issues", "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", "name": "league/flysystem-local",
@@ -3918,16 +3919,16 @@
}, },
{ {
"name": "league/mime-type-detection", "name": "league/mime-type-detection",
"version": "1.16.0", "version": "1.17.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/thephpleague/mime-type-detection.git", "url": "https://github.com/thephpleague/mime-type-detection.git",
"reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/f5f47eff7c48ed1003069a2ca67f316fb4021c76",
"reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -3937,7 +3938,7 @@
"require-dev": { "require-dev": {
"friendsofphp/php-cs-fixer": "^3.2", "friendsofphp/php-cs-fixer": "^3.2",
"phpstan/phpstan": "^0.12.68", "phpstan/phpstan": "^0.12.68",
"phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0 || ^11.0 || ^12.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -3958,7 +3959,7 @@
"description": "Mime-type detection for Flysystem", "description": "Mime-type detection for Flysystem",
"support": { "support": {
"issues": "https://github.com/thephpleague/mime-type-detection/issues", "issues": "https://github.com/thephpleague/mime-type-detection/issues",
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" "source": "https://github.com/thephpleague/mime-type-detection/tree/1.17.0"
}, },
"funding": [ "funding": [
{ {
@@ -3970,7 +3971,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-21T08:32:55+00:00" "time": "2026-07-09T11:49:27+00:00"
}, },
{ {
"name": "league/uri", "name": "league/uri",
@@ -4575,6 +4576,74 @@
], ],
"time": "2026-01-29T11:24:01+00:00" "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", "name": "maennchen/zipstream-php",
"version": "3.2.2", "version": "3.2.2",
@@ -4825,16 +4894,16 @@
}, },
{ {
"name": "nesbot/carbon", "name": "nesbot/carbon",
"version": "3.13.0", "version": "3.13.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/CarbonPHP/carbon.git", "url": "https://github.com/CarbonPHP/carbon.git",
"reference": "40f6618f052df16b545f626fbf9a878e6497d16a" "reference": "2937ad3d1d2c506fd2bc97d571438a95641f44e2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/40f6618f052df16b545f626fbf9a878e6497d16a", "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/2937ad3d1d2c506fd2bc97d571438a95641f44e2",
"reference": "40f6618f052df16b545f626fbf9a878e6497d16a", "reference": "2937ad3d1d2c506fd2bc97d571438a95641f44e2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -4926,7 +4995,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2026-06-18T13:49:15+00:00" "time": "2026-07-09T18:23:49+00:00"
}, },
{ {
"name": "nette/schema", "name": "nette/schema",
@@ -5088,20 +5157,19 @@
}, },
{ {
"name": "nikic/php-parser", "name": "nikic/php-parser",
"version": "v5.7.0", "version": "v5.8.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nikic/PHP-Parser.git", "url": "https://github.com/nikic/PHP-Parser.git",
"reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f",
"reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-ctype": "*",
"ext-json": "*", "ext-json": "*",
"ext-tokenizer": "*", "ext-tokenizer": "*",
"php": ">=7.4" "php": ">=7.4"
@@ -5140,9 +5208,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/nikic/PHP-Parser/issues", "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", "name": "nunomaduro/termwind",
@@ -6438,16 +6506,16 @@
}, },
{ {
"name": "phpstan/phpdoc-parser", "name": "phpstan/phpdoc-parser",
"version": "2.3.2", "version": "2.3.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git", "url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fb19eedd2bb67ff8cf7a5502ad329e701d6398a3",
"reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -6479,9 +6547,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types", "description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": { "support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues", "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", "name": "pragmarx/google2fa",
@@ -7989,16 +8057,16 @@
}, },
{ {
"name": "spatie/laravel-medialibrary", "name": "spatie/laravel-medialibrary",
"version": "11.23.1", "version": "11.23.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/spatie/laravel-medialibrary.git", "url": "https://github.com/spatie/laravel-medialibrary.git",
"reference": "143106b61b945f1ca815e6a71598c03881469228" "reference": "cc1fdc4a9a9007101df610cd4a6733be71db4828"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/143106b61b945f1ca815e6a71598c03881469228", "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/cc1fdc4a9a9007101df610cd4a6733be71db4828",
"reference": "143106b61b945f1ca815e6a71598c03881469228", "reference": "cc1fdc4a9a9007101df610cd4a6733be71db4828",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -8083,7 +8151,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/spatie/laravel-medialibrary/issues", "issues": "https://github.com/spatie/laravel-medialibrary/issues",
"source": "https://github.com/spatie/laravel-medialibrary/tree/11.23.1" "source": "https://github.com/spatie/laravel-medialibrary/tree/11.23.2"
}, },
"funding": [ "funding": [
{ {
@@ -8095,7 +8163,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2026-06-24T08:31:39+00:00" "time": "2026-07-09T13:26:15+00:00"
}, },
{ {
"name": "spatie/laravel-package-tools", "name": "spatie/laravel-package-tools",
@@ -12052,16 +12120,16 @@
}, },
{ {
"name": "technikermathe/blade-lucide-icons", "name": "technikermathe/blade-lucide-icons",
"version": "v3.158.0", "version": "v3.159.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/PascaleBeier/blade-lucide-icons.git", "url": "https://github.com/PascaleBeier/blade-lucide-icons.git",
"reference": "5748736d9c24b152da69779a1ca21bc33620dc6a" "reference": "b8dec6812bc09ebad05464cc176df4f949e146c5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/PascaleBeier/blade-lucide-icons/zipball/5748736d9c24b152da69779a1ca21bc33620dc6a", "url": "https://api.github.com/repos/PascaleBeier/blade-lucide-icons/zipball/b8dec6812bc09ebad05464cc176df4f949e146c5",
"reference": "5748736d9c24b152da69779a1ca21bc33620dc6a", "reference": "b8dec6812bc09ebad05464cc176df4f949e146c5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -12111,9 +12179,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/PascaleBeier/blade-lucide-icons/issues", "issues": "https://github.com/PascaleBeier/blade-lucide-icons/issues",
"source": "https://github.com/PascaleBeier/blade-lucide-icons/tree/v3.158.0" "source": "https://github.com/PascaleBeier/blade-lucide-icons/tree/v3.159.0"
}, },
"time": "2026-07-02T00:30:05+00:00" "time": "2026-07-10T01:55:13+00:00"
}, },
{ {
"name": "thecodingmachine/safe", "name": "thecodingmachine/safe",
@@ -12315,16 +12383,16 @@
}, },
{ {
"name": "vlucas/phpdotenv", "name": "vlucas/phpdotenv",
"version": "v5.6.3", "version": "v5.6.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/vlucas/phpdotenv.git", "url": "https://github.com/vlucas/phpdotenv.git",
"reference": "955e7815d677a3eaa7075231212f2110983adecc" "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/416df702837983f8d5ff48c9c3fee4f5f57b980b",
"reference": "955e7815d677a3eaa7075231212f2110983adecc", "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -12383,7 +12451,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/vlucas/phpdotenv/issues", "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": [ "funding": [
{ {
@@ -12395,7 +12463,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-12-27T19:49:13+00:00" "time": "2026-07-06T19:11:50+00:00"
}, },
{ {
"name": "voku/portable-ascii", "name": "voku/portable-ascii",
@@ -12703,5 +12771,5 @@
"prefer-lowest": false, "prefer-lowest": false,
"platform": {}, "platform": {},
"platform-dev": {}, "platform-dev": {},
"plugin-api-version": "2.6.0" "plugin-api-version": "2.9.0"
} }
+5
View File
@@ -45,6 +45,8 @@ services:
queue: queue:
image: boboko-app image: boboko-app
restart: unless-stopped
entrypoint: ["/entrypoint-worker.sh"]
command: php artisan queue:work --tries=3 --max-jobs=500 --memory=256 command: php artisan queue:work --tries=3 --max-jobs=500 --memory=256
env_file: .env env_file: .env
environment: environment:
@@ -66,7 +68,9 @@ services:
scheduler: scheduler:
profiles: [full] profiles: [full]
image: boboko-app image: boboko-app
entrypoint: ["/entrypoint-worker.sh"]
command: php artisan schedule:work command: php artisan schedule:work
restart: unless-stopped
env_file: .env env_file: .env
environment: environment:
APP_ENV: local APP_ENV: local
@@ -136,6 +140,7 @@ services:
- "${VITE_PORT:-5173}:5173" - "${VITE_PORT:-5173}:5173"
environment: environment:
- NODE_ENV=development - NODE_ENV=development
- VITE_PORT=${VITE_PORT:-5173}
volumes: volumes:
- .:/app - .:/app
- /app/node_modules - /app/node_modules
+21
View File
@@ -0,0 +1,21 @@
#!/bin/sh
set -e
# queue/scheduler: no composer/migrate/asset-publish here (that's entrypoint.sh, run
# by app only) — just wait for app's migration to finish, then start the process.
mkdir -p storage/app/public storage/framework/cache storage/framework/sessions storage/framework/views storage/logs storage/framework bootstrap/cache
if [ "$APP_ENV" != "production" ]; then
echo "[entrypoint] Waiting for migrations to complete..."
timeout=60
while [ ! -f storage/framework/migrated ] && [ "$timeout" -gt 0 ]; do
sleep 1
timeout=$((timeout - 1))
done
if [ ! -f storage/framework/migrated ]; then
echo "[entrypoint] Timed out waiting for migrations" >&2
exit 1
fi
fi
exec "$@"
+33 -17
View File
@@ -1,31 +1,47 @@
#!/bin/sh #!/bin/sh
set -e set -e
# In development, install Composer deps if vendor is not present # Only the app container runs setup; queue/scheduler use entrypoint-worker.sh instead
if [ "$APP_ENV" != "production" ] && [ ! -f vendor/autoload.php ]; then # and just wait on the migrated marker this script writes below.
if [ "$APP_ENV" != "production" ]; then
echo "[entrypoint] Installing Composer dependencies..." echo "[entrypoint] Installing Composer dependencies..."
git config --global --add safe.directory /var/www/html 2>/dev/null || true git config --global --add safe.directory /var/www/html 2>/dev/null || true
composer install --no-interaction --prefer-dist composer install --no-interaction --prefer-dist
# Re-resolve boboko/* on every boot, whether it's a local path-repo checkout
# (../boboko-core mounted via docker-compose.core-dev.yml) or a VCS tag. Rewrites
# composer.lock, which is committed so prod picks up the resolved version via
# `composer install` alone.
echo "[entrypoint] Re-resolving boboko/* packages..."
composer update "boboko/*" --no-interaction --with-all-dependencies
fi fi
# In development, the app dir is bind-mounted from a fresh checkout, so package mkdir -p storage/app/public storage/framework/cache storage/framework/sessions storage/framework/views storage/logs storage/framework bootstrap/cache
# 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.
if [ "$APP_ENV" != "production" ]; then
php artisan vendor:publish --tag=core-assets --force --ansi --quiet
php artisan vendor:publish --tag=public --force --ansi --quiet
php artisan filament:assets --ansi --quiet
fi
# Everything below runs on every boot of app/queue/scheduler, possibly concurrently,
# so it must be idempotent and safe to run from multiple containers at once.
# Migrations, package publishing, and config/route/view caching are deploy-time
# concerns handled once via Envoy, not here.
mkdir -p storage/app/public storage/framework/cache storage/framework/sessions storage/framework/views storage/logs bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cache
chmod -R 775 storage bootstrap/cache chmod -R 775 storage bootstrap/cache
php artisan storage:link --quiet 2>/dev/null || true php artisan storage:link --quiet 2>/dev/null || true
if [ "$APP_ENV" != "production" ]; then
# 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.
php artisan vendor:publish --tag=core-assets --force --ansi --quiet
php artisan vendor:publish --tag=public --force --ansi --quiet
php artisan filament:assets --ansi --quiet
echo "[entrypoint] Running migrations..."
rm -f storage/framework/migrated
php artisan migrate --force
touch storage/framework/migrated
# boboko/core overrides lunar:install to skip the interactive prompts (migrate
# confirm, admin creation, GitHub star) and just seed the idempotent store
# defaults: countries, channel, language, currency, tax zone, attributes,
# product type. queue/scheduler wait on the marker above rather than running
# this themselves, since the country import's check-then-insert isn't safe to
# run concurrently.
php artisan lunar:install --quiet || true
fi
exec "$@" exec "$@"
+1
View File
@@ -22,6 +22,7 @@ export default defineConfig({
cors: true, cors: true,
hmr: { hmr: {
host: "localhost", host: "localhost",
clientPort: process.env.VITE_PORT || 5173,
}, },
watch: { watch: {
ignored: ["**/storage/framework/views/**"], ignored: ["**/storage/framework/views/**"],