-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Distribute build tools as a single binary #131
Comments
I love Haskell, it and Turtle would be a good fit for this. It has much better concurrency support, better error handling, and a mature library ecosystem. On the other hand:
If we're not going to use Go, I'd consider using Python. It has the advantages of concision and error handling, and we might be able to freeze things into one executable. It's been over a decade since I've tried that, so maybe the technology has improved. I would anticipate similar C linking issues as with Haskell on macOS. |
Jono also mentioned this in Slack, which is an interesting hybrid Go/Shell approach: https://jvns.ca/blog/2017/07/30/a-couple-useful-ideas-from-google/ |
What would be the options/arguments for |
Possibly this is interesting/relevant: https://github.com/magefile/mage |
Background
build-tools is a collection of shell, Python, Go, and Terraform scripts that represent build tooling common to Weaveworks projects, proprietary and open source.
It is currently embedded in each of our projects via git subtree or git submodules.
Problems
Distribution
Both git subtree and git submodules are problematic. They are unfamiliar commands to most git users, which introduces a level of friction with both new & existing hires.
When we make an improvement to build-tools, we face the problem of manually identifying all repositories which use it and then filing a PR one by one. This becomes more and more difficult the more we expand.
Language
Writing robust shell code is hard, even with shellcheck. Writing shell code that communicates intent is even harder.
Solution
wbuild
with subcommands that make all of the required build and lint functionality availablePinning
While projects should just fetch the latest build-tools, we should ensure that each master commit has a downloadable binary so that projects that need to pin to older versions can.
Things that cannot be written in Go
Provisioning
We have a collection of Terraform files for provisioning test machines.
This should be moved to Weave Net repository. If making it public is impractical, then it should move to its own private repository.
The text was updated successfully, but these errors were encountered: