mirror of
https://github.com/arsvendg/Stirling-PDF.git
synced 2026-07-14 10:34:06 +02:00
## Summary
`#6145` (port picker) and `#6244` (gradle unification) combined to break
`task dev` / `task dev:all` on Windows. Two independent regressions,
both addressed here.
### 1. `find-free-port.ps1` panic (`#6145`)
```
$ task --dry dev
The argument 'scriptsfind-free-port.ps1' to the -File parameter does not exist.
panic: ended up with a non-nil exitStatus.err but a zero exitStatus.code
```
- **Backslash stripped.** `Taskfile.yml` had
`scripts\find-free-port.ps1`. go-task pipes the `sh:` block through
mvdan/sh, which treats `\` as a POSIX escape and silently drops it,
leaving `scriptsfind-free-port.ps1`. PowerShell can't find the file,
exits non-zero, mvdan/sh panics on the inconsistent exit status.
Switched to a forward slash.
- **`-Preferred 8080,5173` is brittle.** Relies on PowerShell parsing
the comma-list into `[int[]]`. Dropped the named flag; switched the
script's `param` to `[Parameter(ValueFromRemainingArguments =
$true)][int[]]$Preferred`; pass each port as its own positional token
(matching how the bash variant is called).
### 2. `bash gradlew` can't find Java on Windows (`#6244`)
```
[backend:dev] ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
```
`#6244` unified all gradle invocations under `bash gradlew` on the
assumption that Git-Bash inherits Windows-side env. It doesn't (and
neither does WSL bash, which can also shadow `bash` on a developer's
PATH). The standard Adoptium/Temurin installer sets `JAVA_HOME` in the
Windows env only, so `bash gradlew` fails before Spring Boot even loads.
Restored the per-platform branch for every backend task: `cmd /c
".\gradlew.bat ..."` on Windows, `./gradlew ...` on Linux/macOS. Two
Windows-specific gotchas to be aware of for future edits:
- mvdan/sh strips `\` outside of double quotes, so `cmd /c
.\gradlew.bat` ends up as `.gradlew.bat`. The entire payload must be
wrapped in double quotes (`cmd /c "..."`).
- Modern Windows excludes cwd from cmd.exe's search path, so the leading
`.\` is required — bare `cmd /c gradlew.bat` errors with "is not
recognized" even from the repo root.
## Test plan
- [x] `task --dry dev` / `task --dry dev:all` on Windows resolve ports
cleanly and dispatch the inner tasks
- [x] `powershell -NoProfile -File scripts/find-free-port.ps1 8080 5173
5001` prints three ports
- [x] `task backend:dev PORT=8081` on Windows starts Spring Boot in ~9s;
`/api/v1/info/status` returns `{"status":"UP"}`
- [x] `task dev:all` on Windows brings up all three services healthy:
backend `/api/v1/info/status` 200, engine `/health` 200, frontend `/`
200
- [ ] Linux / macOS path unaffected (only the Windows branches changed
in behaviour)
147 lines
4.6 KiB
YAML
147 lines
4.6 KiB
YAML
version: '3'
|
|
|
|
# Gradle invocation strategy:
|
|
# - Linux/macOS: `./gradlew` runs the POSIX shell wrapper natively.
|
|
# - Windows: `cmd /c ".\gradlew.bat ..."` invokes the .bat wrapper through
|
|
# cmd.exe so it inherits the user's Windows-side `JAVA_HOME`
|
|
# and PATH. Routing through `bash gradlew` on Windows ends up
|
|
# under WSL or Git-Bash, neither of which inherits
|
|
# Adoptium/Temurin's default Windows-only Java env - gradlew
|
|
# then errors with "JAVA_HOME is not set and no 'java' command
|
|
# could be found".
|
|
#
|
|
# The entire `.\gradlew.bat ...` payload is double-quoted so
|
|
# the leading `.\` survives mvdan/sh's POSIX backslash
|
|
# stripping; cmd.exe also requires `.\` (not bare `gradlew.bat`)
|
|
# because modern Windows excludes cwd from cmd's search path.
|
|
|
|
tasks:
|
|
dev:
|
|
desc: "Start backend dev server"
|
|
ignore_error: true
|
|
vars:
|
|
PORT: '{{.PORT | default "8080"}}'
|
|
AIENGINE_URL: '{{.AIENGINE_URL | default ""}}'
|
|
env:
|
|
SERVER_PORT: '{{.PORT}}'
|
|
cmds:
|
|
- cmd: '{{if .AIENGINE_URL}}AIENGINE_URL={{.AIENGINE_URL}} AIENGINE_ENABLED=true {{end}}cmd /c ".\gradlew.bat :stirling-pdf:bootRun"'
|
|
platforms: [windows]
|
|
- cmd: '{{if .AIENGINE_URL}}AIENGINE_URL={{.AIENGINE_URL}} AIENGINE_ENABLED=true {{end}}./gradlew :stirling-pdf:bootRun'
|
|
platforms: [linux, darwin]
|
|
|
|
dev:bundled:
|
|
desc: "Clean + bootRun with frontend bundled into the backend (single :8080 server)"
|
|
ignore_error: true
|
|
cmds:
|
|
- cmd: cmd /c ".\gradlew.bat clean bootRun -PbuildWithFrontend=true"
|
|
platforms: [windows]
|
|
- cmd: ./gradlew clean bootRun -PbuildWithFrontend=true
|
|
platforms: [linux, darwin]
|
|
|
|
build:
|
|
desc: "Full backend build"
|
|
cmds:
|
|
- cmd: cmd /c ".\gradlew.bat clean build"
|
|
platforms: [windows]
|
|
- cmd: ./gradlew clean build
|
|
platforms: [linux, darwin]
|
|
|
|
build:fast:
|
|
desc: "Build without tests"
|
|
cmds:
|
|
- cmd: cmd /c ".\gradlew.bat clean build -x test"
|
|
platforms: [windows]
|
|
- cmd: ./gradlew clean build -x test
|
|
platforms: [linux, darwin]
|
|
|
|
build:ci:
|
|
desc: "Build for CI (formatting checked separately)"
|
|
cmds:
|
|
- cmd: cmd /c ".\gradlew.bat build -PnoSpotless"
|
|
platforms: [windows]
|
|
- cmd: ./gradlew build -PnoSpotless
|
|
platforms: [linux, darwin]
|
|
|
|
test:
|
|
desc: "Run backend tests"
|
|
cmds:
|
|
- cmd: cmd /c ".\gradlew.bat test"
|
|
platforms: [windows]
|
|
- cmd: ./gradlew test
|
|
platforms: [linux, darwin]
|
|
|
|
format:
|
|
desc: "Auto-fix code formatting"
|
|
cmds:
|
|
- cmd: cmd /c ".\gradlew.bat spotlessApply"
|
|
platforms: [windows]
|
|
- cmd: ./gradlew spotlessApply
|
|
platforms: [linux, darwin]
|
|
|
|
format:check:
|
|
desc: "Check code formatting"
|
|
cmds:
|
|
- cmd: cmd /c ".\gradlew.bat spotlessCheck"
|
|
platforms: [windows]
|
|
- cmd: ./gradlew spotlessCheck
|
|
platforms: [linux, darwin]
|
|
|
|
fix:
|
|
desc: "Auto-fix backend"
|
|
cmds:
|
|
- task: format
|
|
|
|
swagger:
|
|
desc: "Generate OpenAPI docs"
|
|
cmds:
|
|
- cmd: cmd /c ".\gradlew.bat :stirling-pdf:copySwaggerDoc"
|
|
platforms: [windows]
|
|
- cmd: ./gradlew :stirling-pdf:copySwaggerDoc
|
|
platforms: [linux, darwin]
|
|
sources:
|
|
- app/core/src/main/java/**/*.java
|
|
- app/proprietary/src/main/java/**/*.java
|
|
- app/common/src/main/java/**/*.java
|
|
generates:
|
|
- SwaggerDoc.json
|
|
|
|
check:
|
|
desc: "Backend quality gate"
|
|
cmds:
|
|
- task: format:check
|
|
- task: test
|
|
|
|
version:
|
|
desc: "Print project version"
|
|
silent: true
|
|
cmds:
|
|
- cmd: cmd /c ".\gradlew.bat printVersion --quiet" | tail -1
|
|
platforms: [windows]
|
|
- cmd: ./gradlew printVersion --quiet | tail -1
|
|
platforms: [linux, darwin]
|
|
|
|
licenses:check:
|
|
desc: "Check dependency licenses"
|
|
cmds:
|
|
- cmd: cmd /c ".\gradlew.bat checkLicense --no-parallel"
|
|
platforms: [windows]
|
|
- cmd: ./gradlew checkLicense --no-parallel
|
|
platforms: [linux, darwin]
|
|
|
|
licenses:generate:
|
|
desc: "Check and generate dependency license report"
|
|
cmds:
|
|
- cmd: cmd /c ".\gradlew.bat checkLicense generateLicenseReport --no-parallel"
|
|
platforms: [windows]
|
|
- cmd: ./gradlew checkLicense generateLicenseReport --no-parallel
|
|
platforms: [linux, darwin]
|
|
|
|
clean:
|
|
desc: "Clean build artifacts"
|
|
cmds:
|
|
- cmd: cmd /c ".\gradlew.bat clean"
|
|
platforms: [windows]
|
|
- cmd: ./gradlew clean
|
|
platforms: [linux, darwin]
|