Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Preserve PDF fixture bytes, including fixed-width cross-reference records.
tests/fixtures/media/*.pdf binary
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ body:
id: data_involvement
attributes:
label: Database or media involvement
description: State whether SQLite, migrations, uploads, ffmpeg/ffprobe, boards, backups, or restore is involved. Do not upload real data.
description: State whether SQLite, migrations, uploads, media processing, FFmpeg video, boards, backups, or restore is involved. Do not upload real data.
placeholder: "SQLite involved; reproduced on a new disposable database. No media involved."
validations:
required: true
Expand Down
16 changes: 12 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: 1.91.0
toolchain: 1.99.0
components: clippy, rustfmt

- name: Cache Rust artifacts
Expand All @@ -50,8 +50,16 @@ jobs:
- name: Check formatting
run: cargo fmt --all --check

- name: Check all targets and features
run: cargo check --locked --workspace --all-targets --all-features

- name: Run Clippy
run: cargo clippy --locked --workspace --all-targets --all-features
run: cargo clippy --locked --workspace --all-targets --all-features -- -D warnings

- name: Build documentation
run: cargo doc --locked --workspace --all-features --no-deps
env:
RUSTDOCFLAGS: -D warnings

- name: Enforce locked dependency policy
run: cargo deny --locked check
Expand All @@ -68,7 +76,7 @@ jobs:
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: 1.91.0
toolchain: 1.99.0

- name: Cache Rust artifacts
uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2
Expand Down Expand Up @@ -104,7 +112,7 @@ jobs:
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: 1.91.0
toolchain: 1.99.0
targets: ${{ matrix.target }}

- name: Cache Rust artifacts
Expand Down
14 changes: 11 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: 1.91.0
toolchain: 1.99.0
components: clippy, rustfmt

- name: Cache Rust artifacts
Expand Down Expand Up @@ -71,8 +71,16 @@ jobs:
- name: Check formatting
run: cargo fmt --all --check

- name: Check all targets and features
run: cargo check --locked --workspace --all-targets --all-features

- name: Run Clippy
run: cargo clippy --locked --workspace --all-targets --all-features
run: cargo clippy --locked --workspace --all-targets --all-features -- -D warnings

- name: Build documentation
run: cargo doc --locked --workspace --all-features --no-deps
env:
RUSTDOCFLAGS: -D warnings

- name: Test native update packaging and signing
run: python3 -m unittest discover -s tools -p "test_update_package.py"
Expand Down Expand Up @@ -121,7 +129,7 @@ jobs:
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: 1.91.0
toolchain: 1.99.0
targets: ${{ matrix.target }}

- name: Cache Rust artifacts
Expand Down
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,19 @@ Desktop.ini
*.orig
*.rej

# Local tests.
tests/
# Migration unit tests compile these sanitized fixtures into the binary.
!tests/
tests/*
!tests/fixtures/
tests/fixtures/*
!tests/fixtures/media/
!tests/e2e/
tests/e2e/*
!tests/e2e/non-video-media.spec.ts
!tests/e2e/settings-restart.spec.ts

# Build output, dependency caches, coverage, and profiling output.
target/
node_modules/
Expand Down
12 changes: 11 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

All notable changes to RustChan will be documented in this file.

## RustChan 1.6.5 — 2026-10-03

- Moved image processing, supported audio decoding, media probing and PDF previews into Rust, with optional FFmpeg fallback for video and uncovered audio codecs.
- Added verified administrator settings restarts, configuration rollback and recovery handling.
- Improved SQLite connection ownership and measured query performance; CLI startup proceeds once one usable database connection is ready.
- Fixed media timing, multistream audio, bounded previews, Speex waveform layouts, AV1 WebM conversion and Windows restart builds.
- Hardened the Rust 1.99 lint policy and consolidated console, request and test utilities.

## RustChan 1.6.0 — 2026-10-01

This release includes every integrated change since the published v1.5.0 release:
Expand All @@ -10,7 +18,7 @@ upgrades, public posting and reading improvements, and verified native software

### Upgrade notes

- Back up the complete data directory before upgrading. Existing database structures are verified and stamped for the running 1.6.0 package; Rust 1.91 remains the minimum supported compiler.
- Back up the complete data directory before upgrading. Existing database structures are verified and stamped for the running 1.6.0 package; Rust 1.99 is the minimum supported compiler.
- Native self-updates require one-time operator setup on Linux GNU x86_64 or ARM64: separate service identities, the supplied systemd/polkit configuration, a protected updater executable and independently provisioned trusted public key. The updater is operator-managed and is not replaced by application updates. See [Software Updates](docs/software-updates.md).
- Containers, macOS, Windows and custom installations use their deployment tools to install releases. Their admin panel can check releases but does not offer native installation. Keep container data volumes when recreating an instance.
- `/readyz` additionally reports the running package version. It does not expose release availability, updater transactions or retained backup metadata.
Expand All @@ -33,6 +41,8 @@ upgrades, public posting and reading improvements, and verified native software

### Fixed

- Let CLI startup proceed once one fully initialized database connection is ready while spare connections fill in the background; retain the pool capacity, one-second checkout bound, and database validation.

- Completed native updates clear the availability notice; stale discovery records cannot offer installation of the running or an older version. Rollbacks retain notice of a newer release.

- Banned identities can no longer submit reports or poll votes; those mutations share the existing posting ban gate and enforce CSRF before authorization results are disclosed. Long ban reasons wrap on narrow screens.
Expand Down
12 changes: 7 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ has already been coordinated under [SECURITY.md](SECURITY.md).

## Rust and feature policy

The workspace currently declares Rust `1.91` as its minimum supported Rust
The workspace currently declares Rust `1.99` as its minimum supported Rust
version (MSRV). Keep `rust-version` and the `cargo-msrv` metadata aligned; do not
raise the MSRV incidentally.

Expand All @@ -72,20 +72,22 @@ Rust checks are:

```sh
cargo fmt --all --check
cargo clippy --locked --workspace --all-targets --all-features
cargo check --locked --workspace --all-targets --all-features
cargo clippy --locked --workspace --all-targets --all-features -- -D warnings
cargo test --locked --workspace --all-features
RUSTDOCFLAGS="-D warnings" cargo doc --locked --workspace --all-features --no-deps
```

Use the Playwright harness under `tests/e2e/` for public UI, admin UI, media,
backup and restore, moderation, Tor/proxy, and no-JavaScript changes. The
maintained harness source is tracked: `playwright.config.ts`, `package.json`,
`package-lock.json`, `tests/e2e/**`, and `.github/workflows/e2e.yml`. Generated
evidence is not: keep reports, traces, screenshots, videos, storage state,
`package-lock.json`, and `tests/e2e/**`. Browser validation runs locally.
Generated evidence is not: keep reports, traces, screenshots, videos, storage state,
runtime databases, preserved fixture roots, audit output, and other browser
artifacts under the matching `.gitignore` rules and out of commits. See
`tests/e2e/README.md` for the normal regression and deep audit commands.
Run focused scenarios first and the available browser matrix for broad changes.
Some media tests require `ffmpeg`, `ffprobe`, and specific codecs; do not replace
Some media tests require `ffmpeg` and specific codecs; do not replace
deterministic fixtures with private uploads from a live site. Permanent Rust
unit and integration tests remain normal repository source.

Expand Down
Loading
Loading