Skip to content

Commit

Permalink
Merge pull request #249 from alexzielenski/make-gen-fix
Browse files Browse the repository at this point in the history
Add verify-examples.sh and switch from makefiles to go test and go generate
  • Loading branch information
k8s-ci-robot authored Aug 24, 2023
2 parents 036e7fc + bce53be commit 3ffd65d
Show file tree
Hide file tree
Showing 11 changed files with 197 additions and 89 deletions.
16 changes: 0 additions & 16 deletions examples/deepcopy-gen/Makefile

This file was deleted.

2 changes: 2 additions & 0 deletions examples/deepcopy-gen/output_tests/generate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
//go:generate go run k8s.io/gengo/examples/deepcopy-gen -i k8s.io/gengo/examples/deepcopy-gen/output_tests/... -O zz_generated --go-header-file=../../../boilerplate/boilerplate.go.txt -o . --trim-path-prefix=k8s.io/gengo/examples/deepcopy-gen/output_tests
package output_tests
25 changes: 0 additions & 25 deletions examples/defaulter-gen/Makefile

This file was deleted.

10 changes: 10 additions & 0 deletions examples/defaulter-gen/_output_tests/generate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Ignore this file to prevent zz_generated for this package
//go:build !ignore_autogenerated

//go:generate go run k8s.io/gengo/examples/defaulter-gen -i k8s.io/gengo/examples/defaulter-gen/output_tests/... -O zz_generated --go-header-file=../../../boilerplate/boilerplate.go.txt -o . --trim-path-prefix=k8s.io/gengo/examples/defaulter-gen/output_tests
package output_tests_test

import (
// For go-generate
_ "k8s.io/gengo/examples/defaulter-gen/generators"
)
2 changes: 1 addition & 1 deletion examples/defaulter-gen/_output_tests/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ go 1.20
require (
k8s.io/api v0.28.0
k8s.io/apimachinery v0.28.0
k8s.io/gengo v0.0.0-20230306165830-ab3349d207d4
k8s.io/gengo v0.0.0-20230823165328-036e7fc87c56
)

require (
Expand Down
4 changes: 2 additions & 2 deletions examples/defaulter-gen/_output_tests/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ k8s.io/api v0.28.0 h1:3j3VPWmN9tTDI68NETBWlDiA9qOiGJ7sdKeufehBYsM=
k8s.io/api v0.28.0/go.mod h1:0l8NZJzB0i/etuWnIXcwfIv+xnDOhL3lLW919AWYDuY=
k8s.io/apimachinery v0.28.0 h1:ScHS2AG16UlYWk63r46oU3D5y54T53cVI5mMJwwqFNA=
k8s.io/apimachinery v0.28.0/go.mod h1:X0xh/chESs2hP9koe+SdIAcXWcQ+RM5hy0ZynB+yEvw=
k8s.io/gengo v0.0.0-20230306165830-ab3349d207d4 h1:aClvVG6GbX10ISHcc24J+tqbr0S7fEe1MWkFJ7cWWCI=
k8s.io/gengo v0.0.0-20230306165830-ab3349d207d4/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
k8s.io/gengo v0.0.0-20230823165328-036e7fc87c56 h1:WdwSM55dXAYAv9mJluXrNnb4vqIpHrh4v8pA8tdK+AE=
k8s.io/gengo v0.0.0-20230823165328-036e7fc87c56/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
Expand Down
28 changes: 0 additions & 28 deletions examples/import-boss/Makefile

This file was deleted.

132 changes: 132 additions & 0 deletions examples/import-boss/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
package main_test

import (
"bytes"
"context"
"os/exec"
"path"
"runtime"
"strings"
"testing"
)

const pkgName string = "k8s.io/gengo/examples/import-boss"

func runImportBoss(inputPackages ...string) error {
for i, v := range inputPackages {
inputPackages[i] = pkg(v)
}

_, filename, _, _ := runtime.Caller(1)
dir := path.Dir(filename)
cmd := exec.CommandContext(context.Background(),
"go", "run", pkgName, "--logtostderr", "--v=4",
"-i", strings.Join(inputPackages, ","),
"-o", ".",
"--trim-path-prefix", pkgName,
)
cmd.Dir = dir

errBuf := &bytes.Buffer{}
outBuf := &bytes.Buffer{}
cmd.Stderr = errBuf
cmd.Stdout = outBuf

err := cmd.Run()
print(errBuf.String())
print(outBuf.String())
return err
}

func pkg(name string) string {
return pkgName + "/tests/" + name
}

type importBossTestCase struct {
packageName string
expectError bool
}

func TestRules(t *testing.T) {
cases := []importBossTestCase{
{
packageName: "a",
expectError: false,
},
{
packageName: "b",
expectError: true,
},
{
packageName: "c",
expectError: false,
},
{
packageName: "nested",
expectError: true,
},
{
packageName: "nested/nested",
expectError: false,
},
{
packageName: "nested/nested/nested",
expectError: true,
},
{
packageName: "nested/nested/nested/inherit",
expectError: true,
},
}

for _, v := range cases {
t.Run(v.packageName, func(t *testing.T) {
err := runImportBoss("rules/" + v.packageName)
if err != nil != v.expectError {
t.Errorf("expected error: %v, returned error: %v", v.expectError, err != nil)
}
})
}
}

func TestInverse(t *testing.T) {
libPackages := []string{
"inverse/lib",
"inverse/lib/nonprod",
"inverse/lib/private",
"inverse/lib/public",
}

cases := []importBossTestCase{

{
packageName: "a",
expectError: false,
},
{
packageName: "b",
expectError: true,
},
{
packageName: "c",
expectError: false,
},
{
packageName: "d",
expectError: true,
},
{
packageName: "lib/quarantine",
expectError: true,
},
}

for _, v := range cases {
t.Run(v.packageName, func(t *testing.T) {
err := runImportBoss(append([]string{"inverse/" + v.packageName}, libPackages...)...)
if err != nil != v.expectError {
t.Errorf("expected error: %v, returned error: %v", v.expectError, err != nil)
}
})
}
}
15 changes: 0 additions & 15 deletions examples/set-gen/Makefile

This file was deleted.

3 changes: 1 addition & 2 deletions examples/set-gen/sets/types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,9 @@ limitations under the License.

// Package types just provides input types to the set generator. It also
// contains a "go generate" block.
// (You must first `go install k8s.io/gengo/examples/set-gen`)
package types

//go:generate set-gen -i k8s.io/gengo/examples/set-gen/sets/types -o k8s.io/gengo/examples/set-gen/sets
//go:generate go run k8s.io/gengo/examples/set-gen -i k8s.io/gengo/examples/set-gen/sets/types -o ../ --go-header-file=../../../../boilerplate/boilerplate.go.txt

type ReferenceSetTypes struct {
// These types all cause files to be generated
Expand Down
49 changes: 49 additions & 0 deletions hack/verify-examples.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/usr/bin/env bash

# hack/verify-examples.sh
# Pre-submit script to verify:
# 1.) committed generated code matches source
# 2.) code generation tests pass

# Exit immediately if any command fails
set -e

# Silence pushd/popd
pushd () {
command pushd "$@" > /dev/null
}

popd () {
command popd "$@" > /dev/null
}

# Ensure all files are committed
if ! git diff --quiet HEAD; then
echo "FAIL: git client is not clean"
exit 1
fi

echo "Removing generated code"

# Defaulter-gen and deepcopy-gen both generate types of this format
find ./examples -name "zz_generated.go" -type f -delete

# Delete set-gen tests
find ./examples/set-gen/sets -type f -maxdepth 1 -not -name "set_test.go" -not -name "doc.go" -delete

# Generate set-gen first since others depend on it
echo "Generating example output..."
go generate ./examples/set-gen/...
go generate ./examples/...
pushd ./examples/defaulter-gen/_output_tests; go generate ./...; popd

# If there are any differences with committed files, fail
if ! git diff --quiet HEAD; then
echo "FAIL: output files changed"
git diff
exit 1
fi

echo "Running tests..."
go test ./examples/...
pushd ./examples/defaulter-gen/_output_tests; go test ./...; popd

0 comments on commit 3ffd65d

Please sign in to comment.