Skip to content

Commit ed8a66f

Browse files
committed
cmd: add additional CLI entrypoint and build separately
1 parent 02ed4a3 commit ed8a66f

19 files changed

+96
-39
lines changed

.dockerignore

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ data/
44
Dockerfile
55
internal/resources/blocky
66
internal/resources/macoui
7+
bin/**

.github/workflows/build-tag.yml

+25
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ jobs:
1515
build:
1616
name: Build
1717
runs-on: ubuntu-latest
18+
outputs:
19+
release_upload_url: ${{ steps.create_release.outputs.upload_url }}
1820
steps:
1921
- uses: actions/checkout@v4
2022
- uses: docker/setup-qemu-action@v3
@@ -37,7 +39,10 @@ jobs:
3739
build-args: |
3840
BUILD=${{ steps.vars.outputs.build }}
3941
GIT_BUILD_HASH=${{ steps.vars.outputs.sha }}
42+
- run: |
43+
make bin/gravity-cli
4044
- uses: actions/[email protected]
45+
id: create_release
4146
env:
4247
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
4348
with:
@@ -63,3 +68,23 @@ jobs:
6368
```
6469
go get beryju.io/gravity@v${{ steps.vars.outputs.version }}
6570
```
71+
build-cli:
72+
name: Build CLI
73+
needs: build
74+
runs-on: ubuntu-latest
75+
strategy:
76+
matrix:
77+
arch: [arm64, amd64]
78+
os: [darwin, linux]
79+
steps:
80+
- uses: actions/checkout@v4
81+
- run: |
82+
GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} make bin/gravity-cli
83+
- uses: actions/upload-release-asset@v1
84+
env:
85+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
86+
with:
87+
upload_url: ${{ needs.build.outputs.release_upload_url }}
88+
asset_path: ./bin/gravity-cli
89+
asset_name: gravity-cli_${{ matrix.os }}_${{ matrix.arch }}
90+
asset_content_type: application/octet-stream

.github/workflows/build.yml

+11
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,14 @@ jobs:
4040
BUILD=${{ steps.vars.outputs.build }}
4141
GIT_BUILD_HASH=${{ steps.vars.outputs.sha }}
4242
CC_GH_COMMIT_SHA=${{ github.event.pull_request.head.sha }}
43+
build-cli:
44+
name: Build CLI
45+
runs-on: ubuntu-latest
46+
strategy:
47+
matrix:
48+
arch: [arm64, amd64]
49+
os: [darwin, linux]
50+
steps:
51+
- uses: actions/checkout@v4
52+
- run: |
53+
GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} make bin/gravity-cli

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ coverage.html
66
*.sock
77
tests.json
88
test-output
9+
bin/**

Makefile

+22-15
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,18 @@ ci--env:
1919
docker-build: internal/resources/macoui internal/resources/blocky internal/resources/tftp
2020
go build \
2121
-ldflags "${LD_FLAGS} -X beryju.io/gravity/pkg/extconfig.BuildHash=${GIT_BUILD_HASH}" \
22-
-v -a -o gravity .
22+
-v -a -o gravity ${PWD}
2323

2424
clean:
2525
rm -rf ${PWD}/data/
26+
rm -rf ${PWD}/bin/
2627

2728
run: internal/resources/macoui internal/resources/blocky internal/resources/tftp
2829
export INSTANCE_LISTEN=0.0.0.0
2930
export DEBUG=true
3031
export LISTEN_ONLY=true
3132
$(eval LD_FLAGS := -X beryju.io/gravity/pkg/extconfig.Version=${VERSION} -X beryju.io/gravity/pkg/extconfig.BuildHash=dev-$(shell git rev-parse HEAD))
32-
go run ${GO_FLAGS} . server
33+
go run ${GO_FLAGS} ${PWD} server
3334

3435
# Web
3536
web-install:
@@ -51,33 +52,39 @@ web-lint:
5152
npm run lint
5253
npm run lit-analyse
5354

55+
# CLI
56+
bin/gravity-cli:
57+
$(eval LD_FLAGS := -X beryju.io/gravity/pkg/extconfig.Version=${VERSION} -X beryju.io/gravity/pkg/extconfig.BuildHash=dev-$(shell git rev-parse HEAD))
58+
mkdir -p ${PWD}/bin/
59+
go build ${GO_FLAGS} -o ${PWD}/bin/gravity-cli ${PWD}/cmd/cli/main/
60+
5461
# Website
5562
website-watch:
5663
cd ${PWD}/docs
5764
open http://localhost:1313/ && hugo server --noBuildLock
5865

5966
internal/resources/macoui:
6067
mkdir -p internal/resources/macoui
61-
curl -L https://raw.githubusercontent.com/wireshark/wireshark/6885d787fda5f74a2d1f9eeea443fecf8dd58528/manuf -o ./internal/resources/macoui/db.txt
68+
curl -L https://raw.githubusercontent.com/wireshark/wireshark/6885d787fda5f74a2d1f9eeea443fecf8dd58528/manuf -o ${PWD}/internal/resources/macoui/db.txt
6269

6370
internal/resources/blocky:
6471
mkdir -p internal/resources/blocky
65-
curl -L https://adaway.org/hosts.txt -o ./internal/resources/blocky/adaway.org.txt
66-
curl -L https://big.oisd.nl/domainswild -o ./internal/resources/blocky/big.oisd.nl.txt
67-
curl -L https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts -o ./internal/resources/blocky/StevenBlack.hosts.txt
68-
curl -L https://v.firebog.net/hosts/AdguardDNS.txt -o ./internal/resources/blocky/AdguardDNS.txt
69-
curl -L https://v.firebog.net/hosts/Easylist.txt -o ./internal/resources/blocky/Easylist.txt
70-
curl -L https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt -o ./internal/resources/blocky/AdGuardSDNSFilter.txt
72+
curl -L https://adaway.org/hosts.txt -o ${PWD}/internal/resources/blocky/adaway.org.txt
73+
curl -L https://big.oisd.nl/domainswild -o ${PWD}/internal/resources/blocky/big.oisd.nl.txt
74+
curl -L https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts -o ${PWD}/internal/resources/blocky/StevenBlack.hosts.txt
75+
curl -L https://v.firebog.net/hosts/AdguardDNS.txt -o ${PWD}/internal/resources/blocky/AdguardDNS.txt
76+
curl -L https://v.firebog.net/hosts/Easylist.txt -o ${PWD}/internal/resources/blocky/Easylist.txt
77+
curl -L https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt -o ${PWD}/internal/resources/blocky/AdGuardSDNSFilter.txt
7178

7279
internal/resources/tftp:
7380
mkdir -p internal/resources/tftp
74-
curl -L http://boot.ipxe.org/undionly.kpxe -o ./internal/resources/tftp/ipxe.undionly.kpxe
75-
curl -L https://boot.netboot.xyz/ipxe/netboot.xyz.kpxe -o ./internal/resources/tftp/netboot.xyz.kpxe
76-
curl -L https://boot.netboot.xyz/ipxe/netboot.xyz-undionly.kpxe -o ./internal/resources/tftp/netboot.xyz-undionly.kpxe
77-
curl -L https://boot.netboot.xyz/ipxe/netboot.xyz.efi -o ./internal/resources/tftp/netboot.xyz.efi
81+
curl -L http://boot.ipxe.org/undionly.kpxe -o ${PWD}/internal/resources/tftp/ipxe.undionly.kpxe
82+
curl -L https://boot.netboot.xyz/ipxe/netboot.xyz.kpxe -o ${PWD}/internal/resources/tftp/netboot.xyz.kpxe
83+
curl -L https://boot.netboot.xyz/ipxe/netboot.xyz-undionly.kpxe -o ${PWD}/internal/resources/tftp/netboot.xyz-undionly.kpxe
84+
curl -L https://boot.netboot.xyz/ipxe/netboot.xyz.efi -o ${PWD}/internal/resources/tftp/netboot.xyz.efi
7885

7986
gen-build:
80-
DEBUG=true go run ${GO_FLAGS} . generateSchema ${SCHEMA_FILE}
87+
DEBUG=true go run ${GO_FLAGS} ${PWD} generateSchema ${SCHEMA_FILE}
8188
git add ${SCHEMA_FILE}
8289

8390
gen-clean:
@@ -162,7 +169,7 @@ test: internal/resources/macoui internal/resources/blocky internal/resources/tft
162169
export ETCD_ENDPOINT="localhost:2385"
163170
export DEBUG="true"
164171
export LISTEN_ONLY="true"
165-
go run -v . cli etcdctl del --prefix /
172+
go run -v ${PWD} cli etcdctl del --prefix /
166173
go test \
167174
-p 1 \
168175
-coverprofile=coverage.txt \

cmd/cli.go renamed to cmd/cli/cli.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmd
1+
package cli
22

33
import (
44
"context"
@@ -25,7 +25,7 @@ var (
2525
logger *zap.Logger
2626
)
2727

28-
var cliCmd = &cobra.Command{
28+
var CLICmd = &cobra.Command{
2929
Use: "cli",
3030
Short: "Interact with a running Gravity server",
3131
PersistentPreRun: func(cmd *cobra.Command, args []string) {
@@ -66,9 +66,8 @@ func init() {
6666
defUrl = fmt.Sprintf("unix://%s/gravity.sock", cwd)
6767
}
6868
logger = extconfig.Get().Logger().Named("cli")
69-
cliCmd.PersistentFlags().StringVarP(&apiUrl, "host", "s", defUrl, "API Host")
70-
cliCmd.PersistentFlags().StringVarP(&apiToken, "token", "t", "", "API Token")
71-
rootCmd.AddCommand(cliCmd)
69+
CLICmd.PersistentFlags().StringVarP(&apiUrl, "host", "s", defUrl, "API Host")
70+
CLICmd.PersistentFlags().StringVarP(&apiToken, "token", "t", "", "API Token")
7271
}
7372

7473
func checkApiError(hr *http.Response, err error) {
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmd
1+
package cli
22

33
import "github.com/spf13/cobra"
44

@@ -8,5 +8,5 @@ var cliConvertCmd = &cobra.Command{
88
}
99

1010
func init() {
11-
cliCmd.AddCommand(cliConvertCmd)
11+
CLICmd.AddCommand(cliConvertCmd)
1212
}

cmd/cli_convert_ms_dhcp.go renamed to cmd/cli/cli_convert_ms_dhcp.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmd
1+
package cli
22

33
import (
44
"context"

cmd/cli_etcdctl.go renamed to cmd/cli/cli_etcdctl.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmd
1+
package cli
22

33
import (
44
_ "unsafe"
@@ -17,5 +17,5 @@ var globalFlags command.GlobalFlags
1717

1818
func init() {
1919
globalFlags.Endpoints = []string{extconfig.Get().Etcd.Endpoint}
20-
cliCmd.AddCommand(etcdctlCommand)
20+
CLICmd.AddCommand(etcdctlCommand)
2121
}

cmd/cli_export.go renamed to cmd/cli/cli_export.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmd
1+
package cli
22

33
import (
44
"encoding/json"
@@ -43,5 +43,5 @@ var exportCmd = &cobra.Command{
4343

4444
func init() {
4545
exportCmd.Flags().BoolVar(&exportSafe, "safe", false, "Export only safe values")
46-
cliCmd.AddCommand(exportCmd)
46+
CLICmd.AddCommand(exportCmd)
4747
}

cmd/cli_health.go renamed to cmd/cli/cli_health.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmd
1+
package cli
22

33
import (
44
"os"
@@ -20,5 +20,5 @@ var healthCmd = &cobra.Command{
2020
}
2121

2222
func init() {
23-
cliCmd.AddCommand(healthCmd)
23+
CLICmd.AddCommand(healthCmd)
2424
}

cmd/cli_import.go renamed to cmd/cli/cli_import.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmd
1+
package cli
22

33
import (
44
"encoding/json"
@@ -36,5 +36,5 @@ var importCmd = &cobra.Command{
3636
}
3737

3838
func init() {
39-
cliCmd.AddCommand(importCmd)
39+
CLICmd.AddCommand(importCmd)
4040
}

cmd/cli_snapshot.go renamed to cmd/cli/cli_snapshot.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmd
1+
package cli
22

33
import (
44
"github.com/spf13/cobra"
@@ -14,5 +14,5 @@ func init() {
1414
if err != nil {
1515
panic(err)
1616
}
17-
cliCmd.AddCommand(sc)
17+
CLICmd.AddCommand(sc)
1818
}

cmd/cli_token_add.go renamed to cmd/cli/cli_token_add.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmd
1+
package cli
22

33
import (
44
"fmt"
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmd
1+
package cli
22

33
import "github.com/spf13/cobra"
44

@@ -8,5 +8,5 @@ var cliTokensCmd = &cobra.Command{
88
}
99

1010
func init() {
11-
cliCmd.AddCommand(cliTokensCmd)
11+
CLICmd.AddCommand(cliTokensCmd)
1212
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmd
1+
package cli
22

33
import "github.com/spf13/cobra"
44

@@ -8,5 +8,5 @@ var cliUsersCmd = &cobra.Command{
88
}
99

1010
func init() {
11-
cliCmd.AddCommand(cliUsersCmd)
11+
CLICmd.AddCommand(cliUsersCmd)
1212
}

cmd/cli_users_add.go renamed to cmd/cli/cli_users_add.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmd
1+
package cli
22

33
import (
44
"fmt"

cmd/cli/main/main.go

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package main
2+
3+
import "beryju.io/gravity/cmd/cli"
4+
5+
func main() {
6+
cli.CLICmd.Use = "gravity-cli"
7+
cli.CLICmd.Execute()
8+
}

cmd/root.go

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cmd
33
import (
44
"os"
55

6+
"beryju.io/gravity/cmd/cli"
67
"beryju.io/gravity/pkg/extconfig"
78
"github.com/spf13/cobra"
89
)
@@ -13,6 +14,10 @@ var rootCmd = &cobra.Command{
1314
Version: extconfig.FullVersion(),
1415
}
1516

17+
func init() {
18+
rootCmd.AddCommand(cli.CLICmd)
19+
}
20+
1621
func Execute() {
1722
err := rootCmd.Execute()
1823
if err != nil {

0 commit comments

Comments
 (0)