6a7d98b0fe
Run Tests / test (pull_request) Successful in 32s
Dockerfile 改 multi-stage(app + web),app/scheduler/queue-worker/ reverb/nginx 五個服務都不再依賴 ./:/var/www bind mount 取得程式碼; nginx 改本地 build 從 app 階段 COPY --from 取得 public/,public/storage symlink 在兩階段各自於 build 時建立。docker-compose.yml 新增具名 volume storage-app-public 讓上傳檔案跨 image 重建保留;env_file: 取代原本 bind mount 帶入 .env 的方式,只給四個 Laravel runtime 服務。 compose.override.yml 補上開發用 bind mount 維持改 code 立即生效; docker-entrypoint.sh 收斂到只剩目錄權限設定,migration/cache/swagger 移到 deploy.yml 統一負責,避免職責重疊。 實作驗證時發現並修復三個規劃階段沒預見的問題:app 服務的 build: 缺 target: app 導致預設建到最後一個 stage(image 實際變成 nginx); .dockerignore 需排除本機既有的 public/storage 符號連結(Windows 上 會讓 build context 打包失敗);env_file: 讓 .env 全部變數變成真實 環境變數、蓋掉 phpunit.xml 的測試隔離設定,已擴大 tests/bootstrap.php 的強制覆蓋清單修復(239 tests 全綠)。 本機 dev 模式與 production 模式(無 override)皆完整驗證:healthcheck、 migration/cache/swagger、上傳檔案持久性、nginx 獨立於 app 服務靜態檔 與 storage 檔案、.env 熱更新、nginx 無 .env 存取權。 openspec change: bake-image-remove-bind-mount Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0142LC1kQb8EyV59TjHDkhWS
39 lines
1.8 KiB
XML
39 lines
1.8 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
|
||
bootstrap="tests/bootstrap.php"
|
||
colors="true"
|
||
>
|
||
<testsuites>
|
||
<testsuite name="Unit">
|
||
<directory>tests/Unit</directory>
|
||
</testsuite>
|
||
<testsuite name="Feature">
|
||
<directory>tests/Feature</directory>
|
||
</testsuite>
|
||
</testsuites>
|
||
<source>
|
||
<include>
|
||
<directory>app</directory>
|
||
</include>
|
||
</source>
|
||
<php>
|
||
<!-- force="true" 全部套用:docker-compose.yml 改用 env_file: 注入 .env 後,
|
||
.env 內所有變數都變成真實環境變數,phpunit 的 env 預設不覆蓋真實環境變數。
|
||
實際生效仍依賴 tests/bootstrap.php 同步寫入 $_SERVER(force="true" 本身
|
||
只覆蓋 $_ENV/putenv,Laravel env() 優先讀 $_SERVER),這裡的 force="true"
|
||
是與 bootstrap.php 保持一致、自我說明用途 -->
|
||
<env name="APP_ENV" value="testing" force="true"/>
|
||
<env name="APP_MAINTENANCE_DRIVER" value="file" force="true"/>
|
||
<env name="BCRYPT_ROUNDS" value="4" force="true"/>
|
||
<env name="CACHE_STORE" value="array" force="true"/>
|
||
<env name="DB_CONNECTION" value="sqlite" force="true"/>
|
||
<env name="DB_DATABASE" value=":memory:" force="true"/>
|
||
<env name="MAIL_MAILER" value="array" force="true"/>
|
||
<env name="PULSE_ENABLED" value="false" force="true"/>
|
||
<env name="QUEUE_CONNECTION" value="sync" force="true"/>
|
||
<env name="SESSION_DRIVER" value="array" force="true"/>
|
||
<env name="TELESCOPE_ENABLED" value="false" force="true"/>
|
||
</php>
|
||
</phpunit>
|