-
Notifications
You must be signed in to change notification settings - Fork 2.5k
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
Refactor CI jobs to use goreleaser #3209
Comments
I don't have a strong opinion about goreleaser. What makes it better? From the description it seems a sizeable portion of it is dealing with pushing GH release & homebrew. I am not sure what splitting the Makefile gives us. The amount of content per binary is actually minimal in it. I would rather deal with a single 600-lines Makefile (which isn't that large) than hunt around for the same information in multiple dirs. I think the last round of refactoring for buildx actually consolidated a lot of repeated steps into smaller number of scripts, which is great. The build process is still, indeed, pretty complicated. |
The trigger point for opening this issue is #3204 It clearly shows our CI is quite rigid. It works perfectly well on daily basis PRs but when someone need to change something in those shell scripts, it requires quite an effort and requires complete knowledge since we have too much coupling among those scripts. Amount of conversation in #2611 and #2948 reflect that pretty well. Regarding goreleaser, I can see a few benefit:
|
To me, converting from Shell scripts to YAML would be a huge step back. Everyone knows how to read and write Shell, and how to debug it. YAML is always a bespoke DSL that people need to learn from scratch, and it is usually much harder to debug.
This is just as easily achieved by reusing shell scripts or shell functions. In the example you linked, I do not see that it is substantially more concise (but it is substantially more opaque, bespoke, and non-debuggable). Is goreleaser going to create Dockerfiles for us? I assume not, so it's not removing that complexity. So which steps is goreleaser going to substitute? If we're only using it as a replacement for Maybe I am missing something. |
The biggest issue from my point of view is that I cannot run the full build locally. For instance to build docker images a local docker registry is needed. I tried running the registry locally and I got into configuration issues with TLS between registry and docker push. For productive development, I would like to be able to run all commands locally e.g. build binaries, docker images and run integration tests. I don't care too much if it requires more code in the makefile/scripts. |
Our CI definitions look fairly simple, however if we can further simplify building of binaries and images I am all for it (e.g. via goreleaser). At the same time I would like to be able to build and run everything locally without decrypting CI configs. |
Our current CI is too complicated to understand.
Requirement - what kind of business use case are you trying to solve?
I am creating this issue to start discussion around CI jobs refactoring. From my perspective, I can see following problems in our current CI implementation:
Proposal - what do you suggest to solve the problem or improve the existing situation?
I would like to propose following solutions for the above problems:
cmd/<app>/Makefile
and include them in the root Makefile.Let me know your thoughts.
The text was updated successfully, but these errors were encountered: