Skip to content

Commit bb95ce2

Browse files
🐛 fix(go/v4,helm/v2-alpha): use 0644/0755 for generated files (#5508)
fix(go/v4,helm/v2-alpha): use 0644/0755 for generated files
1 parent b822593 commit bb95ce2

File tree

8 files changed

+37
-18
lines changed

8 files changed

+37
-18
lines changed

.github/workflows/lint.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ jobs:
3636
run: make install-helm
3737
- name: Run yamllint (YAML + Helm chart output 2-space indentation)
3838
run: make yamllint
39+
- name: Check sample permissions
40+
run: make check-sample-permissions
3941

4042
license:
4143
runs-on: ubuntu-latest

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ docs/book/src/docs
3232
## Skip testdata files that generate by tests using TestContext
3333
**/e2e-*/**
3434
# Optional rendered chart output (e.g. from make yamllint-helm when debugging)
35-
testdata/.helm-rendered.yaml
35+
testdata/.helm-rendered.yaml

Makefile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,20 @@ yamllint-helm:
132132
docker run --rm -i -v $(PWD):/data -w /data cytopia/yamllint:latest -c .yamllint-helm --no-warnings - || (echo "yamllint-helm: $$chart failed"; exit 1); \
133133
done
134134

135+
# All Kubebuilder-generated samples (go/v4, kustomize, helm use machinery defaults 0755/0644).
136+
SAMPLE_ROOTS := testdata \
137+
docs/book/src/getting-started/testdata \
138+
docs/book/src/cronjob-tutorial/testdata \
139+
docs/book/src/multiversion-tutorial/testdata
140+
141+
.PHONY: check-sample-permissions
142+
check-sample-permissions: ## Fail if any file/dir under testdata or docs samples has wrong permissions (expect 0644/0755). bin/ excluded.
143+
@for d in $(SAMPLE_ROOTS); do \
144+
test -d "$$d" || continue; \
145+
bad=$$(find "$$d" -path '*/bin' -prune -o \( \( -type f ! -perm 0644 \) -o \( -type d ! -perm 0755 \) \) -print 2>/dev/null); \
146+
if [ -n "$$bad" ]; then echo "Invalid permissions under $$d (expect 0644/0755):"; echo "$$bad"; exit 1; fi; \
147+
done
148+
135149
.PHONY: golangci-lint
136150
golangci-lint:
137151
$(call go-install-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/v2/cmd/golangci-lint,${GOLANGCI_LINT_VERSION})

pkg/cli/cli.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ func patchProjectFileInMemoryIfNeeded(fs afero.Fs, path string) error {
310310
}
311311

312312
if modified != original {
313-
err := afero.WriteFile(fs, path, []byte(modified), 0o755)
313+
err := afero.WriteFile(fs, path, []byte(modified), machinery.DefaultFilePermission)
314314
if err != nil {
315315
return fmt.Errorf("failed to write patched PROJECT file: %w", err)
316316
}

pkg/config/store/yaml/store.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ func (s yamlStore) SaveTo(path string) error {
144144
content = append([]byte(commentStr), content...)
145145

146146
// Write the marshalled configuration
147-
err = afero.WriteFile(s.fs, path, content, 0o600)
147+
err = afero.WriteFile(s.fs, path, content, machinery.DefaultFilePermission)
148148
if err != nil {
149149
return store.SaveError{Err: fmt.Errorf("failed to save configuration to %q: %w", path, err)}
150150
}

pkg/machinery/scaffold.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,11 @@ import (
3838
const (
3939
createOrUpdate = os.O_WRONLY | os.O_CREATE | os.O_TRUNC
4040

41-
defaultDirectoryPermission os.FileMode = 0o700
42-
defaultFilePermission os.FileMode = 0o600
41+
// DefaultDirectoryPermission and DefaultFilePermission are used so generated
42+
// files work in shared and container workflows. Use them when writing scaffolded
43+
// or config files for consistency.
44+
DefaultDirectoryPermission os.FileMode = 0o755
45+
DefaultFilePermission os.FileMode = 0o644
4346
)
4447

4548
var options = imports.Options{
@@ -69,8 +72,8 @@ type ScaffoldOption func(*Scaffold)
6972
func NewScaffold(fs Filesystem, options ...ScaffoldOption) *Scaffold {
7073
s := &Scaffold{
7174
fs: fs.FS,
72-
dirPerm: defaultDirectoryPermission,
73-
filePerm: defaultFilePermission,
75+
dirPerm: DefaultDirectoryPermission,
76+
filePerm: DefaultFilePermission,
7477
}
7578

7679
for _, option := range options {

pkg/machinery/scaffold_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ var _ = Describe("Scaffold", func() {
3131
It("should succeed for no option", func() {
3232
s := NewScaffold(Filesystem{FS: afero.NewMemMapFs()})
3333
Expect(s.fs).NotTo(BeNil())
34-
Expect(s.dirPerm).To(Equal(defaultDirectoryPermission))
35-
Expect(s.filePerm).To(Equal(defaultFilePermission))
34+
Expect(s.dirPerm).To(Equal(DefaultDirectoryPermission))
35+
Expect(s.filePerm).To(Equal(DefaultFilePermission))
3636
Expect(s.injector.config).To(BeNil())
3737
Expect(s.injector.boilerplate).To(Equal(""))
3838
Expect(s.injector.resource).To(BeNil())
@@ -44,7 +44,7 @@ var _ = Describe("Scaffold", func() {
4444
s := NewScaffold(Filesystem{FS: afero.NewMemMapFs()}, WithDirectoryPermissions(dirPermissions))
4545
Expect(s.fs).NotTo(BeNil())
4646
Expect(s.dirPerm).To(Equal(dirPermissions))
47-
Expect(s.filePerm).To(Equal(defaultFilePermission))
47+
Expect(s.filePerm).To(Equal(DefaultFilePermission))
4848
Expect(s.injector.config).To(BeNil())
4949
Expect(s.injector.boilerplate).To(Equal(""))
5050
Expect(s.injector.resource).To(BeNil())
@@ -55,7 +55,7 @@ var _ = Describe("Scaffold", func() {
5555

5656
s := NewScaffold(Filesystem{FS: afero.NewMemMapFs()}, WithFilePermissions(filePermissions))
5757
Expect(s.fs).NotTo(BeNil())
58-
Expect(s.dirPerm).To(Equal(defaultDirectoryPermission))
58+
Expect(s.dirPerm).To(Equal(DefaultDirectoryPermission))
5959
Expect(s.filePerm).To(Equal(filePermissions))
6060
Expect(s.injector.config).To(BeNil())
6161
Expect(s.injector.boilerplate).To(Equal(""))
@@ -67,8 +67,8 @@ var _ = Describe("Scaffold", func() {
6767

6868
s := NewScaffold(Filesystem{FS: afero.NewMemMapFs()}, WithConfig(cfg))
6969
Expect(s.fs).NotTo(BeNil())
70-
Expect(s.dirPerm).To(Equal(defaultDirectoryPermission))
71-
Expect(s.filePerm).To(Equal(defaultFilePermission))
70+
Expect(s.dirPerm).To(Equal(DefaultDirectoryPermission))
71+
Expect(s.filePerm).To(Equal(DefaultFilePermission))
7272
Expect(s.injector.config).NotTo(BeNil())
7373
Expect(s.injector.config.GetVersion().Compare(cfgv3.Version)).To(Equal(0))
7474
Expect(s.injector.boilerplate).To(Equal(""))
@@ -80,8 +80,8 @@ var _ = Describe("Scaffold", func() {
8080

8181
s := NewScaffold(Filesystem{FS: afero.NewMemMapFs()}, WithBoilerplate(boilerplate))
8282
Expect(s.fs).NotTo(BeNil())
83-
Expect(s.dirPerm).To(Equal(defaultDirectoryPermission))
84-
Expect(s.filePerm).To(Equal(defaultFilePermission))
83+
Expect(s.dirPerm).To(Equal(DefaultDirectoryPermission))
84+
Expect(s.filePerm).To(Equal(DefaultFilePermission))
8585
Expect(s.injector.config).To(BeNil())
8686
Expect(s.injector.boilerplate).To(Equal(boilerplate))
8787
Expect(s.injector.resource).To(BeNil())
@@ -97,8 +97,8 @@ var _ = Describe("Scaffold", func() {
9797

9898
s := NewScaffold(Filesystem{FS: afero.NewMemMapFs()}, WithResource(res))
9999
Expect(s.fs).NotTo(BeNil())
100-
Expect(s.dirPerm).To(Equal(defaultDirectoryPermission))
101-
Expect(s.filePerm).To(Equal(defaultFilePermission))
100+
Expect(s.dirPerm).To(Equal(DefaultDirectoryPermission))
101+
Expect(s.filePerm).To(Equal(DefaultFilePermission))
102102
Expect(s.injector.config).To(BeNil())
103103
Expect(s.injector.boilerplate).To(Equal(""))
104104
Expect(s.injector.resource).NotTo(BeNil())

pkg/plugins/optional/helm/v2alpha/scaffolds/edit_kustomize.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ func (s *editKustomizeScaffolder) Scaffold() error {
131131
chartConverter := kustomize.NewChartConverter(resources, namePrefix, chartName, s.outputDir)
132132
deploymentConfig := chartConverter.ExtractDeploymentConfig()
133133

134-
// Create scaffold for standard Helm chart files
134+
// Create scaffold for standard Helm chart files (uses machinery defaults 0755/0644).
135135
scaffold := machinery.NewScaffold(s.fs, machinery.WithConfig(s.config))
136136

137137
// Define the standard Helm chart files to generate

0 commit comments

Comments
 (0)