https://george.macro.re
My legs are zapped and it’s only day three.
#grandmassif
My legs are zapped and it’s only day three.
#grandmassif
It also means, that the history view per phase, only contains the points in Git history that effected our particular application.
It also means, that the history view per phase, only contains the points in Git history that effected our particular application.
When commits come in, Glu runs this code per phase to extract the relevant changes and log them itself.
When commits come in, Glu runs this code per phase to extract the relevant changes and log them itself.
True, and Git and it's commits remain the source of truth for Glu. However, Git's history contains entries for all my applications, and a single commit could touch multiple of them in our pipeline.
True, and Git and it's commits remain the source of truth for Glu. However, Git's history contains entries for all my applications, and a single commit could touch multiple of them in our pipeline.
Now each phase in Glu has its own relevant and isolated history of versions that can be explored and when needed, rolled back to.
#buildinpublic #golang #gitops
🧵
Now each phase in Glu has its own relevant and isolated history of versions that can be explored and when needed, rolled back to.
#buildinpublic #golang #gitops
🧵
We close this channel in a defer in the goroutine which calls ascend/descend.
This ensures both conditions "btree is exhausted" and "iterator returned early" coordinate and cleanup.
We close this channel in a defer in the goroutine which calls ascend/descend.
This ensures both conditions "btree is exhausted" and "iterator returned early" coordinate and cleanup.
Notice we close this channel in a defer in our iterator sequence.
Notice we close this channel in a defer in our iterator sequence.
We use select in our function to switch between our send operation or a receive on stop.
We use select in our function to switch between our send operation or a receive on stop.
We're going to use a channel (well two, we will come to that) for passing our entries from old iterator to the new one.
A buffer of zero ensures we synchronize our sender and receiver.
We're going to use a channel (well two, we will come to that) for passing our entries from old iterator to the new one.
A buffer of zero ensures we synchronize our sender and receiver.
So how can we go about coordinating these two styles together?
Enter goroutines and unbuffered channels.
So how can we go about coordinating these two styles together?
Enter goroutines and unbuffered channels.
However, the contract is actually the inverse. With the iterator package in Go, we are given a function to yield to.
However, the contract is actually the inverse. With the iterator package in Go, we are given a function to yield to.
pkg.go.dev/github.com/g...
This package long predates the new iterator style and exposes its own methods Ascend and Descend for iteration in a particular direction.
These methods take a function returning a boolean to signal when to stop.
pkg.go.dev/github.com/g...
This package long predates the new iterator style and exposes its own methods Ascend and Descend for iteration in a particular direction.
These methods take a function returning a boolean to signal when to stop.
This time I have a collection type, which exposes its own abstraction for iterating over its contents. Instead, I want it to use the iter package.
🧵
This time I have a collection type, which exposes its own abstraction for iterating over its contents. Instead, I want it to use the iter package.
🧵
We also added API support for rollbacks (UI is under development):
github.com/get-glu/glu/...
Tomorrow I will have a video!
#buildinpublic #golang
We also added API support for rollbacks (UI is under development):
github.com/get-glu/glu/...
Tomorrow I will have a video!
#buildinpublic #golang
A lot of the core types are moving around. The biggest being the move from phases and sources, to phases and edges.
The concept of promotion in Glu is a now a concern for edges.
#buildinpublic #golang
github.com/get-glu/glu/...
A lot of the core types are moving around. The biggest being the move from phases and sources, to phases and edges.
The concept of promotion in Glu is a now a concern for edges.
#buildinpublic #golang
github.com/get-glu/glu/...
It allows for tracking meaningful history per app + per env described in a config repo.
For reasons (I just love it), I am starting with bbolt as a backend (shoutout @benbjohnson.bsky.social).
#golang #gitops
It allows for tracking meaningful history per app + per env described in a config repo.
For reasons (I just love it), I am starting with bbolt as a backend (shoutout @benbjohnson.bsky.social).
#golang #gitops
Now it little success toast will link you to any generated PRs (if you have proposals enabled).
#gitops #deployments #cicd #golang #buildinpublic
Now it little success toast will link you to any generated PRs (if you have proposals enabled).
#gitops #deployments #cicd #golang #buildinpublic
No horses were harmed in the making of this Glu factory.
No horses were harmed in the making of this Glu factory.