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

add -s and -w flags to the go_binary linkopts #4169

Merged
merged 2 commits into from
Jul 1, 2021

Conversation

inteon
Copy link
Member

@inteon inteon commented Jul 1, 2021

What this PR does / why we need it:
Based on https://blog.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/, adding -s and -w flags as go_binary linkops arguments reduces the binary size.

From the article:

Interestingly, what gets stripped is only the DWARF tables needed for debuggers, not the annotations needed for stack traces, so our panics are still readable!

The cert-manager kubectl plugin's size shrinks from 68M to 43M.

Kubernetes also applies these flags when compiling their binaries; https://github.com/kubernetes/kubernetes/blob/1861e4756df1818a2d4ca60c869780bf742fff6b/hack/lib/golang.sh#L798-L804.

Release note:

reduce binary sizes by adding "-s -w" as ldflags

/kind feature

Signed-off-by: Inteon <42113979+inteon@users.noreply.github.com>
@jetstack-bot jetstack-bot added kind/feature Categorizes issue or PR as related to a new feature. release-note Denotes a PR that will be considered when it comes time to generate release notes. dco-signoff: yes Indicates that all commits in the pull request have the valid DCO sign-off message. labels Jul 1, 2021
@jetstack-bot
Copy link
Contributor

Hi @inteon. Thanks for your PR.

I'm waiting for a jetstack or cert-manager member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@jetstack-bot jetstack-bot added needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. size/XS Denotes a PR that changes 0-9 lines, ignoring generated files. labels Jul 1, 2021
@wallrj
Copy link
Member

wallrj commented Jul 1, 2021

/ok-to-test

@jetstack-bot jetstack-bot added ok-to-test and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Jul 1, 2021
Signed-off-by: Inteon <42113979+inteon@users.noreply.github.com>
@inteon
Copy link
Member Author

inteon commented Jul 1, 2021

Copy link
Member

@jakexks jakexks left a comment

Choose a reason for hiding this comment

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

/lgtm

@jetstack-bot jetstack-bot added the lgtm Indicates that a PR is ready to be merged. label Jul 1, 2021
@jetstack-bot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: inteon, jakexks

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@jetstack-bot jetstack-bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jul 1, 2021
@jetstack-bot jetstack-bot merged commit 29b6656 into cert-manager:master Jul 1, 2021
@jetstack-bot jetstack-bot added this to the v1.5 milestone Jul 1, 2021
@irbekrm
Copy link
Contributor

irbekrm commented Jul 5, 2021

We have an internal project where we create an alternative build of cert-manager linked against some C libraries. One of the checks that verify that build tests that it has been linked against the correct libraries etc (using goversion and go tool nm).
This PR has removed the debugging information, so the checks no longer work:

go tool nm com_github_jetstack_cert_manager/cmd/acmesolver/acmesolver_/acmesolver 
reading com_github_jetstack_cert_manager/cmd/acmesolver/acmesolver_/acmesolver: no symbol section
reading com_github_jetstack_cert_manager/cmd/acmesolver/acmesolver_/acmesolver: no symbols

We don't really have a feasible alternative way to do those tests now.
Would it be possible to either only remove the debugging info for the kubectl plugin (the internal project only needs server images), or alternatively parameterize building with these flags @inteon ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. dco-signoff: yes Indicates that all commits in the pull request have the valid DCO sign-off message. kind/feature Categorizes issue or PR as related to a new feature. lgtm Indicates that a PR is ready to be merged. ok-to-test release-note Denotes a PR that will be considered when it comes time to generate release notes. size/XS Denotes a PR that changes 0-9 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants