diff --git a/compose.yml b/compose.yml index 13fabcdf..526e14d6 100644 --- a/compose.yml +++ b/compose.yml @@ -1,5 +1,5 @@ services: - ui-builder: + ui: env_file: - .env build: @@ -10,19 +10,8 @@ services: NEXT_PUBLIC_ADMIN_API_KEY: ${NEXT_PUBLIC_ADMIN_API_KEY:-} volumes: - ./ui_out:/output - profiles: - - ui-build - - ui: - image: alpine:latest - volumes: - - ./ui_out:/output:ro command: - [ - "sh", - "-c", - 'echo ''UI service - build with "docker compose --profile ui-build up ui-builder"'' && tail -f /dev/null', - ] + ["sh", "-c", "echo 'UI built and ready' && tail -f /dev/null"] routstr: build: . diff --git a/scripts/build-ui.sh b/scripts/build-ui.sh index 5231d5e0..9429100e 100755 --- a/scripts/build-ui.sh +++ b/scripts/build-ui.sh @@ -49,7 +49,8 @@ else npm run build fi -mv out ../ui_out +mkdir ../ui_out +mv out/* ../ui_out # Clean up the temporary .env.local file if [ -f "$UI_ENV_FILE" ]; then diff --git a/ui/Dockerfile.build b/ui/Dockerfile.build index 9058f795..11a5f6ab 100644 --- a/ui/Dockerfile.build +++ b/ui/Dockerfile.build @@ -30,6 +30,12 @@ ENV NEXT_TELEMETRY_DISABLED=1 RUN npm run build && \ echo "UI build completed at $(date)" -# Output stage - just copy the built files -FROM scratch AS output -COPY --from=builder /app/out /ui_out \ No newline at end of file +# Copy built files to the output directory +RUN mkdir -p /output && \ + cp -r /app/out/* /output/ + +# Use the builder stage as the final stage +FROM node:23-alpine +WORKDIR /app +COPY --from=builder /output /output +CMD ["sh", "-c", "echo 'UI built and ready' && tail -f /dev/null"] \ No newline at end of file diff --git a/ui_out/404.html b/ui_out/404.html deleted file mode 100644 index b80798e6..00000000 --- a/ui_out/404.html +++ /dev/null @@ -1 +0,0 @@ -
\ No newline at end of file diff --git a/ui_out/404/index.html b/ui_out/404/index.html deleted file mode 100644 index b80798e6..00000000 --- a/ui_out/404/index.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ui_out/_next/static/UEmzYNZb207mpxXHDgTmm/_buildManifest.js b/ui_out/_next/static/UEmzYNZb207mpxXHDgTmm/_buildManifest.js deleted file mode 100644 index ed39a09d..00000000 --- a/ui_out/_next/static/UEmzYNZb207mpxXHDgTmm/_buildManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__BUILD_MANIFEST=function(e,r,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:9,errorRate:1e-4,numBits:173,numHashes:14,bitArray:[0,1,0,1,r,r,r,e,r,r,r,r,r,e,e,r,r,r,r,e,r,r,r,r,r,e,r,r,e,r,e,e,e,e,e,e,r,r,e,r,e,r,r,r,e,e,r,r,e,e,e,e,e,r,e,e,e,e,r,e,e,e,r,e,e,r,e,r,r,r,r,r,r,r,e,e,e,e,r,r,e,e,e,e,r,r,r,r,e,r,r,e,e,r,e,e,e,r,r,e,r,e,e,e,r,e,e,r,e,r,r,r,r,r,e,e,r,e,e,e,e,e,r,r,e,r,r,e,r,e,r,e,r,e,e,e,e,e,r,e,e,r,r,e,e,e,e,e,e,r,r,r,r,r,e,r,r,e,r,e,r,r,e,e,r,e,e,r,r,r,r,e,e]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:e,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-37aa057e76496f5c.js"],sortedPages:["/_app","/_error"]}}(0,1,1e-4),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/ui_out/_next/static/UEmzYNZb207mpxXHDgTmm/_ssgManifest.js b/ui_out/_next/static/UEmzYNZb207mpxXHDgTmm/_ssgManifest.js deleted file mode 100644 index 5b3ff592..00000000 --- a/ui_out/_next/static/UEmzYNZb207mpxXHDgTmm/_ssgManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/ui_out/_next/static/chunks/222-23a547ab56ff9638.js b/ui_out/_next/static/chunks/222-23a547ab56ff9638.js deleted file mode 100644 index 096ff085..00000000 --- a/ui_out/_next/static/chunks/222-23a547ab56ff9638.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[222],{2050:(e,r,o)=>{o.d(r,{s:()=>l,t:()=>a});var t=o(4398);function n(e,r){if("function"==typeof e)return e(r);null!=e&&(e.current=r)}function a(...e){return r=>{let o=!1,t=e.map(e=>{let t=n(e,r);return o||"function"!=typeof t||(o=!0),t});if(o)return()=>{for(let r=0;r{"use strict";s.d(t,{E:()=>l});var a=s(3422);s(4398);var r=s(4676),n=s(9183);let i=(0,r.F)("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground",success:"border-transparent bg-green-500 text-white hover:bg-green-500/80",warning:"border-transparent bg-yellow-500 text-white hover:bg-yellow-500/80",error:"border-transparent bg-red-500 text-white hover:bg-red-500/80"}},defaultVariants:{variant:"default"}});function l(e){let{className:t,variant:s,...r}=e;return(0,a.jsx)("div",{className:(0,n.cn)(i({variant:s}),t),...r})}},9442:(e,t,s)=>{"use strict";s.d(t,{Fc:()=>l,TN:()=>c});var a=s(3422);s(4398);var r=s(4676),n=s(9183);let i=(0,r.F)("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"}},defaultVariants:{variant:"default"}});function l(e){let{className:t,variant:s,...r}=e;return(0,a.jsx)("div",{"data-slot":"alert",role:"alert",className:(0,n.cn)(i({variant:s}),t),...r})}function c(e){let{className:t,...s}=e;return(0,a.jsx)("div",{"data-slot":"alert-description",className:(0,n.cn)("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",t),...s})}}},e=>{var t=t=>e(e.s=t);e.O(0,[363,222,226,29,730,900,945,497,358],()=>t(2127)),_N_E=e.O()}]);
\ No newline at end of file
diff --git a/ui_out/_next/static/chunks/app/unauthorized/page-96bd6a23715af694.js b/ui_out/_next/static/chunks/app/unauthorized/page-96bd6a23715af694.js
deleted file mode 100644
index ee3a0fd6..00000000
--- a/ui_out/_next/static/chunks/app/unauthorized/page-96bd6a23715af694.js
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[305],{1064:(e,r,t)=>{"use strict";var s=t(8);t.o(s,"usePathname")&&t.d(r,{usePathname:function(){return s.usePathname}}),t.o(s,"useRouter")&&t.d(r,{useRouter:function(){return s.useRouter}})},2818:(e,r,t)=>{"use strict";t.r(r),t.d(r,{default:()=>o});var s=t(3422),a=t(3648),i=t(1064);let n=(0,t(3929).A)("shield-alert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);function o(){let e=(0,i.useRouter)();return(0,s.jsx)("div",{className:"bg-background flex min-h-screen flex-col items-center justify-center p-4",children:(0,s.jsxs)("div",{className:"flex max-w-md flex-col items-center space-y-6 text-center",children:[(0,s.jsx)(n,{className:"text-destructive h-24 w-24"}),(0,s.jsx)("h1",{className:"text-4xl font-bold",children:"Access Denied"}),(0,s.jsx)("p",{className:"text-muted-foreground text-lg",children:"You don't have permission to access this page. Please contact your administrator if you believe this is an error."}),(0,s.jsxs)("div",{className:"flex gap-4",children:[(0,s.jsx)(a.$,{onClick:()=>e.push("/"),children:"Go to Dashboard"}),(0,s.jsx)(a.$,{variant:"outline",onClick:()=>e.back(),children:"Go Back"})]})]})})}},3648:(e,r,t)=>{"use strict";t.d(r,{$:()=>d,r:()=>o});var s=t(3422);t(4398);var a=t(6950),i=t(4676),n=t(9183);let o=(0,i.F)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9"}},defaultVariants:{variant:"default",size:"default"}});function d(e){let{className:r,variant:t,size:i,asChild:d=!1,...c}=e,l=d?a.DX:"button";return(0,s.jsx)(l,{"data-slot":"button",className:(0,n.cn)(o({variant:t,size:i,className:r})),...c})}},3929:(e,r,t)=>{"use strict";t.d(r,{A:()=>u});var s=t(4398);let a=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),i=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,r,t)=>t?t.toUpperCase():r.toLowerCase()),n=e=>{let r=i(e);return r.charAt(0).toUpperCase()+r.slice(1)},o=function(){for(var e=arguments.length,r=Array(e),t=0;t