Skip to content

Releases

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 08 Nov 17:32
143791f

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 mesh prints 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

Choose a tag to compare

@github-actions github-actions released this 08 Nov 10:23
2ae7674

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

Choose a tag to compare

@github-actions github-actions released this 08 Nov 09:51
aa0c862

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

Choose a tag to compare

@github-actions github-actions released this 08 Nov 09:16
8ce9245

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

Choose a tag to compare

@github-actions github-actions released this 08 Nov 05:26
63f2700

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

Choose a tag to compare

@github-actions github-actions released this 08 Nov 01:29
69522dd

Changelog

  • 1bb25f3 fix(source): statted windows subdirectories instead of parent index
  • e1f145a fix(store): reduced snapshot and checkout storage growth
  • 6e03a30 refactor(export): optimized node table memory usage with leaves
  • 69522dd test(source): used read-only modes windows retains in reuse key test

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 07 Nov 15:50
ca1663e

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

Choose a tag to compare

@github-actions github-actions released this 07 Nov 02:03
5d54cb0

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

Choose a tag to compare

@github-actions github-actions released this 06 Nov 03:07
b1c6cf2

Changelog

  • b1c6cf2 test(walk): tolerated lagging directory mtimes in windows listings