2025-03-11 - 2026-03-11
Overview
1 Release published by 1 user
Published
1.0.0
MVP
51 Pull requests merged by 2 users
Merged
#164 feat: add webhook event history UI page
Merged
#159 fix: add missing Makefile targets (docker, hooks) and test timeout
Merged
#160 fix: pass notification settings from create form to service
Merged
#155 chore: add REPO_POLICIES compliance files
Merged
#154 fix: add COPY --from=lint to builder stage to force lint execution
Merged
#149 fix: change module path to sneak.berlin/go/upaas (closes #143)
Merged
#152 Split Dockerfile into lint + build stages for faster CI feedback
Merged
#148 tidy
Merged
#147 Fix dashboard CSRFField crash (closes #146)
Merged
#131 fix: simplify CI to docker build only (closes #130)
Merged
#126 Fix 1.0 audit bugs (closes #120, closes #121, closes #122, closes #123, closes #124, closes #125)
Merged
#129 Refactor: break up app.js into smaller modules
Merged
#127 fix: use imageID in createAndStartContainer (closes #124)
Merged
#119 fix: pin all external refs to cryptographic identity (closes #118)
Merged
#115 fix: disable API v1 write methods (closes #112)
Merged
#109 fix: resolve 1.0 audit bugs (closes #104, #105, #106, #107, #108)
Merged
#100 ci: add Gitea Actions workflow for make check (closes #96)
Merged
#95 chore: code cleanup and best practices (closes #45)
Merged
#91 fix: validate repo URL format on app creation (closes #88)
Merged
#102 Fix all main branch lint issues (closes #101)
Merged
#99 revert: undo PR #98 (CI + linter config changes)
Merged
#98 feat: add Gitea Actions CI for make check (closes #96)
Merged
#93 fix: clean up orphan resources on deploy cancellation (closes #89)
Merged
#92 fix: restrict CORS to configured origins (closes #40)
Merged
#74 feat: add JSON API with token auth (closes #69)
Merged
#65 chore: remove TODO.md — all items tracked as Gitea issues
Merged
#77 feat: edit existing env vars, labels, and volume mounts (closes #67)
Merged
#55 Update TODO.md with current status (closes #54)
Merged
#75 feat: deployment rollback to previous image (closes #71)
Merged
#73 feat: add user-facing deployment cancel endpoint (closes #66)
Merged
#52 fix: cancel in-progress deploy when webhook triggers new deploy (closes #38)
Merged
#51 Fix all golangci-lint issues (closes #32)
Merged
#50 fix: set DestroySession MaxAge to -1 instead of -1*time.Second (closes #39)
Merged
#49 Add server-side app name validation (closes #37)
Merged
#48 fix: buffer template execution to prevent corrupt HTML responses (closes #42)
Merged
#46 perf: adaptive frontend polling intervals (closes #43)
Merged
#47 fix: only trust proxy headers from RFC1918/loopback sources (closes #44)
Merged
#34 Fix all golangci-lint issues (closes #32)
Merged
#33 fix: validate and clamp container log tail parameter (closes #24)
Merged
#31 fix: prevent setup endpoint race condition (closes #26)
Merged
#29 Fix command injection in git clone arguments (closes #18)
Merged
#30 fix: validate port range 1-65535 in parsePortValues (closes #25)
Merged
#9 Wait for final log flush before closing deploymentLogWriter (closes #4)
Merged
#14 Add rate limiting to login endpoint to prevent brute force (closes #12)
Merged
#28 Add ownership verification on resource deletion (closes #19)
Merged
#10 Set Secure flag on session cookie in production mode (closes #5)
Merged
#7 Clean up Docker container when deleting an app (closes #2)
Merged
#6 Limit webhook request body size to 1MB to prevent DoS (closes #1)
Merged
#15 Use hashed webhook secrets for constant-time comparison (closes #13)
Merged
#16 Add CSRF protection to state-changing POST endpoints (closes #11)
Merged
#27 rewrite log viewer panes (closes #17)
1 Pull request proposed by 1 user
Proposed
#158 feat: monolithic env var editing with bulk save
93 Issues closed from 2 users
Closed
#85 FEATURE: Webhook event history UI
Closed
#136 Makefile missing required targets: fmt-check, docker, hooks
Closed
#137 make test missing 30-second timeout
Closed
#157 bug: app slack/ntfy settings are not saved or properly displayed on edit
Closed
#132 Missing .gitignore file
Closed
#133 Missing .editorconfig file
Closed
#134 Missing REPO_POLICIES.md
Closed
#135 Missing .dockerignore file
Closed
#153 Dockerfile lint stage is skipped by BuildKit (unreferenced stage)
Closed
#151 Split Dockerfile into lint + build stages for faster CI feedback
Closed
#145 POLICY: make fmt uses npx instead of yarn for prettier
Closed
#144 POLICY: make test missing 30-second timeout
Closed
#143 POLICY: Go module path should be sneak.berlin/go/upaas
Closed
#142 POLICY: Makefile missing required targets (fmt-check, docker, hooks)
Closed
#141 POLICY: Missing REPO_POLICIES.md in repo root
Closed
#140 POLICY: Missing .dockerignore
Closed
#139 POLICY: Missing .editorconfig
Closed
#138 POLICY: Missing .gitignore
Closed
#86 FEATURE: Settings page (webhook secret, SSH public key)
Closed
#146 CRITICAL: error in template prevents login
Closed
#130 the gitea action doesn't comply with repo policies.
Closed
#125 LOW: applyMigration deferred rollback skipped when Commit() fails
Closed
#123 LOW: GetBuildDir parameter named appID but always called with app.Name
Closed
#122 HIGH: No size limit on deployment logs stored in SQLite
Closed
#121 HIGH: Template rendering bypass in HandleAppCreate/HandleAppUpdate can produce partial HTML
Closed
#120 CRITICAL: docker-compose.yml missing HOST_DATA_DIR — git clone fails in containerized deployment
Closed
#128 Refactor: break up app.js into smaller modules
Closed
#124 LOW: createAndStartContainer has unused imageID parameter
Closed
#118 CRITICAL: rce in docker build
Closed
#112 CRITICAL: API v1 routes use cookie auth without CSRF protection — cross-site request forgery
Closed
#110 CRITICAL: Deployed containers have no security constraints (capabilities, seccomp, resource limits)
Closed
#111 CRITICAL: Volume mounts allow access to any host path (Docker socket, /etc/shadow, etc.)
Closed
#114 CRITICAL: API exposes webhook secret and SSH private key in app detail response
Closed
#113 CRITICAL: Port mappings bind to 0.0.0.0 with no restriction on privileged ports or conflicts
Closed
#108 BUG: SetupRequired middleware blocks /health, /s/*, and /api/* before initial setup
Closed
#107 BUG: HandleVolumeAdd missing path validation — path traversal possible on volume creation
Closed
#106 BUG: API delete endpoint does not stop/remove Docker container — orphaned containers
Closed
#105 BUG: API deploy handler uses request context — deployment cancelled on client disconnect
Closed
#104 BUG: HandleEnvVarDelete uses wrong route parameter name — env var deletion always 404s
Closed
#103 Add branch protection to main branch
Closed
#96 needs actions for code standard checks
Closed
#45 Code cleanup: minor best practice improvements for 1.0
Closed
#88 1.0: Validate repo URL format on app creation
Closed
#87 1.0: API token authentication (bearer token support)
Closed
#101 CRITICAL: main branch build failure
Closed
#89 1.0: Cancelled deployments may leave orphan Docker resources
Closed
#40 SECURITY: CORS allows all origins (*) — review for CSRF implications
Closed
#82 FEATURE: Multi-user support with roles
Closed
#83 FEATURE: Scheduled deployments
Closed
#90 1.0: Improve test coverage for HTTP handlers
Closed
#64 Observability improvements (structured logging, metrics, audit log)
Closed
#63 Multi-user support with roles
Closed
#61 GitHub/GitLab webhook support
Closed
#60 Webhook event history UI
Closed
#59 Resource limits - CPU/memory (Phase 4.2)
Closed
#58 Deployment rollback (Phase 3.2)
Closed
#62 Real-time deployment log streaming (WebSocket/SSE)
Closed
#57 Edit existing env vars, labels, and volumes (Phase 3.1)
Closed
#56 JSON API (Phase 4.1)
Closed
#69 FEATURE: JSON API (/api/v1)
Closed
#67 FEATURE: Edit existing env vars, labels, and volume mounts
Closed
#54 update TODO.md
Closed
#71 FEATURE: Deployment rollback
Closed
#70 FEATURE: Real-time deployment log streaming (WebSocket/SSE)
Closed
#66 FEATURE: User-facing deployment cancellation endpoint
Closed
#38 BUG: Race condition between manual deploy and webhook deploy on same app
Closed
#39 BUG: DestroySession sets MaxAge to -1 second instead of -1
Closed
#35 SECURITY: No validation on volume host paths allows arbitrary filesystem access
Closed
#37 BUG: App name not validated server-side, only client-side HTML pattern
Closed
#42 BUG: Template execution errors result in corrupt HTML responses
Closed
#43 PERF: Frontend polls 4 endpoints every 1 second regardless of deployment state
Closed
#44 SECURITY: realIP trusts X-Forwarded-For/X-Real-IP headers unconditionally
Closed
#41 SECURITY: Error messages from Go errors displayed unescaped could leak internals
Closed
#36 SECURITY: Webhook secret exposed in plain text in app detail page and request logs
Closed
#32 Fix all golangci-lint issues
Closed
#24 LOW: Container log tail parameter not validated — passed directly to Docker API
Closed
#26 MEDIUM: Setup endpoint race condition — multiple admin users can be created
Closed
#18 CRITICAL: Command injection via branch/repoURL/commitSHA in git clone
Closed
#25 MEDIUM: Port validation allows ports above 65535
Closed
#22 MEDIUM: Session cookie missing Secure flag — transmitted over HTTP
Closed
#23 MEDIUM: deploymentLogWriter.Close() doesn't wait for flush goroutine — data loss
Closed
#21 MEDIUM: Unbounded request body read in webhook handler — denial of service
Closed
#4 Bug: deploymentLogWriter.Close() does not wait for final flush to complete
Closed
#3 Bug: EnvVar/Label/Volume/Port deletion does not verify resource belongs to the app in URL (IDOR)
Closed
#12 Bug: No rate limiting on login endpoint allows brute force
Closed
#19 HIGH: Missing ownership verification on env var, label, volume, and port deletion
Closed
#5 Bug: Session cookie missing Secure flag, sent over HTTP in production
Closed
#2 Bug: Deleting an app does not stop/remove its Docker container
Closed
#1 Bug: Webhook endpoint reads request body without size limit (DoS vector)
Closed
#13 Bug: Webhook secret lookup via SQL is not constant-time (timing side-channel)
Closed
#11 Bug: No CSRF protection on state-changing POST endpoints
Closed
#17 Log viewer panes are not scrollable and build log does not auto-scroll
Closed
#20 HIGH: Arbitrary host path mount via volume add — no path validation
102 Issues created by 2 users
Opened
#1 Bug: Webhook endpoint reads request body without size limit (DoS vector)
Opened
#2 Bug: Deleting an app does not stop/remove its Docker container
Opened
#3 Bug: EnvVar/Label/Volume/Port deletion does not verify resource belongs to the app in URL (IDOR)
Opened
#4 Bug: deploymentLogWriter.Close() does not wait for final flush to complete
Opened
#5 Bug: Session cookie missing Secure flag, sent over HTTP in production
Opened
#11 Bug: No CSRF protection on state-changing POST endpoints
Opened
#12 Bug: No rate limiting on login endpoint allows brute force
Opened
#13 Bug: Webhook secret lookup via SQL is not constant-time (timing side-channel)
Opened
#17 Log viewer panes are not scrollable and build log does not auto-scroll
Opened
#18 CRITICAL: Command injection via branch/repoURL/commitSHA in git clone
Opened
#19 HIGH: Missing ownership verification on env var, label, volume, and port deletion
Opened
#20 HIGH: Arbitrary host path mount via volume add — no path validation
Opened
#21 MEDIUM: Unbounded request body read in webhook handler — denial of service
Opened
#22 MEDIUM: Session cookie missing Secure flag — transmitted over HTTP
Opened
#23 MEDIUM: deploymentLogWriter.Close() doesn't wait for flush goroutine — data loss
Opened
#24 LOW: Container log tail parameter not validated — passed directly to Docker API
Opened
#25 MEDIUM: Port validation allows ports above 65535
Opened
#26 MEDIUM: Setup endpoint race condition — multiple admin users can be created
Opened
#32 Fix all golangci-lint issues
Opened
#35 SECURITY: No validation on volume host paths allows arbitrary filesystem access
Opened
#36 SECURITY: Webhook secret exposed in plain text in app detail page and request logs
Opened
#37 BUG: App name not validated server-side, only client-side HTML pattern
Opened
#38 BUG: Race condition between manual deploy and webhook deploy on same app
Opened
#39 BUG: DestroySession sets MaxAge to -1 second instead of -1
Opened
#40 SECURITY: CORS allows all origins (*) — review for CSRF implications
Opened
#41 SECURITY: Error messages from Go errors displayed unescaped could leak internals
Opened
#42 BUG: Template execution errors result in corrupt HTML responses
Opened
#43 PERF: Frontend polls 4 endpoints every 1 second regardless of deployment state
Opened
#44 SECURITY: realIP trusts X-Forwarded-For/X-Real-IP headers unconditionally
Opened
#45 Code cleanup: minor best practice improvements for 1.0
Opened
#54 update TODO.md
Opened
#56 JSON API (Phase 4.1)
Opened
#57 Edit existing env vars, labels, and volumes (Phase 3.1)
Opened
#58 Deployment rollback (Phase 3.2)
Opened
#59 Resource limits - CPU/memory (Phase 4.2)
Opened
#60 Webhook event history UI
Opened
#61 GitHub/GitLab webhook support
Opened
#62 Real-time deployment log streaming (WebSocket/SSE)
Opened
#63 Multi-user support with roles
Opened
#64 Observability improvements (structured logging, metrics, audit log)
Opened
#66 FEATURE: User-facing deployment cancellation endpoint
Opened
#67 FEATURE: Edit existing env vars, labels, and volume mounts
Opened
#68 FEATURE: GitHub and GitLab webhook support
Opened
#69 FEATURE: JSON API (/api/v1)
Opened
#70 FEATURE: Real-time deployment log streaming (WebSocket/SSE)
Opened
#71 FEATURE: Deployment rollback
Opened
#72 FEATURE: CPU/memory resource limits per app
Opened
#79 FEATURE: Backup/restore of app configurations
Opened
#80 FEATURE: Private Docker registry authentication
Opened
#81 FEATURE: Custom health check commands per app
Opened
#82 FEATURE: Multi-user support with roles
Opened
#83 FEATURE: Scheduled deployments
Opened
#84 FEATURE: Observability improvements (structured logging, metrics, audit log)
Opened
#85 FEATURE: Webhook event history UI
Opened
#86 FEATURE: Settings page (webhook secret, SSH public key)
Opened
#87 1.0: API token authentication (bearer token support)
Opened
#88 1.0: Validate repo URL format on app creation
Opened
#89 1.0: Cancelled deployments may leave orphan Docker resources
Opened
#90 1.0: Improve test coverage for HTTP handlers
Opened
#96 needs actions for code standard checks
Opened
#101 CRITICAL: main branch build failure
Opened
#103 Add branch protection to main branch
Opened
#104 BUG: HandleEnvVarDelete uses wrong route parameter name — env var deletion always 404s
Opened
#105 BUG: API deploy handler uses request context — deployment cancelled on client disconnect
Opened
#106 BUG: API delete endpoint does not stop/remove Docker container — orphaned containers
Opened
#107 BUG: HandleVolumeAdd missing path validation — path traversal possible on volume creation
Opened
#108 BUG: SetupRequired middleware blocks /health, /s/*, and /api/* before initial setup
Opened
#110 CRITICAL: Deployed containers have no security constraints (capabilities, seccomp, resource limits)
Opened
#111 CRITICAL: Volume mounts allow access to any host path (Docker socket, /etc/shadow, etc.)
Opened
#112 CRITICAL: API v1 routes use cookie auth without CSRF protection — cross-site request forgery
Opened
#113 CRITICAL: Port mappings bind to 0.0.0.0 with no restriction on privileged ports or conflicts
Opened
#114 CRITICAL: API exposes webhook secret and SSH private key in app detail response
Opened
#118 CRITICAL: rce in docker build
Opened
#120 CRITICAL: docker-compose.yml missing HOST_DATA_DIR — git clone fails in containerized deployment
Opened
#121 HIGH: Template rendering bypass in HandleAppCreate/HandleAppUpdate can produce partial HTML
Opened
#122 HIGH: No size limit on deployment logs stored in SQLite
Opened
#123 LOW: GetBuildDir parameter named appID but always called with app.Name
Opened
#124 LOW: createAndStartContainer has unused imageID parameter
Opened
#125 LOW: applyMigration deferred rollback skipped when Commit() fails
Opened
#128 Refactor: break up app.js into smaller modules
Opened
#130 the gitea action doesn't comply with repo policies.
Opened
#132 Missing .gitignore file
Opened
#133 Missing .editorconfig file
Opened
#134 Missing REPO_POLICIES.md
Opened
#135 Missing .dockerignore file
Opened
#136 Makefile missing required targets: fmt-check, docker, hooks
Opened
#137 make test missing 30-second timeout
Opened
#138 POLICY: Missing .gitignore
Opened
#139 POLICY: Missing .editorconfig
Opened
#140 POLICY: Missing .dockerignore
Opened
#141 POLICY: Missing REPO_POLICIES.md in repo root
Opened
#142 POLICY: Makefile missing required targets (fmt-check, docker, hooks)
Opened
#143 POLICY: Go module path should be sneak.berlin/go/upaas
Opened
#144 POLICY: make test missing 30-second timeout
Opened
#145 POLICY: make fmt uses npx instead of yarn for prettier
Opened
#146 CRITICAL: error in template prevents login
Opened
#151 Split Dockerfile into lint + build stages for faster CI feedback
Opened
#153 Dockerfile lint stage is skipped by BuildKit (unreferenced stage)
Opened
#156 getting a 404 trying to change env vars from app page
Opened
#157 bug: app slack/ntfy settings are not saved or properly displayed on edit
Opened
#161 Run make fmt on JS static files
Opened
#163 Redesign env var editing to use monolithic list approach