Skip to content
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

ci(build): Update build to use make #160

Merged
merged 2 commits into from
May 2, 2024
Merged

Conversation

Pokom
Copy link
Contributor

@Pokom Pokom commented May 1, 2024

Previously we relied upon GO_LDFLAGS to be passed in to get information such as the branch, revision, and version information. Another pattern we can follow is to use the existing make build-binary command which as all of the scripting defined for the necessary variables to build up the GO_LDFLAGS. In order to support this, we need git and make installed, which thankfully come bundled with the regular golang image.

Updates VERSION to be git describe --tags --dirty --always which will use the the tag information from git directly. The neat this about this command is that if you're on a branch that isn't tagged, it'll return the latest tag and append an abbreviation of the current commit which will guarantee uniqueness between branches. This will support us making "dirty" releases on main, and then when we create a new tags, we'll have an image created with that specific tag.

To test out, I've built locally with a tag poko-test-local:

make build-image                                                                                                                                                                                                                           ~/dev/grafana/cloudcost-exporter
docker build --build-arg GO_LDFLAGS="-X github.com/prometheus/common/version.Branch=ci/update-build-binary-to-use-make -X github.com/prometheus/common/version.Version=dev-poko-test-local -X github.com/prometheus/common/version.Revision=a7db1f2 -X github.com/prometheus/common/version.BuildUser=poko@roberto -X github.com/prometheus/common/version.BuildDate=2024-05-01T17:54:56Z" -t grafana/cloudcost-exporter -t grafana/cloudcost-exporter:dev-poko-test-local .
[+] Building 22.3s (17/17) FINISHED                                                                                                                                                                                                                                                                 docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                                          0.0s
 => => transferring dockerfile: 427B                                                                                                                                                                                                                                                                          0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                                                                                                                                                                                                              0.0s
 => [internal] load metadata for docker.io/library/golang:1.22.1                                                                                                                                                                                                                                              0.4s
 => [internal] load .dockerignore                                                                                                                                                                                                                                                                             0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                                               0.0s
 => [build 1/6] FROM docker.io/library/golang:1.22.1@sha256:0b55ab82ac2a54a6f8f85ec8b943b9e470c39e32c109b766bbc1b801f3fa8d3b                                                                                                                                                                                  0.0s
 => FROM docker.io/library/alpine:latest                                                                                                                                                                                                                                                                      0.0s
 => [internal] load build context                                                                                                                                                                                                                                                                             0.1s
 => => transferring context: 348.99kB                                                                                                                                                                                                                                                                         0.1s
 => CACHED [build 2/6] WORKDIR /app                                                                                                                                                                                                                                                                           0.0s
 => CACHED [build 3/6] COPY [go.mod, go.sum, ./]                                                                                                                                                                                                                                                              0.0s
 => CACHED [build 4/6] RUN go mod download                                                                                                                                                                                                                                                                    0.0s
 => [build 5/6] COPY . .                                                                                                                                                                                                                                                                                      0.2s
 => [build 6/6] RUN make build-binary                                                                                                                                                                                                                                                                        20.5s
 => CACHED [stage-1 1/4] COPY --from=alpine:latest /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/                                                                                                                                                                                                         0.0s 
 => CACHED [stage-1 2/4] COPY --from=build /etc/passwd /etc/passwd                                                                                                                                                                                                                                            0.0s 
 => CACHED [stage-1 3/4] WORKDIR /root                                                                                                                                                                                                                                                                        0.0s 
 => [stage-1 4/4] COPY --from=build /app/cloudcost-exporter ./                                                                                                                                                                                                                                                0.1s 
 => exporting to image                                                                                                                                                                                                                                                                                        0.2s 
 => => exporting layers                                                                                                                                                                                                                                                                                       0.2s 
 => => writing image sha256:098a4862eaf8574964646dc1038bc832a70e61ff10a438354cd2673b4fa1c413                                                                                                                                                                                                                  0.0s
 => => naming to docker.io/grafana/cloudcost-exporter                                                                                                                                                                                                                                                         0.0s
 => => naming to docker.io/grafana/cloudcost-exporter:dev-poko-test-local 

When running the image locally, you'll note the version gets propogated:

docker run docker.io/grafana/cloudcost-exporter:dev-poko-test-local                                                                                                                                                                        ~/dev/grafana/cloudcost-exporter
2024/05/01 17:57:33 Version (version=dev-poko-test-local, branch=ci/update-build-binary-to-use-make, revision=a7db1f2)

Previously we relied upon `GO_LDFLAGS` to be passed in to get
information such as the branch, revision, and version information.
Another pattern we can follow is to use the existing `make build-binary`
command which as all of the scripting defined for the necessary
variables to build up the `GO_LDFLAGS`. In order to support this, we
need `git` and `make` installed, which thankfully come bundled with the
regular golang image.

Updates `VERSION` to be `git describe --tags --dirty --always` which
will use the the tag information from git directly.
@Pokom Pokom requested review from the-it and logyball May 1, 2024 17:51
Copy link
Member

@the-it the-it left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good ... let's do a test release (0.0.2) after merge

@Pokom Pokom merged commit 89e6843 into main May 2, 2024
1 check passed
@Pokom Pokom deleted the ci/update-build-binary-to-use-make branch May 2, 2024 12:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants