Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
ab3bdc7
Check in of code to date, add catsearch and mac garden fs provider.
pgodwin Apr 23, 2026
b8b0f81
refactor: drop /go suffix from module path
pgodwin Apr 23, 2026
4fe11d3
refactor: dissolve appletalk/ facade package
pgodwin Apr 23, 2026
cad29e5
refactor: extract pkg/hwaddr for unified hardware addressing
pgodwin Apr 23, 2026
4bec898
refactor: consolidate mocks into internal/testutil
pgodwin Apr 23, 2026
c1e567f
refactor: route port/ethertalk/pcap through netlog
pgodwin Apr 23, 2026
0e1aae1
Step 6: introduce pkg/logging and pkg/logging/protolog
pgodwin Apr 24, 2026
a7a0e2c
Step 7: route netlog through slog via pkg/logging
pgodwin Apr 24, 2026
b2bfc99
Step 8: extract config package; cmd/omnitalk aliases Root
pgodwin Apr 24, 2026
2dfe5c0
Step 9: lift CNID store into pkg/cnid
pgodwin Apr 24, 2026
2d75e28
refactor(port): add BridgeConfigurable interface; stop type-asserting…
pgodwin Apr 24, 2026
0011ada
refactor(macip): verify Step 11 — MacIP already consumes rawlink.RawL…
pgodwin Apr 24, 2026
c958b30
feat(binutil): introduce pkg/binutil Wire helpers; pilot on ASP Write…
pgodwin Apr 24, 2026
74f1bfa
feat(telemetry): introduce pkg/telemetry with expvar backend; wire in…
pgodwin Apr 24, 2026
eabdcae
refactor(atp): migrate ATPHeader to Wire codec
pgodwin Apr 24, 2026
aa73332
refactor(dsi): migrate Header to Wire codec
pgodwin Apr 25, 2026
1bb8721
refactor(appledouble): lift format-only code to pkg/appledouble
pgodwin Apr 25, 2026
d23342d
refactor(localtalk): wire backends through FrameSender interface
pgodwin Apr 25, 2026
674b359
docs: add ARCHITECTURE.md and link from README
pgodwin Apr 25, 2026
9124e77
Step 21: FileSystem registry in service/afp
pgodwin Apr 25, 2026
b342fcd
Step 22: Gate macgarden VFS behind //go:build macgarden
pgodwin Apr 25, 2026
3e38bf8
Step 23 (sqlite_cnid only): Gate cnid SQLite backend behind build tag
pgodwin Apr 25, 2026
95ba1e4
Step 24: Wire shutdown signals into long-running waits
pgodwin Apr 25, 2026
5f96b3c
Step 25: track background goroutines via WaitGroup + stop channels
pgodwin Apr 25, 2026
90e5483
Step 26: add package doc comments
pgodwin Apr 25, 2026
e0cc347
Step 27: drop AFP naming stutter
pgodwin Apr 26, 2026
9dcd3ee
Step 28: wrap aggregated Stop errors with errors.Join
pgodwin Apr 26, 2026
8a0b7c7
Step 30: add fuzz tests for DDP decoder entry points
pgodwin Apr 26, 2026
de84164
Step 32: wire vet/race/lint/vuln + build-tag matrix into PR CI
pgodwin Apr 26, 2026
a07335e
Step 23 (part 1): gate MacIP gateway behind //go:build macip
pgodwin Apr 26, 2026
0a17ffd
Step C: migrate config from INI to TOML via koanf
pgodwin Apr 26, 2026
9b23122
Step B: config package owns source only; AFP owns its own schema
pgodwin Apr 26, 2026
2524466
Step B2: AFP owns Config struct; volumes move under [AFP.Volumes.*]
pgodwin Apr 26, 2026
81cd1a7
Step B3: EtherTalk + LocalTalk own their Config structs
pgodwin Apr 26, 2026
ca4b8aa
Step A: //go:build afp gate for AFP/ASP/DSI
pgodwin Apr 27, 2026
43da070
Step 18 (atp): promote ATP wire format to protocol/atp
pgodwin Apr 27, 2026
5ad7f48
Step 18 (zip/rtmp/aep): promote wire constants to protocol/*
pgodwin Apr 27, 2026
bb73016
Step 18 (asp): promote ASP wire format to protocol/asp
pgodwin Apr 27, 2026
c9c5bab
Step 14 (afp pilot): golden hex test for FPGetSrvrInfoRes.Marshal
pgodwin Apr 27, 2026
2c8ec48
Step 18 (asp): add wire-format tests for protocol/asp
pgodwin Apr 27, 2026
e858666
Step 14 (afp): migrate FPGetSrvrInfoRes to MarshalWire/WireSize
pgodwin Apr 27, 2026
3ab1c09
Step 14 (afp): migrate FPGetSrvrParmsRes and FPLoginRes to MarshalWire
pgodwin Apr 27, 2026
c1c5022
Step 14 (afp): migrate FPMapIDRes/FPMapNameRes/FPGetSrvrMsgRes/FPCatS…
pgodwin Apr 27, 2026
3d87e1b
Step 14 (afp): migrate FPOpenVolRes/FPGetVolParmsRes to MarshalWire
pgodwin Apr 27, 2026
07f5d60
Step 14 (afp): migrate fork_models response types to MarshalWire
pgodwin Apr 27, 2026
a08537f
Step 14 (afp): migrate filedir_models response types to MarshalWire
pgodwin Apr 27, 2026
f2b1f2f
Step 14 (afp): migrate desktop_models response types to MarshalWire
pgodwin Apr 27, 2026
c5374d3
Step 14 (afp): migrate directory_models response types to MarshalWire
pgodwin Apr 27, 2026
e8d00b3
Step 15 (afp): replace 525-LOC HandleCommand switch with command regi…
pgodwin Apr 27, 2026
656bf48
Step 15 (afp): relocate file/dir param packing out of server.go
pgodwin Apr 27, 2026
ed64a8e
Step 14 (binutil): add WriteU8/16/32/64 for ByteWriter sinks
pgodwin Apr 27, 2026
bd1172b
Step 14 (afp): migrate volume/info/fork wire packing to binutil
pgodwin Apr 27, 2026
a3087dd
Step 15 (afp): move calcVolParamsSize to volume.go
pgodwin Apr 27, 2026
8e13cef
Step 15 (afp): move AFP command codes and small types to types.go
pgodwin Apr 27, 2026
7f671a5
Step 15 (afp): lift CNID/path resolution helpers into paths.go
pgodwin Apr 27, 2026
ecddc23
Step 15 (afp): split metadata helpers, drop dead imports from server.go
pgodwin Apr 27, 2026
8677d11
Step 15 (afp): move volume-ID derivation helpers to volume.go
pgodwin Apr 28, 2026
964d99d
Step 15 (afp): lift path-logging helpers to logging.go; inline GetSrv…
pgodwin Apr 28, 2026
800e834
Step 15 (afp): move HandleCommand and Request/Response interfaces to …
pgodwin Apr 28, 2026
54d5b8f
Step 15 (afp): extract per-volume construction into installVolumes
pgodwin Apr 28, 2026
6bbcec4
Step 15 (afp): move volume-keyed lookup helpers to volume.go
pgodwin Apr 28, 2026
89ae3d3
Step 15 (afp): move metadata-init and desktop-rebuild spawns to topic…
pgodwin Apr 28, 2026
464c91b
Step 16 (appledouble): migrate AFP call sites to pkg/appledouble; del…
pgodwin Apr 28, 2026
399235d
Remove plans.md committed by mistake
pgodwin Apr 28, 2026
9095816
Step 15 (afp): split handleEnumerate into validate/resolve/read/pack …
pgodwin Apr 28, 2026
77a4893
Step 15 (afp): extract packVolumeParams; deduplicate FPOpenVol/FPGetV…
pgodwin Apr 28, 2026
1264f0f
Step 15 (afp): split handleGetForkParms into orchestrator + two helpers
pgodwin Apr 28, 2026
2d609b2
ethertalk: take bridge config via Options at construction
pgodwin Apr 28, 2026
0192b23
protocol/llap: lift LLAP wire format out of port/localtalk
pgodwin Apr 28, 2026
e233f1d
protocol/nbp: lift NBP wire format out of service/zip
pgodwin Apr 28, 2026
90f693c
Step 22: move macgarden VFS out of core AFP
pgodwin Apr 28, 2026
e5694b4
Step 30: add fuzz tests for atp, nbp, llap decoders
pgodwin Apr 28, 2026
3b4fd81
Step 32: extend CI to cover the build-tag matrix
pgodwin Apr 28, 2026
6c205cb
Step 24 (macip slice): thread context.Context through DHCP request path
pgodwin Apr 28, 2026
d211a5c
Step 24 (Service.Start slice): thread context through service lifecycle
pgodwin Apr 28, 2026
ce52d0a
Step 24 (lifecycle ctx): derive service contexts from Start parent
pgodwin Apr 29, 2026
2b29d22
Step 25 (macip slice): track loop goroutines on a WaitGroup
pgodwin Apr 29, 2026
f56909d
Add 'all' build tag enabling afp + macgarden + macip together
pgodwin Apr 29, 2026
10be8c7
Step 25 (rtmp/zip slice): WaitGroup-track router-driven loops
pgodwin Apr 29, 2026
20ca712
Step 25 (aep/llap slice): WaitGroup-track loop goroutines
pgodwin Apr 29, 2026
8004449
Step 25 (dsi slice): WaitGroup-track accept loop and per-connection h…
pgodwin Apr 29, 2026
8626703
protocol/atp: rename ATPHeader/ATPHeaderSize to Header/HeaderSize
pgodwin Apr 29, 2026
68f740f
protocol/atp: rename DDPTypeATP to DDPType
pgodwin Apr 29, 2026
81840df
protocol/asp: rename ASPVersion to Version
pgodwin Apr 29, 2026
e409076
service/dsi: drop unused AFPVersion struct
pgodwin Apr 29, 2026
991e504
service/asp: track ATP drain goroutines in a WaitGroup
pgodwin Apr 29, 2026
c55e51d
adopt slices/maps stdlib idioms for map-key collection
pgodwin Apr 29, 2026
8caaf90
port/rawlink: use slices.SortFunc instead of sort.Slice
pgodwin Apr 29, 2026
5bc8f0e
pkg/cnid: include sqlite backend under the 'all' build tag
pgodwin Apr 29, 2026
6be655a
ci: strengthen lint/race/vuln/gosec under all build tag
pgodwin Apr 29, 2026
354f141
test: add asp fuzz, atp wire benchmarks, encoding parallelism
pgodwin Apr 29, 2026
3f8efda
test(macgarden): make session prime explicit so unit tests skip network
pgodwin Apr 29, 2026
c6170b6
log: formalise netlog as the project logging API
pgodwin Apr 29, 2026
d36bd0e
config: unify flag and TOML sources behind appConfig
pgodwin Apr 29, 2026
c7a7d50
refactor(afp): split fs.go by concern
pgodwin Apr 29, 2026
c283626
refactor(afp,asp,dsi): invert MaxReadSize coupling
pgodwin Apr 29, 2026
eb93f79
refactor: move encoding to pkg/encoding
pgodwin Apr 30, 2026
65a72df
refactor(asp): extract sessionedReplier prologue
pgodwin Apr 30, 2026
58a6e62
refactor(asp): make write phase explicit
pgodwin Apr 30, 2026
a2c053f
refactor(asp): explicit session lifecycle states
pgodwin Apr 30, 2026
db1317c
refactor(asp): consolidate session locks
pgodwin Apr 30, 2026
53c73ae
refactor(asp): lift dedup filter into typed seqFilter
pgodwin Apr 30, 2026
e12008e
refactor(service): split Router by capability (ISP)
pgodwin Apr 30, 2026
e5407c2
afp: extract sessionState substruct (god-struct decomposition #1)
pgodwin Apr 30, 2026
00e67c5
afp: extract desktopState substruct (god-struct decomposition #2)
pgodwin Apr 30, 2026
0de3d7a
afp: extract forkState substruct (god-struct decomposition #3)
pgodwin Apr 30, 2026
dbaa471
afp: extract backupDates substruct and drop Service.mu (god-struct de…
pgodwin Apr 30, 2026
a846b39
goroutine hygiene: track macip etherlink and DSI per-conn lifecycles
pgodwin Apr 30, 2026
81bf4e4
llap: honour ctx cancellation in CTS wait
pgodwin Apr 30, 2026
1170f4f
doc: add Package comments for ddp, port, cmd/omnitalk
pgodwin Apr 30, 2026
668a6ef
refactor(atp): use protocol/atp types in transaction layer
pgodwin May 1, 2026
155a5e6
ci: add router-only build variant alongside default all-features
pgodwin May 1, 2026
e5baac1
chore(itemcache): refresh HyperCard 2.1 entry
pgodwin May 1, 2026
66a2239
docs(readme): align AFP and Volumes config tables with current schema
pgodwin May 1, 2026
00ac988
test(macgarden): gate live-network tests behind OMNITALK_LIVE_TESTS
pgodwin May 1, 2026
fbd86d4
ci: bump golangci-lint-action to v8 for v2 config support
pgodwin May 1, 2026
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
1,708 changes: 1,708 additions & 0 deletions ._itemcache/itemcache.json

Large diffs are not rendered by default.

70 changes: 70 additions & 0 deletions .github/workflows/pr-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,76 @@ jobs:
shell: bash
run: bash scripts/ci/test.sh

quality:
name: Quality (vet + race + lint + vuln)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod

- name: Install libpcap headers
run: |
sudo apt-get update
sudo apt-get install -y libpcap-dev

- name: go vet
run: go vet ./...

- name: Race-enabled tests
run: go test -tags all -race -count=1 ./...

- name: golangci-lint
uses: golangci/golangci-lint-action@v8
with:
version: latest
args: --build-tags=all

- name: govulncheck
run: |
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck -tags all ./...

- name: gosec (untrusted-input paths)
run: |
go install github.com/securego/gosec/v2/cmd/gosec@latest
gosec -tags all ./service/macip/... ./service/macgarden/... ./service/afpfs/macgarden/...

build-tags:
name: Build-tag matrix
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
tags:
- ""
- "afp"
- "afp macgarden"
- "afp macip"
- "afp macgarden macip"
- "afp sqlite_cnid"
- "all"
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod

- name: Install libpcap headers
run: |
sudo apt-get update
sudo apt-get install -y libpcap-dev

- name: Build with tags="${{ matrix.tags }}"
run: go build -tags "${{ matrix.tags }}" ./...

build:
name: Build (${{ matrix.os }})
runs-on: ${{ matrix.os }}
Expand Down
39 changes: 38 additions & 1 deletion .github/workflows/release-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,34 +39,67 @@ jobs:
done < <(bash scripts/ci/compute-release-metadata.sh)

build:
name: Build And Package (${{ matrix.os }})
name: Build And Package (${{ matrix.os }} / ${{ matrix.variant }})
needs: version
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
# Linux - all
- os: ubuntu-latest
variant: all
artifact_name: omnitalk-linux
archive_name: omnitalk-${{ needs.version.outputs.release_tag }}-linux-amd64.tar.gz
build_script: bash scripts/ci/build.sh
package_script: bash scripts/ci/package-release.sh
target_os: linux
output: out/omnitalk
# Linux - router
- os: ubuntu-latest
variant: router
artifact_name: omnitalk-router-linux
archive_name: omnitalk-router-${{ needs.version.outputs.release_tag }}-linux-amd64.tar.gz
build_script: bash scripts/ci/build.sh
package_script: bash scripts/ci/package-release.sh
target_os: linux
output: out/omnitalk-router
# macOS - all
- os: macos-latest
variant: all
artifact_name: omnitalk-macos
archive_name: omnitalk-${{ needs.version.outputs.release_tag }}-macos-amd64.zip
build_script: bash scripts/ci/build.sh
package_script: bash scripts/ci/package-release.sh
target_os: macos
output: out/omnitalk
# macOS - router
- os: macos-latest
variant: router
artifact_name: omnitalk-router-macos
archive_name: omnitalk-router-${{ needs.version.outputs.release_tag }}-macos-amd64.zip
build_script: bash scripts/ci/build.sh
package_script: bash scripts/ci/package-release.sh
target_os: macos
output: out/omnitalk-router
# Windows - all
- os: windows-latest
variant: all
artifact_name: omnitalk-windows
archive_name: omnitalk-${{ needs.version.outputs.release_tag }}-windows-amd64.zip
build_script: ./scripts/ci/build.ps1
package_script: ./scripts/ci/package-release.ps1
target_os: windows
output: out/omnitalk.exe
# Windows - router
- os: windows-latest
variant: router
artifact_name: omnitalk-router-windows
archive_name: omnitalk-router-${{ needs.version.outputs.release_tag }}-windows-amd64.zip
build_script: ./scripts/ci/build.ps1
package_script: ./scripts/ci/package-release.ps1
target_os: windows
output: out/omnitalk-router.exe
steps:
- name: Checkout
uses: actions/checkout@v4
Expand All @@ -89,6 +122,7 @@ jobs:
BUILD_VERSION: ${{ needs.version.outputs.build_version }}
BUILD_COMMIT: ${{ needs.version.outputs.commit_sha }}
BUILD_DATE: ${{ needs.version.outputs.build_date }}
BUILD_VARIANT: ${{ matrix.variant }}
OUTPUT: ${{ matrix.output }}
run: ${{ matrix.build_script }}

Expand All @@ -99,6 +133,7 @@ jobs:
BUILD_VERSION: ${{ needs.version.outputs.build_version }}
BUILD_COMMIT: ${{ needs.version.outputs.commit_sha }}
BUILD_DATE: ${{ needs.version.outputs.build_date }}
BUILD_VARIANT: ${{ matrix.variant }}
OUTPUT: ${{ matrix.output }}
run: ${{ matrix.build_script }}

Expand All @@ -109,6 +144,7 @@ jobs:
TARGET_OS: ${{ matrix.target_os }}
RELEASE_TAG: ${{ needs.version.outputs.release_tag }}
BUILD_VERSION: ${{ needs.version.outputs.build_version }}
BUILD_VARIANT: ${{ matrix.variant }}
run: ${{ matrix.package_script }}

- name: Package release (Windows)
Expand All @@ -118,6 +154,7 @@ jobs:
TARGET_OS: ${{ matrix.target_os }}
RELEASE_TAG: ${{ needs.version.outputs.release_tag }}
BUILD_VERSION: ${{ needs.version.outputs.build_version }}
BUILD_VARIANT: ${{ matrix.variant }}
run: ${{ matrix.package_script }}

- name: Upload build artifact
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,6 @@ go.work.sum
# Generated by scripts/ci/build.ps1
/cmd/omnitalk/resource.syso
/cmd/omnitalk/versioninfo.json

._htmlcache/
.macgarden/
42 changes: 42 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
version: "2"

run:
timeout: 5m
build-tags:
- all

linters:
default: none
enable:
- errcheck
- errorlint
- gocritic
- govet
- ineffassign
- misspell
- revive
- staticcheck
- unused

linters-settings:
errorlint:
errorf: true
asserts: true
comparison: true
revive:
rules:
- name: var-naming
- name: package-comments
- name: exported
disabled: true
gocritic:
disabled-checks:
- ifElseChain
- singleCaseSwitch

issues:
exclude-rules:
- path: _test\.go$
linters:
- errcheck
- revive
Loading
Loading