Skip to content

Releases: clintjedwards/gofer

v0.8.1

15 Oct 20:08
c09a601
Compare
Choose a tag to compare

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

08 Oct 22:05
6265dc1
Compare
Choose a tag to compare

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 mimic BEGIN IMMEDIATE by immediately writing to a dummy table to acquire a lock early.

v0.7.3

21 Aug 02:17
ba0b2b5
Compare
Choose a tag to compare

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

31 Jul 07:47
84d1685
Compare
Choose a tag to compare

v0.7.2 (July 31, 2024)

Bug Fixes:

  • Extensions now correctly pass registration configurations.

v0.7.1

27 Jul 09:13
c90bf50
Compare
Choose a tag to compare

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 the html 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

11 Jul 05:07
a9558d4
Compare
Choose a tag to compare

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

06 Mar 09:21
9f04500
Compare
Choose a tag to compare

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

15 Nov 06:33
1725d74
Compare
Choose a tag to compare

v0.6.1 (November 15, 2023)

BUG FIXES:

  • Bootstrap Token Logic: Fixed an issue where the bootstrap token couldn't be created on first Gofer boot up due to improper filtering of extension tokens. Now correctly identifies existing tokens and allows bootstrap token creation. [1725d74]

v0.6.0

19 Sep 00:41
619e186
Compare
Choose a tag to compare

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:

  • Scheduler Interface: Corrected the scheduler interface to return an io.Reader instead, fixing prior functional discrepancies. [f3cf23e]
  • Demo Cleanup: Removed an outdated YouTube video from the demo section of the documentation. [644cee9]

v0.5.0

17 Apr 01:00
5ac35a7
Compare
Choose a tag to compare

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