Repository navigation
Releases: clintjedwards/gofer
Releases · clintjedwards/gofer
Release list
v0.12.0
v0.12.0 (October 10, 2026)
NEW FEATURES:
- Config-driven extensions: Extensions are now declared in Gofer's server config via
[[extensions.install]]and described by a TOML manifest, so Gofer knows an extension's image, settings, and subscription params without running it. cron and interval ship as built-in default extensions, while github is installed via manifest URL. (bc2a26a), (a3c2b41) - Extension reload with plan/apply:
gofer extension reloadrereads the config and shows a per-extension plan (installs, image changes, setting changes, rotated secrets, disabled or removed extensions) before applying each change one at a time, with revert on failed starts and refusal to apply if anything changed since the plan was shown. (bc2a26a) - Secret references for extension settings: Settings marked secret only accept global secret references (e.g.
global_secret{{github-app-key}}), resolved at extension start, so nothing sensitive is stored raw in the registration. (bc2a26a) - New commands: Adds
gofer service start --config <path>,gofer extension manifestto convert a manifest into a ready-to-paste config block, and SDK manifest generation via<binary> manifest --image <image>. (bc2a26a), (a3c2b41) - Toggleable task attach: Task attach can now be turned off through the API config for operators who don't want it exposed. (2fa56e6)
IMPROVEMENTS:
- Docs always available: The
/infoendpoint is gone from both SDKs;gofer extension getnow shows full documentation from the manifest even for extensions that failed to start or have a bad config entry. (bc2a26a) - Docs consolidation: The JSON schema API page is now folded into the mdbook documentation for a single source of docs. (74e440d)
- Encryption key validation: Users are now alerted when the secrets encryption key is longer than 32 characters instead of failing obscurely. (ba7c590)
- Developer workflow: Added
make prep-releaseand moved development documentation intoDEVELOPMENT.md. (e6cc0c4)
BUG FIXES:
- Secret entry: Fixed several bugs in the CLI's secret entry flow, including handling of multiline values. (3b23e65), (bc2a26a)
ADDITIONAL NOTES:
- Breaking:
gofer extension install/uninstall/enable/disableand their API routes are removed; use the server config plusgofer extension reloadinstead. - Breaking:
extensions.install_std_extensionsis replaced by[[extensions.install]]. - Breaking: Extension settings now reach the container as
GOFER_EXTENSION_CONFIG_<KEY>; extensions must be rebuilt against the new SDK. - Breaking: SDK
Run/runnow take the extension's documentation and a constructor, andInfohas been removed from the extension interface. - Breaking: The github extension's
app_keyis now the raw PEM rather than base64. --include-secretis removed from extension routes since settings are no longer stored raw or redacted.- Removing an extension from the config stops it but preserves its subscriptions; use
gofer extension purgeto delete it permanently.
v0.11.0
v0.11.0 (October 07, 2026)
NEW FEATURES:
- Run debugging: New
gofer run debug <pipeline> <run>command surfaces everything needed to diagnose a failed run in one place: a per-task timeline split into wait vs. run time, a "what went wrong" section with failure reasons, exit codes, images, digests and the last few lines of output (--lines, default 10), skip-chain explanations, and follow-up hints pointing attask logsandtask attach. Image digests are now recorded so you always know which image actually ran. (d53b64d) - Grant-based permissions: Roles are no longer flat lists of resource strings. They now hold standalone grants split into namespace, extension, and global groups (similar to Nomad ACL policies), each matching a target plus a resource and action. Routes declare a single typed requirement, list routes filter results down to what the token can read, and the new types produce a usable OpenAPI schema. (13a6e4f), (db4604a), (a4ce2c3)
- Frontend refactor: Complete rework of the web UI, including a run details page with dependency graph, timeline, failure summary, tasks and variables; a front page with stat tiles, recent runs, failing pipelines, a 14-day activity chart and pipeline cards; and a cleaner shared header whose sign-in menu validates the token before saving it. (2048f01)
- Credential redaction: Extension settings and registry passwords now return as
[redacted]. Admins can reveal real values viainclude_secretorgofer extension get --include-secret. (2048f01) - Automatic extension installation: Gofer can now search for and install the extension version compatible with it. (37de6fb)
- Web sign-in from the CLI: New ability to launch and sign in to the web UI directly from the CLI. (fbe6fa3)
IMPROVEMENTS:
- More robust cron extension: Instead of naively sleeping between runs, the extension now sleeps until the start of the next minute, preventing drift and handling missed minutes and forward clock skips. (55f8d24)
- Clearer API errors: Requests now return explicit 404s when a parent namespace, pipeline, or run does not exist, and
is_valid_identifieris applied consistently across the API. (b60b095), (e306a25) - API additions: Pipeline list responses now include names and descriptions, and run lists support a
sincefilter. (2048f01) - CLI polish:
getsubcommands are more standardized andextension getnow shows the image. (fa7ef96), (2b9bb4b) - Local time in the frontend: The web UI now displays timestamps in local time by default. (7b4b02d)
- Docs: Demo updated to mp4 showing the new debug commands, refreshed demo gif, and a fixed broken anchor link in the extensions docs. (760af26), (bfa6930), (f37a7ca)
BUG FIXES:
- Websocket connections: Explicitly request HTTP/1 when opening websockets, fixing failed connection upgrades. (5a41c46)
- Task attach: Fixed sessions hanging, switched to raw terminal mode, and commands are now parsed like a shell. (bf1e2bc)
ADDITIONAL NOTES:
- Role definitions have changed format: flat resource lists are replaced by namespace, extension, and global grants. Existing roles will need to be re-expressed using the new grant structure. Writing to namespaces and extensions remains admin-only, even though any matching grant allows reading them.
- Many breaking changes in terms of database migrations.
v0.10.0
v0.10.0 (October 01, 2026)
NEW FEATURES:
- inject_api_token: The
inject_api_tokenpipeline config now actually works end-to-end; tokens are generated with richer metadata and cleaned up after the run completes. (c7aef7d), (0b8420b) gofer fetchcommand: A single command for walking the pipeline -> run -> task hierarchy, so you no longer need three different subcommands while exploring. Append+to descend a level. (f11052a)- Token visibility in the CLI:
run getnow shows thetoken_idof any injected API token andtoken listshows the owning user. (0390b21), (a3e18b2)
IMPROVEMENTS:
- Run orchestrator: The old run "shepherd" function was turned into a proper orchestrator service with a semaphore-backed concurrency limit, giving the API better insight into in-flight runs. (8644dfe)
- Duration strings: Durations now render hours and minutes in addition to seconds and milliseconds. (8bbed60)
- CLI output polish: polyfmt no longer re-wraps output (which split tables mid-cell),
role getkeeps its header on top with consistently ordered resources/actions, and very recent timestamps read "just now" instead of "now ago". (9ee81df) - Server logging: The server no longer drops into spinner output mode. (91b4143)
- Documentation: Docs brought in line with current behavior — the
spinneroutput format, the filesystem object store engine (replacing the nonexistent sqlite docs), correctedrun_object_expirydefault, pipeline object limit semantics, and current put/get CLI examples. (11cd00d) - Dependency and toolchain updates: Broad dependency refresh across gofer, the SDK, and example pipelines, a move to the newer Rust edition, an update to the new upstream dropshot release, and looser patch-version pinning. (4e5ea64), (2d23479), (c67ab8c), (c6cea1e), (1b4a397), (7dfbbf9), (e9cae6c), (e75e080), (a43248d), (d997425), (2469189), (43588ca), (ee71cd7)
- Dependabot bumps: tokio, openssl, and ring updates across the workspace and example pipelines. (879fa88) #141, (8d9cd04) #138, (d8df574) #140, (8b23b6e) #139, (146f772) #143, (2fa4c2d) #137, (d5dda2d) #135, (4955dec) #134
- Internal tooling: Dogfood suite renamed to "champagne", test runner moved to a more robust caching script, and internal tests gained color output. (0b5360d), (04c999c), (c8a3fd6), (c3a2235), (26fb3bc), (b7241e1), (6d9c166)
BUG FIXES:
- Variable interpolation: Fixed long-standing bugs in
parse_interpolation_syntaxwhere too many or too few brackets produced incorrect results, plus a related escaping bug in the Rust SDK's secret/object convenience functions that returned the config string unchanged. (115e25a), (51ab472) - Secret force: Forcing an existing secret no longer hits
unimplemented!()and panics the handler; global secrets update allowed namespaces and overwrite the value, pipeline secrets overwrite the value. (b60a9ee) - Pipeline object limit:
pipeline_object_limitis now enforced as a ring buffer, evicting the oldest objects from both the database and object store after upload; 0 means unlimited and force-overwritten objects get a fresh created time. (b60a9ee) - Frontend run list: Recent runs are now fetched from every pipeline in the default namespace in parallel and then sorted, instead of stopping after the first pipeline returned five runs. (b60a9ee)
- CLI base URL: Trailing slashes are trimmed from
api_base_urlso requests no longer go to//api/.... (b60a9ee) - Object not found: Requesting a missing object returns 404 instead of 400. (9ee81df)
- Task durations: Task start time is recorded before scheduling, so duration includes image pull and container start instead of reporting ~1ms for short tasks. (9ee81df)
- CLI context errors:
gofer contextreturns an error instead of panicking when an API call fails. (9ee81df)
ADDITIONAL NOTES:
v0.9.1
v0.9.1 (January 26, 2025)
BUG FIXES:
- object store: Resolve incorrect logic for object overwrites. Previously, we were checking for conflicts before inserting into our main database when putting into an object store. This was incorrect because a user can pass force to overwrite an object. The logic here should be that we still attempt to enter it into the database (because the user should be able to pass force on an object not in the store yet), but when that fails, we don't complain. [f19e88c]
v0.9.0
v0.9.0 (January 26, 2025)
FEATURES:
- Streaming Upload/Download: The object store now supports streaming, allowing very large files (up to 50GB) to be handled without memory issues. [aa47933]
- Bash Script Execution: Added functionality to use bash in the script SDK function, improving script execution capabilities. [c6b9825]
- Dark Mode: Gofer frontend now includes a dark mode switcher to improve user interface options. [c80720e]
- Current Time Display: The current time is now displayed on the Gofer frontend. [b2d75a6]
- Always Pull Images: New SDK field for tasks added to ensure containers always pull the latest image from the repository. [15ebe7e]
IMPROVEMENTS:
- Terminal Size Handling: Removed unnecessary dependency on termiom for determining terminal size. [3fa9e2c]
- Dropshot Update: Upgraded dropshot from version 0.11 to 0.15 for enhanced features. [50b109e]
- SDK Ergonomics: Improved SDKs to make them more user-friendly, including changes to variable handling and scripting methods. [24aebe2]
- Frontend Table Structure: Updated Gofer frontend to utilize a table layout instead of div blocks for better organization and future feature support. [601e235]
BUG FIXES:
- Stringify Logic for CLI Object Commands: Resolved an issue with handling large byte sizes during buffering. [df4175d]
- GitHub Extension PRs: Pull requests now properly include branches instead of using ref nomenclature. [4126873]
- Doc Test Bugs in Config SDK: Fixed documentation test errors within the config SDK. [1f47d95]
- Terminal Size Detection for Logs: Enhanced log length handling by adapting to terminal window sizes. [4706a85]
- WebSocket Error for Database Not Found: Ensured correct WebSocket error is returned for missing databases in task logs. [1a50484]
- Frontend Table Width: Improved the sizing of tables to be more responsive to different screen sizes. [d6a1368]
- Rust SDK Variable Config: Fixed a prefixing error for task variables in the Rust SDK. [7065d78]
- SDK List Pipeline Subscriptions Errors: Added error messages for potential issues in the SDK ListPipelineSubscriptions method. [e3d45d9]
v0.8.4
v0.8.4 (December 31, 2024)
FEATURES:
- Add
contextCommand: Introduced acontextcommand in the Gofer CLI to help users understand their current environment context without checking configuration files. [565ade1] - Exact Time Display: CLI now shows exact timestamps in 'detail' configuration settings, enhancing precision for users. [b132306]
BUG FIXES:
- Anonymous Access: Resolved issue allowing anonymous users to access runs as intended. [7be46d5]
- Run Shepard Deadlock: Fixed a thread-blocking deadlock within the run_shepard function, especially noticeable on single-core systems. [3952710]
- Debug Statements: Added more detailed debug statements for the 'gofer run' command to improve error messaging. [6e84382]
IMPROVEMENTS:
v0.8.3
v0.8.3 (December 24, 2024)
IMPROVEMENTS:
- Documentation Update: Clarification for 'stunted extensibility' [e7a561b]
- Documentation Update: Update Readme with Why? [442ea7a]
BUG FIXES:
- ID Validation: Fix inconsistent checking of IDs between underscore and hyphens. User-created IDs are now validated as alphanumeric strings with hyphens as the only special characters allowed. This aligns with common web conventions and resolves issues from the previous implementation. [4ce974e]
FEATURES:
- Dogfood Directory: Add initial functionality for Gofer to use Gofer itself, aiding in automatic repo build and maintenance within a container. Further UX design is in progress. [682c82f]
v0.8.2
v0.8.2 (November 27, 2024)
FEATURES:
- Demo Mode: Gofer's frontend now shows default namespace pipelines and runs to unauthenticated users.
IMPROVEMENTS:
- Github Extension now works with checks: The Github extension now works with the checks API, meaning that the
status of pipeline runs can be reported back to things like PRs.
v0.8.1
v0.8.1 (October 15, 2024)
IMPROVEMENTS:
- Run recovery is back: Restored the ability for Gofer to recover runs after a crash.
BUG FIXES:
- frontend: Fixed undefined kind parameter in run listings.
v0.8.0
v0.8.0 (October 8, 2024)
FEATURES:
- Extension Debug Endpoint: Added a debug endpoint for extensions to facilitate troubleshooting. This feature is
now available to admin users and includes an SDK update for easier integration. - RBAC Permissioning: Implemented a Role-Based Access Control (RBAC) system to provide finer-grained permissions,
replacing the old management vs client system. This includes adding a roles subcommand to the CLI and updating tokens
to support multiple roles. - Extension Subscription Endpoint: Added a subscription list endpoint for extensions, allowing them to query
which entities are subscribed to them, helping in state recovery and minimizing the thundering herd problem.
IMPROVEMENTS:
- Object Store for Extensions: Extensions can now utilize the Gofer object store as their database,
improving reliability and reducing the need for Gofer to manage extension state directly. - Support for X-Forwarded-For Header: Added support for the
X-Forwarded-Forheader to enhance client IP detection in proxied environments.
BUG FIXES:
- Extension SDK Debug Struct: Fixed a bug in the extension SDK that caused a string to be sent instead of the
proper debug struct, which prevented the debug endpoint from functioning correctly. - SQLite Write Race Conditions: Fixed multiple race conditions related to SQLite write locks. Changes include
updating SQLite transaction handling to mimicBEGIN IMMEDIATEby immediately writing to a dummy table to acquire a lock early.