Features
- Reverse proxy support — new
server.trusted_proxies(CIDR list) makes request logs and rate limiting use the real client IP fromX-Forwarded-Forwhen the request arrives through a trusted proxy. Without it, the direct connection IP is always used, so headers cannot be spoofed. - Rate limiting — opt-in per-IP request limiting via
server.rate_limit(disabled by default). Rejected requests get429 Too Many RequestswithRetry-AfterandX-RateLimit-*headers. - CORS control — restrict cross-origin access with
server.cors.allow_origins(defaults to*). - Debug request logging — every request (method, URI, status, latency,
remote_ip) is logged atlog_level: debug.
Fixes
- Slow SSE subscribers no longer stall everyone — the live event stream was rewritten without the
r3labs/ssedependency. Each subscriber gets its own buffer; a stalled reader is disconnected after a write timeout instead of blocking all live updates. - Job runs stay in sync between REST fetches and live SSE updates (run lists could previously diverge after a job finished).
- Invalid cron expressions are now reported — a job whose schedule fails to parse logs an error at startup instead of silently never running.
rcloneversion pinning works — a pinnedversionproducedapt-get install -y <version>(installing a package literally named after the version string); it now installsrclone=<version>.- Software install is Debian-only — non-Debian systems (including non-Debian Linux where apt/cleanup previously ran) are skipped safely.
- Unknown
/api/*routes return a JSON 404 instead of the SPA'sindex.html.
Internal
- Test coverage added: scheduler 0% → 100%, software 0% → 78%, plus regression tests for the Debian guard and SSE write timeouts.
- New e2e coverage: SSE broadcasting with concurrent subscribers, software install at startup (apt, skip-if-installed, upstream script paths), and observable version pinning via a pinned not-latest
appriserelease. - Dependencies: removed
r3labs/sse; updated Go and web dependencies; Cypress 16, Node 26, Go 1.27.1. - Docker Compose: Go module/build caches in named volumes for faster test cycles.
Upgrade notes
- Running behind a reverse proxy? Set
server.trusted_proxiesso logs and rate limiting see real client IPs. Default behavior is unchanged (XFF ignored). software:entries are now validated likejobs:— an entry missingnamefails config validation at startup instead of being silently skipped.
Changes in This Release
- [improve] Update Go dependencies (3fe0f55) by @flohoss
- [improve] Update web and e2e dependencies (e23841b) by @flohoss
- [meta] Bump pinned compose tool versions (651ac53) by @flohoss
- [meta] Cache Go modules and build output in docker volumes (5df7030) by @flohoss
- [fix] Prevent a slow SSE subscriber from blocking all live updates (0fb4378) by @flohoss
- [fix] Keep job runs in sync between REST and SSE updates (5dd9571) by @flohoss
- [feature] Make proxy, CORS and rate limiting configurable (8dac09d) by @flohoss
- [fix] Return JSON 404 for unknown API routes (92b8021) by @flohoss
- [improve] Add end-to-end coverage for the live event stream (aa35c3c) by @flohoss
- [docs] Document server proxy, CORS and rate limiting options (86b4d98) by @flohoss
- [docs] Allow short comments in tests (db6da2d) by @flohoss
- [docs] Test all packages in the documented test command (a1c0804) by @flohoss
- [fix] Surface cron parse errors instead of silently never scheduling (9fa48b8) by @flohoss
- [fix] Disconnect stalled SSE clients after a write timeout (b986f9e) by @flohoss
- [fix] Correct rclone version pins and the Debian-only install guard (75ec00b) by @flohoss
- [improve] Add e2e coverage for software install and version pinning (12edc53) by @flohoss
- [docs] Document interactive Cypress GUI workflow (5e50ca1) by @flohoss
- [docs] Sync features list and software install notes with v0.12 behavior (4d6489a) by @flohoss
Full Changelog: v0.11.0...v0.12.0
Docker Image
docker pull ghcr.io/flohoss/gocron:v0.12.0
docker pull ghcr.io/flohoss/gocron:latestBinary Downloads
Download one of the attached binaries extracted from the release image:
gocron_<version>_linux_amd64gocron_<version>_linux_arm64
Verify with ./gocron_<version>_linux_<arch> --version.
Image digest:
ghcr.io/flohoss/gocron:v0.12.0@sha256:660d850886468915b71248456c5ca90eba423907a530d0161606bccb058912a5
Build Information
- Version:
v0.12.0 - Build Time:
2026-09-26T02:54:16Z - Repository: https://github.com/flohoss/gocron
- Platform:
linux/amd64,linux/arm64 - Attestations: SLSA Provenance, SBOM