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 config option to remove .gitattributes files #285
Conversation
If a staging repo has .gitattributes files containing the `export-subst` attribute (example: https://github.com/kubernetes/kubernetes/blob/b6c06a95d7ff262a876b95a1035eaf478a7cb961/staging/src/k8s.io/client-go/pkg/version/.gitattributes), then git expands the specified placeholders when git archive is used. When a published repo is downloaded from GitHub, GitHub does a "git archive" under the hood. This means that the placeholders get replaced by their relevant values. This type of "git archive" application sometimes leads to undesired values. See the example below. - In client-go, https://github.com/kubernetes/kubernetes/blob/b6c06a95d7ff262a876b95a1035eaf478a7cb961/staging/src/k8s.io/client-go/pkg/version/base.go#L59 is expanded on a git archive. This line is needed as a fallback to inject k8s version info for client-go when this info is not provided via ldflags during builds. - However, when k/client-go is vendored, the line gets expanded to _the commit of the project vendoring client-go_ -- which is not helpful at all! This also means that the vendored client-go will now contain different (expanded) commit shas for different projects. - To ensure reproducibility of source, this commit adds an option to remove the `.gitattributes` files in all published repos. Additionally, when client-go is used as a library, we don't care about the line being expanded to inject version info so it is also safe to remove these files. The commit adds this feature as a config option in `rules.yaml` so we can control publishing of `.gitattributes` files for each repo.
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: nikhita 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 |
/lgtm |
@kubernetes/release-engineering please review! |
if [ ! $# -eq 14 ]; then | ||
echo "usage: $0 repo src_branch dst_branch dependent_k8s.io_repos required_packages kubernetes_remote subdirectory source_repo_org source_repo_name base_package is_library recursive_delete_pattern skip_tags last_published_upstream_hash" | ||
if [ ! $# -eq 15 ]; then | ||
echo "usage: $0 repo src_branch dst_branch dependent_k8s.io_repos required_packages kubernetes_remote subdirectory source_repo_org source_repo_name base_package is_library recursive_delete_pattern skip_tags last_published_upstream_hash remove_git_attributes" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
does recursive_delete_pattern not already support this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nikhita ping!
Closing in favor of kubernetes/kubernetes#108970 |
If a staging repo has .gitattributes files containing the
export-subst
attribute (example), then git expands the specified placeholders
when git archive is used.
When a published repo is downloaded from GitHub, GitHub does a
"git archive" under the hood. This means that the placeholders get
replaced by their relevant values. This type of "git archive"
application sometimes leads to undesired values. See the example below.
In client-go, line 59 in
pkg/version/base.go
is expanded on a git archive. This line is needed as a fallback to
inject k8s version info for client-go when this info is not provided
via ldflags during builds.
However, when k/client-go is vendored, the line gets expanded to the
commit of the project vendoring client-go -- which is not helpful at
all! This also means that the vendored client-go will now contain
different (expanded) commit shas for different projects.
To ensure reproducibility of source, this commit adds an option to
remove the
.gitattributes
files in all published repos.Additionally, when client-go is used as a library, we don't care about
the line being expanded to inject version info so it is also safe to
remove these files.
The commit adds this feature as a config option in
rules.yaml
so wecan control publishing of
.gitattributes
files for each repo.Ref:
I have tested this on master for client-go and component-base. The result will look something like this for:
/hold
Adding a hold because I'd like to ensure tags work fine too. Will do that later this week but wanted to get the PR out for review.
/assign @sttts @dims