Skip to content

Commit 4b0080d

Browse files
committed
add prerelease-lifecycle generator for beta API types
1 parent 88c5f64 commit 4b0080d

File tree

7 files changed

+665
-0
lines changed

7 files changed

+665
-0
lines changed

staging/src/k8s.io/code-generator/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ filegroup(
1818
"//staging/src/k8s.io/code-generator/cmd/informer-gen:all-srcs",
1919
"//staging/src/k8s.io/code-generator/cmd/lister-gen:all-srcs",
2020
"//staging/src/k8s.io/code-generator/cmd/openapi-gen:all-srcs",
21+
"//staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen:all-srcs",
2122
"//staging/src/k8s.io/code-generator/cmd/register-gen:all-srcs",
2223
"//staging/src/k8s.io/code-generator/cmd/set-gen:all-srcs",
2324
"//staging/src/k8s.io/code-generator/hack:all-srcs",
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
2+
3+
go_library(
4+
name = "go_default_library",
5+
srcs = ["main.go"],
6+
importmap = "k8s.io/kubernetes/vendor/k8s.io/code-generator/cmd/prerelease-lifecycle-gen",
7+
importpath = "k8s.io/code-generator/cmd/prerelease-lifecycle-gen",
8+
visibility = ["//visibility:private"],
9+
deps = [
10+
"//staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/args:go_default_library",
11+
"//staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators:go_default_library",
12+
"//staging/src/k8s.io/code-generator/pkg/util:go_default_library",
13+
"//vendor/github.com/spf13/pflag:go_default_library",
14+
"//vendor/k8s.io/gengo/args:go_default_library",
15+
"//vendor/k8s.io/klog:go_default_library",
16+
],
17+
)
18+
19+
go_binary(
20+
name = "status-gen",
21+
embed = [":go_default_library"],
22+
visibility = ["//visibility:public"],
23+
)
24+
25+
filegroup(
26+
name = "package-srcs",
27+
srcs = glob(["**"]),
28+
tags = ["automanaged"],
29+
visibility = ["//visibility:private"],
30+
)
31+
32+
filegroup(
33+
name = "all-srcs",
34+
srcs = [
35+
":package-srcs",
36+
"//staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/args:all-srcs",
37+
"//staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators:all-srcs",
38+
],
39+
tags = ["automanaged"],
40+
visibility = ["//visibility:public"],
41+
)
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
load("@io_bazel_rules_go//go:def.bzl", "go_library")
2+
3+
go_library(
4+
name = "go_default_library",
5+
srcs = ["args.go"],
6+
importmap = "k8s.io/kubernetes/vendor/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/args",
7+
importpath = "k8s.io/code-generator/cmd/prerelease-lifecycle-gen/args",
8+
visibility = ["//visibility:public"],
9+
deps = [
10+
"//staging/src/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators:go_default_library",
11+
"//vendor/github.com/spf13/pflag:go_default_library",
12+
"//vendor/k8s.io/gengo/args:go_default_library",
13+
],
14+
)
15+
16+
filegroup(
17+
name = "package-srcs",
18+
srcs = glob(["**"]),
19+
tags = ["automanaged"],
20+
visibility = ["//visibility:private"],
21+
)
22+
23+
filegroup(
24+
name = "all-srcs",
25+
srcs = [":package-srcs"],
26+
tags = ["automanaged"],
27+
visibility = ["//visibility:public"],
28+
)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
Copyright 2020 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package args
18+
19+
import (
20+
"fmt"
21+
22+
"github.com/spf13/pflag"
23+
statusgenerators "k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators"
24+
"k8s.io/gengo/args"
25+
)
26+
27+
// CustomArgs is used by the gengo framework to pass args specific to this generator.
28+
type CustomArgs statusgenerators.CustomArgs
29+
30+
// NewDefaults returns default arguments for the generator.
31+
func NewDefaults() (*args.GeneratorArgs, *CustomArgs) {
32+
genericArgs := args.Default().WithoutDefaultFlagParsing()
33+
customArgs := &CustomArgs{}
34+
genericArgs.CustomArgs = (*statusgenerators.CustomArgs)(customArgs) // convert to upstream type to make type-casts work there
35+
genericArgs.OutputFileBaseName = "zz_prerelease_lifecycle_generated"
36+
return genericArgs, customArgs
37+
}
38+
39+
// AddFlags add the generator flags to the flag set.
40+
func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet) {
41+
}
42+
43+
// Validate checks the given arguments.
44+
func Validate(genericArgs *args.GeneratorArgs) error {
45+
_ = genericArgs.CustomArgs.(*statusgenerators.CustomArgs)
46+
47+
if len(genericArgs.OutputFileBaseName) == 0 {
48+
return fmt.Errorf("output file base name cannot be empty")
49+
}
50+
51+
return nil
52+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
Copyright 2020 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
// prerelease-lifecycle-gen is a tool for auto-generating api-status.csv files.
18+
//
19+
// Given a list of input directories, it will create a zz_api_status.go file for all beta APIs which indicates the kinds,
20+
// the release it was introduced, the release it will be deprecated, and the release it will be removed.
21+
//
22+
// Generation is governed by comment tags in the source. Any package may
23+
// request Status generation by including a comment in the file-comments of
24+
// one file, of the form:
25+
// // +k8s:prerelease-lifecycle-gen=package
26+
//
27+
// // +k8s:prerelease-lifecycle-gen:introduced=1.19
28+
// // +k8s:prerelease-lifecycle-gen:to-be-deprecated=1.22
29+
// // +k8s:prerelease-lifecycle-gen:to-be-removed=1.25
30+
//
31+
// Note that registration is a whole-package option, and is not available for
32+
// individual types.
33+
package main
34+
35+
import (
36+
"flag"
37+
"path/filepath"
38+
39+
"github.com/spf13/pflag"
40+
generatorargs "k8s.io/code-generator/cmd/prerelease-lifecycle-gen/args"
41+
statusgenerators "k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators"
42+
"k8s.io/code-generator/pkg/util"
43+
"k8s.io/gengo/args"
44+
"k8s.io/klog"
45+
)
46+
47+
func main() {
48+
klog.InitFlags(nil)
49+
genericArgs, customArgs := generatorargs.NewDefaults()
50+
51+
// Override defaults.
52+
// TODO: move this out of prerelease-lifecycle-gen
53+
genericArgs.GoHeaderFilePath = filepath.Join(args.DefaultSourceTree(), util.BoilerplatePath())
54+
55+
genericArgs.AddFlags(pflag.CommandLine)
56+
customArgs.AddFlags(pflag.CommandLine)
57+
flag.Set("logtostderr", "true")
58+
pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
59+
pflag.Parse()
60+
61+
if err := generatorargs.Validate(genericArgs); err != nil {
62+
klog.Fatalf("Error: %v", err)
63+
}
64+
65+
// Run it.
66+
if err := genericArgs.Execute(
67+
statusgenerators.NameSystems(),
68+
statusgenerators.DefaultNameSystem(),
69+
statusgenerators.Packages,
70+
); err != nil {
71+
klog.Fatalf("Error: %v", err)
72+
}
73+
klog.V(2).Info("Completed successfully.")
74+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
load("@io_bazel_rules_go//go:def.bzl", "go_library")
2+
3+
go_library(
4+
name = "go_default_library",
5+
srcs = ["status.go"],
6+
importmap = "k8s.io/kubernetes/vendor/k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators",
7+
importpath = "k8s.io/code-generator/cmd/prerelease-lifecycle-gen/prerelease-lifecycle-generators",
8+
visibility = ["//visibility:public"],
9+
deps = [
10+
"//vendor/k8s.io/gengo/args:go_default_library",
11+
"//vendor/k8s.io/gengo/examples/set-gen/sets:go_default_library",
12+
"//vendor/k8s.io/gengo/generator:go_default_library",
13+
"//vendor/k8s.io/gengo/namer:go_default_library",
14+
"//vendor/k8s.io/gengo/types:go_default_library",
15+
"//vendor/k8s.io/klog:go_default_library",
16+
],
17+
)
18+
19+
filegroup(
20+
name = "package-srcs",
21+
srcs = glob(["**"]),
22+
tags = ["automanaged"],
23+
visibility = ["//visibility:private"],
24+
)
25+
26+
filegroup(
27+
name = "all-srcs",
28+
srcs = [":package-srcs"],
29+
tags = ["automanaged"],
30+
visibility = ["//visibility:public"],
31+
)

0 commit comments

Comments
 (0)