Skip to content

Commit b4ad27b

Browse files
committed
Move everything into one binary to reduce package size
1 parent cd11e10 commit b4ad27b

File tree

10 files changed

+152
-79
lines changed

10 files changed

+152
-79
lines changed

.goreleaser.yml

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,37 +10,12 @@ release:
1010
name_template: '{{.Tag}}'
1111

1212
builds:
13-
- id: event-reporter
14-
binary: event-reporter
15-
main: ./cmd/event-reporter
13+
- id: event-reporter-tools
14+
binary: event-reporter-tools
15+
main: ./cmd/event-reporter-tools
1616
goos:
1717
- linux
1818
goarch:
19-
- arm
20-
- arm64
21-
goarm:
22-
- "7"
23-
ldflags: -s -w -X main.version={{.Version}}
24-
25-
- id: service-watcher
26-
binary: service-watcher
27-
main: ./cmd/service-watcher
28-
goos:
29-
- linux
30-
goarch:
31-
- arm
32-
- arm64
33-
goarm:
34-
- "7"
35-
ldflags: -s -w -X main.version={{.Version}}
36-
37-
- id: version-reporter
38-
binary: version-reporter
39-
main: ./cmd/version-reporter
40-
goos:
41-
- linux
42-
goarch:
43-
- arm
4419
- arm64
4520
goarm:
4621
- "7"
@@ -73,6 +48,12 @@ nfpms:
7348
dst: /usr/bin/save-powered-off-time
7449
- src: _release/org.cacophony.Events.conf
7550
dst: /etc/dbus-1/system.d/org.cacophony.Events.conf
51+
- src: _release/service-watcher
52+
dst: /usr/bin/service-watcher
53+
- src: _release/event-reporter
54+
dst: /usr/bin/event-reporter
55+
- src: _release/version-reporter
56+
dst: /usr/bin/version-reporter
7657
scripts:
7758
postinstall: "_release/postinstall.sh"
7859

_release/event-reporter

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/bash
2+
exec /usr/bin/event-reporter-tools event-reporter "$@"

_release/service-watcher

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/bash
2+
exec /usr/bin/event-reporter-tools service-watcher "$@"

_release/version-reporter

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/bash
2+
exec /usr/bin/event-reporter-tools version-reporter "$@"

cmd/event-reporter-tools/main.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"os"
6+
7+
eventreporter "github.com/TheCacophonyProject/event-reporter/v3/internal/event-reporter"
8+
servicewatcher "github.com/TheCacophonyProject/event-reporter/v3/internal/service-watcher"
9+
versionreporter "github.com/TheCacophonyProject/event-reporter/v3/internal/version-reporter"
10+
"github.com/TheCacophonyProject/go-utils/logging"
11+
)
12+
13+
var log *logging.Logger
14+
15+
func main() {
16+
err := runMain()
17+
if err != nil {
18+
log.Fatal(err)
19+
}
20+
}
21+
22+
var version = "<not set>"
23+
24+
func runMain() error {
25+
log = logging.NewLogger("info")
26+
if len(os.Args) < 2 {
27+
log.Info("Usage: tool <subcommand> [args]")
28+
return fmt.Errorf("no subcommand given")
29+
}
30+
31+
subcommand := os.Args[1]
32+
args := os.Args[2:]
33+
34+
var err error
35+
switch subcommand {
36+
case "event-reporter":
37+
err = eventreporter.Run(args, version)
38+
case "service-watcher":
39+
err = servicewatcher.Run(args, version)
40+
case "version-reporter":
41+
err = versionreporter.Run(args, version)
42+
default:
43+
err = fmt.Errorf("unknown subcommand: %s", subcommand)
44+
}
45+
46+
return err
47+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/TheCacophonyProject/event-reporter/v3
22

3-
go 1.22.3
3+
go 1.25.0
44

55
require (
66
github.com/TheCacophonyProject/go-api v1.0.4

cmd/event-reporter/main.go renamed to internal/event-reporter/main.go

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@ You should have received a copy of the GNU General Public License
1616
along with this program. If not, see <https://www.gnu.org/licenses/>.
1717
*/
1818

19-
package main
19+
package eventreporter
2020

2121
import (
2222
"encoding/json"
23+
"errors"
24+
"fmt"
2325
"os"
2426
"os/exec"
2527
"strconv"
@@ -95,39 +97,49 @@ func clearSeverityErrorTime() {
9597
}
9698
}
9799

98-
type argSpec struct {
100+
type Args struct {
99101
DBPath string `arg:"-d,--db" help:"path to state database"`
100102
Interval time.Duration `arg:"--interval" help:"time between event reports"`
101103
logging.LogArgs
102104
}
103105

104-
func (argSpec) Version() string {
106+
func (Args) Version() string {
105107
return version
106108
}
107109

108-
func procArgs() argSpec {
109-
// Set argument default values.
110-
args := argSpec{
111-
DBPath: "/var/lib/event-reporter.db",
112-
Interval: 30 * time.Minute,
113-
}
114-
arg.MustParse(&args)
115-
return args
110+
var defaultArgs = Args{
111+
DBPath: "/var/lib/event-reporter.db",
112+
Interval: 30 * time.Minute,
116113
}
117114

118-
func main() {
119-
err := runMain()
115+
func procArgs(input []string) (Args, error) {
116+
args := defaultArgs
117+
118+
parser, err := arg.NewParser(arg.Config{}, &args)
120119
if err != nil {
121-
log.Fatal(err.Error())
120+
return Args{}, err
121+
}
122+
err = parser.Parse(input)
123+
if errors.Is(err, arg.ErrHelp) {
124+
parser.WriteHelp(os.Stdout)
125+
os.Exit(0)
126+
}
127+
if errors.Is(err, arg.ErrVersion) {
128+
fmt.Println(version)
129+
os.Exit(0)
122130
}
131+
return args, err
123132
}
124133

125-
func runMain() error {
126-
args := procArgs()
127-
134+
func Run(inputArgs []string, ver string) error {
135+
version = ver
136+
args, err := procArgs(inputArgs)
137+
if err != nil {
138+
return fmt.Errorf("failed to parse args: %v", err)
139+
}
128140
log = logging.NewLogger(args.LogLevel)
129141

130-
log.Printf("running version: %s", version)
142+
log.Infof("Running version: %s", version)
131143

132144
readSeverityErrorTimeFromFile()
133145

cmd/event-reporter/service.go renamed to internal/event-reporter/service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License
1616
along with this program. If not, see <https://www.gnu.org/licenses/>.
1717
*/
1818

19-
package main
19+
package eventreporter
2020

2121
import (
2222
"encoding/json"

cmd/service-watcher/main.go renamed to internal/service-watcher/main.go

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ You should have received a copy of the GNU General Public License
1616
along with this program. If not, see <https://www.gnu.org/licenses/>.
1717
*/
1818

19-
package main
19+
package servicewatcher
2020

2121
import (
2222
"context"
2323
"encoding/json"
24+
"errors"
2425
"fmt"
26+
"os"
2527
"os/exec"
2628
"strconv"
2729
"strings"
@@ -41,20 +43,14 @@ const (
4143
var log = logging.NewLogger("info")
4244
var version = "<not set>"
4345

44-
type argSpec struct {
46+
type Args struct {
4547
logging.LogArgs
4648
}
4749

48-
func (argSpec) Version() string {
50+
func (Args) Version() string {
4951
return version
5052
}
5153

52-
func procArgs() argSpec {
53-
args := argSpec{}
54-
arg.MustParse(&args)
55-
return args
56-
}
57-
5854
type LogReport struct {
5955
Logs *[]string
6056
Time int64
@@ -83,19 +79,36 @@ var packageToServiceMap = map[string][]string{
8379
"tc2-hat-controller": {"tc2-hat-comms", "tc2-hat-i2c", "tc2-hat-rtc", "tc2-hat-temp", "tc2-hat-attiny", "rpi-reboot"},
8480
}
8581

86-
func main() {
87-
err := runMain()
82+
var defaultArgs = Args{}
83+
84+
func procArgs(input []string) (Args, error) {
85+
args := defaultArgs
86+
87+
parser, err := arg.NewParser(arg.Config{}, &args)
8888
if err != nil {
89-
log.Fatal(err.Error())
89+
return Args{}, err
90+
}
91+
err = parser.Parse(input)
92+
if errors.Is(err, arg.ErrHelp) {
93+
parser.WriteHelp(os.Stdout)
94+
os.Exit(0)
9095
}
96+
if errors.Is(err, arg.ErrVersion) {
97+
fmt.Println(version)
98+
os.Exit(0)
99+
}
100+
return args, err
91101
}
92102

93-
func runMain() error {
94-
args := procArgs()
95-
103+
func Run(inputArgs []string, ver string) error {
104+
version = ver
105+
args, err := procArgs(inputArgs)
106+
if err != nil {
107+
return fmt.Errorf("failed to parse args: %v", err)
108+
}
96109
log = logging.NewLogger(args.LogLevel)
97110

98-
log.Info("Running version: ", version)
111+
log.Infof("Running version: %s", version)
99112

100113
serviceToPackageMap := map[string]string{}
101114
for pkg, services := range packageToServiceMap {

cmd/version-reporter/main.go renamed to internal/version-reporter/main.go

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@ You should have received a copy of the GNU General Public License
1616
along with this program. If not, see <https://www.gnu.org/licenses/>.
1717
*/
1818

19-
package main
19+
package versionreporter
2020

2121
import (
22+
"errors"
23+
"fmt"
24+
"os"
2225
"os/exec"
2326
"runtime"
2427
"strings"
@@ -32,33 +35,44 @@ import (
3235
var log = logging.NewLogger("info")
3336
var version = "<not set>"
3437

35-
type argSpec struct {
38+
type Args struct {
3639
logging.LogArgs
3740
}
3841

39-
func (argSpec) Version() string {
42+
func (Args) Version() string {
4043
return version
4144
}
4245

43-
func procArgs() argSpec {
44-
args := argSpec{}
45-
arg.MustParse(&args)
46-
return args
47-
}
46+
var defaultArgs = Args{}
47+
48+
func procArgs(input []string) (Args, error) {
49+
args := defaultArgs
4850

49-
func main() {
50-
err := runMain()
51+
parser, err := arg.NewParser(arg.Config{}, &args)
5152
if err != nil {
52-
log.Fatal(err.Error())
53+
return Args{}, err
54+
}
55+
err = parser.Parse(input)
56+
if errors.Is(err, arg.ErrHelp) {
57+
parser.WriteHelp(os.Stdout)
58+
os.Exit(0)
59+
}
60+
if errors.Is(err, arg.ErrVersion) {
61+
fmt.Println(version)
62+
os.Exit(0)
5363
}
64+
return args, err
5465
}
5566

56-
func runMain() error {
57-
args := procArgs()
58-
67+
func Run(inputArgs []string, ver string) error {
68+
version = ver
69+
args, err := procArgs(inputArgs)
70+
if err != nil {
71+
return fmt.Errorf("failed to parse args: %v", err)
72+
}
5973
log = logging.NewLogger(args.LogLevel)
6074

61-
log.Info("Running version: ", version)
75+
log.Infof("Running version: %s", version)
6276

6377
packageMpedData, err := getInstalledPackages()
6478
if err != nil {

0 commit comments

Comments
 (0)