Releases: clintjedwards/gofer
v0.8.1
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-For
header 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 IMMEDIATE
by immediately writing to a dummy table to acquire a lock early.
v0.7.3
v0.7.3 (August 20, 2024)
FEATURES:
- Deployments in CLI: Added functionality to Gofer CLI for listing and getting deployments.
IMPROVEMENTS:
-
Event-Driven Task Management: Refactored Shepard to fully commit to an event-driven model for task execution,
replacing the previous mixed approach. This change simplifies recovery and cancellation of tasks by leveraging
Gofer’s event bus. -
Token-Based Initiator Identification: Refactored the initiator field within a run to be populated by the
caller's token data, enhancing security by removing reliance on caller input. -
Usernames in Tokens: Updated tokens to include a username field, allowing for more human-readable
identification and improving the frontend experience by clearly displaying the user responsible for actions. -
Gofer Frontend Improvement: Enhanced the Gofer frontend with a basic interface to ensure users can
confirm the service is operational, providing a simple but effective user experience.
v0.7.2
v0.7.2 (July 31, 2024)
Bug Fixes:
- Extensions now correctly pass registration configurations.
v0.7.1
v0.7.1 (July 27, 2024)
FEATURES:
- No new features in this release
IMPROVEMENTS:
- SDK Extension Tooling: Updated the SDK extension tooling to reflect changes in the golang SDK. Previously, a differentiator was appended to extension variables to avoid conflicts, which is no longer necessary.
BUG FIXES:
- External Extensions: Various touch-ups and improvements as we prepare to activate the GitHub extension.
- Namespace Regex Matching: Fixed an issue where namespace regex matching for authentication was broken. This previously caused the default admin bootstrap token to only access public routes.
- Secret Store Encryption Keys: Added a check to ensure that the encryption keys for the default secret store (SQLite) are at least 32 characters, preventing runtime issues.
- CLI Whoami Panic: Resolved a subtraction overflow error in the
whoami
command due to incorrect humanized time calculation. - Extension Key Cleanup: Extensions now automatically clean up their keys on restart. Fixed a bug where
key_id
was not being persisted correctly, causing extensions to create new tokens on each restart. - HTML Folder .gitkeep: Reinstated the
.gitkeep
file for thehtml
folder to ensure the docs build process does not remove it, preventing issues with freshly cloned repos. - Formatting in Config Reference: Fixed a formatting error in the config reference documentation and improved the
run-docs
command to restore the.gitkeep
file when the docs server is interrupted.
DOCUMENTATION:
- Todo Refactor: Refactored the todo documentation.
- Config Reference: Fixed formatting errors and improved the
run-docs
command.
v0.7.0
v0.7.0 (July 11, 2024)
Yes I rewrote it in Rust. Yes, I'm aware of the meme.
To be honest this was just a lot of fun. The majority of Gofer's actions
are purely just state machine triage, so since Golang doesn't really have
great enums that made things awkward in a lot of places.
The trade off being that Go is SIGNIFICANTLY easier to write concurrent
code with. Async Rust is obtuse in a lot of areas, especially when debugging.
I started down the path of trying to switch from GRPC to REST and
from that discovered
dropshot...and the rest was history.
Some of the bigger changes:
I just got really tired of troubleshooting issues within GRPC and having to deal with protobuf types. I'm still torn about
what is the correct chicken or egg order. Do you write a spec first and then generate code or do you write code that autogenerates the spec? My inclination is the former because
while convenient, code that generates spec makes refactors a bit harder. I believe dropshot is working on a way to define traits and then generate a spec from that. Which might
be a bit easier.
Some of the smaller ideas like interactive installation were just straight up removed. They were only half baked and the implementation was an eyesore.
It wasn't worth the time reimplementing them.
Before I created a documentation site that had to be hosted on it's own. Instead I think it's a bit more convenient to have those docs be connected with
the verison of Gofer you're running and be able to be accessed no matter where you host it.
Gofer is very much event based even though I tried to avoid that paradigm on the first write. This rewrite doesn't go full events but the event system is
much better now and used for some of the more critical parts of the app. The previous solution of passing around state with god structs and channels was good
but caused a little bit too heavy coupling for some part of the app. Making them hard to refactor and hard to reason about. Much more work needs to be done
on this front.
v0.6.2
v0.6.2 (March 6, 2024)
IMPROVEMENTS:
- Github Extension Back online: Previously the Github extensions was left behind in the extensions refactor. Now
it's back to a working state.
BUG FIXES:
- Multiple Bootstrap Tokens: Previoulsy there was a bug where multiple bootstrap tokens could be created.
v0.6.1
v0.6.0
v0.6.0 (September 18, 2023)
FEATURES:
- Container Attaching: Added the ability to attach to containers, enabling real-time troubleshooting of containers. [24851d2]
IMPROVEMENTS:
- Github Extension Revival: Brought the Github extension back to life after it became inoperable due to a massive refactor for extensions. It is now restored to a pre-alpha state for testing and further improvements. [79a9ac2]
- Extension Installations: Completely revamped the extension installation process for better interactivity and user experience. Extensions can now interact intelligently with users during installation, providing real-time feedback. [20ea14b]
- Documentation Updates: Improved the readability of documentation and fixed various errors, including a broken link. [0f76630, 0dc073a, 1af2f69]
BUG FIXES:
v0.5.0
v0.5.0 (April 16, 2023)
Many, many breaking changes. A lot of major parts have been refactored to work better and closer to the values/vision.
FEATURES/IMPROVEMENTS:
- Trigger/Component/Extension Refactor: Extensions now act as independent services which call upon Gofer using the same API as everything else. This helps get rid of special interactions for extensions and standardize all interactions with Gofer.
- Removed Common Tasks: Extensions and user created libraries will replace the need that common tasks were meant to fill. Common tasks made the code hard to work with and Gofer harder to understand and were generally against the design goals.
- Pipeline extend command: The Cli has been updated to provide a quicker way to extend a pipeline.
- Event models package: Previously an internal package the Event models package lists different event types that Gofer emits from it's API. Making this package public supports the design choice to have the CLI not depend on any special internal packages that other devs wont have and makes it so de-serializing events is easier.
- Clearer event names: Event names have been updated to be clearer to read and understand.
- Global secrets now support namespaces: Global secrets previously were only meant for use in extensions and common tasks. This has changed and global secrets now can be used in normal pipelines. To allow proper scoping of those secrets global secrets has been given a namespace filter that accepts regexes.
- Dev mode updated: Dev mode previously was a flag that alterned the code paths such that developmenet was easy. While this was great, it wasn't modular enough and testing specific things was impossible without turning off ALL of dev mode. Instead the root of the cli commands has been given a
--dev-mode
flag, that turns on a new set of configuration options for dev. - Configuration refactor: Configuration was previously handled by a bunch of separte libraries which handled different parts of what is a fairly complicated interactions of env vars, flags, and configuration file. Instead Gofer has moved over to koanf which gets rid of a bunch of packages and makes it so the config package is more coherent. As a by product env vars are not somewhat more tricky and require double underscores to separate some levels of configuration. A full list of the configurations can be found in CLI help.
- Versioned Pipelines!: One of the long-time goals for this project was to provide versioned pipelines so that pipelines can be deployed using reliable methods. Pipelines now support the concept of deploying, updating, and versioning. This gets rid of a lot of bad design choices around how pipelines are updated and makes it less of a dance and more of a straightforward process.
- Extensions removed from pipeline config: In relation to versioned pipelines the ability to set triggers up using the configuration file has been removed. This was a poor design choice because the song and dance of swapping over an extension when a user updated a pipeline was incongruent with versioned pipelines. There was no good way to canary a pipeline if the two versions of the pipeline had differnet extensions trying to run them at the same time.
- Auto-Inject token to task: Previously we would auto-inject a Gofer token into a task so that it could talk back to the API without the user having to do this themselves. This was updated to instead be a flag that the user must opt into first.
BUG FIXES:
A lot