* chore: improve crate doc checks on ci
* fix: doc_auto_cfg feature has been removed (error)
* fix: bare URLs are not automatically turned into clickable links (warning)
- BREAKING: End support for unmaintained Windows 7, 8, 8.1 platforms as previously announced on v2.36.1.
- SECURITY (RUSTSEC-2024-0437): Crash due to uncontrolled recursion in protobuf crate was temporarily solved in the previous release. However, this PR applies the dependency patches recently available.
- RESTORED: `experimental` Cargo feature for metrics and in-memory cache.
It just automates the post-release updates needed after every release, like documentation and installer script updates, as well as checksum generation.
This change removes the "experimental" Cargo feature from the
resulting static-web-server **binary** temporarily (not the Cargo
feature itself) to prevent shipping the RUSTSEC-2024-0437 security
vulnerability along with SWS binary.
The "experimental" Cargo feature will be restored once the upstream
patch is available.
Old Windows 7, 8, 8.1 patch:
Additionally, it pins zerofrom, zerofrom-derive and litemap
dependencies **temporarily** to be able to build SWS for old Windows
7, 8, 8.1 because newer versions of them require rustc 1.81 or later.
* chore: build and push devel image on master changes via ci workflow (#508) by @mschoettle
* ci: build and push devel image on master
* Temporarily enable devel docker release on pull request
* add build release
* ci: build only amd64 and use devel dockerfiles
* temporarily disable login to docker hub
* fix tag
* add cache for binary
* test release binary
* move binary to the right place
* update action versions
* disable docker hub image
* test tags
* test tags
* test tags
* add permissions to scratch job
* apply feedback
* remove test step
* Address comments
* refactor: prefer job matrix strategy and x86_64-unknown-linux-musl
---------
Co-authored-by: Matthias Schoettle <git@mattsch.com>
* Fix anchor links in documentation
* Move strict to mkdocs config
* add mkdocs to CI
---------
Co-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>
Via a new advanced configuration entry.
The feature also supports expiration policies such as Time To Live (TTL) and Time To Idle (TTI).
Admission to a cache is controlled by the Least Frequently Used (LFU) policy and the eviction from a cache is controlled by the Least Recently Used (LRU) policy.
Example:
```toml
[general]
[advanced]
[advanced.memory-cache]
# Maximum capacity entries of the memory cache-store. Default 256
capacity = 256
# Time to live in seconds of a cached file entry. Default 1h
ttl = 3600
# Time to idle in seconds of a cached file entry. Default 5min
tti = 300
# Maximum size in bytes for a file entry to be cached. Default 8MB
max-file-size = 8192
```
Note that this feature requires Rust 1.76.0 or newer.
This feature is **experimental**. However, when stabilized then a cargo feature will be available as well as a proper documentation page.
Since the latest Rust 1.78.0 drops support Windows 7 support.
See https://blog.rust-lang.org/2024/02/26/Windows-7.html
We pin Rust to 1.77.2 for the following Windows targets:
- x86_64-pc-windows-msvc
- i686-pc-windows-msvc
- x86_64-pc-windows-gnu
aarch64-pc-windows-msvc (a.k.a. Windows ARM64) will continue using the
latest stable Rust available.
NOTES:
Microsoft stopped support for Windows 7 (also for extended users in
2023). But at the moment we don't know how long we should keep
supporting this unmaintained platform. However, keep in mind that we
could reconsider bumping up the MSRV in future SWS versions when
convenient, advising users accordingly.
See https://learn.microsoft.com/en-us/lifecycle/products/windows-7
This completes the previous work on
https://github.com/static-web-server/static-web-server/pull/443 by
correctly setting the default 64KB page size for jemalloc at
the build config level (cross) which should be applied for development
and production `aarch64-unknown-linux-musl` builds.
It fixes an issue when using the `aarch64-unknown-linux-musl` binary
in systems with 16KB page size like Linux aarch64 (Raspberry Pi 5) by
setting up jemalloc to use a maximal supported page size of 64KB on
aarch64. See jemalloc/jemalloc#467#issuecomment-2054282344
jemalloc can also handle systems with smaller page sizes. See jemalloc/jemalloc#769
error:
<jemalloc>: Unsupported system page size
<jemalloc>: Unsupported system page size
memory allocation of 5 bytes failed
It runs load testing benchmarks comparison of SWS against several major web servers via CI regularly.
Results can be found at https://github.com/static-web-server/static-web-server/actions/runs/8802645161
and benchmark setup and corpus can be found at https://github.com/static-web-server/benchmarks-setup
* Run benchmarks for each commit via Github Actions
* Enable compression in all tested software
* Make sure lighttpd compresses the static file
* Use static config files
* Don't repeat vegeta command line parameters
* Use gnuplot to produce an overview graph
* Use graph-cli instead of gnuplot
* Use a dedicated test root directory and run various tests on it
* Display performance overview as job summary
* Remove scheduled test run
* Add (source) suffix to SWS version
* Merge artifacts after successful run
* Do not upload binary reports
* Simplify subdirectory names for merged artifact
* Move configuration and test root used for benchmarking into a separate repository
---------
Co-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>
* feat: `all` and `experimental` cargo feature flags
- the `all` will host all available features (`default`) plus the
`experimental`.
- the `experimental` will only hold unstable features like for example
`metrics` (as of writing)
* chore: enable the `all` cargo feature for freebsd
this feature also fixes#312
The SWS binaries for ppc64le (powerpc64le-unknown-linux-gnu) and
s590x (s390x-unknown-linux-gnu) are dynamically linked so
it does **not** make so much sense to deliver them with either the
Alpine (musl) or the Scratch images (they even do not work properly as
of writing).
So we remove those two from the SWS Alpine and Scratch Docker image
variants to avoid misunderstandings or future issues.
The Debian Docker image should be preferred instead, either linux/ppc64le
or linux/s390x respectively.
This resolves#308