Skip to content

Commit c28533b

Browse files
oceanc80grokspawn
authored andcommitted
Add pipe support to opm alpha render-veneer semver (#1015)
Signed-off-by: Catherine Chan-Tse <[email protected]> Upstream-commit: 166ed6b607a412f955dcc2b7293b9e338eaae5ae Upstream-repository: operator-registry
1 parent aec6a49 commit c28533b

File tree

3 files changed

+48
-19
lines changed

3 files changed

+48
-19
lines changed

staging/operator-registry/alpha/veneer/semver/README.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,10 @@ In this example, `Candidate` has the entire version range of bundles, `Fast` ha
5656
```
5757
% ./bin/opm alpha render-veneer semver -h
5858
Generate a file-based catalog from a single 'semver veneer' file
59+
When FILE is '-' or not provided, the veneer is read from standard input
5960

6061
Usage:
61-
opm alpha render-veneer semver <filename> [flags]
62+
opm alpha render-veneer semver [FILE] [flags]
6263

6364
Flags:
6465
-h, --help help for semver
@@ -68,6 +69,22 @@ Global Flags:
6869
--skip-tls-verify skip TLS certificate verification for container image registries while pulling bundles
6970
--use-http use plain HTTP for container image registries while pulling bundles
7071
```
72+
73+
Example command usage:
74+
```
75+
# Example with file argument passed in
76+
opm alpha render-veneer semver infile.semver.veneer.yaml
77+
78+
# Example with no file argument passed in
79+
opm alpha render-veneer semver -o yaml < infile.semver.veneer.yaml > outfile.yaml
80+
81+
# Example with "-" as the file argument passed in
82+
cat infile.semver.veneer.yaml | opm alpha render-veneer semver -o mermaid -
83+
```
84+
Note that if the command is called without a file argument and nothing passed in on standard input,
85+
the command will hang indefinitely. Either a file argument or file information passed
86+
in on standard input is required by the command.
87+
7188
With the veneer attribute `GenerateMajorChannels: true` resulting major channels from the command are (skipping the rendered bundle image output):
7289
```yaml
7390
---

staging/operator-registry/alpha/veneer/semver/semver.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package semver
33
import (
44
"context"
55
"fmt"
6-
"io/ioutil"
6+
"io"
77
"sort"
88

99
"github.com/blang/semver/v4"
@@ -18,8 +18,8 @@ import (
1818

1919
// data passed into this module externally
2020
type Veneer struct {
21-
Ref string
22-
Reg image.Registry
21+
Data io.Reader
22+
Registry image.Registry
2323
}
2424

2525
// IO structs -- BEGIN
@@ -78,7 +78,7 @@ type semverRenderedChannelVersions map[string]map[string]semver.Version // e.g.
7878
func (v Veneer) Render(ctx context.Context) (*declcfg.DeclarativeConfig, error) {
7979
var out declcfg.DeclarativeConfig
8080

81-
sv, err := readFile(v.Ref)
81+
sv, err := readFile(v.Data)
8282
if err != nil {
8383
return nil, fmt.Errorf("semver-render: unable to read file: %v", err)
8484
}
@@ -88,7 +88,7 @@ func (v Veneer) Render(ctx context.Context) (*declcfg.DeclarativeConfig, error)
8888
r := action.Render{
8989
AllowedRefMask: action.RefBundleImage,
9090
Refs: []string{b.Image},
91-
Registry: v.Reg,
91+
Registry: v.Registry,
9292
}
9393
c, err := r.Run(ctx)
9494
if err != nil {
@@ -114,8 +114,8 @@ func (v Veneer) Render(ctx context.Context) (*declcfg.DeclarativeConfig, error)
114114
return &out, nil
115115
}
116116

117-
func readFile(ref string) (*semverVeneer, error) {
118-
data, err := ioutil.ReadFile(ref)
117+
func readFile(data io.Reader) (*semverVeneer, error) {
118+
fileData, err := io.ReadAll(data)
119119
if err != nil {
120120
return nil, err
121121
}
@@ -126,7 +126,7 @@ func readFile(ref string) (*semverVeneer, error) {
126126
GenerateMinorChannels: true,
127127
AvoidSkipPatch: false,
128128
}
129-
if err := yaml.Unmarshal(data, &sv); err != nil {
129+
if err := yaml.Unmarshal(fileData, &sv); err != nil {
130130
return nil, err
131131
}
132132
return &sv, nil

staging/operator-registry/cmd/opm/alpha/veneer/semver.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,29 @@ import (
1818
func newSemverCmd() *cobra.Command {
1919
output := ""
2020
cmd := &cobra.Command{
21-
Use: "semver <filename>",
22-
Short: "Generate a file-based catalog from a single 'semver veneer' file",
23-
Long: `Generate a file-based catalog from a single 'semver veneer' file`,
24-
Args: cobra.MinimumNArgs(1),
21+
Use: "semver [FILE]",
22+
Short: "Generate a file-based catalog from a single 'semver veneer' file \nWhen FILE is '-' or not provided, the veneer is read from standard input",
23+
Long: "Generate a file-based catalog from a single 'semver veneer' file \nWhen FILE is '-' or not provided, the veneer is read from standard input",
24+
Args: cobra.MaximumNArgs(1),
2525
RunE: func(cmd *cobra.Command, args []string) error {
26-
ref := args[0]
27-
2826
var (
29-
err error
27+
data io.Reader
28+
err error
3029
)
3130

31+
// Handle different input argument types
32+
if len(args) == 0 || args[0] == "-" {
33+
// When no arguments or "-" is passed to the command,
34+
// assume input is coming from stdin
35+
data = cmd.InOrStdin()
36+
} else {
37+
// Otherwise open the file passed to the command
38+
data, err = os.Open(args[0])
39+
if err != nil {
40+
return err
41+
}
42+
}
43+
3244
var write func(declcfg.DeclarativeConfig, io.Writer) error
3345
switch output {
3446
case "json":
@@ -53,12 +65,12 @@ func newSemverCmd() *cobra.Command {
5365
defer reg.Destroy()
5466

5567
veneer := semver.Veneer{
56-
Ref: ref,
57-
Reg: reg,
68+
Data: data,
69+
Registry: reg,
5870
}
5971
out, err := veneer.Render(cmd.Context())
6072
if err != nil {
61-
log.Fatalf("semver %q: %v", ref, err)
73+
log.Fatalf("semver %q: %v", data, err)
6274
}
6375

6476
if out != nil {

0 commit comments

Comments
 (0)