Re-vendor the shared files from sneak/prompts at dd4027b (closes #52)
check / check (push) Waiting to run
check / check (push) Waiting to run
Takes .golangci.yml, .dockerignore, .gitignore, .editorconfig, the workflow and REPO_POLICIES.md from sneak/prompts dd4027b, keeping this repository's own entries after the shared content. Lint (golangci-lint v2.14.0) and test become Dockerfile phases that script/lint and script/test build alone and uncached; the image build depends on both, and script/cibuild bootstraps, runs script/check, then builds the image. The agent guidance file moves to AGENTS.md. The Go code is fixed for what the new configuration finds; reads that iterate rows now also report an iteration error. Model: opus-5-5
This commit is contained in:
+22
-7
@@ -2,8 +2,10 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/csv"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
@@ -27,13 +29,17 @@ func main() {
|
||||
|
||||
// Fetch the CSV data
|
||||
log.Println("Fetching AS CSV data...")
|
||||
resp, err := http.Get(asCsvURL)
|
||||
|
||||
req, err := http.NewRequestWithContext(
|
||||
context.Background(), http.MethodGet, asCsvURL, nil)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to fetch CSV: %v", err)
|
||||
}
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to fetch CSV: %v", err)
|
||||
}
|
||||
defer func() {
|
||||
_ = resp.Body.Close()
|
||||
}()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
log.Fatalf("Failed to fetch CSV: HTTP %d", resp.StatusCode)
|
||||
@@ -48,17 +54,20 @@ func main() {
|
||||
log.Fatalf("Failed to read CSV header: %v", err)
|
||||
}
|
||||
|
||||
if len(header) != 3 || header[0] != "asn" || header[1] != "handle" || header[2] != "description" {
|
||||
if len(header) != 3 || header[0] != "asn" || header[1] != "handle" ||
|
||||
header[2] != "description" {
|
||||
log.Fatalf("Unexpected CSV header: %v", header)
|
||||
}
|
||||
|
||||
// Read all records
|
||||
var asInfos []ASInfo
|
||||
|
||||
for {
|
||||
record, err := reader.Read()
|
||||
if err == io.EOF {
|
||||
if errors.Is(err, io.EOF) {
|
||||
break
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Printf("Error reading CSV record: %v", err)
|
||||
|
||||
@@ -86,12 +95,18 @@ func main() {
|
||||
})
|
||||
}
|
||||
|
||||
// Closed here rather than deferred: log.Fatalf exits without running
|
||||
// deferred calls.
|
||||
_ = resp.Body.Close()
|
||||
|
||||
log.Printf("Parsed %d AS records", len(asInfos))
|
||||
|
||||
// Convert to JSON and output to stdout
|
||||
encoder := json.NewEncoder(os.Stdout)
|
||||
encoder.SetIndent("", "\t")
|
||||
if err := encoder.Encode(asInfos); err != nil {
|
||||
|
||||
err = encoder.Encode(asInfos)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to encode JSON: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,9 +26,17 @@ func main() {
|
||||
|
||||
// Register raw message handler that prints to stdout
|
||||
s.RegisterRawHandler(func(line string) {
|
||||
fmt.Println(line)
|
||||
_, _ = fmt.Fprintln(os.Stdout, line)
|
||||
})
|
||||
|
||||
// Start streaming before any defer: log.Fatal exits without running
|
||||
// deferred calls.
|
||||
err := s.Start(context.Background())
|
||||
if err != nil {
|
||||
log.Fatal("Failed to start streamer:", err)
|
||||
}
|
||||
defer s.Stop()
|
||||
|
||||
// Set up context with cancellation
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
@@ -36,18 +44,13 @@ func main() {
|
||||
// Handle signals
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
|
||||
|
||||
go func() {
|
||||
<-sigChan
|
||||
log.Println("Received shutdown signal")
|
||||
cancel()
|
||||
}()
|
||||
|
||||
// Start streaming
|
||||
if err := s.Start(); err != nil {
|
||||
log.Fatal("Failed to start streamer:", err)
|
||||
}
|
||||
defer s.Stop()
|
||||
|
||||
// Wait for context cancellation
|
||||
<-ctx.Done()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user