Skip to content

Commit 608390e

Browse files
committed
fixes + github action
github action fix removed bin kubeconfig removed btrfs-tools sudo
1 parent 34a861e commit 608390e

File tree

14 files changed

+285
-120
lines changed

14 files changed

+285
-120
lines changed

.github/workflows/go.yml

Lines changed: 61 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go
33

44
name: Go
5-
65
on:
7-
push:
8-
branches: [ "main" ]
6+
release:
7+
types: [published]
98
pull_request:
10-
branches: [ "main" ]
119

1210
jobs:
1311

@@ -21,8 +19,64 @@ jobs:
2119
with:
2220
go-version: '1.23.1'
2321

24-
- name: Build
25-
run: go build -o bin/krknctl -v ./...
22+
- name: Advance Version
23+
if: github.event_name == 'release' && github.event.action == 'published'
24+
run: |
25+
cat <<< $(jq '.version="${{github.event.release.tag_name}}"' internal/config/config.json) > internal/config/config.json
26+
27+
- name: Build Linux AMD64
28+
if: github.event_name == 'release' && github.event.action == 'published'
29+
env:
30+
GOOS: "linux"
31+
GOARCH: "amd64"
32+
BINARY: "linux-amd64"
33+
run: |
34+
export FILENAME=krknctl-${{github.event.release.tag_name}}-$BINARY.tar.gz
35+
sudo apt-get update && sudo apt-get install btrfs-tools
36+
go build -tags containers_image_openpgp -ldflags="-w -s" -o $BINARY/ ./...
37+
tar cfvz $FILENAME -C $BINARY krknctl
38+
gh release upload ${{github.event.release.tag_name}} $FILENAME
39+
40+
- name: Build Linux ARM64
41+
if: github.event_name == 'release' && github.event.action == 'published'
42+
env:
43+
GOOS: "linux"
44+
GOARCH: "arm64"
45+
BINARY: "linux-amd64"
46+
run: |
47+
export FILENAME=krknctl-${{github.event.release.tag_name}}-$BINARY.tar.gz
48+
sudo apt-get update && sudo apt-get install btrfs-tools
49+
go build -tags containers_image_openpgp -ldflags="-w -s" -o $BINARY/ ./...
50+
tar cfvz $FILENAME -C $BINARY krknctl
51+
gh release upload ${{github.event.release.tag_name}} $FILENAME
52+
53+
- name: Build Darwin ARM64
54+
if: github.event_name == 'release' && github.event.action == 'published'
55+
env:
56+
GOOS: "darwin"
57+
GOARCH: "arm64"
58+
BINARY: "darwin-arm64"
59+
run: |
60+
export FILENAME=krknctl-${{github.event.release.tag_name}}-$BINARY.tar.gz
61+
sudo apt-get update && sudo apt-get install btrfs-tools
62+
go build -tags containers_image_openpgp -ldflags="-w -s" -o $BINARY/ ./...
63+
tar cfvz $FILENAME -C $BINARY krknctl
64+
gh release upload ${{github.event.release.tag_name}} $FILENAME
65+
66+
- name: Build Darwin AMD64
67+
if: github.event_name == 'release' && github.event.action == 'published'
68+
env:
69+
GOOS: "darwin"
70+
GOARCH: "amd64"
71+
BINARY: "darwin-arm64"
72+
run: |
73+
export FILENAME=krknctl-${{github.event.release.tag_name}}-$BINARY.tar.gz
74+
sudo apt-get update && sudo apt-get install btrfs-tools
75+
go build -tags containers_image_openpgp -ldflags="-w -s" -o $BINARY/ ./...
76+
tar cfvz $FILENAME -C $BINARY krknctl
77+
gh release upload ${{github.event.release.tag_name}} $FILENAME
2678
2779
- name: Test
28-
run: go test -v ./...
80+
if: github.event_name == 'pull_request'
81+
run: |
82+
go test -v ./...

README.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ _Work In Progress_
1313

1414
## Command Autocompletion
1515

16+
### Mac autocompletion
17+
18+
autoload -Uz compinit
19+
compinit
20+
1621
Command autocompletion is powered by the [Cobra Command](https://github.com/spf13/cobra) Library. Metadata is retrieved as described above, and the autocompletion feature is installed via the `completion` command. It is compatible with most popular *nix shells:
1722

1823
![command autocomplete](media/autocomplete.gif)
@@ -93,4 +98,17 @@ Containers are running, working on the wiring, stay tuned!
9398
_Work In Progress_
9499

95100
### Docker
96-
_Work In Progress_
101+
_Work In Progress_
102+
103+
104+
### Build on mac
105+
brew install gpgme
106+
107+
108+
### Cross compiling
109+
export GOOS="darwin/linux"
110+
export GOARCH="amd64/arm64"
111+
112+
go build -tags containers_image_openpgp -gcflags=all="-l -B -wb=false" -ldflags="-w -s" -o bin-linux-amd64/ ./...
113+
114+
go build -tags containers_image_openpgp -ldflags="-w -s" -o bin-darwin-arm/ ./...

cmd/describe.go

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,17 @@ func NewDescribeCommand(factory *factory.ProviderFactory, config config.Config)
1818
Long: `describes a scenario`,
1919
Args: cobra.ExactArgs(1),
2020
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
21-
offline, err := cmd.Flags().GetBool("offline")
22-
//offlineRepo, err := cmd.Flags().GetString("offline-repo-config")
23-
if err != nil {
24-
return []string{}, cobra.ShellCompDirectiveError
25-
}
26-
// WIP: datasource offline TBD
27-
dataSource := BuildDataSource(config, offline, nil)
28-
provider := GetProvider(offline, factory)
21+
// TODO: datasource offline TBD
22+
/*
23+
offline, err := cmd.Flags().GetBool("offline")
24+
offlineRepo, err := cmd.Flags().GetString("offline-repo-config")
25+
if err != nil {
26+
return []string{}, cobra.ShellCompDirectiveError
27+
}
28+
*/
29+
30+
dataSource := BuildDataSource(config, false, nil)
31+
provider := GetProvider(false, factory)
2932

3033
scenarios, err := FetchScenarios(provider, dataSource)
3134
if err != nil {
@@ -37,15 +40,19 @@ func NewDescribeCommand(factory *factory.ProviderFactory, config config.Config)
3740

3841
},
3942
RunE: func(cmd *cobra.Command, args []string) error {
40-
offline, err := cmd.Flags().GetBool("offline")
41-
if err != nil {
42-
return err
43-
}
44-
// WIP: datasource offline TBD
45-
dataSource := BuildDataSource(config, offline, nil)
43+
// TODO: datasource offline TBD
44+
/*
45+
offline, err := cmd.Flags().GetBool("offline")
46+
offlineRepo, err := cmd.Flags().GetString("offline-repo-config")
47+
if err != nil {
48+
return err
49+
}
50+
*/
51+
52+
dataSource := BuildDataSource(config, false, nil)
4653
spinner := NewSpinnerWithSuffix("fetching scenario details...")
4754
spinner.Start()
48-
provider := GetProvider(offline, factory)
55+
provider := GetProvider(false, factory)
4956
scenarioDetail, err := provider.GetScenarioDetail(args[0], dataSource)
5057
if err != nil {
5158
return err

cmd/list.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@ func NewListCommand(factory *provider_factory.ProviderFactory, config config.Con
1515
Long: `list available krkn-hub scenarios`,
1616
Args: cobra.NoArgs,
1717
RunE: func(cmd *cobra.Command, args []string) error {
18-
offline, err := cmd.Flags().GetBool("offline")
19-
//offlineRepo, err := cmd.Flags().GetString("offline-repo-config")
20-
if err != nil {
21-
return err
22-
}
23-
// WIP: datasource offline TBD
24-
dataSource := BuildDataSource(config, offline, nil)
25-
provider := GetProvider(offline, factory)
18+
// TODO: datasource offline TBD
19+
/*
20+
offline, err := cmd.Flags().GetBool("offline")
21+
offlineRepo, err := cmd.Flags().GetString("offline-repo-config")
22+
if err != nil {
23+
return err
24+
}
25+
*/
26+
dataSource := BuildDataSource(config, false, nil)
27+
provider := GetProvider(false, factory)
2628
s := NewSpinnerWithSuffix("fetching scenarios...")
2729
s.Start()
2830
scenarios, err := provider.GetScenarios(dataSource)

cmd/root.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,18 @@ import (
99
)
1010

1111
func Execute(providerFactory *factory.ProviderFactory, containerManager *container_manager.ContainerManager, config config.Config) {
12-
var jsonFlag bool
13-
var offlineFlag bool
14-
var offlineRepoConfig string
15-
rootCmd := NewRootCommand(providerFactory)
16-
rootCmd.PersistentFlags().BoolVarP(&jsonFlag, "json", "j", false, "Output in JSON")
17-
rootCmd.PersistentFlags().BoolVarP(&offlineFlag, "offline", "o", false, "Offline mode")
18-
rootCmd.PersistentFlags().StringVarP(&offlineRepoConfig, "offline-repo-config", "r", "", "Offline repository config file")
19-
rootCmd.MarkFlagsRequiredTogether("offline", "offline-repo-config")
12+
13+
rootCmd := NewRootCommand(providerFactory, config)
14+
// TODO: json output + offline repos
15+
/*
16+
var jsonFlag bool
17+
var offlineFlag bool
18+
var offlineRepoConfig string
19+
rootCmd.PersistentFlags().BoolVarP(&jsonFlag, "json", "j", false, "Output in JSON")
20+
rootCmd.PersistentFlags().BoolVarP(&offlineFlag, "offline", "o", false, "Offline mode")
21+
rootCmd.PersistentFlags().StringVarP(&offlineRepoConfig, "offline-repo-config", "r", "", "Offline repository config file")
22+
rootCmd.MarkFlagsRequiredTogether("offline", "offline-repo-config")
23+
*/
2024

2125
listCmd := NewListCommand(providerFactory, config)
2226
rootCmd.AddCommand(listCmd)

cmd/run.go

Lines changed: 60 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,17 @@ func NewRunCommand(factory *factory.ProviderFactory, containerManager *container
1919
DisableFlagParsing: false,
2020
Args: cobra.MinimumNArgs(1),
2121
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
22-
offline, err := cmd.Flags().GetBool("offline")
23-
//offlineRepo, err := cmd.Flags().GetString("offline-repo-config")
24-
if err != nil {
25-
return []string{}, cobra.ShellCompDirectiveError
26-
}
27-
// WIP: datasource offline TBD
28-
dataSource := BuildDataSource(config, offline, nil)
29-
provider := GetProvider(offline, factory)
22+
// TODO: datasource offline TBD
23+
/*
24+
offline, err := cmd.Flags().GetBool("offline")
25+
offlineRepo, err := cmd.Flags().GetString("offline-repo-config")
26+
if err != nil {
27+
return []string{}, cobra.ShellCompDirectiveError
28+
}
29+
*/
30+
31+
dataSource := BuildDataSource(config, false, nil)
32+
provider := GetProvider(false, factory)
3033

3134
scenarios, err := FetchScenarios(provider, dataSource)
3235
if err != nil {
@@ -38,13 +41,16 @@ func NewRunCommand(factory *factory.ProviderFactory, containerManager *container
3841
},
3942

4043
PreRunE: func(cmd *cobra.Command, args []string) error {
41-
offline, err := cmd.Flags().GetBool("offline")
42-
if err != nil {
43-
return err
44-
}
45-
// WIP: datasource offline TBD
46-
dataSource := BuildDataSource(config, offline, nil)
47-
provider := GetProvider(offline, factory)
44+
// TODO: datasource offline TBD
45+
/*
46+
offline, err := cmd.Flags().GetBool("offline")
47+
offlineRepo, err := cmd.Flags().GetString("offline-repo-config")
48+
if err != nil {
49+
return err
50+
}
51+
*/
52+
dataSource := BuildDataSource(config, false, nil)
53+
provider := GetProvider(false, factory)
4854
scenarioDetail, err := provider.GetScenarioDetail(args[0], dataSource)
4955
if err != nil {
5056
return err
@@ -68,29 +74,46 @@ func NewRunCommand(factory *factory.ProviderFactory, containerManager *container
6874
return nil
6975
},
7076
RunE: func(cmd *cobra.Command, args []string) error {
71-
77+
// TODO: datasource offline TBD
78+
/*
79+
offline, err := cmd.Flags().GetBool("offline")
80+
offlineRepo, err := cmd.Flags().GetString("offline-repo-config")
81+
if err != nil {
82+
return err
83+
}
84+
*/
7285
spinner := NewSpinnerWithSuffix("validating input...")
73-
offline, err := cmd.Flags().GetBool("offline")
74-
if err != nil {
75-
return err
76-
}
77-
// WIP: datasource offline TBD
78-
dataSource := BuildDataSource(config, offline, nil)
86+
dataSource := BuildDataSource(config, false, nil)
7987
spinner.Start()
8088

81-
provider := GetProvider(offline, factory)
89+
provider := GetProvider(false, factory)
8290
scenarioDetail, err := provider.GetScenarioDetail(args[0], dataSource)
8391
if err != nil {
8492
return err
8593
}
8694
spinner.Stop()
87-
// default
88-
kubeconfig, err := cmd.LocalFlags().GetString("kubeconfig")
95+
8996
if err != nil {
9097
return err
9198
}
9299

93100
environment := make(map[string]string)
101+
102+
var foundKubeconfig *string = nil
103+
for i, a := range args {
104+
if strings.HasPrefix(a, "--") {
105+
if len(args) < i+2 || strings.HasPrefix(args[i+1], "--") {
106+
return fmt.Errorf("%s has no value", args[i])
107+
}
108+
// since automatic flag parsing is disabled to allow dynamic flags
109+
// flags need to be parsed manually here eg. kubeconfig
110+
if a == "--kubeconfig" {
111+
foundKubeconfig = &args[i+1]
112+
}
113+
}
114+
}
115+
116+
//dynamic flags parsing
94117
for k, _ := range collectedFlags {
95118
field := scenarioDetail.GetFieldByName(k)
96119
var foundArg *string = nil
@@ -103,7 +126,7 @@ func NewRunCommand(factory *factory.ProviderFactory, containerManager *container
103126
}
104127
}
105128
if field != nil {
106-
// if null returns the default
129+
107130
value, err := field.Validate(foundArg)
108131
if err != nil {
109132
return err
@@ -112,9 +135,10 @@ func NewRunCommand(factory *factory.ProviderFactory, containerManager *container
112135
environment[*field.Variable] = *value
113136
}
114137

115-
/* if value == nil && field.Required == false {
116-
fmt.Println(fmt.Sprintf("%s: nil default but not required", *field.Name))
117-
}*/
138+
/*
139+
if value == nil && field.Required == false {
140+
fmt.Println(fmt.Sprintf("%s: nil default but not required", *field.Name))
141+
*/
118142

119143
}
120144

@@ -123,14 +147,19 @@ func NewRunCommand(factory *factory.ProviderFactory, containerManager *container
123147
tbl := NewEnvironmentTable(environment)
124148
tbl.Print()
125149
fmt.Print("\n")
126-
kubeconfigPath, err := container_manager.PrepareKubeconfig(&kubeconfig)
150+
kubeconfigPath, err := container_manager.PrepareKubeconfig(foundKubeconfig, config)
127151
if err != nil {
128152
return err
129153
}
130154
//WIP
155+
socket, err := (*containerManager).GetContainerRuntimeSocket()
156+
if err != nil {
157+
return err
158+
}
159+
131160
containerId, err := (*containerManager).RunAndStream(config.GetQuayImageUri()+":"+scenarioDetail.Name,
132161
scenarioDetail.Name,
133-
(*containerManager).GetContainerRuntimeUri(),
162+
*socket,
134163
environment,
135164
false,
136165
map[string]string{},

cmd/utils.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ func NewSpinnerWithSuffix(suffix string) *spinner.Spinner {
1515
return s
1616
}
1717

18-
func NewRootCommand(factory *factory.ProviderFactory) *cobra.Command {
18+
func NewRootCommand(factory *factory.ProviderFactory, krknctl_config config.Config) *cobra.Command {
1919
var rootCmd = &cobra.Command{
20-
Use: "krknctl",
21-
Short: "krkn CLI",
22-
Long: `krkn Command Line Interface`,
20+
Use: "krknctl",
21+
Short: "krkn CLI",
22+
Long: `krkn Command Line Interface`,
23+
Version: krknctl_config.Version,
2324
RunE: func(cmd *cobra.Command, args []string) error {
2425
return cmd.Help()
2526
},

0 commit comments

Comments
 (0)