๐Ÿ‰ pdf โ€” BUILD logs

โ† dashboard
RUN BUILD DEPLOY
tail: 500 lines auto-refresh: 15s 100 500 2000 all raw
pdf 2026-05-12T14:35:02.918044642Z โ”‚ INFO[0024] ARG GITHUB_TOKEN_BUILD                       
pdf 2026-05-12T14:35:02.918047888Z โ”‚ INFO[0024] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:35:02.918049795Z โ”‚ INFO[0024] ARG timezone=Asia/Bangkok                    
pdf 2026-05-12T14:35:02.918056093Z โ”‚ INFO[0024] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:35:02.918058002Z โ”‚ INFO[0024] ENV GITHUB_USER $GITHUB_USER_BUILD           
pdf 2026-05-12T14:35:02.918060072Z โ”‚ INFO[0024] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:35:02.918061815Z โ”‚ INFO[0024] ENV GITHUB_TOKEN $GITHUB_TOKEN_BUILD         
pdf 2026-05-12T14:35:02.918063520Z โ”‚ INFO[0024] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:35:02.918065932Z โ”‚ INFO[0024] ENV TZ $timezone                             
pdf 2026-05-12T14:35:02.918067705Z โ”‚ INFO[0024] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:35:02.918308027Z โ”‚ INFO[0024] WORKDIR /app                                 
pdf 2026-05-12T14:35:02.918310256Z โ”‚ INFO[0024] Cmd: workdir                                 
pdf 2026-05-12T14:35:02.918312045Z โ”‚ INFO[0024] Changed working directory to /app            
pdf 2026-05-12T14:35:02.918313841Z โ”‚ INFO[0024] Creating directory /app with uid -1 and gid -1 
pdf 2026-05-12T14:35:02.918315683Z โ”‚ INFO[0024] Taking snapshot of files...                  
pdf 2026-05-12T14:35:02.919970533Z โ”‚ INFO[0024] Resolving srcs [go.*]...                     
pdf 2026-05-12T14:35:02.920631303Z โ”‚ INFO[0024] COPY go.* ./                                 
pdf 2026-05-12T14:35:02.920634637Z โ”‚ INFO[0024] Resolving srcs [go.*]...                     
pdf 2026-05-12T14:35:02.930248298Z โ”‚ INFO[0024] Taking snapshot of files...                  
pdf 2026-05-12T14:35:02.931811892Z โ”‚ INFO[0024] RUN go mod download && go mod verify         
pdf 2026-05-12T14:35:02.931816122Z โ”‚ INFO[0024] Found cached layer, extracting to filesystem 
pdf 2026-05-12T14:35:47.574986495Z โ”‚ INFO[0069] COPY . .                                     
pdf 2026-05-12T14:35:47.767338345Z โ”‚ INFO[0069] Taking snapshot of files...                  
pdf 2026-05-12T14:35:48.376055915Z โ”‚ INFO[0070] RUN go test -v ./... &&     CGO_ENABLED=0 go build -v     -installsuffix 'static'     -ldflags="-X 'main.version=$(git rev-parse --short HEAD)' -X 'main.build=$(date --iso-8601=seconds)'"     -o dist/server ./cmd/server 
pdf 2026-05-12T14:35:48.778227392Z โ”‚ INFO[0070] Cmd: /bin/sh                                 
pdf 2026-05-12T14:35:48.778266065Z โ”‚ INFO[0070] Args: [-c go test -v ./... &&     CGO_ENABLED=0 go build -v     -installsuffix 'static'     -ldflags="-X 'main.version=$(git rev-parse --short HEAD)' -X 'main.build=$(date --iso-8601=seconds)'"     -o dist/server ./cmd/server] 
pdf 2026-05-12T14:35:48.778284472Z โ”‚ INFO[0070] Running: [/bin/sh -c go test -v ./... &&     CGO_ENABLED=0 go build -v     -installsuffix 'static'     -ldflags="-X 'main.version=$(git rev-parse --short HEAD)' -X 'main.build=$(date --iso-8601=seconds)'"     -o dist/server ./cmd/server] 
pdf 2026-05-12T14:35:56.112140456Z โ”‚ ?   	github.com/s0ngkran/pdf_watermark_process/cmd/make_blank	[no test files]
pdf 2026-05-12T14:36:04.093771020Z โ”‚ ?   	github.com/s0ngkran/pdf_watermark_process/cmd/sample_watermark	[no test files]
pdf 2026-05-12T14:36:04.471562126Z โ”‚ ?   	github.com/s0ngkran/pdf_watermark_process/cmd/server	[no test files]
pdf 2026-05-12T14:36:04.471592450Z โ”‚ ?   	github.com/s0ngkran/pdf_watermark_process/internal/assets/fonts	[no test files]
pdf 2026-05-12T14:36:04.498866204Z โ”‚ === RUN   TestLoadConfig_Defaults
pdf 2026-05-12T14:36:04.498909862Z โ”‚ === RUN   TestLoadConfig_Defaults/App.Port
pdf 2026-05-12T14:36:04.498913072Z โ”‚ === RUN   TestLoadConfig_Defaults/Worker.CPURatio
pdf 2026-05-12T14:36:04.498915823Z โ”‚ === RUN   TestLoadConfig_Defaults/Worker.MinPagesForParallel
pdf 2026-05-12T14:36:04.498918563Z โ”‚ === RUN   TestLoadConfig_Defaults/Watermark.DefaultOpacity
pdf 2026-05-12T14:36:04.498921080Z โ”‚ === RUN   TestLoadConfig_Defaults/Watermark.DefaultFontSize
pdf 2026-05-12T14:36:04.498923360Z โ”‚ === RUN   TestLoadConfig_Defaults/Watermark.DefaultCopies
pdf 2026-05-12T14:36:04.498926234Z โ”‚ === RUN   TestLoadConfig_Defaults/Watermark.Rotation
pdf 2026-05-12T14:36:04.498928526Z โ”‚ === RUN   TestLoadConfig_Defaults/Watermark.Font
pdf 2026-05-12T14:36:04.498930811Z โ”‚ === RUN   TestLoadConfig_Defaults/Memory.Threshold
pdf 2026-05-12T14:36:04.498933124Z โ”‚ === RUN   TestLoadConfig_Defaults/Memory.MaxConcurrentJobs
pdf 2026-05-12T14:36:04.498935419Z โ”‚ --- PASS: TestLoadConfig_Defaults (0.00s)
pdf 2026-05-12T14:36:04.498937573Z โ”‚     --- PASS: TestLoadConfig_Defaults/App.Port (0.00s)
pdf 2026-05-12T14:36:04.498939643Z โ”‚     --- PASS: TestLoadConfig_Defaults/Worker.CPURatio (0.00s)
pdf 2026-05-12T14:36:04.498942155Z โ”‚     --- PASS: TestLoadConfig_Defaults/Worker.MinPagesForParallel (0.00s)
pdf 2026-05-12T14:36:04.498944406Z โ”‚     --- PASS: TestLoadConfig_Defaults/Watermark.DefaultOpacity (0.00s)
pdf 2026-05-12T14:36:04.498946601Z โ”‚     --- PASS: TestLoadConfig_Defaults/Watermark.DefaultFontSize (0.00s)
pdf 2026-05-12T14:36:04.498948990Z โ”‚     --- PASS: TestLoadConfig_Defaults/Watermark.DefaultCopies (0.00s)
pdf 2026-05-12T14:36:04.498951125Z โ”‚     --- PASS: TestLoadConfig_Defaults/Watermark.Rotation (0.00s)
pdf 2026-05-12T14:36:04.498953277Z โ”‚     --- PASS: TestLoadConfig_Defaults/Watermark.Font (0.00s)
pdf 2026-05-12T14:36:04.498955638Z โ”‚     --- PASS: TestLoadConfig_Defaults/Memory.Threshold (0.00s)
pdf 2026-05-12T14:36:04.499046330Z โ”‚     --- PASS: TestLoadConfig_Defaults/Memory.MaxConcurrentJobs (0.00s)
pdf 2026-05-12T14:36:04.499068325Z โ”‚ === RUN   TestLoadConfig_EmptyName
pdf 2026-05-12T14:36:04.499071848Z โ”‚ --- PASS: TestLoadConfig_EmptyName (0.00s)
pdf 2026-05-12T14:36:04.499074875Z โ”‚ PASS
pdf 2026-05-12T14:36:04.499077596Z โ”‚ ok  	github.com/s0ngkran/pdf_watermark_process/internal/config	0.025s
pdf 2026-05-12T14:36:10.028950454Z โ”‚ === RUN   TestMerge_CountExceedsMax
pdf 2026-05-12T14:36:10.028978858Z โ”‚ 2026/05/12 21:36:04 [Merge] Request received from 0.0.0.0, Content-Length: 4320
pdf 2026-05-12T14:36:10.028981699Z โ”‚ --- PASS: TestMerge_CountExceedsMax (0.00s)
pdf 2026-05-12T14:36:10.028983469Z โ”‚ === RUN   TestMerge_CountAtMax
pdf 2026-05-12T14:36:10.028996971Z โ”‚ 2026/05/12 21:36:04 [Merge] Request received from 0.0.0.0, Content-Length: 4122
pdf 2026-05-12T14:36:10.028998743Z โ”‚ 2026/05/12 21:36:04 [Merge] Merging 20 PDFs
pdf 2026-05-12T14:36:10.029001092Z โ”‚ 2026/05/12 21:36:04 [DEBUG] NewProcessor: created temp directory: /tmp/pdf_watermark_3708300568
pdf 2026-05-12T14:36:10.029007127Z โ”‚ 2026/05/12 21:36:04 [DEBUG] MergePDFs: starting, 20 PDFs to merge
pdf 2026-05-12T14:36:10.029154229Z โ”‚ 2026/05/12 21:36:04 [ERROR] MergePDFs: failed to read PDF 0: ReadContext failed: Read: xRefTable failed: pdfcpu: can't find last xref section
pdf 2026-05-12T14:36:10.029179307Z โ”‚ 2026/05/12 21:36:04 [Merge] Failed to merge PDFs: failed to read PDF 0: ReadContext failed: Read: xRefTable failed: pdfcpu: can't find last xref section
pdf 2026-05-12T14:36:10.029182086Z โ”‚ --- PASS: TestMerge_CountAtMax (0.00s)
pdf 2026-05-12T14:36:10.029183893Z โ”‚ === RUN   TestMerge_TotalSizeExceedsMax
pdf 2026-05-12T14:36:10.029186155Z โ”‚ 2026/05/12 21:36:09 [Merge] Request received from 0.0.0.0, Content-Length: 125829653
pdf 2026-05-12T14:36:10.029187951Z โ”‚ --- PASS: TestMerge_TotalSizeExceedsMax (4.11s)
pdf 2026-05-12T14:36:10.029190116Z โ”‚ === RUN   TestMerge_CountZero
pdf 2026-05-12T14:36:10.029192488Z โ”‚ 2026/05/12 21:36:09 [Merge] Request received from 0.0.0.0, Content-Length: 181
pdf 2026-05-12T14:36:10.029202063Z โ”‚ --- PASS: TestMerge_CountZero (0.00s)
pdf 2026-05-12T14:36:10.029203746Z โ”‚ === RUN   TestMerge_CountOne_PassesValidator
pdf 2026-05-12T14:36:10.029205573Z โ”‚ 2026/05/12 21:36:09 [Merge] Request received from 0.0.0.0, Content-Length: 377
pdf 2026-05-12T14:36:10.029207222Z โ”‚ 2026/05/12 21:36:09 [Merge] Merging 1 PDFs
pdf 2026-05-12T14:36:10.029208988Z โ”‚ 2026/05/12 21:36:09 [DEBUG] NewProcessor: created temp directory: /tmp/pdf_watermark_1255647466
pdf 2026-05-12T14:36:10.029397156Z โ”‚ 2026/05/12 21:36:09 [DEBUG] MergePDFs: starting, 1 PDFs to merge
pdf 2026-05-12T14:36:10.029400467Z โ”‚ 2026/05/12 21:36:09 [DEBUG] MergePDFs: only 1 PDF, returning as-is
pdf 2026-05-12T14:36:10.029402169Z โ”‚ 2026/05/12 21:36:09 [Merge] Success: merged 1 PDFs into 20 bytes
pdf 2026-05-12T14:36:10.029403991Z โ”‚ --- PASS: TestMerge_CountOne_PassesValidator (0.00s)
pdf 2026-05-12T14:36:10.029406110Z โ”‚ === RUN   TestMerge_InvalidPDF
pdf 2026-05-12T14:36:10.029408297Z โ”‚ 2026/05/12 21:36:09 [Merge] Request received from 0.0.0.0, Content-Length: 562
pdf 2026-05-12T14:36:10.029410560Z โ”‚ --- PASS: TestMerge_InvalidPDF (0.00s)
pdf 2026-05-12T14:36:10.029412192Z โ”‚ === RUN   TestTextStampV2_HappyPath_WithLastUpdated
pdf 2026-05-12T14:36:10.029414550Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=51e3f42dd95c08a222f55ad12ee04936dc10b3d3073cc73037d606fb4c84, Content-Length: 7244
pdf 2026-05-12T14:36:10.029417282Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] PDF file received: name=sample.pdf, size=6224 bytes
pdf 2026-05-12T14:36:10.029423870Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Parameters: id=42, name=เธชเธกเธŠเธฒเธข เนƒเธˆเธ”เธต, name_en=Somchai Jaidee, citizen_id=1234567890123
pdf 2026-05-12T14:36:10.029425580Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Starting layered PDF processing...
pdf 2026-05-12T14:36:10.029427280Z โ”‚ 2026/05/12 21:36:09 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough
pdf 2026-05-12T14:36:10.029428882Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Processing complete, output size: 77669 bytes
pdf 2026-05-12T14:36:10.029431002Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=1 memory_pct_start=0.0 duration_ms=11 outcome=success error=""
pdf 2026-05-12T14:36:10.029435775Z โ”‚ --- PASS: TestTextStampV2_HappyPath_WithLastUpdated (0.01s)
pdf 2026-05-12T14:36:10.029437446Z โ”‚ === RUN   TestTextStampV2_HappyPath_Multipart
pdf 2026-05-12T14:36:10.029439179Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=1d5411fadeaaf394b475211325c3d52e0f38269aa74e4a6a2d07b3f95288, Content-Length: 6981
pdf 2026-05-12T14:36:10.029441048Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] PDF file received: name=sample.pdf, size=6224 bytes
pdf 2026-05-12T14:36:10.029442705Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Parameters: id=42, name=เธชเธกเธŠเธฒเธข เนƒเธˆเธ”เธต, name_en=Somchai Jaidee, citizen_id=1234567890123
pdf 2026-05-12T14:36:10.029444462Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Starting layered PDF processing...
pdf 2026-05-12T14:36:10.029446107Z โ”‚ 2026/05/12 21:36:09 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough
pdf 2026-05-12T14:36:10.029447857Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Processing complete, output size: 70814 bytes
pdf 2026-05-12T14:36:10.029449497Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=1 memory_pct_start=0.0 duration_ms=10 outcome=success error=""
pdf 2026-05-12T14:36:10.029451298Z โ”‚ --- PASS: TestTextStampV2_HappyPath_Multipart (0.01s)
pdf 2026-05-12T14:36:10.029452992Z โ”‚ === RUN   TestTextStampV2_MissingPDF
pdf 2026-05-12T14:36:10.029454749Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=4f7679360928402a17388333cc38c0c906af84b5c6053bc0af1e6d98df12, Content-Length: 292
pdf 2026-05-12T14:36:10.029456565Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=-1 memory_pct_start=0.0 duration_ms=0 outcome=error error="PDF file or pdf_url is required"
pdf 2026-05-12T14:36:10.029458413Z โ”‚ --- PASS: TestTextStampV2_MissingPDF (0.00s)
pdf 2026-05-12T14:36:10.029460295Z โ”‚ === RUN   TestTextStampV2_MissingID_Allowed
pdf 2026-05-12T14:36:10.029462022Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=2b31c5b090e4e3f1ac2d447e978e25ad2ab50f7d27783fad40a426eca596, Content-Length: 6579
pdf 2026-05-12T14:36:10.029463797Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] PDF file received: name=sample.pdf, size=6224 bytes
pdf 2026-05-12T14:36:10.029465400Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Parameters: id=, name=n, name_en=, citizen_id=
pdf 2026-05-12T14:36:10.029467358Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Starting layered PDF processing...
pdf 2026-05-12T14:36:10.029469143Z โ”‚ 2026/05/12 21:36:09 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough
pdf 2026-05-12T14:36:10.029470693Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Processing complete, output size: 65121 bytes
pdf 2026-05-12T14:36:10.029472425Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=1 memory_pct_start=0.0 duration_ms=9 outcome=success error=""
pdf 2026-05-12T14:36:10.029474082Z โ”‚ --- PASS: TestTextStampV2_MissingID_Allowed (0.01s)
pdf 2026-05-12T14:36:10.029475803Z โ”‚ === RUN   TestTextStampV2_MissingName
pdf 2026-05-12T14:36:10.029481098Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=3143071bd409824427aa53690a7d30980c91697947d82c20e43f3972f1c6, Content-Length: 6577
pdf 2026-05-12T14:36:10.029482804Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] PDF file received: name=sample.pdf, size=6224 bytes
pdf 2026-05-12T14:36:10.029485178Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=1 memory_pct_start=0.0 duration_ms=0 outcome=error error="name required"
pdf 2026-05-12T14:36:10.029486956Z โ”‚ --- PASS: TestTextStampV2_MissingName (0.00s)
pdf 2026-05-12T14:36:10.029490832Z โ”‚ === RUN   TestTextStampV2_SSRFURLBlocked
pdf 2026-05-12T14:36:10.029492423Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=88dbf230ef9c67ffa0bfcc2d37befec7dd9c3874055a2a360117792f6be8, Content-Length: 426
pdf 2026-05-12T14:36:10.029493956Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] ERROR: Invalid PDF URL: url host resolves to a non-public address
pdf 2026-05-12T14:36:10.029495647Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url=http://127.0.0.1/x pages=-1 memory_pct_start=0.0 duration_ms=0 outcome=error error="Invalid PDF URL: url host resolves to a non-public address"
pdf 2026-05-12T14:36:10.029497293Z โ”‚ --- PASS: TestTextStampV2_SSRFURLBlocked (0.00s)
pdf 2026-05-12T14:36:10.029498878Z โ”‚ === RUN   TestTextStampV2_SSRFSchemeBlocked
pdf 2026-05-12T14:36:10.029500498Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=a7817624dc9561a843875209af7936a5dff02e0af296807a0979ed661522, Content-Length: 426
pdf 2026-05-12T14:36:10.029502046Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] ERROR: Invalid PDF URL: only http(s) URLs are allowed
pdf 2026-05-12T14:36:10.029504926Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url=file:///etc/passwd pages=-1 memory_pct_start=0.0 duration_ms=0 outcome=error error="Invalid PDF URL: only http(s) URLs are allowed"
pdf 2026-05-12T14:36:10.029506642Z โ”‚ --- PASS: TestTextStampV2_SSRFSchemeBlocked (0.00s)
pdf 2026-05-12T14:36:10.029508206Z โ”‚ === RUN   TestTextStampV2_EmptyBody
pdf 2026-05-12T14:36:10.029509846Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=x, Content-Length: 0
pdf 2026-05-12T14:36:10.029511621Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] ERROR: Failed to parse multipart form: form size must be greater than 0. Given 0
pdf 2026-05-12T14:36:10.029513293Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=-1 memory_pct_start=0.0 duration_ms=0 outcome=error error="Failed to parse multipart form: form size must be greater than 0. Given 0"
pdf 2026-05-12T14:36:10.029514857Z โ”‚ --- PASS: TestTextStampV2_EmptyBody (0.00s)
pdf 2026-05-12T14:36:10.029516415Z โ”‚ === RUN   TestTextStampV2_ServiceErrorMapsTo500
pdf 2026-05-12T14:36:10.029518048Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=80191bc325ec29e241ef205d5b9c9f7cdb5fe357437cb505ce7d01d55aaa, Content-Length: 485
pdf 2026-05-12T14:36:10.029519600Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] PDF file received: name=sample.pdf, size=18 bytes
pdf 2026-05-12T14:36:10.029521316Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Parameters: id=1, name=n, name_en=, citizen_id=
pdf 2026-05-12T14:36:10.029523056Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Starting layered PDF processing...
pdf 2026-05-12T14:36:10.029524791Z โ”‚ 2026/05/12 21:36:09 [LayeredStamp] OCG hide failed (passthrough): ocg: read context: ReadContext failed: Read: xRefTable failed: pdfcpu: can't find last xref section
pdf 2026-05-12T14:36:10.029526640Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] ERROR: Failed to process PDF: layered stamp: page dims: dims: read: ReadContext failed: Read: xRefTable failed: pdfcpu: can't find last xref section
pdf 2026-05-12T14:36:10.029529919Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=-1 memory_pct_start=0.0 duration_ms=0 outcome=error error="layered stamp: page dims: dims: read: ReadContext failed: Read: xRefTable failed: pdfcpu: can't find last xref section"
pdf 2026-05-12T14:36:10.029531742Z โ”‚ --- PASS: TestTextStampV2_ServiceErrorMapsTo500 (0.00s)
pdf 2026-05-12T14:36:10.029533643Z โ”‚ === RUN   TestNewTextStampV2Handler_NoMonitor
pdf 2026-05-12T14:36:10.029537248Z โ”‚ --- PASS: TestNewTextStampV2Handler_NoMonitor (0.00s)
pdf 2026-05-12T14:36:10.029538921Z โ”‚ === RUN   TestNewTextStampV2HandlerWithMonitor_StoresMonitor
pdf 2026-05-12T14:36:10.029540458Z โ”‚ --- PASS: TestNewTextStampV2HandlerWithMonitor_StoresMonitor (0.00s)
pdf 2026-05-12T14:36:10.029542142Z โ”‚ === RUN   TestDownloadPDF_HappyPath
pdf 2026-05-12T14:36:10.029543867Z โ”‚ --- PASS: TestDownloadPDF_HappyPath (0.00s)
pdf 2026-05-12T14:36:10.029545469Z โ”‚ === RUN   TestDownloadPDF_Non200
pdf 2026-05-12T14:36:10.029547025Z โ”‚ --- PASS: TestDownloadPDF_Non200 (0.00s)
pdf 2026-05-12T14:36:10.029548646Z โ”‚ === RUN   TestDownloadPDF_ExceedsSizeLimit
pdf 2026-05-12T14:36:10.029557482Z โ”‚ --- PASS: TestDownloadPDF_ExceedsSizeLimit (0.80s)
pdf 2026-05-12T14:36:10.029559077Z โ”‚ === RUN   TestDownloadPDF_ConnectionRefused
pdf 2026-05-12T14:36:10.029560770Z โ”‚ --- PASS: TestDownloadPDF_ConnectionRefused (0.00s)
pdf 2026-05-12T14:36:10.029565369Z โ”‚ === RUN   TestTextStampV2_PdfURL_ValidationReached
pdf 2026-05-12T14:36:10.029566973Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=dd8c34a5f60c46aa79e7a9548f151020f3162978a1f505dafc839101b364, Content-Length: 446
pdf 2026-05-12T14:36:10.029568634Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Downloading PDF from URL: https://example.com/does-not-exist.pdf
pdf 2026-05-12T14:36:10.029570185Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url=https://example.com/does-not-exist.pdf pages=-1 memory_pct_start=0.0 duration_ms=46 outcome=error error="Failed to download PDF: HTTP 404 Not Found"
pdf 2026-05-12T14:36:10.029571821Z โ”‚ --- PASS: TestTextStampV2_PdfURL_ValidationReached (0.05s)
pdf 2026-05-12T14:36:10.029573581Z โ”‚ === RUN   TestReadPDFInput_CoversAllBranches
pdf 2026-05-12T14:36:10.029575124Z โ”‚ --- PASS: TestReadPDFInput_CoversAllBranches (0.00s)
pdf 2026-05-12T14:36:10.029577330Z โ”‚ PASS
pdf 2026-05-12T14:36:10.029579070Z โ”‚ ok  	github.com/s0ngkran/pdf_watermark_process/internal/handler	5.023s
pdf 2026-05-12T14:36:10.032179963Z โ”‚ ?   	github.com/s0ngkran/pdf_watermark_process/internal/memory	[no test files]
pdf 2026-05-12T14:36:10.032199274Z โ”‚ === RUN   TestNewAPIKeyAuth
pdf 2026-05-12T14:36:10.032202229Z โ”‚ === RUN   TestNewAPIKeyAuth/valid_API_key_allows_request
pdf 2026-05-12T14:36:10.032204084Z โ”‚ === RUN   TestNewAPIKeyAuth/missing_API_key_returns_401
pdf 2026-05-12T14:36:10.032206149Z โ”‚ === RUN   TestNewAPIKeyAuth/invalid_API_key_returns_401
pdf 2026-05-12T14:36:10.032209313Z โ”‚ === RUN   TestNewAPIKeyAuth/health_check_skips_auth
pdf 2026-05-12T14:36:10.032216578Z โ”‚ === RUN   TestNewAPIKeyAuth/health_check_with_invalid_key_still_passes
pdf 2026-05-12T14:36:10.032218409Z โ”‚ === RUN   TestNewAPIKeyAuth/empty_configured_key_skips_auth_(dev_mode)
pdf 2026-05-12T14:36:10.032220067Z โ”‚ === RUN   TestNewAPIKeyAuth/empty_configured_key_skips_auth_even_with_header
pdf 2026-05-12T14:36:10.032221882Z โ”‚ === RUN   TestNewAPIKeyAuth/valid_key_on_merge_endpoint
pdf 2026-05-12T14:36:10.032362629Z โ”‚ === RUN   TestNewAPIKeyAuth/missing_key_on_merge_endpoint_returns_401
pdf 2026-05-12T14:36:10.032375468Z โ”‚ --- PASS: TestNewAPIKeyAuth (0.00s)
pdf 2026-05-12T14:36:10.032377567Z โ”‚     --- PASS: TestNewAPIKeyAuth/valid_API_key_allows_request (0.00s)
pdf 2026-05-12T14:36:10.032379625Z โ”‚     --- PASS: TestNewAPIKeyAuth/missing_API_key_returns_401 (0.00s)
pdf 2026-05-12T14:36:10.032381310Z โ”‚     --- PASS: TestNewAPIKeyAuth/invalid_API_key_returns_401 (0.00s)
pdf 2026-05-12T14:36:10.032394262Z โ”‚     --- PASS: TestNewAPIKeyAuth/health_check_skips_auth (0.00s)
pdf 2026-05-12T14:36:10.032396053Z โ”‚     --- PASS: TestNewAPIKeyAuth/health_check_with_invalid_key_still_passes (0.00s)
pdf 2026-05-12T14:36:10.032397977Z โ”‚     --- PASS: TestNewAPIKeyAuth/empty_configured_key_skips_auth_(dev_mode) (0.00s)
pdf 2026-05-12T14:36:10.032401893Z โ”‚     --- PASS: TestNewAPIKeyAuth/empty_configured_key_skips_auth_even_with_header (0.00s)
pdf 2026-05-12T14:36:10.032403728Z โ”‚     --- PASS: TestNewAPIKeyAuth/valid_key_on_merge_endpoint (0.00s)
pdf 2026-05-12T14:36:10.032405392Z โ”‚     --- PASS: TestNewAPIKeyAuth/missing_key_on_merge_endpoint_returns_401 (0.00s)
pdf 2026-05-12T14:36:10.032407449Z โ”‚ PASS
pdf 2026-05-12T14:36:10.032409227Z โ”‚ ok  	github.com/s0ngkran/pdf_watermark_process/internal/middleware	0.006s
pdf 2026-05-12T14:36:10.032411031Z โ”‚ === RUN   TestChannelToByte
pdf 2026-05-12T14:36:10.032412675Z โ”‚ --- PASS: TestChannelToByte (0.00s)
pdf 2026-05-12T14:36:10.032414372Z โ”‚ === RUN   TestToPdfY
pdf 2026-05-12T14:36:10.032415984Z โ”‚ --- PASS: TestToPdfY (0.00s)
pdf 2026-05-12T14:36:10.032417645Z โ”‚ === RUN   TestLayer1RingPositions
pdf 2026-05-12T14:36:10.032419600Z โ”‚ --- PASS: TestLayer1RingPositions (0.00s)
pdf 2026-05-12T14:36:10.032421281Z โ”‚ === RUN   TestBuildOverlayPDF_RejectsInvalidInputs
pdf 2026-05-12T14:36:10.032422906Z โ”‚ --- PASS: TestBuildOverlayPDF_RejectsInvalidInputs (0.00s)
pdf 2026-05-12T14:36:10.032424760Z โ”‚ === RUN   TestBuildOverlayPDF_HappyPath_EmbeddedBytes
pdf 2026-05-12T14:36:10.032426398Z โ”‚ --- PASS: TestBuildOverlayPDF_HappyPath_EmbeddedBytes (0.02s)
pdf 2026-05-12T14:36:10.032428117Z โ”‚ === RUN   TestBuildOverlayPDF_BadRegularFontBytes
pdf 2026-05-12T14:36:10.032429728Z โ”‚ --- PASS: TestBuildOverlayPDF_BadRegularFontBytes (0.00s)
pdf 2026-05-12T14:36:10.032431483Z โ”‚ === RUN   TestBuildOverlayPDF_BadBoldFontBytes
pdf 2026-05-12T14:36:10.032488148Z โ”‚ --- PASS: TestBuildOverlayPDF_BadBoldFontBytes (0.00s)
pdf 2026-05-12T14:36:10.032491663Z โ”‚ === RUN   TestBuildOverlayPDF_BytesWinOverPath
pdf 2026-05-12T14:36:10.032493508Z โ”‚ --- PASS: TestBuildOverlayPDF_BytesWinOverPath (0.02s)
pdf 2026-05-12T14:36:10.032495239Z โ”‚ === RUN   TestBuildOverlayPDF_HappyPath_A4
pdf 2026-05-12T14:36:10.032496967Z โ”‚ --- PASS: TestBuildOverlayPDF_HappyPath_A4 (0.02s)
pdf 2026-05-12T14:36:10.032498820Z โ”‚ === RUN   TestBuildOverlayPDF_BlankFields_StillProducesPDF
pdf 2026-05-12T14:36:10.032629224Z โ”‚ --- PASS: TestBuildOverlayPDF_BlankFields_StillProducesPDF (0.02s)
pdf 2026-05-12T14:36:10.032632032Z โ”‚ === RUN   TestBuildOverlayPDF_Landscape
pdf 2026-05-12T14:36:10.032633702Z โ”‚ --- PASS: TestBuildOverlayPDF_Landscape (0.01s)
pdf 2026-05-12T14:36:10.032639930Z โ”‚ === RUN   TestBuildOverlayPDF_MissingFontFile
pdf 2026-05-12T14:36:10.032641655Z โ”‚ --- PASS: TestBuildOverlayPDF_MissingFontFile (0.00s)
pdf 2026-05-12T14:36:10.032643494Z โ”‚ === RUN   TestStudentDataZeroValueIsValid
pdf 2026-05-12T14:36:10.032645421Z โ”‚ --- PASS: TestStudentDataZeroValueIsValid (0.00s)
pdf 2026-05-12T14:36:10.032647256Z โ”‚ === RUN   TestBuildOverlayPDF_BadRegularFontPath
pdf 2026-05-12T14:36:10.032648900Z โ”‚ --- PASS: TestBuildOverlayPDF_BadRegularFontPath (0.00s)
pdf 2026-05-12T14:36:10.032650562Z โ”‚ === RUN   TestBuildOverlayPDF_BadBoldFontPath
pdf 2026-05-12T14:36:10.032652189Z โ”‚ --- PASS: TestBuildOverlayPDF_BadBoldFontPath (0.00s)
pdf 2026-05-12T14:36:10.032654241Z โ”‚ === RUN   TestLayerColorConstants
pdf 2026-05-12T14:36:10.032655901Z โ”‚ --- PASS: TestLayerColorConstants (0.00s)
pdf 2026-05-12T14:36:10.032671980Z โ”‚ === RUN   TestLayer3BrandText
pdf 2026-05-12T14:36:10.032673741Z โ”‚ --- PASS: TestLayer3BrandText (0.00s)
pdf 2026-05-12T14:36:10.032778108Z โ”‚ === RUN   TestLayer4LabelUsesEnDash
pdf 2026-05-12T14:36:10.032782316Z โ”‚ --- PASS: TestLayer4LabelUsesEnDash (0.00s)
pdf 2026-05-12T14:36:10.032784016Z โ”‚ === RUN   TestBuildOverlayPDF_Layer3Renders
pdf 2026-05-12T14:36:10.032785882Z โ”‚ --- PASS: TestBuildOverlayPDF_Layer3Renders (0.01s)
pdf 2026-05-12T14:36:10.032787743Z โ”‚ === RUN   TestBuildOverlayPDF_WithPdfName
pdf 2026-05-12T14:36:10.032789475Z โ”‚ --- PASS: TestBuildOverlayPDF_WithPdfName (0.01s)
pdf 2026-05-12T14:36:10.032791639Z โ”‚ === RUN   TestBuildOverlayPDF_EmptyPdfName_NoCornerLayer
pdf 2026-05-12T14:36:10.032793299Z โ”‚ --- PASS: TestBuildOverlayPDF_EmptyPdfName_NoCornerLayer (0.01s)
pdf 2026-05-12T14:36:10.032795104Z โ”‚ === RUN   TestDrawLayerCorner_RendersFullFormatWhenLastUpdatedSet
pdf 2026-05-12T14:36:10.032797101Z โ”‚ --- PASS: TestDrawLayerCorner_RendersFullFormatWhenLastUpdatedSet (0.02s)
pdf 2026-05-12T14:36:10.032798737Z โ”‚ === RUN   TestDrawLayerCorner_OmitsLastUpdatedSuffixWhenEmpty
pdf 2026-05-12T14:36:10.032800331Z โ”‚ --- PASS: TestDrawLayerCorner_OmitsLastUpdatedSuffixWhenEmpty (0.03s)
pdf 2026-05-12T14:36:10.032802014Z โ”‚ === RUN   TestHideWatermarkOCG_DisablesMatchingLayer
pdf 2026-05-12T14:36:10.032803671Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: matched and disabled OCG "Watermark"
pdf 2026-05-12T14:36:10.032805482Z โ”‚ --- PASS: TestHideWatermarkOCG_DisablesMatchingLayer (0.01s)
pdf 2026-05-12T14:36:10.032807133Z โ”‚ === RUN   TestHideWatermarkOCG_CaseInsensitiveMatch
pdf 2026-05-12T14:36:10.032808849Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: matched and disabled OCG "Watermark"
pdf 2026-05-12T14:36:10.032810495Z โ”‚ --- PASS: TestHideWatermarkOCG_CaseInsensitiveMatch (0.01s)
pdf 2026-05-12T14:36:10.032812102Z โ”‚ === RUN   TestHideWatermarkOCG_NoOCG_Passthrough
pdf 2026-05-12T14:36:10.032814162Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough
pdf 2026-05-12T14:36:10.032815858Z โ”‚ --- PASS: TestHideWatermarkOCG_NoOCG_Passthrough (0.00s)
pdf 2026-05-12T14:36:10.032817400Z โ”‚ === RUN   TestHideWatermarkOCG_OCGWithDifferentName_Passthrough
pdf 2026-05-12T14:36:10.032818982Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough
pdf 2026-05-12T14:36:10.032820667Z โ”‚ --- PASS: TestHideWatermarkOCG_OCGWithDifferentName_Passthrough (0.00s)
pdf 2026-05-12T14:36:10.032822368Z โ”‚ === RUN   TestOcgNameEquals_SupportsStringLiteralAndHex
pdf 2026-05-12T14:36:10.032823951Z โ”‚ --- PASS: TestOcgNameEquals_SupportsStringLiteralAndHex (0.00s)
pdf 2026-05-12T14:36:10.032825491Z โ”‚ === RUN   TestHideWatermarkOCG_GarbageInput_ReturnsError
pdf 2026-05-12T14:36:10.032827003Z โ”‚ --- PASS: TestHideWatermarkOCG_GarbageInput_ReturnsError (0.00s)
pdf 2026-05-12T14:36:10.032828811Z โ”‚ === RUN   TestApplyOverlayPages_SinglePage
pdf 2026-05-12T14:36:10.032830389Z โ”‚ --- PASS: TestApplyOverlayPages_SinglePage (0.02s)
pdf 2026-05-12T14:36:10.032831957Z โ”‚ === RUN   TestApplyOverlayPages_MultiPage_AllPages
pdf 2026-05-12T14:36:10.032833676Z โ”‚ --- PASS: TestApplyOverlayPages_MultiPage_AllPages (0.02s)
pdf 2026-05-12T14:36:10.032835339Z โ”‚ === RUN   TestApplyOverlayPages_SpecificPages
pdf 2026-05-12T14:36:10.032836975Z โ”‚ --- PASS: TestApplyOverlayPages_SpecificPages (0.03s)
pdf 2026-05-12T14:36:10.032838587Z โ”‚ === RUN   TestApplyOverlayPages_EmptyInput
pdf 2026-05-12T14:36:10.032842745Z โ”‚ --- PASS: TestApplyOverlayPages_EmptyInput (0.00s)
pdf 2026-05-12T14:36:10.032844493Z โ”‚ === RUN   TestApplyOverlayPages_EmptyOverlay
pdf 2026-05-12T14:36:10.032846035Z โ”‚ --- PASS: TestApplyOverlayPages_EmptyOverlay (0.00s)
pdf 2026-05-12T14:36:10.032847590Z โ”‚ === RUN   TestApplyOverlayPages_GarbageOverlay
pdf 2026-05-12T14:36:10.032849284Z โ”‚ --- PASS: TestApplyOverlayPages_GarbageOverlay (0.00s)
pdf 2026-05-12T14:36:10.032850935Z โ”‚ === RUN   TestApplyOverlayPages_PDF14WithStructElementDictE
pdf 2026-05-12T14:36:10.032852622Z โ”‚ --- PASS: TestApplyOverlayPages_PDF14WithStructElementDictE (0.03s)
pdf 2026-05-12T14:36:10.032854140Z โ”‚ === RUN   TestPageDimensions_ReturnsPerPageSizes
pdf 2026-05-12T14:36:10.032855706Z โ”‚ --- PASS: TestPageDimensions_ReturnsPerPageSizes (0.00s)
pdf 2026-05-12T14:36:10.032857435Z โ”‚ === RUN   TestPageDimensions_GarbageInput
pdf 2026-05-12T14:36:10.032858972Z โ”‚ --- PASS: TestPageDimensions_GarbageInput (0.00s)
pdf 2026-05-12T14:36:10.032860548Z โ”‚ === RUN   TestPageDimensions_PDF14WithStructElementDictE
pdf 2026-05-12T14:36:10.032862044Z โ”‚ --- PASS: TestPageDimensions_PDF14WithStructElementDictE (0.01s)
pdf 2026-05-12T14:36:10.032863643Z โ”‚ === RUN   TestPageDimensions_EmptyBytes
pdf 2026-05-12T14:36:10.032865179Z โ”‚ --- PASS: TestPageDimensions_EmptyBytes (0.00s)
pdf 2026-05-12T14:36:10.032866740Z โ”‚ === RUN   TestPageDimensions_HeaderOnly
pdf 2026-05-12T14:36:10.032868286Z โ”‚ --- PASS: TestPageDimensions_HeaderOnly (0.00s)
pdf 2026-05-12T14:36:10.032869815Z โ”‚ === RUN   TestPageDimensions_MixedDims
pdf 2026-05-12T14:36:10.032957533Z โ”‚ --- PASS: TestPageDimensions_MixedDims (0.00s)
pdf 2026-05-12T14:36:10.032960344Z โ”‚ === RUN   TestPageDimensionsFile_RoundTrip
pdf 2026-05-12T14:36:10.032962525Z โ”‚ --- PASS: TestPageDimensionsFile_RoundTrip (0.00s)
pdf 2026-05-12T14:36:10.032964225Z โ”‚ === RUN   TestPageDimensionsFile_MissingFile
pdf 2026-05-12T14:36:10.032965922Z โ”‚ --- PASS: TestPageDimensionsFile_MissingFile (0.00s)
pdf 2026-05-12T14:36:10.032967495Z โ”‚ === RUN   TestGroupPagesByDim_AllSameSize
pdf 2026-05-12T14:36:10.032969081Z โ”‚ --- PASS: TestGroupPagesByDim_AllSameSize (0.00s)
pdf 2026-05-12T14:36:10.032970754Z โ”‚ === RUN   TestGroupPagesByDim_MixedSizes
pdf 2026-05-12T14:36:10.033070135Z โ”‚ --- PASS: TestGroupPagesByDim_MixedSizes (0.00s)
pdf 2026-05-12T14:36:10.033072740Z โ”‚ === RUN   TestGroupPagesByDim_Tolerance
pdf 2026-05-12T14:36:10.033074489Z โ”‚ --- PASS: TestGroupPagesByDim_Tolerance (0.00s)
pdf 2026-05-12T14:36:10.033076262Z โ”‚ === RUN   TestGroupPagesByDim_NegativeToleranceFallsBackToDefault
pdf 2026-05-12T14:36:10.033078238Z โ”‚ --- PASS: TestGroupPagesByDim_NegativeToleranceFallsBackToDefault (0.00s)
pdf 2026-05-12T14:36:10.033080247Z โ”‚ === RUN   TestBuildPageSelection
pdf 2026-05-12T14:36:10.033081907Z โ”‚ --- PASS: TestBuildPageSelection (0.00s)
pdf 2026-05-12T14:36:10.033083895Z โ”‚ === RUN   TestEnsureReadable_ValidPDF
pdf 2026-05-12T14:36:10.033085662Z โ”‚ --- PASS: TestEnsureReadable_ValidPDF (0.01s)
pdf 2026-05-12T14:36:10.033087562Z โ”‚ === RUN   TestEnsureReadable_Garbage
pdf 2026-05-12T14:36:10.033089325Z โ”‚ --- PASS: TestEnsureReadable_Garbage (0.00s)
pdf 2026-05-12T14:36:10.033091120Z โ”‚ === RUN   TestMergePDFs_Concatenates
pdf 2026-05-12T14:36:10.033093049Z โ”‚ 2026/05/12 21:36:05 [DEBUG] NewProcessor: created temp directory: /tmp/pdf_watermark_4216651753
pdf 2026-05-12T14:36:10.033094841Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: starting, 2 PDFs to merge
pdf 2026-05-12T14:36:10.033099434Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: read PDF 0, pages: 2
pdf 2026-05-12T14:36:10.033101199Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: read PDF 1, pages: 1
pdf 2026-05-12T14:36:10.033102999Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: merged PDF 1, dest pages: 3
pdf 2026-05-12T14:36:10.033104703Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: completed, output size: 9065 bytes
pdf 2026-05-12T14:36:10.033106404Z โ”‚ --- PASS: TestMergePDFs_Concatenates (0.01s)
pdf 2026-05-12T14:36:10.033108374Z โ”‚ === RUN   TestMergePDFs_SinglePDF_PassThrough
pdf 2026-05-12T14:36:10.033110037Z โ”‚ 2026/05/12 21:36:05 [DEBUG] NewProcessor: created temp directory: /tmp/pdf_watermark_4294797532
pdf 2026-05-12T14:36:10.033111805Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: starting, 1 PDFs to merge
pdf 2026-05-12T14:36:10.033113430Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: only 1 PDF, returning as-is
pdf 2026-05-12T14:36:10.033115073Z โ”‚ --- PASS: TestMergePDFs_SinglePDF_PassThrough (0.00s)
pdf 2026-05-12T14:36:10.033116790Z โ”‚ === RUN   TestMergePDFs_RejectsEmpty
pdf 2026-05-12T14:36:10.033118407Z โ”‚ 2026/05/12 21:36:05 [DEBUG] NewProcessor: created temp directory: /tmp/pdf_watermark_4094201731
pdf 2026-05-12T14:36:10.033233214Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: starting, 0 PDFs to merge
pdf 2026-05-12T14:36:10.033237229Z โ”‚ 2026/05/12 21:36:05 [ERROR] MergePDFs: no PDFs to merge
pdf 2026-05-12T14:36:10.033239180Z โ”‚ --- PASS: TestMergePDFs_RejectsEmpty (0.00s)
pdf 2026-05-12T14:36:10.033241018Z โ”‚ PASS
pdf 2026-05-12T14:36:10.033242776Z โ”‚ ok  	github.com/s0ngkran/pdf_watermark_process/internal/pdf	0.335s
pdf 2026-05-12T14:36:10.033244412Z โ”‚ === RUN   TestNewLayeredStampService_WiresConfig
pdf 2026-05-12T14:36:10.033246294Z โ”‚ --- PASS: TestNewLayeredStampService_WiresConfig (0.00s)
pdf 2026-05-12T14:36:10.033248000Z โ”‚ === RUN   TestLayeredStampService_ProcessPDF_EmptyInput
pdf 2026-05-12T14:36:10.033249824Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_EmptyInput (0.00s)
pdf 2026-05-12T14:36:10.033251454Z โ”‚ === RUN   TestLayeredStampService_ProcessPDF_GarbageInput
pdf 2026-05-12T14:36:10.033255190Z โ”‚ 2026/05/12 21:36:04 [LayeredStamp] OCG hide failed (passthrough): ocg: read context: ReadContext failed: Read: xRefTable failed: pdfcpu: can't find last xref section
pdf 2026-05-12T14:36:10.033257010Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_GarbageInput (0.00s)
pdf 2026-05-12T14:36:10.033258556Z โ”‚ === RUN   TestLayeredStampService_ProcessPDF_HappyPath
pdf 2026-05-12T14:36:10.033260446Z โ”‚ 2026/05/12 21:36:04 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough
pdf 2026-05-12T14:36:10.033262185Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_HappyPath (0.03s)
pdf 2026-05-12T14:36:10.033264002Z โ”‚ === RUN   TestLayeredStampService_ProcessPDF_NoFlattening_OutputSearchable
pdf 2026-05-12T14:36:10.033265649Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough
pdf 2026-05-12T14:36:10.033267312Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_NoFlattening_OutputSearchable (0.02s)
pdf 2026-05-12T14:36:10.033268979Z โ”‚ === RUN   TestLayeredStampService_ProcessPDF_MixedPageSizes
pdf 2026-05-12T14:36:10.033270652Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough
pdf 2026-05-12T14:36:10.033272282Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_MixedPageSizes (0.02s)
pdf 2026-05-12T14:36:10.033273935Z โ”‚ === RUN   TestProcessOptions_WithPdfName
pdf 2026-05-12T14:36:10.033278099Z โ”‚ --- PASS: TestProcessOptions_WithPdfName (0.00s)
pdf 2026-05-12T14:36:10.033279705Z โ”‚ === RUN   TestProcessOptions_WithLastUpdated
pdf 2026-05-12T14:36:10.033281297Z โ”‚ --- PASS: TestProcessOptions_WithLastUpdated (0.00s)
pdf 2026-05-12T14:36:10.033282895Z โ”‚ === RUN   TestLayeredStampService_ProcessPDF_AppliesOptions
pdf 2026-05-12T14:36:10.033284601Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough
pdf 2026-05-12T14:36:10.033286214Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_AppliesOptions (0.02s)
pdf 2026-05-12T14:36:10.033287805Z โ”‚ === RUN   TestLayeredStampService_ProcessPDF_RespectsContextCancel
pdf 2026-05-12T14:36:10.033289405Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_RespectsContextCancel (0.01s)
pdf 2026-05-12T14:36:10.033291099Z โ”‚ === RUN   TestLayeredStampService_ProcessPDF_DeadlineTightenedIsSafe
pdf 2026-05-12T14:36:10.033292745Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough
pdf 2026-05-12T14:36:10.033294405Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough
pdf 2026-05-12T14:36:10.033295940Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_DeadlineTightenedIsSafe (0.02s)
pdf 2026-05-12T14:36:10.033297799Z โ”‚ === RUN   TestCalculateWorkerCount
pdf 2026-05-12T14:36:10.033299447Z โ”‚ === RUN   TestCalculateWorkerCount/zero_ratio_returns_at_least_1
pdf 2026-05-12T14:36:10.033301130Z โ”‚ === RUN   TestCalculateWorkerCount/negative_ratio_returns_at_least_1
pdf 2026-05-12T14:36:10.033302730Z โ”‚ === RUN   TestCalculateWorkerCount/positive_ratio_returns_at_least_1
pdf 2026-05-12T14:36:10.033306190Z โ”‚ === RUN   TestCalculateWorkerCount/full_ratio_returns_at_least_1
pdf 2026-05-12T14:36:10.033307926Z โ”‚ --- PASS: TestCalculateWorkerCount (0.00s)
pdf 2026-05-12T14:36:10.033309552Z โ”‚     --- PASS: TestCalculateWorkerCount/zero_ratio_returns_at_least_1 (0.00s)
pdf 2026-05-12T14:36:10.033311188Z โ”‚     --- PASS: TestCalculateWorkerCount/negative_ratio_returns_at_least_1 (0.00s)
pdf 2026-05-12T14:36:10.033312839Z โ”‚     --- PASS: TestCalculateWorkerCount/positive_ratio_returns_at_least_1 (0.00s)
pdf 2026-05-12T14:36:10.033314341Z โ”‚     --- PASS: TestCalculateWorkerCount/full_ratio_returns_at_least_1 (0.00s)
pdf 2026-05-12T14:36:10.033315888Z โ”‚ === RUN   TestCalculatePageRanges
pdf 2026-05-12T14:36:10.033317436Z โ”‚ === RUN   TestCalculatePageRanges/10_pages,_2_workers
pdf 2026-05-12T14:36:10.033319253Z โ”‚ === RUN   TestCalculatePageRanges/10_pages,_3_workers_(uneven_split)
pdf 2026-05-12T14:36:10.033348331Z โ”‚ === RUN   TestCalculatePageRanges/1_page,_4_workers_(more_workers_than_pages)
pdf 2026-05-12T14:36:10.033351461Z โ”‚ === RUN   TestCalculatePageRanges/5_pages,_1_worker
pdf 2026-05-12T14:36:10.033353363Z โ”‚ === RUN   TestCalculatePageRanges/zero_workers_defaults_to_1
pdf 2026-05-12T14:36:10.033355218Z โ”‚ --- PASS: TestCalculatePageRanges (0.00s)
pdf 2026-05-12T14:36:10.033356936Z โ”‚     --- PASS: TestCalculatePageRanges/10_pages,_2_workers (0.00s)
pdf 2026-05-12T14:36:10.033358564Z โ”‚     --- PASS: TestCalculatePageRanges/10_pages,_3_workers_(uneven_split) (0.00s)
pdf 2026-05-12T14:36:10.033360408Z โ”‚     --- PASS: TestCalculatePageRanges/1_page,_4_workers_(more_workers_than_pages) (0.00s)
pdf 2026-05-12T14:36:10.033362068Z โ”‚     --- PASS: TestCalculatePageRanges/5_pages,_1_worker (0.00s)
pdf 2026-05-12T14:36:10.033363693Z โ”‚     --- PASS: TestCalculatePageRanges/zero_workers_defaults_to_1 (0.00s)
pdf 2026-05-12T14:36:10.033365429Z โ”‚ === RUN   TestCalculatePageRanges_Contiguous
pdf 2026-05-12T14:36:10.033369628Z โ”‚ --- PASS: TestCalculatePageRanges_Contiguous (0.00s)
pdf 2026-05-12T14:36:10.033371299Z โ”‚ === RUN   TestCalculateMemoryAwareWorkerCount_NilMonitor
pdf 2026-05-12T14:36:10.033372926Z โ”‚ --- PASS: TestCalculateMemoryAwareWorkerCount_NilMonitor (0.00s)
pdf 2026-05-12T14:36:10.033374542Z โ”‚ === RUN   TestCalculateMemoryAwareWorkerCount_ZeroThreshold
pdf 2026-05-12T14:36:10.033376338Z โ”‚ --- PASS: TestCalculateMemoryAwareWorkerCount_ZeroThreshold (0.00s)
pdf 2026-05-12T14:36:10.033378155Z โ”‚ PASS
pdf 2026-05-12T14:36:10.033379855Z โ”‚ ok  	github.com/s0ngkran/pdf_watermark_process/internal/service	0.121s
pdf 2026-05-12T14:36:10.237810984Z โ”‚ net
pdf 2026-05-12T14:36:10.728898462Z โ”‚ vendor/golang.org/x/net/http/httpproxy
pdf 2026-05-12T14:36:10.728927826Z โ”‚ github.com/valyala/tcplisten
pdf 2026-05-12T14:36:10.728931058Z โ”‚ github.com/valyala/fasthttp/fasthttputil
pdf 2026-05-12T14:36:10.728933381Z โ”‚ github.com/google/uuid
pdf 2026-05-12T14:36:10.728936049Z โ”‚ net/textproto
pdf 2026-05-12T14:36:10.729237285Z โ”‚ github.com/mitchellh/mapstructure
pdf 2026-05-12T14:36:10.729255100Z โ”‚ crypto/x509
pdf 2026-05-12T14:36:10.730479820Z โ”‚ github.com/spf13/pflag
pdf 2026-05-12T14:36:10.772981441Z โ”‚ github.com/valyala/fasthttp/reuseport
pdf 2026-05-12T14:36:10.795381108Z โ”‚ vendor/golang.org/x/net/http/httpguts
pdf 2026-05-12T14:36:10.796730297Z โ”‚ mime/multipart
pdf 2026-05-12T14:36:10.827637824Z โ”‚ github.com/gofiber/fiber/v2/utils
pdf 2026-05-12T14:36:11.168304542Z โ”‚ crypto/tls
pdf 2026-05-12T14:36:11.810479770Z โ”‚ net/http/httptrace
pdf 2026-05-12T14:36:11.841520220Z โ”‚ net/http/internal/httpcommon
pdf 2026-05-12T14:36:11.889196958Z โ”‚ net/http
pdf 2026-05-12T14:36:13.003130470Z โ”‚ net/http/httputil
pdf 2026-05-12T14:36:13.003390469Z โ”‚ github.com/spf13/afero
pdf 2026-05-12T14:36:13.004386681Z โ”‚ github.com/magiconair/properties
pdf 2026-05-12T14:36:13.004657458Z โ”‚ github.com/pdfcpu/pdfcpu/pkg/pdfcpu/primitives
pdf 2026-05-12T14:36:13.012871306Z โ”‚ github.com/andybalholm/brotli
pdf 2026-05-12T14:36:13.171837974Z โ”‚ github.com/spf13/viper/internal/encoding/javaproperties
pdf 2026-05-12T14:36:13.233062694Z โ”‚ github.com/spf13/viper
pdf 2026-05-12T14:36:13.426917294Z โ”‚ github.com/s0ngkran/pdf_watermark_process/internal/config
pdf 2026-05-12T14:36:13.516495606Z โ”‚ github.com/pdfcpu/pdfcpu/pkg/pdfcpu/create
pdf 2026-05-12T14:36:13.516699728Z โ”‚ github.com/pdfcpu/pdfcpu/pkg/pdfcpu/form
pdf 2026-05-12T14:36:13.518114710Z โ”‚ github.com/pdfcpu/pdfcpu/pkg/pdfcpu
pdf 2026-05-12T14:36:14.417305983Z โ”‚ github.com/valyala/fasthttp
pdf 2026-05-12T14:36:14.517202559Z โ”‚ github.com/pdfcpu/pdfcpu/pkg/pdfcpu/validate
pdf 2026-05-12T14:36:15.097631978Z โ”‚ github.com/pdfcpu/pdfcpu/pkg/api
pdf 2026-05-12T14:36:15.286231543Z โ”‚ github.com/gofiber/fiber/v2
pdf 2026-05-12T14:36:15.399855066Z โ”‚ github.com/s0ngkran/pdf_watermark_process/internal/pdf
pdf 2026-05-12T14:36:15.499476170Z โ”‚ github.com/s0ngkran/pdf_watermark_process/internal/service
pdf 2026-05-12T14:36:15.724313169Z โ”‚ github.com/gofiber/fiber/v2/middleware/cors
pdf 2026-05-12T14:36:15.724838909Z โ”‚ github.com/gofiber/fiber/v2/middleware/recover
pdf 2026-05-12T14:36:15.725189112Z โ”‚ github.com/s0ngkran/pdf_watermark_process/internal/middleware
pdf 2026-05-12T14:36:15.725197242Z โ”‚ github.com/s0ngkran/pdf_watermark_process/internal/handler
pdf 2026-05-12T14:36:15.725222599Z โ”‚ github.com/gofiber/fiber/v2/middleware/logger
pdf 2026-05-12T14:36:15.878660114Z โ”‚ github.com/s0ngkran/pdf_watermark_process/cmd/server
pdf 2026-05-12T14:36:16.970509972Z โ”‚ INFO[0098] Taking snapshot of files...                  
pdf 2026-05-12T14:36:20.829821216Z โ”‚ INFO[0102] Pushing layer <registry-uri-4> to cache now 
pdf 2026-05-12T14:36:20.831411264Z โ”‚ INFO[0102] Pushing image to <registry-uri-5> 
pdf 2026-05-12T14:36:24.850542469Z โ”‚ INFO[0106] Pushed <registry-uri-6> 
pdf 2026-05-12T14:36:24.851464471Z โ”‚ INFO[0106] Saving file app/dist/server for later use    
pdf 2026-05-12T14:36:24.864372643Z โ”‚ INFO[0106] Deleting filesystem...                       
pdf 2026-05-12T14:36:25.787232356Z โ”‚ INFO[0107] Retrieving image manifest debian:bookworm-slim 
pdf 2026-05-12T14:36:25.787258689Z โ”‚ INFO[0107] Returning cached image manifest              
pdf 2026-05-12T14:36:25.787260850Z โ”‚ INFO[0107] Retrieving image manifest debian:bookworm-slim 
pdf 2026-05-12T14:36:25.787262791Z โ”‚ INFO[0107] Returning cached image manifest              
pdf 2026-05-12T14:36:25.787264680Z โ”‚ INFO[0107] Executing 0 build triggers                   
pdf 2026-05-12T14:36:25.787269653Z โ”‚ INFO[0107] Building stage 'debian:bookworm-slim' [idx: '1', base-idx: '-1'] 
pdf 2026-05-12T14:36:25.787271744Z โ”‚ INFO[0107] Applying label maintainer=Chatchanan Panyaprasirtkit <changnoi2547@gmail.com> 
pdf 2026-05-12T14:36:25.787844448Z โ”‚ INFO[0107] Checking for cached layer <registry-uri-7> 
pdf 2026-05-12T14:36:25.904517753Z โ”‚ INFO[0107] Using caching version of cmd: RUN apt-get update &&     apt-get install -y --no-install-recommends     tini     ca-certificates &&     apt-get clean &&     rm -rf /var/lib/apt/lists/* 
pdf 2026-05-12T14:36:25.904542489Z โ”‚ INFO[0107] Checking for cached layer <registry-uri-8> 
pdf 2026-05-12T14:36:26.009308687Z โ”‚ INFO[0107] Using caching version of cmd: RUN useradd -u 1000 -m -s /bin/bash appuser 
pdf 2026-05-12T14:36:26.039327118Z โ”‚ INFO[0107] Checking for cached layer <registry-uri-9> 
pdf 2026-05-12T14:36:26.070279399Z โ”‚ INFO[0107] No cached layer found for cmd RUN mkdir -p /app/.pdfcpu 
pdf 2026-05-12T14:36:26.070329166Z โ”‚ INFO[0107] Cmd: USER                                    
pdf 2026-05-12T14:36:26.070332132Z โ”‚ INFO[0107] Cmd: EXPOSE                                  
pdf 2026-05-12T14:36:26.070335105Z โ”‚ INFO[0107] Adding exposed port: 8080/tcp                
pdf 2026-05-12T14:36:26.070337803Z โ”‚ INFO[0107] Adding exposed port: 8443/tcp                
pdf 2026-05-12T14:36:26.070340987Z โ”‚ INFO[0107] Unpacking rootfs as cmd COPY --from=builder /app/dist/server /app/server requires it. 
pdf 2026-05-12T14:36:26.841882211Z โ”‚ INFO[0108] Initializing snapshotter ...                 
pdf 2026-05-12T14:36:26.841910121Z โ”‚ INFO[0108] Taking snapshot of full filesystem...        
pdf 2026-05-12T14:36:27.617609317Z โ”‚ INFO[0109] LABEL maintainer="Chatchanan Panyaprasirtkit <changnoi2547@gmail.com>" 
pdf 2026-05-12T14:36:27.617634888Z โ”‚ INFO[0109] Applying label maintainer=Chatchanan Panyaprasirtkit <changnoi2547@gmail.com> 
pdf 2026-05-12T14:36:27.618326926Z โ”‚ INFO[0109] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:36:27.618347113Z โ”‚ INFO[0109] ARG timezone=Asia/Bangkok                    
pdf 2026-05-12T14:36:27.618349706Z โ”‚ INFO[0109] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:36:27.618371958Z โ”‚ INFO[0109] ENV LANG C.UTF-8                             
pdf 2026-05-12T14:36:27.618373756Z โ”‚ INFO[0109] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:36:27.618375323Z โ”‚ INFO[0109] ENV LC_ALL C.UTF-8                           
pdf 2026-05-12T14:36:27.618376967Z โ”‚ INFO[0109] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:36:27.618378724Z โ”‚ INFO[0109] ENV TZ $timezone                             
pdf 2026-05-12T14:36:27.618589977Z โ”‚ INFO[0109] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:36:27.618605757Z โ”‚ INFO[0109] RUN apt-get update &&     apt-get install -y --no-install-recommends     tini     ca-certificates &&     apt-get clean &&     rm -rf /var/lib/apt/lists/* 
pdf 2026-05-12T14:36:27.618608465Z โ”‚ INFO[0109] Found cached layer, extracting to filesystem 
pdf 2026-05-12T14:36:28.319411115Z โ”‚ INFO[0110] RUN useradd -u 1000 -m -s /bin/bash appuser  
pdf 2026-05-12T14:36:28.319467027Z โ”‚ INFO[0110] Found cached layer, extracting to filesystem 
pdf 2026-05-12T14:36:28.458010160Z โ”‚ INFO[0110] WORKDIR /app                                 
pdf 2026-05-12T14:36:28.458039396Z โ”‚ INFO[0110] Cmd: workdir                                 
pdf 2026-05-12T14:36:28.458042131Z โ”‚ INFO[0110] Changed working directory to /app            
pdf 2026-05-12T14:36:28.458044614Z โ”‚ INFO[0110] Creating directory /app with uid -1 and gid -1 
pdf 2026-05-12T14:36:28.458058048Z โ”‚ INFO[0110] Taking snapshot of files...                  
pdf 2026-05-12T14:36:28.489195864Z โ”‚ INFO[0110] COPY --from=builder /app/dist/server /app/server 
pdf 2026-05-12T14:36:28.500072444Z โ”‚ INFO[0110] Taking snapshot of files...                  
pdf 2026-05-12T14:36:28.780721656Z โ”‚ INFO[0110] RUN mkdir -p /app/.pdfcpu                    
pdf 2026-05-12T14:36:28.835479946Z โ”‚ INFO[0110] Cmd: /bin/sh                                 
pdf 2026-05-12T14:36:28.835502571Z โ”‚ INFO[0110] Args: [-c mkdir -p /app/.pdfcpu]             
pdf 2026-05-12T14:36:28.835504766Z โ”‚ INFO[0110] Running: [/bin/sh -c mkdir -p /app/.pdfcpu]  
pdf 2026-05-12T14:36:28.885990769Z โ”‚ INFO[0110] Taking snapshot of files...                  
pdf 2026-05-12T14:36:28.894670559Z โ”‚ INFO[0110] Pushing layer <registry-uri-10> to cache now 
pdf 2026-05-12T14:36:28.895062854Z โ”‚ INFO[0110] Pushing image to <registry-uri-11> 
pdf 2026-05-12T14:36:28.895394253Z โ”‚ INFO[0110] RUN chown -R appuser:nogroup /app            
pdf 2026-05-12T14:36:28.943117145Z โ”‚ INFO[0110] Cmd: /bin/sh                                 
pdf 2026-05-12T14:36:28.943386652Z โ”‚ INFO[0110] Args: [-c chown -R appuser:nogroup /app]     
pdf 2026-05-12T14:36:28.943826065Z โ”‚ INFO[0110] Running: [/bin/sh -c chown -R appuser:nogroup /app] 
pdf 2026-05-12T14:36:28.996133518Z โ”‚ INFO[0110] Taking snapshot of files...                  
pdf 2026-05-12T14:36:29.293337902Z โ”‚ INFO[0110] Pushing layer <registry-uri-12> to cache now 
pdf 2026-05-12T14:36:29.293363214Z โ”‚ INFO[0110] Pushing image to <registry-uri-13> 
pdf 2026-05-12T14:36:29.306760398Z โ”‚ INFO[0111] USER appuser                                 
pdf 2026-05-12T14:36:29.306783338Z โ”‚ INFO[0111] Cmd: USER                                    
pdf 2026-05-12T14:36:29.307952655Z โ”‚ INFO[0111] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:36:29.307959032Z โ”‚ INFO[0111] ENV PDFCPU_CONF_DIR=/app/.pdfcpu             
pdf 2026-05-12T14:36:29.307961078Z โ”‚ INFO[0111] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:36:29.307962853Z โ”‚ INFO[0111] EXPOSE 8080 8443                             
pdf 2026-05-12T14:36:29.307964912Z โ”‚ INFO[0111] Cmd: EXPOSE                                  
pdf 2026-05-12T14:36:29.307966572Z โ”‚ INFO[0111] Adding exposed port: 8080/tcp                
pdf 2026-05-12T14:36:29.307968192Z โ”‚ INFO[0111] Adding exposed port: 8443/tcp                
pdf 2026-05-12T14:36:29.308216159Z โ”‚ INFO[0111] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:36:29.308219521Z โ”‚ INFO[0111] ENTRYPOINT ["tini", "--", "/app/server"]     
pdf 2026-05-12T14:36:29.308222597Z โ”‚ INFO[0111] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:36:29.308224423Z โ”‚ INFO[0111] CMD ["--env=prd"]                            
pdf 2026-05-12T14:36:29.308226236Z โ”‚ INFO[0111] No files changed in this command, skipping snapshotting. 
pdf 2026-05-12T14:36:29.563572936Z โ”‚ INFO[0111] Pushed <registry-uri-14> 
pdf 2026-05-12T14:36:30.290903264Z โ”‚ INFO[0111] Pushed <registry-uri-15> 
pdf 2026-05-12T14:36:30.291416187Z โ”‚ INFO[0111] Pushing image to <image-16> 
pdf 2026-05-12T14:36:31.389936427Z โ”‚ INFO[0113] Pushed <registry-uri-17> 
pdf 2026-05-12T14:36:31.425621531Z โ”‚ 
pdf 2026-05-12T14:36:31.561515261Z โ”‚  โœ” built and uploaded app container image to DOCR
pdf 2026-05-12T14:36:31.563480198Z โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ผ
pdf 2026-05-12T14:36:31.563487000Z 
pdf 2026-05-12T14:36:31.569729708Z  โœ”  build complete 
pdf 2026-05-12T14:36:31.569745709Z