Air – Live reload when developing with Go
github.com
github.com
(1) minikube, which I also maintained at Google. I saw how difficult getting started with Kubernetes could be even when you were able to create a local cluster. I also knew all the shortcuts that you could take to streamline local Kubernetes workflows (e.g., loading images directly into the minikube docker daemon).
(2) docker compose, which remains a great tool but had no analogue for Kubernetes. It also didn't have a concept of syncing for hot-reloadable projects or built-in file watcher.
(1), Draft by the Deis folks at Microsoft, which was a great tool but suffered from having a component that you needed to install on the cluster to work, where the skaffold architecture was purely client side (making it a lot easier to get started, and faster). I also wanted to make skaffold pluggable, so it supported helm, kubectl, docker, bazel, and other tools right from the start. It also had clear boundaries between build and deploy and ideas for CI and gitops workflows built in.
You can tell it to just sync certain changes (e.g. syncing a javascript file to a container running webpack).
find . -name "*.go" | entr -r go run my/main/file.go ls src/**/*.filetype | entr -r -s "some command"
And this will catch new files $ while true; do ls src/*.rb | entr -d make; doneIt also has nice facilities to quickly disable a test or portion of a test by prepending an X to the test function name, or to focus a test (only run that test) by prepending an F. It’s pretty nice.
https://docs.microsoft.com/en-us/visualstudio/test/live-unit...
Because it's just a gut feeling, you can't write a test against it
How would you write the tests to see if the GLSL shader is displaying the mesh on the screen with the correct gamma correction factor?
Go comes with a lot of facilities for testing the things it's good at.
If testing GLSL shaders, or gui applications is difficult, I'd consider putting at least some pressure on the tooling providers to provide better testing facilities.
I'm more familiar with how opengl & shaders work than I am with text rendering - so I'll keep my commentary towards the shader question. At least on the surface it seems de-composable into two distinct problems: Is the shader emitting the correct colors after gamma correction is applied, and is that rendering appearing on the screen.
The former could be tested by rendering to a buffer and capturing the output, and asserting against an expected color value.
The latter is where I'd say that better tooling is indeed required.
Advocacy works great when only data structures get tested.
There is no way to properly test UI/UX experiences, even if the test is correct for a button being displayed with the right label, doesn't mean it looks correctly from user experience point of view, yet the test is green.
"This page is confusing" and "This page no clear call to action" And "This page is ugly" And "This button doesn't look like a button."
However I'm not at all claiming that removes the 'eyeballed it' step, just that it makes it harder to miss said step :)
executable=/path/to/target
while true; do
make build
if [ ${?} -eq 0 ]; then
${executable} run &
pid=${!}
fi
inotifywait -qq -e create -e modify -e delete --exclude '\.#.*' -r .
[ -n "${pid}" ] && kill ${pid}; pid=
done
This is simplified a bit, as the script usually contains some other things like starting and initializing the database.Before that I used realize but it has the bad behavior of always adding it’s own prefix to the logs, which sucks.
It's straightforward to use but also has a ton of options so you can do whatever you want with it. It also handles common issues you'll run into when working with larger codebases where you end up watching over too many files. And finally, it has configuration files so you can have the same setup as the rest of the engineers on your team.
More importantly, it's actively maintained and has been out for a while, and it's not specific to Go apps: you can use it for anything you want to watch and execute on.
```
filewatcher --immediate --restart "*/*.go" "killall ${BINARY_NAME}; make run"
```
Wish I heard of air or skaffold. Didn’t find them when searching around this issue.
Unlike other languages with insane build and link times, I've never needed this for Go. Builds are nearly instantaneous.
We started using this tool a couple of months ago. It was a huge productivity boost. We had multiple binaries produced by the build and all had to run to make the complete service
I personally don't see value in running "go build" out-of-band in another terminal where I can't easily pipe the errors into my editor (or automatically if I'm running it in the editor).
If that works for you, then great.