diff --git a/frontend/app/(admin)/admin/doc-control/drawings/contract/categories/page.tsx b/frontend/app/(admin)/admin/doc-control/drawings/contract/categories/page.tsx index 16b8076..c8dd397 100644 --- a/frontend/app/(admin)/admin/doc-control/drawings/contract/categories/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/drawings/contract/categories/page.tsx @@ -10,6 +10,7 @@ import { drawingMasterDataService, ContractCategory, ContractSubCategory, + CreateContractCategoryDto, } from '@/lib/services/drawing-master-data.service'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; @@ -107,7 +108,7 @@ export default function ContractCategoriesPage() { console.log('Contract Categories Data:', data); return data; }} - createFn={(data) => drawingMasterDataService.createContractCategory({ ...data, projectId: selectedProjectId })} + createFn={(data: Record) => drawingMasterDataService.createContractCategory({ ...(data as unknown as CreateContractCategoryDto), projectId: selectedProjectId })} updateFn={(id, data) => drawingMasterDataService.updateContractCategory(id, data)} deleteFn={(id) => drawingMasterDataService.deleteContractCategory(id)} columns={columns} diff --git a/frontend/app/(admin)/admin/doc-control/drawings/contract/sub-categories/page.tsx b/frontend/app/(admin)/admin/doc-control/drawings/contract/sub-categories/page.tsx index c42e77b..03101ff 100644 --- a/frontend/app/(admin)/admin/doc-control/drawings/contract/sub-categories/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/drawings/contract/sub-categories/page.tsx @@ -6,7 +6,7 @@ import { ColumnDef } from '@tanstack/react-table'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Loader2 } from 'lucide-react'; import { useProjects } from '@/hooks/use-master-data'; -import { drawingMasterDataService } from '@/lib/services/drawing-master-data.service'; +import { drawingMasterDataService, CreateContractSubCategoryDto } from '@/lib/services/drawing-master-data.service'; import { Badge } from '@/components/ui/badge'; interface SubCategory { @@ -100,8 +100,8 @@ export default function ContractSubCategoriesPage() { console.log('Contract Sub-Categories Data:', data); return data; }} - createFn={(data) => - drawingMasterDataService.createContractSubCategory({ ...data, projectId: selectedProjectId }) + createFn={(data: Record) => + drawingMasterDataService.createContractSubCategory({ ...(data as unknown as CreateContractSubCategoryDto), projectId: selectedProjectId }) } updateFn={(id, data) => drawingMasterDataService.updateContractSubCategory(id, data)} deleteFn={(id) => drawingMasterDataService.deleteContractSubCategory(id)} diff --git a/frontend/app/(admin)/admin/doc-control/drawings/contract/volumes/page.tsx b/frontend/app/(admin)/admin/doc-control/drawings/contract/volumes/page.tsx index 3fb0b6a..f8327a4 100644 --- a/frontend/app/(admin)/admin/doc-control/drawings/contract/volumes/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/drawings/contract/volumes/page.tsx @@ -109,7 +109,7 @@ export default function ContractVolumesPage() { description="Manage drawing volumes (เล่ม) for contract drawings" queryKey={["contract-drawing-volumes", String(selectedProjectId)]} fetchFn={() => drawingMasterDataService.getContractVolumes(selectedProjectId)} - createFn={(data) => drawingMasterDataService.createContractVolume({ ...data, projectId: selectedProjectId })} + createFn={(data: Record) => drawingMasterDataService.createContractVolume({ ...(data as unknown as Parameters[0]), projectId: selectedProjectId })} updateFn={(id, data) => drawingMasterDataService.updateContractVolume(id, data)} deleteFn={(id) => drawingMasterDataService.deleteContractVolume(id)} columns={columns} diff --git a/frontend/app/(admin)/admin/doc-control/drawings/shop/main-categories/page.tsx b/frontend/app/(admin)/admin/doc-control/drawings/shop/main-categories/page.tsx index a348a51..0066883 100644 --- a/frontend/app/(admin)/admin/doc-control/drawings/shop/main-categories/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/drawings/shop/main-categories/page.tsx @@ -6,7 +6,7 @@ import { ColumnDef } from '@tanstack/react-table'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Loader2, CheckCircle, XCircle } from 'lucide-react'; import { useProjects } from '@/hooks/use-master-data'; -import { drawingMasterDataService } from '@/lib/services/drawing-master-data.service'; +import { drawingMasterDataService, CreateShopMainCategoryDto } from '@/lib/services/drawing-master-data.service'; import { Badge } from '@/components/ui/badge'; interface MainCategory { @@ -111,9 +111,9 @@ export default function ShopMainCategoriesPage() { console.log('Shop Main Categories Data:', data); return data; }} - createFn={(data) => + createFn={(data: Record) => drawingMasterDataService.createShopMainCategory({ - ...data, + ...(data as unknown as CreateShopMainCategoryDto), projectId: selectedProjectId, isActive: data.isActive === 'true' || data.isActive === true, }) diff --git a/frontend/app/(admin)/admin/doc-control/drawings/shop/sub-categories/page.tsx b/frontend/app/(admin)/admin/doc-control/drawings/shop/sub-categories/page.tsx index 5459d17..8f93a16 100644 --- a/frontend/app/(admin)/admin/doc-control/drawings/shop/sub-categories/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/drawings/shop/sub-categories/page.tsx @@ -6,7 +6,7 @@ import { ColumnDef } from '@tanstack/react-table'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Loader2, CheckCircle, XCircle } from 'lucide-react'; import { useProjects } from '@/hooks/use-master-data'; -import { drawingMasterDataService } from '@/lib/services/drawing-master-data.service'; +import { drawingMasterDataService, CreateShopSubCategoryDto } from '@/lib/services/drawing-master-data.service'; import { Badge } from '@/components/ui/badge'; interface SubCategory { @@ -113,9 +113,9 @@ export default function ShopSubCategoriesPage() { console.log('Shop Sub-Categories Data:', data); return data; }} - createFn={(data) => + createFn={(data: Record) => drawingMasterDataService.createShopSubCategory({ - ...data, + ...(data as unknown as CreateShopSubCategoryDto), projectId: selectedProjectId, isActive: data.isActive === 'true' || data.isActive === true, }) diff --git a/frontend/app/(admin)/admin/doc-control/reference/correspondence-types/page.tsx b/frontend/app/(admin)/admin/doc-control/reference/correspondence-types/page.tsx index ae6daa4..8bad2d2 100644 --- a/frontend/app/(admin)/admin/doc-control/reference/correspondence-types/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/reference/correspondence-types/page.tsx @@ -46,7 +46,7 @@ export default function CorrespondenceTypesPage() { description="Manage global correspondence types (e.g., LETTER, TRANSMITTAL)" queryKey={["correspondence-types"]} fetchFn={() => masterDataService.getCorrespondenceTypes()} - createFn={(data) => masterDataService.createCorrespondenceType(data)} + createFn={(data: Record) => masterDataService.createCorrespondenceType(data as unknown as Parameters[0])} updateFn={(id, data) => masterDataService.updateCorrespondenceType(id, data)} deleteFn={(id) => masterDataService.deleteCorrespondenceType(id)} columns={columns} diff --git a/frontend/app/(admin)/admin/doc-control/reference/disciplines/page.tsx b/frontend/app/(admin)/admin/doc-control/reference/disciplines/page.tsx index c212d5a..a92f6dd 100644 --- a/frontend/app/(admin)/admin/doc-control/reference/disciplines/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/reference/disciplines/page.tsx @@ -56,7 +56,7 @@ export default function DisciplinesPage() { description="Manage system disciplines (e.g., ARCH, STR, MEC)" queryKey={['disciplines', selectedContractId ?? 'all']} fetchFn={() => masterDataService.getDisciplines(selectedContractId ? parseInt(selectedContractId) : undefined)} - createFn={(data) => masterDataService.createDiscipline(data)} + createFn={(data: Record) => masterDataService.createDiscipline(data as unknown as Parameters[0])} updateFn={(id, data) => Promise.reject('Not implemented yet')} // Update endpoint needs to be verified/added if missing deleteFn={(id) => masterDataService.deleteDiscipline(id)} columns={columns} diff --git a/frontend/app/(admin)/admin/doc-control/reference/drawing-categories/page.tsx b/frontend/app/(admin)/admin/doc-control/reference/drawing-categories/page.tsx index f2f5f28..0666ba9 100644 --- a/frontend/app/(admin)/admin/doc-control/reference/drawing-categories/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/reference/drawing-categories/page.tsx @@ -34,7 +34,7 @@ export default function DrawingCategoriesPage() { description="Manage drawing sub-types and categories" queryKey={["drawing-categories"]} fetchFn={() => masterDataService.getSubTypes(1)} // Default contract ID 1 - createFn={(data) => masterDataService.createSubType({ ...data, contractId: 1, correspondenceTypeId: 3 })} // Assuming 3 is Drawings, hardcoded for now to prevent error + createFn={(data: Record) => masterDataService.createSubType({ ...(data as unknown as Parameters[0]), contractId: 1, correspondenceTypeId: 3 })} // Assuming 3 is Drawings, hardcoded for now to prevent error updateFn={() => Promise.reject("Not implemented yet")} deleteFn={() => Promise.reject("Not implemented yet")} // Delete might be restricted columns={columns} diff --git a/frontend/app/(admin)/admin/doc-control/reference/rfa-types/page.tsx b/frontend/app/(admin)/admin/doc-control/reference/rfa-types/page.tsx index 961cc42..ff4f5e8 100644 --- a/frontend/app/(admin)/admin/doc-control/reference/rfa-types/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/reference/rfa-types/page.tsx @@ -59,7 +59,7 @@ export default function RfaTypesPage() { title="RFA Types Management" queryKey={['rfa-types', selectedContractId ?? 'all']} fetchFn={() => masterDataService.getRfaTypes(selectedContractId ? parseInt(selectedContractId) : undefined)} - createFn={(data) => masterDataService.createRfaType(data)} + createFn={(data: Record) => masterDataService.createRfaType(data as unknown as any)} updateFn={(id, data) => masterDataService.updateRfaType(id, data)} deleteFn={(id) => masterDataService.deleteRfaType(id)} columns={columns} diff --git a/frontend/app/(admin)/admin/doc-control/reference/tags/page.tsx b/frontend/app/(admin)/admin/doc-control/reference/tags/page.tsx index ec6afb6..305488f 100644 --- a/frontend/app/(admin)/admin/doc-control/reference/tags/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/reference/tags/page.tsx @@ -24,7 +24,7 @@ export default function TagsPage() { entityName="Tag" queryKey={["tags"]} fetchFn={() => masterDataService.getTags()} - createFn={(data: CreateTagDto) => masterDataService.createTag(data)} + createFn={(data: Record) => masterDataService.createTag(data as unknown as CreateTagDto)} updateFn={(id, data) => masterDataService.updateTag(id, data)} deleteFn={(id) => masterDataService.deleteTag(id)} columns={columns} diff --git a/frontend/components/admin/user-dialog.tsx b/frontend/components/admin/user-dialog.tsx index 368f639..4662484 100644 --- a/frontend/components/admin/user-dialog.tsx +++ b/frontend/components/admin/user-dialog.tsx @@ -299,8 +299,8 @@ export function UserDialog({ open, onOpenChange, user }: UserDialogProps) {
- {roles.length === 0 &&

Loading roles...

} - {roles.map((role: any) => ( + {Array.isArray(roles) && roles.length === 0 &&

Loading roles...

} + {Array.isArray(roles) && roles.map((role: any) => (
- {importance} + {String(importance)}
diff --git a/frontend/lib/api/workflows.ts b/frontend/lib/api/workflows.ts index 209b0d2..eea10a7 100644 --- a/frontend/lib/api/workflows.ts +++ b/frontend/lib/api/workflows.ts @@ -52,7 +52,7 @@ export const workflowApi = { createWorkflow: async (data: CreateWorkflowDto): Promise => { await new Promise((resolve) => setTimeout(resolve, 800)); const newWorkflow: Workflow = { - workflowId: Math.max(...mockWorkflows.map((w) => w.workflowId)) + 1, + workflowId: Math.max(...mockWorkflows.map((w) => Number(w.workflowId))) + 1, ...data, version: 1, isActive: true, diff --git a/specs/deploy-deploy-34.txt b/specs/deploy-deploy-34.txt new file mode 100644 index 0000000..8803ca1 --- /dev/null +++ b/specs/deploy-deploy-34.txt @@ -0,0 +1,316 @@ +2026-02-28T07:27:33.8284038Z asustor-runner(version:v0.2.13) received task 34 of job deploy, be triggered by event: push +2026-02-28T07:27:33.8290312Z workflow prepared +2026-02-28T07:27:33.8291142Z evaluating expression 'success()' +2026-02-28T07:27:33.8292709Z expression 'success()' evaluated to 'true' +2026-02-28T07:27:33.8293016Z 🚀 Start image=node:18-bullseye +2026-02-28T07:27:33.8393624Z 🐳 docker pull image=node:18-bullseye platform= username= forcePull=false +2026-02-28T07:27:33.8394088Z 🐳 docker pull node:18-bullseye +2026-02-28T07:27:33.8413967Z Image exists? true +2026-02-28T07:27:33.8472184Z Cleaning up network for job deploy, and network name is: GITEA-ACTIONS-TASK-34_WORKFLOW-Build-and-Deploy_JOB-deploy-deploy-network +2026-02-28T07:27:34.1183842Z 🐳 docker create image=node:18-bullseye platform= entrypoint=["/bin/sleep" "10800"] cmd=[] network="GITEA-ACTIONS-TASK-34_WORKFLOW-Build-and-Deploy_JOB-deploy-deploy-network" +2026-02-28T07:27:34.9356527Z Created container name=GITEA-ACTIONS-TASK-34_WORKFLOW-Build-and-Deploy_JOB-deploy id=544596ec99aae4e94958af73711d8d1a616d964139c03ef6421768e2572c3903 from image node:18-bullseye (platform: ) +2026-02-28T07:27:34.9357085Z ENV ==> [RUNNER_TOOL_CACHE=/opt/hostedtoolcache RUNNER_OS=Linux RUNNER_ARCH=X64 RUNNER_TEMP=/tmp LANG=C.UTF-8] +2026-02-28T07:27:34.9357348Z 🐳 docker run image=node:18-bullseye platform= entrypoint=["/bin/sleep" "10800"] cmd=[] network="GITEA-ACTIONS-TASK-34_WORKFLOW-Build-and-Deploy_JOB-deploy-deploy-network" +2026-02-28T07:27:34.9357678Z Starting container: 544596ec99aae4e94958af73711d8d1a616d964139c03ef6421768e2572c3903 +2026-02-28T07:27:36.8110664Z Started container: 544596ec99aae4e94958af73711d8d1a616d964139c03ef6421768e2572c3903 +2026-02-28T07:27:36.9607710Z Writing entry to tarball workflow/event.json len:5191 +2026-02-28T07:27:36.9608376Z Writing entry to tarball workflow/envs.txt len:0 +2026-02-28T07:27:36.9609770Z Extracting content to '/var/run/act/' +2026-02-28T07:27:36.9844245Z ☁ git clone 'https://github.com/appleboy/ssh-action' # ref=v1.0.3 +2026-02-28T07:27:36.9844747Z cloning https://github.com/appleboy/ssh-action to /root/.cache/act/dff214aaee240b4d48725836d98fb9f1de8c99b36f2a9ba82946d844ba27a96d +2026-02-28T07:27:37.7607259Z Cloned https://github.com/appleboy/ssh-action to /root/.cache/act/dff214aaee240b4d48725836d98fb9f1de8c99b36f2a9ba82946d844ba27a96d +2026-02-28T07:27:37.7776323Z Checked out v1.0.3 +2026-02-28T07:27:37.7982541Z expression '${{ secrets.HOST }}' rewritten to 'format('{0}', secrets.HOST)' +2026-02-28T07:27:37.7983262Z evaluating expression 'format('{0}', secrets.HOST)' +2026-02-28T07:27:37.7983765Z expression 'format('{0}', secrets.HOST)' evaluated to '%!t(string=***)' +2026-02-28T07:27:37.7984134Z expression '${{ secrets.USERNAME }}' rewritten to 'format('{0}', secrets.USERNAME)' +2026-02-28T07:27:37.7984350Z evaluating expression 'format('{0}', secrets.USERNAME)' +2026-02-28T07:27:37.7984676Z expression 'format('{0}', secrets.USERNAME)' evaluated to '%!t(string=***)' +2026-02-28T07:27:37.7984959Z expression '${{ secrets.PASSWORD }}' rewritten to 'format('{0}', secrets.PASSWORD)' +2026-02-28T07:27:37.7985170Z evaluating expression 'format('{0}', secrets.PASSWORD)' +2026-02-28T07:27:37.7985502Z expression 'format('{0}', secrets.PASSWORD)' evaluated to '%!t(string=***)' +2026-02-28T07:27:37.7985782Z expression '${{ secrets.PORT }}' rewritten to 'format('{0}', secrets.PORT)' +2026-02-28T07:27:37.7985965Z evaluating expression 'format('{0}', secrets.PORT)' +2026-02-28T07:27:37.7986302Z expression 'format('{0}', secrets.PORT)' evaluated to '%!t(string=***)' +2026-02-28T07:27:37.8086295Z evaluating expression '' +2026-02-28T07:27:37.8087143Z expression '' evaluated to 'true' +2026-02-28T07:27:37.8087379Z ⭐ Run Main Deploy to QNAP via SSH +2026-02-28T07:27:37.8087738Z Writing entry to tarball workflow/outputcmd.txt len:0 +2026-02-28T07:27:37.8088065Z Writing entry to tarball workflow/statecmd.txt len:0 +2026-02-28T07:27:37.8088307Z Writing entry to tarball workflow/pathcmd.txt len:0 +2026-02-28T07:27:37.8088543Z Writing entry to tarball workflow/envs.txt len:0 +2026-02-28T07:27:37.8088744Z Writing entry to tarball workflow/SUMMARY.md len:0 +2026-02-28T07:27:37.8088993Z Extracting content to '/var/run/act' +2026-02-28T07:27:37.8220371Z type=remote-action actionDir=/root/.cache/act/dff214aaee240b4d48725836d98fb9f1de8c99b36f2a9ba82946d844ba27a96d actionPath= workdir=/workspace/np-dms/lcbp3 actionCacheDir=/root/.cache/act actionName=dff214aaee240b4d48725836d98fb9f1de8c99b36f2a9ba82946d844ba27a96d containerActionDir=/var/run/act/actions/dff214aaee240b4d48725836d98fb9f1de8c99b36f2a9ba82946d844ba27a96d +2026-02-28T07:27:37.8256623Z image 'act-dff214aaee240b4d48725836d98fb9f1de8c99b36f2a9ba82946d844ba27a96d-dockeraction:latest' for architecture '' already exists +2026-02-28T07:27:37.8447855Z expression '${{ secrets.PASSWORD }}' rewritten to 'format('{0}', secrets.PASSWORD)' +2026-02-28T07:27:37.8448365Z evaluating expression 'format('{0}', secrets.PASSWORD)' +2026-02-28T07:27:37.8448863Z expression 'format('{0}', secrets.PASSWORD)' evaluated to '%!t(string=***)' +2026-02-28T07:27:37.8449207Z expression '${{ secrets.PORT }}' rewritten to 'format('{0}', secrets.PORT)' +2026-02-28T07:27:37.8449398Z evaluating expression 'format('{0}', secrets.PORT)' +2026-02-28T07:27:37.8449716Z expression 'format('{0}', secrets.PORT)' evaluated to '%!t(string=***)' +2026-02-28T07:27:37.8450226Z expression '${{ secrets.USERNAME }}' rewritten to 'format('{0}', secrets.USERNAME)' +2026-02-28T07:27:37.8450419Z evaluating expression 'format('{0}', secrets.USERNAME)' +2026-02-28T07:27:37.8450743Z expression 'format('{0}', secrets.USERNAME)' evaluated to '%!t(string=***)' +2026-02-28T07:27:37.8451026Z expression '${{ secrets.HOST }}' rewritten to 'format('{0}', secrets.HOST)' +2026-02-28T07:27:37.8451223Z evaluating expression 'format('{0}', secrets.HOST)' +2026-02-28T07:27:37.8451569Z expression 'format('{0}', secrets.HOST)' evaluated to '%!t(string=***)' +2026-02-28T07:27:37.8750726Z 🐳 docker pull image=act-dff214aaee240b4d48725836d98fb9f1de8c99b36f2a9ba82946d844ba27a96d-dockeraction:latest platform= username= forcePull=false +2026-02-28T07:27:37.8751340Z 🐳 docker pull act-dff214aaee240b4d48725836d98fb9f1de8c99b36f2a9ba82946d844ba27a96d-dockeraction:latest +2026-02-28T07:27:37.8770951Z Image exists? true +2026-02-28T07:27:37.8813205Z 🐳 docker create image=act-dff214aaee240b4d48725836d98fb9f1de8c99b36f2a9ba82946d844ba27a96d-dockeraction:latest platform= entrypoint=[] cmd=[] network="container:GITEA-ACTIONS-TASK-34_WORKFLOW-Build-and-Deploy_JOB-deploy" +2026-02-28T07:27:38.5948857Z Created container name=GITEA-ACTIONS-TASK-34-WORKFLOW-Build-and-Deploy-JOB-deploy_STEP-0 id=bfe459c3717df53d68c8dc1a47ecb1***fcb73eb398f254a35c970bc95293697c from image act-dff214aaee240b4d48725836d98fb9f1de8c99b36f2a9ba82946d844ba27a96d-dockeraction:latest (platform: ) +2026-02-28T07:27:38.5950292Z ENV ==> [INPUT_PASSPHRASE= INPUT_PROXY_FINGERPRINT= proxy_key_path= proxy_username= ACTIONS_RUNTIME_TOKEN=*** CI=true GITHUB_ACTION=0 port=*** request_pty= ACT=true ACTIONS_CACHE_URL=http://172.19.0.2:33669/ GITHUB_RUN_NUMBER=88 GITHUB_API_URL=https://git.np-dms.work/api/v1 GITEA_ENV=/var/run/act/workflow/envs.txt use_insecure_cipher= proxy_cipher= envs_format= GITHUB_SHA=efd5183906c57e458a992057de20277f5adf868c GITHUB_GRAPHQL_URL= ImageOS=ubuntu20 INPUT_PROXY_PORT=*** INPUT_PROXY_USE_INSECURE_CIPHER= INPUT_DEBUG= INPUT_PROXY_KEY_PATH= debug= JOB_CONTAINER_NAME=GITEA-ACTIONS-TASK-34_WORKFLOW-Build-and-Deploy_JOB-deploy GITEA_ACTIONS_RUNNER_VERSION=v0.2.13 GITHUB_REPOSITORY=np-dms/lcbp3 GITHUB_RETENTION_DAYS= GITHUB_SERVER_URL=https://git.np-dms.work INPUT_PASSWORD=*** INPUT_PORT=*** GITEA_OUTPUT=/var/run/act/workflow/outputcmd.txt GITHUB_WORKFLOW=Build and Deploy GITHUB_EVENT_NAME=push GITHUB_EVENT_PATH=/var/run/act/workflow/event.json GITHUB_STATE=/var/run/act/workflow/statecmd.txt GITHUB_STEP_SUMMARY=/var/run/act/workflow/SUMMARY.md GITEA_STATE=/var/run/act/workflow/statecmd.txt INPUT_KEY= INPUT_PROXY_PASSPHRASE= GITHUB_JOB=deploy RUNNER_TRACKING_ID= GITHUB_ENV=/var/run/act/workflow/envs.txt GITEA_STEP_SUMMARY=/var/run/act/workflow/SUMMARY.md INPUT_TIMEOUT=30s INPUT_PROXY_HOST= passphrase= timeout=30s GITHUB_ACTION_PATH= INPUT_SCRIPT_STOP_SIGNAL=true INPUT_CIPHER= proxy_host= sync= script_stop= password=*** script_stop_signal=true ACTIONS_RESULTS_URL=https://git.np-dms.work GITHUB_BASE_REF= GITHUB_PATH=/var/run/act/workflow/pathcmd.txt INPUT_FINGERPRINT= INPUT_PROXY_PASSWORD= INPUT_PROXY_USERNAME= proxy_timeout=30s proxy_port=*** GITHUB_ACTION_REF=v1.0.3 GITHUB_ACTIONS=true GITHUB_ACTOR=*** GITHUB_HEAD_REF= INPUT_KEY_PATH= INPUT_REQUEST_PTY= proxy_passphrase= key_path= ACTIONS_RUNTIME_URL=https://git.np-dms.work/api/actions_pipeline/ GITHUB_WORKSPACE=/workspace/np-dms/lcbp3 GITHUB_OUTPUT=/var/run/act/workflow/outputcmd.txt INPUT_PROXY_TIMEOUT=30s INPUT_COMMAND_TIMEOUT=10m INPUT_SYNC= GITHUB_RUN_ID=88 fingerprint= proxy_key= proxy_password= command_timeout=10m key= GITEA_ACTIONS=true GITHUB_REF_TYPE=branch GITHUB_REPOSITORY_OWNER=np-dms INPUT_ENVS_FORMAT= cipher= proxy_use_insecure_cipher= INPUT_USE_INSECURE_CIPHER= GITHUB_REF=refs/heads/main RUNNER_PERFLOG=/dev/null INPUT_USERNAME=*** GITEA_PATH=/var/run/act/workflow/pathcmd.txt INPUT_SCRIPT_STOP= host=*** script=# ⚠️ QNAP SSH ไม่มี PATH เต็ม ต้อง export เอง\n# docker: /share/CACHEDEV1_DATA/.qpkg/container-station/bin/docker\n# git: /opt/bin/git\nexport PATH="/share/CACHEDEV1_DATA/.qpkg/container-station/bin:/opt/bin:/usr/local/bin:/usr/bin:/bin:$PATH"\n\necho "🚀 Starting Deployment..."\n\n# 1. Update Code\necho "📂 Pulling latest code..."\ncd /share/np-dms/app/source/lcbp3\ngit pull origin main\n\n# 2. Build Backend\necho "🏗️ Building Backend..."\ndocker build -f backend/Dockerfile -t lcbp3-backend:latest .\n\n# 3. Build Frontend\necho "🏗️ Building Frontend..."\ndocker build -f frontend/Dockerfile \\n --build-arg NEXT_PUBLIC_API_URL=https://backend.np-dms.work/api \\n -t lcbp3-frontend:latest .\n\n# 4. Update Containers\necho "🔄 Updating Containers..."\n# Sync compose file จาก repo → app directory\ncp /share/np-dms/app/source/lcbp3/specs/04-Infrastructure-OPS/04-00-docker-compose/docker-compose-lcbp3.yml /share/np-dms/app/docker-compose-lcbp3.yml\ncd /share/np-dms/app\n# ⚠️ ลบ container เดิมที่อาจสร้างจาก Container Station\ndocker rm -f backend frontend 2>/dev/null || true\n\n# 4a. Start Backend ก่อน\necho "🟢 Starting Backend..."\ndocker compose -f docker-compose-lcbp3.yml up -d backend\n\n# 4b. รอ Backend healthy (ทุก 5 วิ สูงสุด 60 วิ)\necho "⏳ Waiting for Backend health check..."\nfor i in $(seq 1 12); do\n if docker inspect --format='{{.State.Health.Status}}' backend 2>/dev/null | grep -q healthy; then\n echo "✅ Backend is healthy!"\n break\n fi\n if [ "$i" = "12" ]; then\n echo "⚠️ Backend health check timeout - starting frontend anyway"\n fi\n sleep 5\ndone\n\n# 4c. Start Frontend\necho "🟢 Starting Frontend..."\ndocker compose -f docker-compose-lcbp3.yml up -d frontend\n\n# 5. Cleanup\necho "🧹 Cleaning up unused images..."\ndocker image prune -f\n\necho "✅ Deployment Complete!"\n GITHUB_REF_NAME=main INPUT_SCRIPT=# ⚠️ QNAP SSH ไม่มี PATH เต็ม ต้อง export เอง\n# docker: /share/CACHEDEV1_DATA/.qpkg/container-station/bin/docker\n# git: /opt/bin/git\nexport PATH="/share/CACHEDEV1_DATA/.qpkg/container-station/bin:/opt/bin:/usr/local/bin:/usr/bin:/bin:$PATH"\n\necho "🚀 Starting Deployment..."\n\n# 1. Update Code\necho "📂 Pulling latest code..."\ncd /share/np-dms/app/source/lcbp3\ngit pull origin main\n\n# 2. Build Backend\necho "🏗️ Building Backend..."\ndocker build -f backend/Dockerfile -t lcbp3-backend:latest .\n\n# 3. Build Frontend\necho "🏗️ Building Frontend..."\ndocker build -f frontend/Dockerfile \\n --build-arg NEXT_PUBLIC_API_URL=https://backend.np-dms.work/api \\n -t lcbp3-frontend:latest .\n\n# 4. Update Containers\necho "🔄 Updating Containers..."\n# Sync compose file จาก repo → app directory\ncp /share/np-dms/app/source/lcbp3/specs/04-Infrastructure-OPS/04-00-docker-compose/docker-compose-lcbp3.yml /share/np-dms/app/docker-compose-lcbp3.yml\ncd /share/np-dms/app\n# ⚠️ ลบ container เดิมที่อาจสร้างจาก Container Station\ndocker rm -f backend frontend 2>/dev/null || true\n\n# 4a. Start Backend ก่อน\necho "🟢 Starting Backend..."\ndocker compose -f docker-compose-lcbp3.yml up -d backend\n\n# 4b. รอ Backend healthy (ทุก 5 วิ สูงสุด 60 วิ)\necho "⏳ Waiting for Backend health check..."\nfor i in $(seq 1 12); do\n if docker inspect --format='{{.State.Health.Status}}' backend 2>/dev/null | grep -q healthy; then\n echo "✅ Backend is healthy!"\n break\n fi\n if [ "$i" = "12" ]; then\n echo "⚠️ Backend health check timeout - starting frontend anyway"\n fi\n sleep 5\ndone\n\n# 4c. Start Frontend\necho "🟢 Starting Frontend..."\ndocker compose -f docker-compose-lcbp3.yml up -d frontend\n\n# 5. Cleanup\necho "🧹 Cleaning up unused images..."\ndocker image prune -f\n\necho "✅ Deployment Complete!"\n INPUT_ENVS= username=*** GITHUB_ACTION_REPOSITORY=appleboy/ssh-action INPUT_PROXY_KEY= INPUT_PROXY_CIPHER= INPUT_ALLENVS= envs= proxy_fingerprint= allenvs= INPUT_HOST=*** RUNNER_TOOL_CACHE=/opt/hostedtoolcache RUNNER_OS=Linux RUNNER_ARCH=X64 RUNNER_TEMP=/tmp] +2026-02-28T07:27:38.5955085Z 🐳 docker run image=act-dff214aaee240b4d48725836d98fb9f1de8c99b36f2a9ba82946d844ba27a96d-dockeraction:latest platform= entrypoint=[] cmd=[] network="container:GITEA-ACTIONS-TASK-34_WORKFLOW-Build-and-Deploy_JOB-deploy" +2026-02-28T07:27:38.5970807Z Starting container: bfe459c3717df53d68c8dc1a47ecb1***fcb73eb398f254a35c970bc95293697c +2026-02-28T07:27:39.1457321Z ======CMD====== +2026-02-28T07:27:39.1458218Z # ⚠️ QNAP SSH ไม่มี PATH เต็ม ต้อง export เอง +2026-02-28T07:27:39.1458606Z # docker: /share/CACHEDEV1_DATA/.qpkg/container-station/bin/docker +2026-02-28T07:27:39.1458851Z # git: /opt/bin/git +2026-02-28T07:27:39.1459054Z export PATH="/share/CACHEDEV1_DATA/.qpkg/container-station/bin:/opt/bin:/usr/local/bin:/usr/bin:/bin:$PATH" +2026-02-28T07:27:39.1459292Z +2026-02-28T07:27:39.1459482Z echo "🚀 Starting Deployment..." +2026-02-28T07:27:39.1459707Z +2026-02-28T07:27:39.1460080Z # 1. Update Code +2026-02-28T07:27:39.1460283Z echo "📂 Pulling latest code..." +2026-02-28T07:27:39.1460478Z cd /share/np-dms/app/source/lcbp3 +2026-02-28T07:27:39.1460674Z git pull origin main +2026-02-28T07:27:39.1460884Z +2026-02-28T07:27:39.1461074Z # 2. Build Backend +2026-02-28T07:27:39.1461270Z echo "🏗️ Building Backend..." +2026-02-28T07:27:39.1461498Z docker build -f backend/Dockerfile -t lcbp3-backend:latest . +2026-02-28T07:27:39.1461724Z +2026-02-28T07:27:39.1461906Z # 3. Build Frontend +2026-02-28T07:27:39.1462100Z echo "🏗️ Building Frontend..." +2026-02-28T07:27:39.1462293Z docker build -f frontend/Dockerfile \ +2026-02-28T07:27:39.1462520Z --build-arg NEXT_PUBLIC_API_URL=https://backend.np-dms.work/api \ +2026-02-28T07:27:39.1462775Z -t lcbp3-frontend:latest . +2026-02-28T07:27:39.1462968Z +2026-02-28T07:27:39.1463143Z # 4. Update Containers +2026-02-28T07:27:39.1463330Z echo "🔄 Updating Containers..." +2026-02-28T07:27:39.1463529Z # Sync compose file จาก repo → app directory +2026-02-28T07:27:39.1463778Z cp /share/np-dms/app/source/lcbp3/specs/04-Infrastructure-OPS/04-00-docker-compose/docker-compose-lcbp3.yml /share/np-dms/app/docker-compose-lcbp3.yml +2026-02-28T07:27:39.1464028Z cd /share/np-dms/app +2026-02-28T07:27:39.1464219Z # ⚠️ ลบ container เดิมที่อาจสร้างจาก Container Station +2026-02-28T07:27:39.1464529Z docker rm -f backend frontend 2>/dev/null || true +2026-02-28T07:27:39.1464762Z +2026-02-28T07:27:39.1464943Z # 4a. Start Backend ก่อน +2026-02-28T07:27:39.1465142Z echo "🟢 Starting Backend..." +2026-02-28T07:27:39.1465335Z docker compose -f docker-compose-lcbp3.yml up -d backend +2026-02-28T07:27:39.1465527Z +2026-02-28T07:27:39.1465714Z # 4b. รอ Backend healthy (ทุก 5 วิ สูงสุด 60 วิ) +2026-02-28T07:27:39.1465932Z echo "⏳ Waiting for Backend health check..." +2026-02-28T07:27:39.1466134Z for i in $(seq 1 12); do +2026-02-28T07:27:39.1466330Z if docker inspect --format='{{.State.Health.Status}}' backend 2>/dev/null | grep -q healthy; then +2026-02-28T07:27:39.1466561Z echo "✅ Backend is healthy!" +2026-02-28T07:27:39.1466771Z break +2026-02-28T07:27:39.1466944Z fi +2026-02-28T07:27:39.1467123Z if [ "$i" = "12" ]; then +2026-02-28T07:27:39.1467311Z echo "⚠️ Backend health check timeout - starting frontend anyway" +2026-02-28T07:27:39.1467558Z fi +2026-02-28T07:27:39.1467753Z sleep 5 +2026-02-28T07:27:39.1467943Z done +2026-02-28T07:27:39.1468119Z +2026-02-28T07:27:39.1468287Z # 4c. Start Frontend +2026-02-28T07:27:39.1468484Z echo "🟢 Starting Frontend..." +2026-02-28T07:27:39.1468676Z docker compose -f docker-compose-lcbp3.yml up -d frontend +2026-02-28T07:27:39.1468892Z +2026-02-28T07:27:39.1469072Z # 5. Cleanup +2026-02-28T07:27:39.1469258Z echo "🧹 Cleaning up unused images..." +2026-02-28T07:27:39.1469471Z docker image prune -f +2026-02-28T07:27:39.1469664Z +2026-02-28T07:27:39.1469915Z echo "✅ Deployment Complete!" +2026-02-28T07:27:39.1470124Z +2026-02-28T07:27:39.1470338Z ======END====== +2026-02-28T07:27:39.3554832Z out: 🚀 Starting Deployment... +2026-02-28T07:27:39.3555491Z out: 📂 Pulling latest code... +2026-02-28T07:27:39.4639401Z err: From https://git.np-dms.work/np-dms/lcbp3 +2026-02-28T07:27:39.4640163Z err: * branch main -> FETCH_HEAD +2026-02-28T07:27:39.4640735Z err: 276d06e..efd5183 main -> origin/main +2026-02-28T07:27:39.4864128Z out: Updating 276d06e..efd5183 +2026-02-28T07:27:39.4864771Z out: Fast-forward +2026-02-28T07:27:39.4927658Z out: .../workflow-engine/workflow-engine.controller.ts | 20 +++++++++++++--- +2026-02-28T07:27:39.4928367Z out: .../workflow-engine/workflow-engine.service.ts | 27 ++++++++++++++++++++++ +2026-02-28T07:27:39.4928592Z out: .../***/doc-control/workflows/[id]/edit/page.tsx | 4 ++-- +2026-02-28T07:27:39.4928901Z out: .../(***)/***/doc-control/workflows/page.tsx | 26 +++------------------ +2026-02-28T07:27:39.4929130Z out: frontend/lib/services/workflow-engine.service.ts | 27 ++++++++++++++++++---- +2026-02-28T07:27:39.4929339Z out: frontend/types/workflow.ts | 2 +- +2026-02-28T07:27:39.4929546Z out: 6 files changed, 73 insertions(+), 33 deletions(-) +2026-02-28T07:27:39.4929883Z out: 🏗️ Building Backend... +2026-02-28T07:27:40.1781150Z err: #0 building with "default" instance using docker driver +2026-02-28T07:27:40.1781840Z err: #1 [internal] load build definition from Dockerfile +2026-02-28T07:27:40.1782077Z err: #1 transferring dockerfile: 2.62kB done +2026-02-28T07:27:40.1782287Z err: #1 DONE 0.2s +2026-02-28T07:27:40.4027343Z err: #2 [internal] load metadata for docker.io/library/node:***-alpine +2026-02-28T07:27:42.0564337Z err: #2 DONE 1.8s +2026-02-28T07:27:42.1950563Z err: #3 [internal] load .dockerignore +2026-02-28T07:27:42.1951198Z err: #3 transferring context: 1.09kB done +2026-02-28T07:27:42.1951413Z err: #3 DONE 0.1s +2026-02-28T07:27:42.2989459Z err: #4 [deps 1/6] FROM docker.io/library/node:***-alpine@sha256:e4bf2a82ad0a4037d28035ae71529873c069b13eb0455466ae0bc13363826e34 +2026-02-28T07:27:42.2990488Z err: #4 DONE 0.0s +2026-02-28T07:27:42.2990702Z err: #5 [internal] load build context +2026-02-28T07:27:42.6155504Z err: #5 transferring context: 1.72MB 0.2s done +2026-02-28T07:27:42.6156253Z err: #5 DONE 0.3s +2026-02-28T07:27:42.8014374Z err: #6 [deps 3/6] WORKDIR /app +2026-02-28T07:27:42.8015084Z err: #6 CACHED +2026-02-28T07:27:42.8015376Z err: #7 [deps 4/6] COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +2026-02-28T07:27:42.8015632Z err: #7 CACHED +2026-02-28T07:27:42.8015842Z err: #8 [deps 5/6] COPY backend/package.json ./backend/ +2026-02-28T07:27:42.8016082Z err: #8 CACHED +2026-02-28T07:27:42.8016269Z err: #9 [deps 6/6] RUN pnpm install --frozen-lockfile --filter backend... +2026-02-28T07:27:42.8016503Z err: #9 CACHED +2026-02-28T07:27:42.8016741Z err: #10 [build 5/9] COPY --from=deps /app/node_modules ./node_modules +2026-02-28T07:27:42.8016957Z err: #10 CACHED +2026-02-28T07:27:42.8017170Z err: #11 [deps 2/6] RUN corepack enable && corepack prepare pnpm@latest --activate +2026-02-28T07:27:42.8017383Z err: #11 CACHED +2026-02-28T07:27:42.8017587Z err: #12 [build 6/9] COPY --from=deps /app/backend/node_modules ./backend/node_modules +2026-02-28T07:27:42.8017818Z err: #12 CACHED +2026-02-28T07:27:42.8018027Z err: #13 [build 7/9] COPY backend/ ./backend/ +2026-02-28T07:27:45.2403106Z err: #13 DONE 2.6s +2026-02-28T07:27:45.4303679Z err: #14 [build 8/9] RUN cd backend && pnpm run build +2026-02-28T07:27:47.7906423Z err: #14 2.511 +2026-02-28T07:27:47.7907160Z err: #14 2.511 > backend@1.5.1 build /app/backend +2026-02-28T07:27:47.7907389Z err: #14 2.511 > nest build +2026-02-28T07:27:47.7907696Z err: #14 2.511 +2026-02-28T07:28:06.5057828Z err: #14 DONE 21.2s +2026-02-28T07:28:06.7371262Z err: #15 [build 9/9] RUN pnpm --filter backend deploy --prod --shamefully-hoist /app/backend-prod +2026-02-28T07:28:09.0274821Z err: #15 2.441 backend |  WARN  The field "pnpm.overrides" was found in /app/backend/package.json. This will not take effect. You should configure "pnpm.overrides" at the root of the workspace instead. +2026-02-28T07:28:09.6361957Z err: #15 3.050  ERR_PNPM_DEPLOY_NONINJECTED_WORKSPACE  By default, starting from pnpm v10, we only deploy from workspaces that have "inject-workspace-packages=true" set +2026-02-28T07:28:09.6362724Z err: #15 3.050 +2026-02-28T07:28:09.6362953Z err: #15 3.050 If you want to deploy without using injected dependencies, run "pnpm deploy" with the "--legacy" flag or set "force-legacy-deploy" to true +2026-02-28T07:28:10.9504791Z err: #15 ERROR: process "/bin/sh -c pnpm --filter backend deploy --prod --shamefully-hoist /app/backend-prod" did not complete successfully: exit code: 1 +2026-02-28T07:28:11.9348739Z err: ------ +2026-02-28T07:28:11.9349500Z err: > [build 9/9] RUN pnpm --filter backend deploy --prod --shamefully-hoist /app/backend-prod: +2026-02-28T07:28:11.9349911Z err: 2.441 backend |  WARN  The field "pnpm.overrides" was found in /app/backend/package.json. This will not take effect. You should configure "pnpm.overrides" at the root of the workspace instead. +2026-02-28T07:28:11.9350307Z err: 3.050  ERR_PNPM_DEPLOY_NONINJECTED_WORKSPACE  By default, starting from pnpm v10, we only deploy from workspaces that have "inject-workspace-packages=true" set +2026-02-28T07:28:11.9350574Z err: 3.050 +2026-02-28T07:28:11.9350782Z err: 3.050 If you want to deploy without using injected dependencies, run "pnpm deploy" with the "--legacy" flag or set "force-legacy-deploy" to true +2026-02-28T07:28:11.9351022Z err: ------ +2026-02-28T07:28:11.9356927Z err: Dockerfile:47 +2026-02-28T07:28:11.9357202Z err: -------------------- +2026-02-28T07:28:11.9357445Z err: 45 | +2026-02-28T07:28:11.9357699Z err: 46 | # Deploy with production deps only (pnpm workspace isolation) +2026-02-28T07:28:11.9358814Z err: 47 | >>> RUN pnpm --filter backend deploy --prod --shamefully-hoist /app/backend-prod +2026-02-28T07:28:11.9359164Z err: 48 | +2026-02-28T07:28:11.9359378Z err: 49 | # ========================= +2026-02-28T07:28:11.9359601Z err: -------------------- +2026-02-28T07:28:11.9359968Z err: ERROR: failed to solve: process "/bin/sh -c pnpm --filter backend deploy --prod --shamefully-hoist /app/backend-prod" did not complete successfully: exit code: 1 +2026-02-28T07:28:11.9413723Z out: 🏗️ Building Frontend... +2026-02-28T07:28:12.4469275Z err: #0 building with "default" instance using docker driver +2026-02-28T07:28:12.4470254Z err: #1 [internal] load build definition from Dockerfile +2026-02-28T07:28:12.7247587Z err: #1 transferring dockerfile: +2026-02-28T07:28:12.8922804Z err: #1 transferring dockerfile: 2.51kB done +2026-02-28T07:28:12.8923535Z err: #1 DONE 0.5s +2026-02-28T07:28:12.8923796Z err: #2 [internal] load metadata for docker.io/library/node:***-alpine +2026-02-28T07:28:13.4263707Z err: #2 DONE 0.5s +2026-02-28T07:28:13.6013261Z err: #3 [internal] load .dockerignore +2026-02-28T07:28:13.6013997Z err: #3 transferring context: 1.09kB done +2026-02-28T07:28:13.6244816Z err: #3 DONE 0.2s +2026-02-28T07:28:13.8002318Z err: #4 [deps 1/6] FROM docker.io/library/node:***-alpine@sha256:e4bf2a82ad0a4037d28035ae71529873c069b13eb0455466ae0bc13363826e34 +2026-02-28T07:28:13.8003165Z err: #4 DONE 0.0s +2026-02-28T07:28:13.8003407Z err: #5 [internal] load build context +2026-02-28T07:28:13.9564006Z err: #5 transferring context: 1.03MB 0.2s done +2026-02-28T07:28:13.9564689Z err: #5 DONE 0.3s +2026-02-28T07:28:14.1235070Z err: #6 [build 5/8] COPY --from=deps /app/node_modules ./node_modules +2026-02-28T07:28:14.1235723Z err: #6 CACHED +2026-02-28T07:28:14.1236016Z err: #7 [deps 2/6] RUN corepack enable && corepack prepare pnpm@latest --activate +2026-02-28T07:28:14.1236331Z err: #7 CACHED +2026-02-28T07:28:14.1236545Z err: #8 [deps 3/6] WORKDIR /app +2026-02-28T07:28:14.1236813Z err: #8 CACHED +2026-02-28T07:28:14.1237009Z err: #9 [deps 4/6] COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +2026-02-28T07:28:14.1237217Z err: #9 CACHED +2026-02-28T07:28:14.1237420Z err: #10 [deps 5/6] COPY frontend/package.json ./frontend/ +2026-02-28T07:28:14.1237665Z err: #10 CACHED +2026-02-28T07:28:14.1237857Z err: #11 [deps 6/6] RUN pnpm install --frozen-lockfile --filter lcbp3-frontend... +2026-02-28T07:28:14.1238082Z err: #11 CACHED +2026-02-28T07:28:14.1238299Z err: #12 [build 6/8] COPY --from=deps /app/frontend/node_modules ./frontend/node_modules +2026-02-28T07:28:14.1238576Z err: #12 CACHED +2026-02-28T07:28:14.2739757Z err: #13 [build 7/8] COPY frontend/ ./frontend/ +2026-02-28T07:28:16.4757439Z err: #13 DONE 2.4s +2026-02-28T07:28:16.6137644Z err: #14 [build 8/8] RUN cd frontend && pnpm run build +2026-02-28T07:28:19.2945562Z err: #14 2.681 +2026-02-28T07:28:19.2946185Z err: #14 2.681 > lcbp3-frontend@1.5.1 build /app/frontend +2026-02-28T07:28:19.2946424Z err: #14 2.681 > next build +2026-02-28T07:28:19.2946675Z err: #14 2.681 +2026-02-28T07:28:19.9426429Z err: #14 3.329 [baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D` +2026-02-28T07:28:21.5126060Z err: #14 4.899 Attention: Next.js now collects completely anonymous telemetry regarding usage. +2026-02-28T07:28:21.6594269Z err: #14 4.899 This information is used to shape Next.js' roadmap and prioritize features. +2026-02-28T07:28:21.6595066Z err: #14 4.899 You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL: +2026-02-28T07:28:21.6595338Z err: #14 4.899 https://nextjs.org/telemetry +2026-02-28T07:28:21.6595542Z err: #14 4.899 +2026-02-28T07:28:21.6595769Z err: #14 4.944 ▲ Next.js 16.0.7 (Turbopack) +2026-02-28T07:28:21.6595995Z err: #14 4.944 +2026-02-28T07:28:21.6596202Z err: #14 5.046 ⚠ The "middleware" file convention is deprecated. Please use "proxy" instead. Learn more: https://nextjs.org/docs/messages/middleware-to-proxy +2026-02-28T07:28:21.8821937Z err: #14 5.118 Creating an optimized production build ... +2026-02-28T07:28:22.0693831Z err: #14 5.455 [baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D` +2026-02-28T07:29:16.4593694Z err: #14 59.84 ✓ Compiled successfully in 54s +2026-02-28T07:29:16.6830456Z err: #14 59.92 Running TypeScript ... +2026-02-28T07:29:34.4007095Z err: #14 77.79 Failed to compile. +2026-02-28T07:29:34.4007780Z err: #14 77.79 +2026-02-28T07:29:34.5600774Z err: #14 77.79 ./app/(***)/***/doc-control/drawings/contract/categories/page.tsx:110:77 +2026-02-28T07:29:34.5601591Z err: #14 77.79 Type error: Argument of type '{ projectId: number; }' is not assignable to parameter of type 'CreateContractCategoryDto'. +2026-02-28T07:29:34.5601895Z err: #14 77.79 Type '{ projectId: number; }' is missing the following properties from type 'CreateContractCategoryDto': catCode, catName, sortOrder +2026-02-28T07:29:34.5602234Z err: #14 77.79 +2026-02-28T07:29:34.5602475Z err: #14 77.79   108 | return data; +2026-02-28T07:29:34.5602788Z err: #14 77.79  109 | }} +2026-02-28T07:29:34.5603055Z err: #14 77.79 >[***m 110 | createFn={(data) => drawingMasterDataService.createContractCategory({ ...data, projectId: selectedProjectId })} +2026-02-28T07:29:34.5603366Z err: #14 77.79  | ^[***m +2026-02-28T07:29:34.5603594Z err: #14 77.79  111 | updateFn={(id, data) => drawingMasterDataService.updateContractCategory(id, data)} +2026-02-28T07:29:34.5603862Z err: #14 77.79  112 | deleteFn={(id) => drawingMasterDataService.deleteContractCategory(id)} +2026-02-28T07:29:34.5604155Z err: #14 77.79  113 | columns={columns} +2026-02-28T07:29:34.5604362Z err: #14 77.88 Next.js build worker exited with code: 1 and signal: null +2026-02-28T07:29:34.5604585Z err: #14 77.95  ELIFECYCLE  Command failed with exit code 1. +2026-02-28T07:29:35.5179288Z err: #14 ERROR: process "/bin/sh -c cd frontend && pnpm run build" did not complete successfully: exit code: 1 +2026-02-28T07:29:36.4573775Z err: ------ +2026-02-28T07:29:36.4574422Z err: > [build 8/8] RUN cd frontend && pnpm run build: +2026-02-28T07:29:36.4574721Z err: 77.79 +2026-02-28T07:29:36.4575023Z err: 77.79   108 | return data; +2026-02-28T07:29:36.4575278Z err: 77.79  109 | }} +2026-02-28T07:29:36.4575581Z err: 77.79 >[***m 110 | createFn={(data) => drawingMasterDataService.createContractCategory({ ...data, projectId: selectedProjectId })} +2026-02-28T07:29:36.4575926Z err: 77.79  | ^[***m +2026-02-28T07:29:36.4576165Z err: 77.79  111 | updateFn={(id, data) => drawingMasterDataService.updateContractCategory(id, data)} +2026-02-28T07:29:36.4576483Z err: 77.79  112 | deleteFn={(id) => drawingMasterDataService.deleteContractCategory(id)} +2026-02-28T07:29:36.4576748Z err: 77.79  113 | columns={columns} +2026-02-28T07:29:36.4576959Z err: 77.88 Next.js build worker exited with code: 1 and signal: null +2026-02-28T07:29:36.4577200Z err: 77.95  ELIFECYCLE  Command failed with exit code 1. +2026-02-28T07:29:36.4577418Z err: ------ +2026-02-28T07:29:36.4581504Z err: Dockerfile:48 +2026-02-28T07:29:36.4581827Z err: -------------------- +2026-02-28T07:29:36.4582039Z err: 46 | +2026-02-28T07:29:36.4582234Z err: 47 | # Build Next.js → frontend/.next/standalone +2026-02-28T07:29:36.4582627Z err: 48 | >>> RUN cd frontend && pnpm run build +2026-02-28T07:29:36.4582896Z err: 49 | +2026-02-28T07:29:36.4583083Z err: 50 | # ========================= +2026-02-28T07:29:36.4583348Z err: -------------------- +2026-02-28T07:29:36.4583579Z err: ERROR: failed to solve: process "/bin/sh -c cd frontend && pnpm run build" did not complete successfully: exit code: 1 +2026-02-28T07:29:36.4634772Z out: 🔄 Updating Containers... +2026-02-28T07:29:38.8649465Z out: backend +2026-02-28T07:29:38.8650874Z out: frontend +2026-02-28T07:29:38.8666294Z out: 🟢 Starting Backend... +2026-02-28T07:29:39.0574121Z err: Container backend Creating +2026-02-28T07:29:41.4997878Z err: Container backend Created +2026-02-28T07:29:41.5033631Z err: Container backend Starting +2026-02-28T07:29:43.2328464Z err: Container backend Started +2026-02-28T07:29:43.2377840Z out: ⏳ Waiting for Backend health check... +2026-02-28T07:30:03.4092414Z out: ✅ Backend is healthy! +2026-02-28T07:30:03.4093136Z out: 🟢 Starting Frontend... +2026-02-28T07:30:03.5226638Z err: Container backend Running +2026-02-28T07:30:03.5227283Z err: Container frontend Creating +2026-02-28T07:30:04.6052042Z err: Container frontend Created +2026-02-28T07:30:04.6098124Z err: Container backend Waiting +2026-02-28T07:30:05.1115539Z err: Container backend Healthy +2026-02-28T07:30:05.1116560Z err: Container frontend Starting +2026-02-28T07:30:06.7160562Z err: Container frontend Started +2026-02-28T07:30:06.7319282Z out: 🧹 Cleaning up unused images... +2026-02-28T07:30:06.7671669Z out: Total reclaimed space: 0B +2026-02-28T07:30:06.7692720Z out: ✅ Deployment Complete! +2026-02-28T07:30:06.7695856Z ============================================== +2026-02-28T07:30:06.7696146Z ✅ Successfully executed commands to all host. +2026-02-28T07:30:06.7696528Z ============================================== +2026-02-28T07:30:07.5982536Z failed to remove container: Error response from daemon: removal of container bfe459c3717df53d68c8dc1a47ecb1***fcb73eb398f254a35c970bc95293697c is already in progress +2026-02-28T07:30:07.6088377Z Cleaning up container for job deploy +2026-02-28T07:30:08.8347987Z Removed container: 544596ec99aae4e94958af73711d8d1a616d964139c03ef6421768e2572c3903 +2026-02-28T07:30:08.8360338Z 🐳 docker volume rm GITEA-ACTIONS-TASK-34_WORKFLOW-Build-and-Deploy_JOB-deploy +2026-02-28T07:30:08.9811898Z 🐳 docker volume rm GITEA-ACTIONS-TASK-34_WORKFLOW-Build-and-Deploy_JOB-deploy-env +2026-02-28T07:30:09.0965636Z Cleaning up network for job deploy, and network name is: GITEA-ACTIONS-TASK-34_WORKFLOW-Build-and-Deploy_JOB-deploy-deploy-network +2026-02-28T07:30:09.5133115Z 🏁 Job succeeded