From 1d07e0a0e5be87cea19c05838d3e1a567e5d7725 Mon Sep 17 00:00:00 2001 From: Jun Futagawa Date: Wed, 1 Jul 2026 09:16:48 +0900 Subject: [PATCH] refactor(internal): move private packages under internal Move all Go implementation packages from pkg to internal and update import paths from the CLI entrypoints and package tests. Document that internal packages are private implementation details and not a supported public import API. Co-authored-by: Codex --- README.md | 4 ++++ cmd/prec/main.go | 2 +- cmd/precd/main.go | 6 +++--- {pkg => internal}/cli/app.go | 4 ++-- {pkg => internal}/cli/app_test.go | 2 +- {pkg => internal}/cli/constants.go | 0 {pkg => internal}/cli/event_collection.go | 2 +- {pkg => internal}/cli/event_collection_test.go | 2 +- {pkg => internal}/cli/event_merge.go | 2 +- {pkg => internal}/cli/event_merge_test.go | 2 +- {pkg => internal}/cli/log_paths.go | 0 {pkg => internal}/cli/log_paths_test.go | 0 {pkg => internal}/cli/log_reader.go | 0 {pkg => internal}/cli/log_reader_test.go | 4 ++-- {pkg => internal}/cli/output_formatter.go | 2 +- {pkg => internal}/cli/output_formatter_test.go | 2 +- {pkg => internal}/cli/query_filter.go | 4 ++-- {pkg => internal}/cli/query_filter_test.go | 2 +- {pkg => internal}/cli/tail.go | 2 +- {pkg => internal}/cli/test_helpers_test.go | 2 +- {pkg => internal}/collector/collector_linux.go | 8 ++++---- {pkg => internal}/collector/collector_linux_test.go | 6 +++--- {pkg => internal}/config/config.go | 0 {pkg => internal}/config/config_test.go | 0 {pkg => internal}/events/event.go | 0 {pkg => internal}/events/event_json.go | 0 {pkg => internal}/events/event_test.go | 0 {pkg => internal}/events/source.go | 0 {pkg => internal}/events/source_test.go | 0 {pkg => internal}/filter/filter.go | 6 +++--- {pkg => internal}/filter/filter_test.go | 4 ++-- {pkg => internal}/logger/jsonl.go | 4 ++-- {pkg => internal}/logger/jsonl_test.go | 4 ++-- {pkg => internal}/query/filter.go | 2 +- justfile | 2 +- 35 files changed, 42 insertions(+), 38 deletions(-) rename {pkg => internal}/cli/app.go (98%) rename {pkg => internal}/cli/app_test.go (99%) rename {pkg => internal}/cli/constants.go (100%) rename {pkg => internal}/cli/event_collection.go (99%) rename {pkg => internal}/cli/event_collection_test.go (99%) rename {pkg => internal}/cli/event_merge.go (98%) rename {pkg => internal}/cli/event_merge_test.go (99%) rename {pkg => internal}/cli/log_paths.go (100%) rename {pkg => internal}/cli/log_paths_test.go (100%) rename {pkg => internal}/cli/log_reader.go (100%) rename {pkg => internal}/cli/log_reader_test.go (98%) rename {pkg => internal}/cli/output_formatter.go (99%) rename {pkg => internal}/cli/output_formatter_test.go (99%) rename {pkg => internal}/cli/query_filter.go (89%) rename {pkg => internal}/cli/query_filter_test.go (99%) rename {pkg => internal}/cli/tail.go (99%) rename {pkg => internal}/cli/test_helpers_test.go (99%) rename {pkg => internal}/collector/collector_linux.go (99%) rename {pkg => internal}/collector/collector_linux_test.go (98%) rename {pkg => internal}/config/config.go (100%) rename {pkg => internal}/config/config_test.go (100%) rename {pkg => internal}/events/event.go (100%) rename {pkg => internal}/events/event_json.go (100%) rename {pkg => internal}/events/event_test.go (100%) rename {pkg => internal}/events/source.go (100%) rename {pkg => internal}/events/source_test.go (100%) rename {pkg => internal}/filter/filter.go (93%) rename {pkg => internal}/filter/filter_test.go (96%) rename {pkg => internal}/logger/jsonl.go (98%) rename {pkg => internal}/logger/jsonl_test.go (97%) rename {pkg => internal}/query/filter.go (99%) diff --git a/README.md b/README.md index 0bd7849..a3932d8 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,10 @@ `prec` is a Linux command execution observability tool where `precd` uses eBPF to continuously collect process execution events as JSON Lines and `prec` lets you quickly search and inspect those records from the CLI. +Implementation note: + +- Go packages under `internal/` are private implementation details and are not a supported public import API + ## Why use it - Does not rely on shell history or `LD_PRELOAD` diff --git a/cmd/prec/main.go b/cmd/prec/main.go index 7527621..cee89ed 100644 --- a/cmd/prec/main.go +++ b/cmd/prec/main.go @@ -7,7 +7,7 @@ import ( "fmt" "os" - "github.com/jfut/prec/pkg/cli" + "github.com/jfut/prec/internal/cli" ) // Build metadata fields are injected by linker flags at build time. diff --git a/cmd/precd/main.go b/cmd/precd/main.go index a2d6289..ccf1f0f 100644 --- a/cmd/precd/main.go +++ b/cmd/precd/main.go @@ -13,9 +13,9 @@ import ( "github.com/alecthomas/kong" - "github.com/jfut/prec/pkg/collector" - "github.com/jfut/prec/pkg/config" - "github.com/jfut/prec/pkg/logger" + "github.com/jfut/prec/internal/collector" + "github.com/jfut/prec/internal/config" + "github.com/jfut/prec/internal/logger" ) // Build metadata fields are injected by linker flags at build time. diff --git a/pkg/cli/app.go b/internal/cli/app.go similarity index 98% rename from pkg/cli/app.go rename to internal/cli/app.go index 0c8bfb0..f1602ed 100644 --- a/pkg/cli/app.go +++ b/internal/cli/app.go @@ -11,8 +11,8 @@ import ( "github.com/alecthomas/kong" - "github.com/jfut/prec/pkg/config" - "github.com/jfut/prec/pkg/query" + "github.com/jfut/prec/internal/config" + "github.com/jfut/prec/internal/query" ) type listFilter struct { diff --git a/pkg/cli/app_test.go b/internal/cli/app_test.go similarity index 99% rename from pkg/cli/app_test.go rename to internal/cli/app_test.go index eb68386..7cf9371 100644 --- a/pkg/cli/app_test.go +++ b/internal/cli/app_test.go @@ -15,7 +15,7 @@ import ( "github.com/alecthomas/kong" - "github.com/jfut/prec/pkg/config" + "github.com/jfut/prec/internal/config" ) func TestValidateModeFlags(t *testing.T) { diff --git a/pkg/cli/constants.go b/internal/cli/constants.go similarity index 100% rename from pkg/cli/constants.go rename to internal/cli/constants.go diff --git a/pkg/cli/event_collection.go b/internal/cli/event_collection.go similarity index 99% rename from pkg/cli/event_collection.go rename to internal/cli/event_collection.go index bb25795..a5174c6 100644 --- a/pkg/cli/event_collection.go +++ b/internal/cli/event_collection.go @@ -15,7 +15,7 @@ import ( "github.com/klauspost/compress/gzip" "github.com/klauspost/compress/zstd" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/events" ) func collectFilteredEvents(logPaths []string, limit int, lf listFilter) ([]events.CommandEvent, error) { diff --git a/pkg/cli/event_collection_test.go b/internal/cli/event_collection_test.go similarity index 99% rename from pkg/cli/event_collection_test.go rename to internal/cli/event_collection_test.go index 39ca6e5..a20d005 100644 --- a/pkg/cli/event_collection_test.go +++ b/internal/cli/event_collection_test.go @@ -7,7 +7,7 @@ import ( "path/filepath" "testing" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/events" ) func TestCollectFilteredEventsAcrossRotatedLogs(t *testing.T) { diff --git a/pkg/cli/event_merge.go b/internal/cli/event_merge.go similarity index 98% rename from pkg/cli/event_merge.go rename to internal/cli/event_merge.go index 2e8ac81..836a6f6 100644 --- a/pkg/cli/event_merge.go +++ b/internal/cli/event_merge.go @@ -3,7 +3,7 @@ package cli -import "github.com/jfut/prec/pkg/events" +import "github.com/jfut/prec/internal/events" type commandJoinState struct { pending map[string]events.CommandEvent diff --git a/pkg/cli/event_merge_test.go b/internal/cli/event_merge_test.go similarity index 99% rename from pkg/cli/event_merge_test.go rename to internal/cli/event_merge_test.go index 6e74080..71c3a74 100644 --- a/pkg/cli/event_merge_test.go +++ b/internal/cli/event_merge_test.go @@ -6,7 +6,7 @@ package cli import ( "testing" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/events" ) func TestMergeEventsForListJoinsStartEnd(t *testing.T) { diff --git a/pkg/cli/log_paths.go b/internal/cli/log_paths.go similarity index 100% rename from pkg/cli/log_paths.go rename to internal/cli/log_paths.go diff --git a/pkg/cli/log_paths_test.go b/internal/cli/log_paths_test.go similarity index 100% rename from pkg/cli/log_paths_test.go rename to internal/cli/log_paths_test.go diff --git a/pkg/cli/log_reader.go b/internal/cli/log_reader.go similarity index 100% rename from pkg/cli/log_reader.go rename to internal/cli/log_reader.go diff --git a/pkg/cli/log_reader_test.go b/internal/cli/log_reader_test.go similarity index 98% rename from pkg/cli/log_reader_test.go rename to internal/cli/log_reader_test.go index 8c1dfd4..1581637 100644 --- a/pkg/cli/log_reader_test.go +++ b/internal/cli/log_reader_test.go @@ -10,8 +10,8 @@ import ( "sync" "testing" - "github.com/jfut/prec/pkg/config" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/config" + "github.com/jfut/prec/internal/events" ) func TestOpenLogReaderDetectsCompressionByMagic(t *testing.T) { diff --git a/pkg/cli/output_formatter.go b/internal/cli/output_formatter.go similarity index 99% rename from pkg/cli/output_formatter.go rename to internal/cli/output_formatter.go index 00e56ac..9127775 100644 --- a/pkg/cli/output_formatter.go +++ b/internal/cli/output_formatter.go @@ -13,7 +13,7 @@ import ( "strings" "time" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/events" ) // outputFormatter hides per-format encoding details from list/follow flows. diff --git a/pkg/cli/output_formatter_test.go b/internal/cli/output_formatter_test.go similarity index 99% rename from pkg/cli/output_formatter_test.go rename to internal/cli/output_formatter_test.go index c1975e1..87022b8 100644 --- a/pkg/cli/output_formatter_test.go +++ b/internal/cli/output_formatter_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/events" ) func TestFormatEventSimple(t *testing.T) { diff --git a/pkg/cli/query_filter.go b/internal/cli/query_filter.go similarity index 89% rename from pkg/cli/query_filter.go rename to internal/cli/query_filter.go index e3b31ca..11ee8c1 100644 --- a/pkg/cli/query_filter.go +++ b/internal/cli/query_filter.go @@ -4,8 +4,8 @@ package cli import ( - "github.com/jfut/prec/pkg/events" - "github.com/jfut/prec/pkg/query" + "github.com/jfut/prec/internal/events" + "github.com/jfut/prec/internal/query" ) func buildQueryFilter(specs []string) (listFilter, error) { diff --git a/pkg/cli/query_filter_test.go b/internal/cli/query_filter_test.go similarity index 99% rename from pkg/cli/query_filter_test.go rename to internal/cli/query_filter_test.go index cea3833..4431b6f 100644 --- a/pkg/cli/query_filter_test.go +++ b/internal/cli/query_filter_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/events" ) func TestBuildQueryFilterValid(t *testing.T) { diff --git a/pkg/cli/tail.go b/internal/cli/tail.go similarity index 99% rename from pkg/cli/tail.go rename to internal/cli/tail.go index 25064df..0421216 100644 --- a/pkg/cli/tail.go +++ b/internal/cli/tail.go @@ -13,7 +13,7 @@ import ( "strings" "time" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/events" ) func runList(logPaths []string, limit int, lf listFilter, opt outputOptions) int { diff --git a/pkg/cli/test_helpers_test.go b/internal/cli/test_helpers_test.go similarity index 99% rename from pkg/cli/test_helpers_test.go rename to internal/cli/test_helpers_test.go index b3e7a45..89e8501 100644 --- a/pkg/cli/test_helpers_test.go +++ b/internal/cli/test_helpers_test.go @@ -15,7 +15,7 @@ import ( "github.com/klauspost/compress/zstd" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/events" ) func intPtr(v int) *int { diff --git a/pkg/collector/collector_linux.go b/internal/collector/collector_linux.go similarity index 99% rename from pkg/collector/collector_linux.go rename to internal/collector/collector_linux.go index ac3a3db..d9a42a8 100644 --- a/pkg/collector/collector_linux.go +++ b/internal/collector/collector_linux.go @@ -24,10 +24,10 @@ import ( "github.com/cilium/ebpf/rlimit" "golang.org/x/sys/unix" - "github.com/jfut/prec/pkg/config" - "github.com/jfut/prec/pkg/events" - "github.com/jfut/prec/pkg/filter" - "github.com/jfut/prec/pkg/logger" + "github.com/jfut/prec/internal/config" + "github.com/jfut/prec/internal/events" + "github.com/jfut/prec/internal/filter" + "github.com/jfut/prec/internal/logger" ) const ( diff --git a/pkg/collector/collector_linux_test.go b/internal/collector/collector_linux_test.go similarity index 98% rename from pkg/collector/collector_linux_test.go rename to internal/collector/collector_linux_test.go index c8e2ee6..dd75c89 100644 --- a/pkg/collector/collector_linux_test.go +++ b/internal/collector/collector_linux_test.go @@ -16,9 +16,9 @@ import ( "testing" "github.com/cilium/ebpf/asm" - "github.com/jfut/prec/pkg/config" - "github.com/jfut/prec/pkg/events" - "github.com/jfut/prec/pkg/logger" + "github.com/jfut/prec/internal/config" + "github.com/jfut/prec/internal/events" + "github.com/jfut/prec/internal/logger" ) func TestParseOffsetFromFormat(t *testing.T) { diff --git a/pkg/config/config.go b/internal/config/config.go similarity index 100% rename from pkg/config/config.go rename to internal/config/config.go diff --git a/pkg/config/config_test.go b/internal/config/config_test.go similarity index 100% rename from pkg/config/config_test.go rename to internal/config/config_test.go diff --git a/pkg/events/event.go b/internal/events/event.go similarity index 100% rename from pkg/events/event.go rename to internal/events/event.go diff --git a/pkg/events/event_json.go b/internal/events/event_json.go similarity index 100% rename from pkg/events/event_json.go rename to internal/events/event_json.go diff --git a/pkg/events/event_test.go b/internal/events/event_test.go similarity index 100% rename from pkg/events/event_test.go rename to internal/events/event_test.go diff --git a/pkg/events/source.go b/internal/events/source.go similarity index 100% rename from pkg/events/source.go rename to internal/events/source.go diff --git a/pkg/events/source_test.go b/internal/events/source_test.go similarity index 100% rename from pkg/events/source_test.go rename to internal/events/source_test.go diff --git a/pkg/filter/filter.go b/internal/filter/filter.go similarity index 93% rename from pkg/filter/filter.go rename to internal/filter/filter.go index 1e167ef..16c8ac8 100644 --- a/pkg/filter/filter.go +++ b/internal/filter/filter.go @@ -7,9 +7,9 @@ import ( "fmt" "strings" - "github.com/jfut/prec/pkg/config" - "github.com/jfut/prec/pkg/events" - "github.com/jfut/prec/pkg/query" + "github.com/jfut/prec/internal/config" + "github.com/jfut/prec/internal/events" + "github.com/jfut/prec/internal/query" ) type compiledRule struct { diff --git a/pkg/filter/filter_test.go b/internal/filter/filter_test.go similarity index 96% rename from pkg/filter/filter_test.go rename to internal/filter/filter_test.go index 4213d5e..3d3d060 100644 --- a/pkg/filter/filter_test.go +++ b/internal/filter/filter_test.go @@ -6,8 +6,8 @@ package filter import ( "testing" - "github.com/jfut/prec/pkg/config" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/config" + "github.com/jfut/prec/internal/events" ) func TestMatcherRulesFirstMatchWins(t *testing.T) { diff --git a/pkg/logger/jsonl.go b/internal/logger/jsonl.go similarity index 98% rename from pkg/logger/jsonl.go rename to internal/logger/jsonl.go index 082bec4..3176eb6 100644 --- a/pkg/logger/jsonl.go +++ b/internal/logger/jsonl.go @@ -16,8 +16,8 @@ import ( "github.com/klauspost/compress/gzip" "github.com/klauspost/compress/zstd" - "github.com/jfut/prec/pkg/config" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/config" + "github.com/jfut/prec/internal/events" ) // JSONLWriter appends events line by line to a root-owned log file. diff --git a/pkg/logger/jsonl_test.go b/internal/logger/jsonl_test.go similarity index 97% rename from pkg/logger/jsonl_test.go rename to internal/logger/jsonl_test.go index 38986d8..f4be4aa 100644 --- a/pkg/logger/jsonl_test.go +++ b/internal/logger/jsonl_test.go @@ -15,8 +15,8 @@ import ( "github.com/klauspost/compress/gzip" "github.com/klauspost/compress/zstd" - "github.com/jfut/prec/pkg/config" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/config" + "github.com/jfut/prec/internal/events" ) func TestJSONLWriterReopenSwitchesOutputFile(t *testing.T) { diff --git a/pkg/query/filter.go b/internal/query/filter.go similarity index 99% rename from pkg/query/filter.go rename to internal/query/filter.go index 98ac16a..29abd31 100644 --- a/pkg/query/filter.go +++ b/internal/query/filter.go @@ -12,7 +12,7 @@ import ( "sync" "time" - "github.com/jfut/prec/pkg/events" + "github.com/jfut/prec/internal/events" ) var operators = []string{"!~=", ">=", "<=", "!=", "~=", ">", "<", "="} diff --git a/justfile b/justfile index 39ccabc..98d347a 100644 --- a/justfile +++ b/justfile @@ -45,7 +45,7 @@ deps: # fmt: - gofmt -w ./cmd ./pkg + gofmt -w . lint: golangci-lint run ./...