Skip to content

Commit effdba1

Browse files
committed
cmd/rofl: Refactor build subcommand
1 parent d53d2e5 commit effdba1

File tree

3 files changed

+73
-52
lines changed

3 files changed

+73
-52
lines changed

cmd/rofl/build/build.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package build
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/spf13/cobra"
8+
flag "github.com/spf13/pflag"
9+
10+
consensus "github.com/oasisprotocol/oasis-core/go/consensus/api"
11+
"github.com/oasisprotocol/oasis-sdk/client-sdk/go/connection"
12+
13+
"github.com/oasisprotocol/cli/cmd/common"
14+
)
15+
16+
// Build modes.
17+
const (
18+
buildModeProduction = "production"
19+
buildModeUnsafe = "unsafe"
20+
buildModeAuto = "auto"
21+
)
22+
23+
var (
24+
outputFn string
25+
buildMode string
26+
offline bool
27+
28+
Cmd = &cobra.Command{
29+
Use: "build",
30+
Short: "Build a ROFL application",
31+
}
32+
)
33+
34+
func detectBuildMode(npa *common.NPASelection) {
35+
// Configure build mode. In case auto is selected and not offline, query the network. If
36+
// autodetection fails, default to production mode.
37+
switch {
38+
case buildMode == buildModeAuto && !offline:
39+
ctx := context.Background()
40+
conn, err := connection.Connect(ctx, npa.Network)
41+
if err != nil {
42+
cobra.CheckErr(fmt.Errorf("unable to autodetect build mode, please provide --mode flag manually (failed to connect to GRPC endpoint: %w)", err))
43+
}
44+
45+
params, err := conn.Consensus().Registry().ConsensusParameters(ctx, consensus.HeightLatest)
46+
if err != nil {
47+
cobra.CheckErr(fmt.Errorf("unable to autodetect build mode, please provide --mode flag manually (failed to get consensus parameters: %w)", err))
48+
}
49+
50+
if params.DebugAllowTestRuntimes {
51+
buildMode = buildModeUnsafe
52+
}
53+
default:
54+
}
55+
}
56+
57+
func init() {
58+
globalFlags := flag.NewFlagSet("", flag.ContinueOnError)
59+
globalFlags.StringVar(&buildMode, "mode", "auto", "build mode [production, unsafe, auto]")
60+
globalFlags.BoolVar(&offline, "offline", false, "do not perform any operations requiring network access")
61+
globalFlags.StringVar(&outputFn, "output", "", "output bundle filename")
62+
63+
Cmd.PersistentFlags().AddFlagSet(globalFlags)
64+
Cmd.AddCommand(sgxCmd)
65+
}
Lines changed: 5 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
package rofl
1+
package build
22

33
import (
4-
"context"
54
"crypto/rand"
65
"crypto/rsa"
76
"fmt"
@@ -17,39 +16,21 @@ import (
1716
"github.com/oasisprotocol/oasis-core/go/common/sgx"
1817
"github.com/oasisprotocol/oasis-core/go/common/sgx/sigstruct"
1918
"github.com/oasisprotocol/oasis-core/go/common/version"
20-
consensus "github.com/oasisprotocol/oasis-core/go/consensus/api"
2119
"github.com/oasisprotocol/oasis-core/go/runtime/bundle"
2220
"github.com/oasisprotocol/oasis-core/go/runtime/bundle/component"
23-
"github.com/oasisprotocol/oasis-sdk/client-sdk/go/connection"
2421

2522
"github.com/oasisprotocol/cli/build/cargo"
2623
"github.com/oasisprotocol/cli/build/sgxs"
2724
"github.com/oasisprotocol/cli/cmd/common"
2825
cliConfig "github.com/oasisprotocol/cli/config"
2926
)
3027

31-
// Build modes.
32-
const (
33-
buildModeProduction = "production"
34-
buildModeUnsafe = "unsafe"
35-
buildModeAuto = "auto"
36-
)
37-
3828
var (
3929
sgxHeapSize uint64
4030
sgxStackSize uint64
4131
sgxThreads uint64
4232

43-
outputFn string
44-
buildMode string
45-
offline bool
46-
47-
buildCmd = &cobra.Command{
48-
Use: "build",
49-
Short: "Build a ROFL application",
50-
}
51-
52-
buildSgxCmd = &cobra.Command{
33+
sgxCmd = &cobra.Command{
5334
Use: "sgx",
5435
Short: "Build an SGX-based Rust ROFL application",
5536
Args: cobra.NoArgs,
@@ -65,26 +46,7 @@ var (
6546

6647
fmt.Println("Building an SGX-based Rust ROFL application...")
6748

68-
// Configure build mode. In case auto is selected and not offline, query the network.
69-
// If autodetection fails, default to production mode.
70-
switch {
71-
case buildMode == buildModeAuto && !offline:
72-
ctx := context.Background()
73-
conn, err := connection.Connect(ctx, npa.Network)
74-
if err != nil {
75-
cobra.CheckErr(fmt.Errorf("unable to autodetect build mode, please provide --mode flag manually: failed to connect to GRPC endpoint: %v", err))
76-
}
77-
78-
params, err := conn.Consensus().Registry().ConsensusParameters(ctx, consensus.HeightLatest)
79-
if err != nil {
80-
cobra.CheckErr(fmt.Errorf("unable to autodetect build mode, please provide --mode flag manually: failed to get consensus parameters: %v", err))
81-
}
82-
83-
if params.DebugAllowTestRuntimes {
84-
buildMode = buildModeUnsafe
85-
}
86-
default:
87-
}
49+
detectBuildMode(npa)
8850
features := sgxSetupBuildEnv()
8951

9052
// Obtain package metadata.
@@ -333,15 +295,7 @@ func init() {
333295
sgxFlags.Uint64Var(&sgxHeapSize, "sgx-heap-size", 512*1024*1024, "SGX enclave heap size")
334296
sgxFlags.Uint64Var(&sgxStackSize, "sgx-stack-size", 2*1024*1024, "SGX enclave stack size")
335297
sgxFlags.Uint64Var(&sgxThreads, "sgx-threads", 32, "SGX enclave maximum number of threads")
336-
sgxFlags.StringVar(&outputFn, "output", "", "output bundle filename")
337-
338-
globalFlags := flag.NewFlagSet("", flag.ContinueOnError)
339-
globalFlags.StringVar(&buildMode, "mode", "auto", "build mode [production, unsafe, auto]")
340-
globalFlags.BoolVar(&offline, "offline", false, "do not perform any operations requiring network access")
341-
342-
buildSgxCmd.Flags().AddFlagSet(common.SelectorNPFlags)
343-
buildSgxCmd.Flags().AddFlagSet(sgxFlags)
344298

345-
buildCmd.PersistentFlags().AddFlagSet(globalFlags)
346-
buildCmd.AddCommand(buildSgxCmd)
299+
sgxCmd.Flags().AddFlagSet(common.SelectorNPFlags)
300+
sgxCmd.Flags().AddFlagSet(sgxFlags)
347301
}

cmd/rofl/rofl.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package rofl
22

33
import (
44
"github.com/spf13/cobra"
5+
6+
"github.com/oasisprotocol/cli/cmd/rofl/build"
57
)
68

79
var Cmd = &cobra.Command{
@@ -16,6 +18,6 @@ func init() {
1618
Cmd.AddCommand(removeCmd)
1719
Cmd.AddCommand(showCmd)
1820
Cmd.AddCommand(trustRootCmd)
19-
Cmd.AddCommand(buildCmd)
21+
Cmd.AddCommand(build.Cmd)
2022
Cmd.AddCommand(identityCmd)
2123
}

0 commit comments

Comments
 (0)