You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 505790e
Browse filesBrowse the repository at this point in the historyBrowse files
constresponse=awaitreadGitHub('scheduled CI runs',()=>github.rest.actions.listWorkflowRuns({
146
+
constresponse=awaitreadGitHub(`${ciRunKind} CI runs`,()=>github.rest.actions.listWorkflowRuns({
145
147
owner,
146
148
repo,
147
149
workflow_id: 'ci.yml',
148
-
event: 'schedule',
150
+
event: deploymentEvent,
149
151
branch: 'main',
150
152
per_page: 100,
151
153
}));
@@ -155,7 +157,7 @@ async function waitForDailyCI({
155
157
}
156
158
157
159
constmatchingRuns=workflowRuns.filter((run)=>(
158
-
run?.event==='schedule'
160
+
run?.event===deploymentEvent
159
161
&&run.head_branch==='main'
160
162
&&run.head_sha===expectedSha
161
163
&&repositoryMatches(run,expectedFullName)
@@ -167,15 +169,15 @@ async function waitForDailyCI({
167
169
));
168
170
if(unsuccessfulRun){
169
171
thrownewError(
170
-
`Scheduled CI run ${unsuccessfulRun.id} completed with conclusion ${unsuccessfulRun.conclusion??'unknown'}; refusing deployment`,
172
+
`${ciRunKind[0].toUpperCase()}${ciRunKind.slice(1)} CI run ${unsuccessfulRun.id} completed with conclusion ${unsuccessfulRun.conclusion??'unknown'}; refusing deployment`,
Copy file name to clipboardExpand all lines: README.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
A responsive Linux-terminal-themed portfolio for Joshua Terk, Senior Software Engineer. The site presents his work, writing, technology interests, and automotive projects through a custom React terminal backed by Spring Boot APIs.
4
4
5
-
The [maintenance audit](docs/maintenance-audit-2026-09-28.md) records the code review, dependency updates, and verification evidence. The [October 8 checkpoint](docs/maintenance-checkpoint-2026-10-08.md) records current release verification and the scheduled-publication retry fix. Current source navigation and build instructions follow.
5
+
The [maintenance audit](docs/maintenance-audit-2026-09-28.md) records the code reviewand dependency updates. The [October 8 checkpoint](docs/maintenance-checkpoint-2026-10-08.md) records current release verification, and the [daily deploy gate repair](docs/daily-deploy-gate-repair-2026-10-08.md) describes transient API retries and the manual validation route. Current source navigation and build instructions follow.
6
6
7
7
## Requirements
8
8
@@ -43,7 +43,7 @@ Vite serves the development UI on port 3000. `npm run build` runs TypeScript che
43
43
44
44
## CI and containers
45
45
46
-
[CI](.github/workflows/ci.yml) and [deployment configuration](.github/workflows/deploy.yml) contain the automated build and image-publication rules. See the [maintenance audit](docs/maintenance-audit-2026-09-28.md) for the private-runner contract, validation evidence, and activation boundaries.
46
+
[CI](.github/workflows/ci.yml) and [deployment configuration](.github/workflows/deploy.yml) contain the automated build and image-publication rules. See the [maintenance audit](docs/maintenance-audit-2026-09-28.md) for the private-runner contract, validation evidence, and activation boundaries, and the [daily deploy gate repair](docs/daily-deploy-gate-repair-2026-10-08.md) for transient API retry and manual validation behavior.
47
47
48
48
The [Dockerfile](Dockerfile) tests and builds with Java 25 and Node 26, then uses `jdeps` and `jlink` to create the Java runtime. The final Alpine image contains the application and linked runtime, runs as UID/GID 1001, and excludes Maven, Node, Java compiler tools, and source resources outside the JAR. CI boots that image, exercises PDF/content/UI routes, and scans its filesystem with Trivy before image publication. Any reported OS or Java-library vulnerability fails the scan; the scan uses current advisory data rather than guaranteeing future vulnerability absence.
Scheduled production deployment run [37801492760](https://github.com/javaDevJT/website/actions/runs/37801492760) at `4e71d679a5e8cd62d41ddb1725f259002bf5bb76` failed in “Require successful daily CI for scheduled publication.” GitHub's Actions API request raised a transient DNS error (`getaddrinfo EAI_AGAIN api.github.com`). The deployment correctly stopped before build and publication. The same-commit scheduled CI run [37801518895](https://github.com/javaDevJT/website/actions/runs/37801518895), attempt 2, subsequently passed; it did not turn the already failed deployment into a publication.
6
+
7
+
## Repair
8
+
9
+
The deployment gate retries temporary DNS/socket errors and HTTP 500, 502, 503, and 504 responses within the existing 20-minute CI wait deadline, using bounded 20-second waits. It propagates permanent errors immediately. It still rejects failed matching CI and requires the deploy run and CI run to share the same repository, `main` branch, full commit SHA, and Detroit calendar day.
10
+
11
+
The deployment workflow also has a manual validation route on `main`. A manual deploy must find a successful same-day `workflow_dispatch` CI run for the identical repository, branch, and SHA. The workflow keeps both current-main checks and the vulnerability scan before publishing release tags. Manual validation does not emulate a schedule event.
12
+
13
+
The CI workflow runs the helper's Node tests using its already pinned `actions/github-script` runtime. The test cases cover transient recovery and exhaustion, immediate failure for permanent errors, same-commit identity, failed CI, Detroit-day boundaries, and manual-event identity and branch checks.
14
+
15
+
## Validation
16
+
17
+
- Local focused test command: `node --test .github/scripts/wait-for-daily-ci.test.cjs` — 11 tests passed after adding manual-event identity coverage.
18
+
- Workflow checks and a fresh Actions run at the repaired source: recorded after remote validation.
19
+
- Publication or remaining blocker: recorded after the repaired-source deploy validation.
0 commit comments