Compare commits

...
14 Commits
Author SHA1 Message Date
dailz 4cf95ac521 Merge PR #27: fix CI — proxy + gitea.com mirrors + missing apt packages
CI / Build + Clippy + Test (push) Successful in 7m50s
CI / Security audit (RUSTSEC) (push) Successful in 1m28s
CI green for the first time (run 28). Fixes: gitea.com action mirrors, rustup install script, job-level proxy env, apt proxy config, drop --error-on=any, add libavdevice-dev.
2026-07-14 21:51:50 +08:00
dailz 027e7e02e0 ci: add missing libavdevice-dev (ffmpeg-sys-next requires it)
CI / Build + Clippy + Test (pull_request) Successful in 6m49s
CI / Security audit (RUSTSEC) (pull_request) Successful in 1m22s
CI progressed to cargo build for the first time, revealing that
libavdevice.pc was missing. The original yaml never installed
libavdevice-dev — this was never caught because CI always failed
at actions/checkout before reaching compilation.
2026-07-14 20:26:46 +08:00
dailz ebff43d9d6 ci: drop --error-on=any from apt-get update (microsoft repo unreachable)
CI / Build + Clippy + Test (pull_request) Failing after 5m26s
CI / Security audit (RUSTSEC) (pull_request) Successful in 1m19s
packages.microsoft.com fails through proxy after 5 retries. --error-on=any
causes the whole update to fail. Drop it so apt skips the microsoft repo
and continues with Ubuntu archives (which work fine via proxy).
2026-07-14 20:20:42 +08:00
dailz c000a2238d ci: configure apt proxy (apt doesn't respect HTTP_PROXY env var)
CI / Build + Clippy + Test (pull_request) Failing after 1m13s
CI / Security audit (RUSTSEC) (pull_request) Successful in 1m17s
apt-get ignores HTTP_PROXY/HTTPS_PROXY env vars and tries to connect
directly to archive.ubuntu.com. Clash DNS returns fake-ip (198.18.x.x)
which only works through TUN (disabled). Fix: write apt proxy config to
/etc/apt/apt.conf.d/99proxy before apt-get update.
2026-07-14 20:13:52 +08:00
dailz 17c01a040a ci: set proxy env at job level (container.env not supported by act_runner)
CI / Build + Clippy + Test (pull_request) Failing after 1m13s
CI / Security audit (RUSTSEC) (pull_request) Successful in 1m18s
act_runner does not support container.env in config.yaml — job containers
get NO proxy env vars. Set HTTP_PROXY/HTTPS_PROXY/NO_PROXY directly in
the workflow's job-level env block.

NO_PROXY includes gitea.com (actions checkout goes direct, faster) and
gitea.dailz.cn (self-hosted Gitea, internal).
2026-07-14 20:08:55 +08:00
dailz e5317bf4c8 ci: remove unreachable domestic mirrors, use official sources directly
CI / Build + Clippy + Test (pull_request) Failing after 2m17s
CI / Security audit (RUSTSEC) (pull_request) Failing after 2m15s
Network testing revealed:
- static.rust-lang.org: direct 200/0.24s (fast, no proxy needed)
- sh.rustup.rs: direct 200/0.11s (fast)
- gitea.com: direct 303/0.68s (fast)
- mirrors.ustc.edu.cn: UNREACHABLE (5s timeout)
- rsproxy.cn: UNREACHABLE (5s timeout)

The machine has good direct internet access to official Rust/crates servers.
Domestic mirrors are the ones that are blocked. Remove all mirror config and
use defaults.
2026-07-14 19:53:27 +08:00
dailz 56feb64b10 ci: use USTC mirror for rustup (rsproxy.cn 404 on dist path)
CI / Security audit (RUSTSEC) (pull_request) Failing after 2m15s
CI / Build + Clippy + Test (pull_request) Failing after 31m46s
rsproxy.cn/rustup returns 404 for /dist/x86_64-unknown-linux-gnu/
rustup-init — different path structure from static.rust-lang.org.
Switch to mirrors.ustc.edu.cn/rust-static which is a full mirror with
identical path structure.
2026-07-14 14:43:32 +08:00
dailz 3d00625518 ci: use rsproxy.cn for rustup component downloads
CI / Build + Clippy + Test (pull_request) Failing after 5s
CI / Security audit (RUSTSEC) (pull_request) Failing after 14m4s
rustup components (~60MB) from static.rust-lang.org are slow even
through proxy. Switch to rsproxy.cn/rustup mirror (domestic, direct
connection via NO_PROXY).
2026-07-14 14:39:40 +08:00
dailz 985c8f9cd2 ci: trigger rerun after config.yaml container.env proxy
CI / Security audit (RUSTSEC) (pull_request) Failing after 2s
CI / Build + Clippy + Test (pull_request) Failing after 28m48s
2026-07-14 14:25:10 +08:00
dailz 586b043267 ci: trigger rerun after proxy configuration
CI / Security audit (RUSTSEC) (pull_request) Failing after 2s
CI / Build + Clippy + Test (pull_request) Failing after 20m43s
2026-07-14 14:18:14 +08:00
dailz b6e4ed1956 ci: install rustup via official script (not pre-installed in image)
CI / Security audit (RUSTSEC) (pull_request) Failing after 3s
CI / Build + Clippy + Test (pull_request) Failing after 44m45s
The catthehacker/ubuntu:act-latest image does not have rustup in PATH
('rustup: command not found', exit 127). Replace the direct rustup
invocation with the official install script from sh.rustup.rs, which
installs rustup + the stable toolchain in one step.

Also adds ~/.cargo/bin to GITHUB_PATH so subsequent steps (cargo clippy,
cargo build, cargo test, cargo audit) can find cargo/rustc.
2026-07-14 13:44:11 +08:00
dailz 93c331f11e ci: remove actions/cache step (gitea.com clone hangs 12+ min)
CI / Build + Clippy + Test (pull_request) Failing after 7s
CI / Security audit (RUSTSEC) (pull_request) Failing after 3s
The actions/cache@v4 clone from gitea.com has been hanging for 12+
minutes in run 17. The actions/checkout clone took 2.5 min (slow but
completed), but actions/cache is stuck indefinitely.

Removing the cache step entirely. Trade-off: CI recompiles from scratch
each run (slower), but actually progresses past the action-clone phase.
Can re-add once gitea.com access is faster or actions are pre-cached
on the runner.
2026-07-14 13:38:48 +08:00
dailz cbe410534e ci: add rsproxy.cn cargo mirror for crates.io index access
CI / Build + Clippy + Test (pull_request) Failing after 14m11s
CI / Security audit (RUSTSEC) (pull_request) Failing after 4s
The act_runner network also blocks crates.io index access (both sparse
and git protocols). Previous workaround used git protocol to github.com,
which is also blocked. Replace with rsproxy.cn sparse mirror, accessible
from China networks.

Added to both build-test and audit jobs. Config is written to
~/.cargo/config.toml at runtime (CI-only; does not affect local dev).
2026-07-14 13:17:17 +08:00
dailz a20b2ad3c6 ci: switch to gitea.com action mirrors + rustup inline
CI / Security audit (RUSTSEC) (pull_request) Has been cancelled
CI / Build + Clippy + Test (pull_request) Has been cancelled
The self-hosted act_runner cannot reach github.com (network timeout
on actions/checkout clone). Replace:

- actions/checkout@v4 -> https://gitea.com/actions/checkout@v4 (3 sites)
- actions/cache@v4    -> https://gitea.com/actions/cache@v4
- dtolnay/rust-toolchain@stable -> rustup toolchain install (inline run)

gitea.com maintains official mirrors of the actions/* org. dtolnay's
rust-toolchain is third-party (no gitea.com mirror), so replaced with
a direct rustup invocation — the act_runner ubuntu image has rustup
pre-installed.

This unblocks CI which has been red since the original PR #26 was
opened 6 weeks ago. No code changes.
2026-07-14 13:10:21 +08:00
+20 -37
View File
@@ -25,27 +25,29 @@ on:
env: env:
CARGO_TERM_COLOR: always CARGO_TERM_COLOR: always
# The self-hosted act_runner network can terminate index.crates.io with a
# certificate that does not match the sparse-index hostname. Use Cargo's git
# index path in CI; GitHub access is already required for the actions above.
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: git
jobs: jobs:
build-test: build-test:
name: Build + Clippy + Test name: Build + Clippy + Test
runs-on: ubuntu-latest runs-on: ubuntu-latest
env:
HTTP_PROXY: http://172.17.0.1:7897
HTTPS_PROXY: http://172.17.0.1:7897
NO_PROXY: localhost,127.0.0.1,server,db,gitea.dailz.cn,gitea.com
steps: steps:
- uses: actions/checkout@v4 - uses: https://gitea.com/actions/checkout@v4
- name: Install Rust toolchain (stable) - name: Install Rust toolchain (stable)
uses: dtolnay/rust-toolchain@stable run: |
with: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --profile minimal --component clippy
components: clippy echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: Install system dependencies - name: Install system dependencies
run: | run: |
echo 'Acquire::http::Proxy "http://172.17.0.1:7897";' | sudo tee /etc/apt/apt.conf.d/99proxy
echo 'Acquire::https::Proxy "http://172.17.0.1:7897";' | sudo tee -a /etc/apt/apt.conf.d/99proxy
APT_OPTS=(-o Acquire::Retries=5 -o Acquire::http::Timeout=30 -o Acquire::https::Timeout=30) APT_OPTS=(-o Acquire::Retries=5 -o Acquire::http::Timeout=30 -o Acquire::https::Timeout=30)
sudo apt-get "${APT_OPTS[@]}" update --error-on=any sudo apt-get "${APT_OPTS[@]}" update
# NOTE: do NOT use --no-install-recommends for libclang-dev — on # NOTE: do NOT use --no-install-recommends for libclang-dev — on
# Debian Bookworm (the node:20-bookworm image used by act_runner # Debian Bookworm (the node:20-bookworm image used by act_runner
# under ubuntu-latest) the recommended toolchain bits are needed # under ubuntu-latest) the recommended toolchain bits are needed
@@ -53,25 +55,13 @@ jobs:
# are also more reliable without the flag. # are also more reliable without the flag.
sudo apt-get "${APT_OPTS[@]}" install -y \ sudo apt-get "${APT_OPTS[@]}" install -y \
ffmpeg \ ffmpeg \
libavcodec-dev libavfilter-dev libavformat-dev libavutil-dev libswscale-dev libva-dev \ libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libswscale-dev libva-dev \
libwayland-dev wayland-protocols \ libwayland-dev wayland-protocols \
libdrm-dev \ libdrm-dev \
libpipewire-0.3-dev \ libpipewire-0.3-dev \
libclang-dev clang libclang-dev clang
- name: Resolve LIBCLANG_PATH - name: Resolve LIBCLANG_PATH
# bindgen needs libclang on the LD path. The actual install location
# varies by Debian/Ubuntu version (llvm-14, llvm-15, ...), so we
# discover it dynamically instead of hardcoding /usr/lib/llvm-14/lib.
# Writing to $GITHUB_ENV propagates the value to subsequent steps
# inside the act_runner Docker container; the workflow-level `env:`
# block is not reliably visible there.
#
# Find pattern note: Debian Bookworm installs the runtime library as
# `libclang-14.so.1` (versioned, no plain libclang.so.* symlink),
# so a strict 'libclang.so.*' pattern returns nothing. The broader
# 'libclang*.so*' matches every bindgen-compatible filename variant:
# libclang.so, libclang-14.so, libclang.so.1, libclang-14.so.1.
run: | run: |
set -e set -e
LIBCL=$(find /usr -name 'libclang*.so*' 2>/dev/null | head -1) LIBCL=$(find /usr -name 'libclang*.so*' 2>/dev/null | head -1)
@@ -80,17 +70,6 @@ jobs:
echo "Resolved LIBCLANG_PATH=$LIBDIR (found $LIBCL)" echo "Resolved LIBCLANG_PATH=$LIBDIR (found $LIBCL)"
echo "LIBCLANG_PATH=$LIBDIR" >> "$GITHUB_ENV" echo "LIBCLANG_PATH=$LIBDIR" >> "$GITHUB_ENV"
- name: Cache cargo registry + build artifacts
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock', 'Cargo.toml') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Clippy (release, all targets) - name: Clippy (release, all targets)
run: cargo clippy --release --all-targets run: cargo clippy --release --all-targets
@@ -103,13 +82,17 @@ jobs:
audit: audit:
name: Security audit (RUSTSEC) name: Security audit (RUSTSEC)
runs-on: ubuntu-latest runs-on: ubuntu-latest
# Keep separate from build-test so a vulnerability advisory fails the env:
# check independently of compile state. HTTP_PROXY: http://172.17.0.1:7897
HTTPS_PROXY: http://172.17.0.1:7897
NO_PROXY: localhost,127.0.0.1,server,db,gitea.dailz.cn,gitea.com
steps: steps:
- uses: actions/checkout@v4 - uses: https://gitea.com/actions/checkout@v4
- name: Install Rust toolchain (stable) - name: Install Rust toolchain (stable)
uses: dtolnay/rust-toolchain@stable run: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --profile minimal
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: Install cargo-audit - name: Install cargo-audit
run: cargo install cargo-audit --locked run: cargo install cargo-audit --locked