Repository navigation
Releases
Releases · stencil-hq/ovnfs
v0.3.0
Changelog
- 1af1ea8 Merge branch 'main' of https://github.com/stencil-hq/ovnfs into durable-sync-stale-mount
- 569c46a feat(checkout): automated snapshot cleanup on removal
- 064b52a feat(export): added .metadata_never_index marker to block Spotlight indexing
- cfe1d40 feat(git/fetch): added support for dumb HTTP and remote helpers
- bd61159 feat: added atime flag to control mount access-time updates
- 6b3657c feat: added colorized CLI output with automatic terminal detection
- 5668eeb feat: added keep-mount option to stop and restart operations
- 625936d feat: added macOS NFS Unix socket support and unified address handling
- a3d25c0 feat: added profiling command to daemon
- da062c4 feat: allowed user configuration of serve defaults
- af5f1c7 fix(apply): replaced held and read-only files with posix renames
- 87f796b fix(checkout): failed apply when the source folder is not a directory
- f1fa1d1 fix(daemon): fixed stop and restart handling to wait for daemon process exit
- 0312080 fix(fuse): detached a dead mount left by a killed daemon before mounting
- 45c9b6b fix(git): discovered maintenance loose packs
- a72a3e5 fix(git/config): fixed tilde expansion on Windows
- 66c16c5 fix(git/fetch): matched git for windows url and helper handling
- 4fa9d24 fix(git/refs): matched git for windows file sharing for ref updates
- 143791f fix(git/refs): retried lock creation denied by a concurrent release - TestConcurrentUpdates/files failed on windows ci for v0.3.0 (both runs) with access denied from creating refs/heads/race.lock while other goroutines released the same lock, without the delete-pending status createExclusive maps to an existing lock. - createExclusive now retries access denied with Git for Windows' retry delays, sharing the loop with replaceFile; a delete-pending lock still counts as held at once.
- fd79425 fix(git/repo): matched git for windows discovery, init and identity
- 1685021 fix(overlay): made fsync write a memory file to its upper and sync it
- e5e4d27 fix(overlay): made memory fsync durability opt-in
- df8332b fix: prevented daemon hang on keep-mount stop by syncing listener cuts
- 29e3cfb merge pr #29: sync memory-tier files to their upper layer
- afb6ff3 refactor(attach): replaced the mesh with plain ssh links - Removed the mesh (QUIC nodes, the Stencil relay client, roster and join tokens), meshd and the mesh verbs and ops; attach, send and run --on now always link through
ssh HOST ovnfs link. - The daemon's offer id is now a random id kept in /node_id instead of the mesh key; attaches made before this reopen as new remote checkouts. - send no longer joins the remote to a mesh: it probes ssh, installs ovnfs when missing and attaches with the binary it found. -ovnfs meshprints a deprecation note pointing at attach, send and push. - Made sshConn.Close idempotent; concurrent Wait calls from peer's shutdown paths hung stop and restart while any ssh link was up. - Dropped quic-go, coder/websocket and x/crypto from go.mod; updated README and docs. - 0fd7bcd refactor(overlay): optimized hard-link metadata handling
- 389bd1a refactor: migrated CLI to kong grammar
- abf802a refactor: migrated git interaction to in-process implementation
- f057e24 test(git/rev): gave git for windows timezones it can parse
- 0181ffc test(repo): stopped using git as oracle for compatObjectFormat - git 2.56 accepts extensions.compatObjectFormat only when built with Rust, so the comparison failed on ubuntu runners whose git has Rust enabled. - Asserted Discover's deliberate refusal directly and dropped the dead "requires Rust" error classification.
v0.2.6
Changelog
- 5d9cdbf docs(classes): described cache and local paths as live until written
- 0784f73 fix(apply): serialized concurrent applies into one folder
- 3d89a03 fix(fuse): detached a killed daemon's dead mount before mounting
- 2ae7674 style(apply): gofmt'd the concurrent apply test - gofmt now wraps a closure body passed to wg.Go onto its own lines; ci's gofmt step failed on 5d9cdbf.
v0.2.5
Changelog
- 19a9457 feat(release): published release binaries to build.stencil.so - release.yml now runs internal/release/upload after GoReleaser, which declares the six binaries from dist/artifacts.json to the build service, uploads them to their presigned URLs and publishes the build, authenticated by the tag run's GitHub OIDC token. - internal/release finds a release binary for a platform on the build service (latest stable or an exact tag) and downloads it checked against its size and SHA-256; OVNFS_BUILD_URL overrides the origin. - send installs ovnfs on machines lacking it from the build service instead of GitHub release archives.
- aa0c862 feat(update): added ovnfs update and stencil.so install scripts - ovnfs update rebuilds a go install'd binary with go install from the latest module version and replaces a release binary with the latest build from build.stencil.so, staging beside it, checking it runs, then renaming it into place (moving a running exe aside on Windows); builds from a clone are refused. - install.sh and install.ps1, served as stencil.so/ovnfs.sh and /ovnfs.ps1, install the latest or a pinned release from the build service after checking its SHA-256, and hint at ovnfs restart, PATH, git and fusermount3. - README and docs/development.md document the installers, update and the build service release flow.
v0.2.4
Changelog
- 8ce9245 ci(release): ran goreleaser from the go module proxy - goreleaser-action downloads goreleaser from GitHub releases, which answered 504 on every attempt of the v0.2.4 release job and blocked it before anything was built. - release.yml and ci.yml's snapshot build now run go run github.com/goreleaser/goreleaser/v2@v2.20.0, built from proxy.golang.org in about 30s; the version is pinned in both files and bumped by hand, since dependabot does not track it.
- 8eb76c8 feat(attach): added push to copy remaining blobs to attached machines - ovnfs push [CHECKOUT] [--to HOST] (op push) has each matching attachment's machine fetch, over its link, every blob its checkouts and snapshots from this source still lack (git mirror content excluded), so they read without this machine. - The remote fetches in batches of at most 8 MiB or 1024 blobs so its own reads wait behind one batch; attachments push concurrently and report blobs, bytes or their error. - Bumped the link protocol to version 5: 'U' asks for a push, 'V' and 'G' answer it, 'K' cancels pushes as well as pulls; renamed Puller/ServePull to Remote/ServeRemote. - pull and push share one attachment lookup by checkout and host; documented push in docs/remote.md.
- 810f1e6 feat(cli): added --json output to version and restart - Made version a regular verb: --json prints {"version","go","os","arch"} and it still reads no configuration, so it runs where none parses. - restart --json prints the new daemon's status as start --json does; only stop prints the stop reply, so restart emits one JSON document. - status without a running daemon writes "not running" to stderr under --json, keeping stdout JSON-only; the exit status stays 1.
- 6be40d2 feat(push): showed a progress bar while attached machines fetch - The remote reports push progress over the link ('Y': blobs, bytes and their totals) before fetching and then at most every 250 ms as blobs land; 'V' carries the same final fields. - The daemon forwards it as "pushing" events with an api.Pushed, which gained total_blobs and total_bytes; a failed push now reports how far it got. - ovnfs push subscribes when stderr is a terminal and redraws one line summing its attachments, erased before the final table; moved runPush to cli_push.go.
- 46e37af feat(send): added send to attach over ssh with remote bootstrap
v0.2.3
Changelog
- bd22543 Merge PR #24: perf(checkout): open folder checkouts in milliseconds by reusing captures and prepared checkouts (@Gabriel-Hiss)
- e250772 docs(checkout): pointed prepareCheckout at namePrepared
- 555769f docs(skills/ovnfs): added comprehensive OVNFS skill documentation
- e2ac8f7 feat(checkout): added prune and selective listing
- fd57546 feat(checkout): open checkouts on an earlier capture
- 9afdc07 feat(checkout): print diffs as git binary patches
- 4609d50 feat(checkout): reuse an unchanged folder's capture and keep checkouts prepared
- a06825a feat(clone): centralized copy routes and added windows block cloning
- 6437570 feat(watch): let callers wait for changes reported before a sync
- e948bf6 feat: added restart command and checkout touched tracking
- 7fa253c fix(checkout): keep nested empty directories in git snapshots
- 6bfb535 fix(checkout): store line endings as git does in binary patches
- b0632d5 fix(checkout): told mount overlaps by file identity in new
- 458c67a fix(nfs): marked callback path down before queued recalls ran - Moved the CB_RECALL failure handling (revoke, cbDown) into a hook that v4Callback.recall runs while still holding the path's call lock. - A recall queued behind a failed one could take the lock before cbDown was set and send over the dead path, flaking TestV4QueuedRecallsSkipDownPath.
- cb607c7 fix(watch): reported darwin events ahead of the sync marker first
- edb765e perf(checkout): commit state outside the registry lock in groups
- cfadb70 perf(checkout): refill the prepared pool sooner after a recapture
- f97e94e perf(checkout): resolve each folder's source root once
- 6849178 perf(checkout): sized prepared pools by concurrent creates within a byte budget
- 58761a8 perf(git): remember answers while the files they read stay unchanged
- 50d2a07 perf(git): write private git directories without running git
- e04bb84 perf(source): capture unchanged files without git and read directories ahead
- 77075ef refactor(checkout): name checkout directories apart from checkouts
- 63f2700 refactor(checkout): reworked checkout locking to avoid registry lock during file calls
- eb83644 refactor(checkout): split folder creates into capture and checkout preparation
- c7c29b2 test(checkout): cover capture reuse and prepared checkouts
- f53a620 test(checkout): looked up reuse folders by their resolved source root
v0.2.2
v0.2.1
Changelog
- b00ac65 Merge PR #22: fix(smb): owned loopback files by the daemon's user on windows (@godperkys)
- ca1663e fix(overlay): changed symlink metadata without following the link
- f2a0ece fix(smb): owned loopback files by the daemon's user on windows
v0.2.0
Changelog
- 7ea7db7 build(deps): bump the go group across 1 directory with 4 updates
- cdb3fb6 feat(attach): fetched committed content from the git upstream - Offers named each repository's upstream URL (credentials stripped) and a commit it has: HEAD when pushed, else its merge base with the upstream. - Remote daemons fetched that commit shallowly into mirror.git in the background, with their own credentials and no prompts, and read committed blobs from it; only edited and untracked files still crossed the link. - Reads used the link until the commit arrived and whenever the fetch failed; grep scanned mirrored files locally and prefetch skipped them. - Plan counted origin files against the same commit; docs described the mirror.
- 8bae6cc fix(apply): dropped a dry run's snapshot when its wait failed
- 91caa0c fix(apply): dropped the snapshot a dry run reads from
- 816c66d fix(base): relocated live links into the folder to the checkout
- e6e67e0 fix(checkout): gave absorbed submodules private git directories
- bd65893 fix(checkout): kept submodule gitfiles per checkout in forks and snapshots
- 5d54cb0 fix(checkout): rebound only copied submodule gitdirs and kept copy metadata
- 80f7a93 fix(daemon): started the windows daemon on a hidden console
- 7b4b387 fix(ntinfo): encoded win32 device link targets with the nt prefix
- 9983fc1 fix(overlay): kept a stored layer's hard links together on windows
- b5aeff8 fix(smb): authenticated and signed the windows drive mapping
- c219d58 fix(smb): flagged followed links on every SMB 3 dialect
- faa4366 fix(smb): flagged opens that followed a link as reparse points
- da75b44 fix(smb): kept attribute-only opens out of sharing checks
- 438172b fix(smb): treated drive and UNC link targets as absolute
- d9d0967 fix(windows): created directory links and junctions through the mount
- 101375c fix(windows): read junctions as directory symlinks
- 3989cbb fix(windows): stored links to the checkout's own mount as relative
- 38c9ce7 fix(windows): typed links to directories as directory symlinks
- cf9fdd6 refactor: implemented optimized binary storage and delta-based packing
- 98747e6 test(checkout): waited for layers to finish storing, not to start
- 843ccd2 test(export): closed the node table before opening its log again
- 9fc32b9 test(git): compared the marked config's mode with its original
- 1a7a555 test(ntinfo): covered malformed junction reparse buffers
v0.1.1
Changelog
- b1c6cf2 test(walk): tolerated lagging directory mtimes in windows listings