v0.8.0
Changed
- A startup warning when
server.alpndoes not offerh3. The key stays legal for interop debugging, but a list withouth3starts a server every client fails against withno_application_protocol, sowarnings()now names the configured list at startup instead of leaving handshake errors as the only trace. - A reload that ignores a changed
server.listennow says so. SIGHUP cannot move the listening socket; when the reloaded file names a different address the server logs one warning with the bound and configured addresses rather than staying silent. - Release tarballs carry
docs/. Both scripts point the operator atdocs/configuration.mdordocs/deployment.mdat the moment they refuse an install, so the pages now travel with the binary; the release workflow also refuses to publish a tag whose commit has no successful CI run. - The installer names
--binarywhen the binary is not where it looked, so an operator working from a release tarball is told the flag instead of being sent tocargo build. - Release builds use fat LTO with one codegen unit. Measured on Linux against the default profile: the stripped binary is 11.5% smaller and a 64-byte datagram (the shape of a DNS query through the tunnel) costs 13-17% less CPU each way; MTU-sized datagrams and bulk TCP move 2-8%. The release link takes about a minute longer; nothing else changes.
- Refactor batch, behaviour unchanged.
tunnel/mod.rsis split intostatus.rs(RFC 9209 vocabulary and the response helpers) andquota.rs; the per-connectionContextis held in anArc; the at-capacity admission decision, the closing log line and the GOAWAY handling are named functions instead ofselect!arms; the buffered HTTP/3 frame types are an enum so the frame parser is exhaustive and its lastunreachable!is gone; four copies of the bounded-response match are one helper;MAX_VARINTisVARINT_MAX_LEN.
Fixed
- The
max_streams_bidiceiling's error message still described the credit as paid at every handshake; since the pre-authentication clamp it is granted once, by a connection's first authenticated request, which is what the message says now. docs/configuration.mddocumented the compiled-in MTU defaults while every install runs above them (initial_mtu = 1242,mtu_upper_bound = 1464from the shipped example); the doc now says so, in the same shape as the existinginitial_rtt_msnote.docs/deployment.mdleads with the release tarball: download URL shape and the two supported targets,sha256sum --ignore-missing -c SHA256SUMS(a plain-cfails because the file lists both architectures), the prerequisites a stock Ubuntu 24.04 image has and lacks, a conditional firewall line, the one-sentence rollback rule for releases before v0.4.5, and the-c/--binaryflags that existed only in--help.docs/architecture.mdnames the QPACK/Huffman differential oracle as the third independent judge of the in-tree codec.
Testing
- New CI gates: shellcheck over
script/*.sh; clippy with--all-features; the mirrored build step incross.ymlandrelease.ymlis asserted equal by a test and editing either file runs the cross-build; thedocs/copy in the tarball is asserted; the fuzz targets are type-checked on stable with--locked; the fuzz and root manifests are asserted to pin the same quinn-proto revision. - Operator-only test binaries are behind the
operator-runsfeature (it_bench,it_resolver_pool):cargo testno longer links them to run nothing, and naming one without the feature is an error rather than an empty pass. - The shipped example configuration is pinned to the defaults it documents: every optional key is uncommented and compared field by field, the key set per section is asserted, and the three intended deviations are listed so a fourth cannot slip in.
- The fuzz lockfile is asserted to record the crate's current version, after the v0.8.0 bump itself tripped the new
--lockedfuzz job in CI; the installer's port range check is written as anifso the runner's older shellcheck stops reporting SC2015. it_auth_logscopes each credential assertion to its own scenario; the last cross-file test scaffolding is collected intotests/common/; the narrowest timing bound in the suite now has the same 2.5x margin as its neighbours.fuzz/moves to edition 2024 with a refreshed lockfile (the current crate version, aws-lc-rs, no ring in any shipped target's graph) and the eight targets were run against the corpus: zero crashes.- Cross-implementation interop (masque-go + aioquic) and the full suite were re-run against this tree before tagging, both green with a clean server log.
Static musl builds for x86_64 and aarch64. Verify with SHA256SUMS.
Each archive carries the binary, LICENSE, README.md and the script/ and docs/ directories, so the self-signed installer runs straight out of it — and so does the documentation it refers you to:
tar xzf volto-*-x86_64-unknown-linux-musl.tar.gz
cd volto-*-x86_64-unknown-linux-musl
sudo script/install-selfsigned.sh --binary ./voltoOr skip the manual download entirely: script/deploy.sh fetches the newest release itself, verifies it against SHA256SUMS and installs or updates in place — with --enable-timer it keeps the host on the latest release with a daily systemd timer. It bootstraps a bare host in one line:
curl -fsSL https://raw.githubusercontent.com/vcarus/volto/main/script/deploy.sh | sudo bash -s -- --enable-timerFull Changelog: v0.7.0...v0.8.0