Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
go:
uses: cogos-dev/.github/.github/workflows/go-ci.yml@main
with:
go-version: '1.24'
4 changes: 2 additions & 2 deletions heartbeat.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ func sendHeartbeat(nodeName, addr string, hb *Heartbeat) {
log.Printf("[%s] Heartbeat to %s failed: %v", nodeName, addr, err)
return
}
resp.Body.Close()
_ = resp.Body.Close()
}

func sendJoinRequest(node *Node, addr string) error {
Expand All @@ -185,7 +185,7 @@ func sendJoinRequest(node *Node, addr string) error {
if err != nil {
return err
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()

if resp.StatusCode != http.StatusOK {
return fmt.Errorf("join request returned %d", resp.StatusCode)
Expand Down
2 changes: 1 addition & 1 deletion identity.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func SaveIdentity(id *NodeIdentity, dir string) error {
if err != nil {
return fmt.Errorf("create key file: %w", err)
}
defer f.Close()
defer func() { _ = f.Close() }()

return pem.Encode(f, &pem.Block{Type: "EC PRIVATE KEY", Bytes: keyDER})
}
Expand Down
4 changes: 3 additions & 1 deletion node.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,9 @@ func (n *Node) Stop() {
if n.server != nil {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
n.server.Shutdown(ctx)
if err := n.server.Shutdown(ctx); err != nil {
log.Printf("[%s] Shutdown error: %v", n.Name, err)
}
}
}

Expand Down
28 changes: 19 additions & 9 deletions protocol.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,9 @@ func handlePeers(node *Node) http.HandlerFunc {
}

w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(node.Peers.Summarize())
if err := json.NewEncoder(w).Encode(node.Peers.Summarize()); err != nil {
log.Printf("[%s] Failed to encode peers response: %v", node.Name, err)
}
}
}

Expand All @@ -125,10 +127,12 @@ func handleChallenge(node *Node) http.HandlerFunc {
}

w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]any{
if err := json.NewEncoder(w).Encode(map[string]any{
"events": events,
"coherence": ValidateCoherence(events),
})
}); err != nil {
log.Printf("[%s] Failed to encode challenge response: %v", node.Name, err)
}
}
}

Expand Down Expand Up @@ -171,10 +175,12 @@ func handleJoin(node *Node) http.HandlerFunc {
}

w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]any{
if err := json.NewEncoder(w).Encode(map[string]any{
"status": "accepted",
"peers": peerAddrs,
})
}); err != nil {
log.Printf("[%s] Failed to encode join response: %v", node.Name, err)
}
}
}

Expand All @@ -195,7 +201,9 @@ func handleHealth(node *Node) http.HandlerFunc {
if !report.Pass {
w.WriteHeader(http.StatusServiceUnavailable)
}
json.NewEncoder(w).Encode(report)
if err := json.NewEncoder(w).Encode(report); err != nil {
log.Printf("[%s] Failed to encode health response: %v", node.Name, err)
}
}
}

Expand All @@ -213,10 +221,12 @@ func handleState(node *Node) http.HandlerFunc {
}

w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]any{
if err := json.NewEncoder(w).Encode(map[string]any{
"state": state,
"peers": node.Peers.Summarize(),
})
}); err != nil {
log.Printf("[%s] Failed to encode state response: %v", node.Name, err)
}
}
}

Expand Down Expand Up @@ -245,7 +255,7 @@ func issueChallenge(node *Node, peer *PeerState) {
log.Printf("[%s] Challenge to %s failed: %v", node.Name, FormatNodeID(peer.NodeID), err)
return
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()

var result struct {
Events []*EventEnvelope `json:"events"`
Expand Down
29 changes: 20 additions & 9 deletions run.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func cmdNode() {
name = args[i]
case "--port":
i++
fmt.Sscanf(args[i], "%d", &port)
_, _ = fmt.Sscanf(args[i], "%d", &port)
case "--peers":
i++
peersStr = args[i]
Expand Down Expand Up @@ -145,8 +145,10 @@ func cmdInject() {
fmt.Fprintf(os.Stderr, "inject failed: %v\n", err)
os.Exit(1)
}
defer resp.Body.Close()
io.Copy(os.Stdout, resp.Body)
defer func() { _ = resp.Body.Close() }()
if _, err := io.Copy(os.Stdout, resp.Body); err != nil {
fmt.Fprintf(os.Stderr, "read response failed: %v\n", err)
}
fmt.Println()
}

Expand All @@ -173,7 +175,7 @@ func cmdTamper() {
fmt.Fprintf(os.Stderr, "get state failed: %v\n", err)
os.Exit(1)
}
defer resp.Body.Close()
defer func() { _ = resp.Body.Close() }()

var state struct {
State struct {
Expand Down Expand Up @@ -213,21 +215,27 @@ func cmdStatus() {
fmt.Fprintf(os.Stderr, "get state failed: %v\n", err)
os.Exit(1)
}
defer stateResp.Body.Close()
defer func() { _ = stateResp.Body.Close() }()

var stateData json.RawMessage
json.NewDecoder(stateResp.Body).Decode(&stateData)
if err := json.NewDecoder(stateResp.Body).Decode(&stateData); err != nil {
fmt.Fprintf(os.Stderr, "decode state failed: %v\n", err)
os.Exit(1)
}

// Get health.
healthResp, err := client.Get(fmt.Sprintf("%s/health", target))
if err != nil {
fmt.Fprintf(os.Stderr, "get health failed: %v\n", err)
os.Exit(1)
}
defer healthResp.Body.Close()
defer func() { _ = healthResp.Body.Close() }()

var healthData json.RawMessage
json.NewDecoder(healthResp.Body).Decode(&healthData)
if err := json.NewDecoder(healthResp.Body).Decode(&healthData); err != nil {
fmt.Fprintf(os.Stderr, "decode health failed: %v\n", err)
os.Exit(1)
}

output := map[string]json.RawMessage{
"state": stateData,
Expand All @@ -236,5 +244,8 @@ func cmdStatus() {

enc := json.NewEncoder(os.Stdout)
enc.SetIndent("", " ")
enc.Encode(output)
if err := enc.Encode(output); err != nil {
fmt.Fprintf(os.Stderr, "encode output failed: %v\n", err)
os.Exit(1)
}
}
Loading