mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-26 02:33:41 +00:00
Rename to shadowsocks-c with libuv, async DNS and CI lint (#3051)
Rename the project to shadowsocks-c while retaining ss-* commands, the embedding ABI, and legacy library/package lookup compatibility.
Replace libev with bundled libuv for IOCP/kqueue event backends, expand asynchronous runtime DNS coverage, and add actionlint/Ruff with strict clang-tidy failure handling. Validate native platforms, static builds, packaging, interoperability, sanitizers, and canonical/legacy consumers.
All 22 hosted checks pass at reviewed head a8493250eb.
This commit is contained in:
@@ -20,11 +20,11 @@ jobs:
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libpcre2-dev libmbedtls-dev libsodium-dev libev-dev libc-ares-dev
|
||||
sudo apt-get install -y libpcre2-dev libmbedtls-dev libsodium-dev libuv1-dev libc-ares-dev
|
||||
|
||||
- name: Install dependencies (macOS)
|
||||
if: runner.os == 'macOS'
|
||||
run: brew install mbedtls@3 libsodium libev c-ares pcre2
|
||||
run: brew install mbedtls@3 libsodium libuv c-ares pcre2
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libpcre2-dev libmbedtls-dev libsodium-dev libev-dev libc-ares-dev
|
||||
sudo apt-get install -y libpcre2-dev libmbedtls-dev libsodium-dev libuv1-dev libc-ares-dev
|
||||
sudo apt-get install -y --no-install-recommends \
|
||||
build-essential cmake debhelper dpkg-dev fakeroot asciidoc-base xmlto pkg-config
|
||||
|
||||
|
||||
@@ -24,6 +24,8 @@ jobs:
|
||||
ctest --test-dir build -L 'unit|vendor' --output-on-failure --no-tests=error
|
||||
- name: Real TCP and UDP relay
|
||||
run: python3 tests/interop.py --self --bin build/bin
|
||||
- name: Asynchronous hostname ACL bypass
|
||||
run: python3 tests/async_dns_interop.py --bin build/bin
|
||||
- name: SIP003 transport and child cleanup
|
||||
if: matrix.minimal == 'OFF'
|
||||
run: python3 tests/interop.py --self --bin build/bin --plugin tests/sip003_fixture.py
|
||||
@@ -35,6 +37,10 @@ jobs:
|
||||
cmake --build consumer
|
||||
./consumer/consumer_static
|
||||
./consumer/consumer_shared
|
||||
cmake -S tests/consumer -B consumer-legacy -DSS_PACKAGE_NAME=shadowsocks-libev -DCMAKE_PREFIX_PATH="$PWD/relocated"
|
||||
cmake --build consumer-legacy
|
||||
./consumer-legacy/consumer_static
|
||||
./consumer-legacy/consumer_shared
|
||||
|
||||
windows:
|
||||
runs-on: windows-latest
|
||||
@@ -59,11 +65,14 @@ jobs:
|
||||
ctest --test-dir build -L 'unit|vendor' --output-on-failure --no-tests=error
|
||||
objdump -p build/bin/ss-server.exe | sed -n '/DLL Name/p'
|
||||
python tests/interop.py --self --bin build/bin --isolate-windows-runtime
|
||||
python tests/async_dns_interop.py --bin build/bin --isolate-windows-runtime
|
||||
- name: Installed consumers
|
||||
run: |
|
||||
cmake --install build --prefix "$PWD/install"
|
||||
cmake -S tests/consumer -B consumer -G Ninja -DCMAKE_PREFIX_PATH="$PWD/install"
|
||||
cmake --build consumer
|
||||
cmake -S tests/consumer -B consumer-legacy -G Ninja -DSS_PACKAGE_NAME=shadowsocks-libev -DCMAKE_PREFIX_PATH="$PWD/install"
|
||||
cmake --build consumer-legacy
|
||||
- name: Run installed consumers without toolchain DLLs
|
||||
shell: pwsh
|
||||
run: |
|
||||
@@ -72,6 +81,10 @@ jobs:
|
||||
if ($LASTEXITCODE -ne 0) { throw "Static consumer failed: $LASTEXITCODE" }
|
||||
& ./consumer/consumer_shared.exe
|
||||
if ($LASTEXITCODE -ne 0) { throw "Shared consumer failed: $LASTEXITCODE" }
|
||||
& ./consumer-legacy/consumer_static.exe
|
||||
if ($LASTEXITCODE -ne 0) { throw "Legacy static consumer failed: $LASTEXITCODE" }
|
||||
& ./consumer-legacy/consumer_shared.exe
|
||||
if ($LASTEXITCODE -ne 0) { throw "Legacy shared consumer failed: $LASTEXITCODE" }
|
||||
|
||||
static-macos:
|
||||
runs-on: macos-latest
|
||||
@@ -95,6 +108,7 @@ jobs:
|
||||
- name: Exercise installed static programs
|
||||
run: |
|
||||
python3 tests/interop.py --self --bin relocated-static/bin
|
||||
python3 tests/async_dns_interop.py --bin relocated-static/bin
|
||||
python3 tests/interop.py --self --bin relocated-static/bin --plugin tests/sip003_fixture.py
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
@@ -132,7 +146,9 @@ jobs:
|
||||
- name: Reject third-party DLL imports, including delay imports
|
||||
run: python tests/check_static_runtime.py relocated-static/bin/ss-*.exe consumer-static/consumer_static.exe
|
||||
- name: Exercise installed programs without toolchain DLLs
|
||||
run: python tests/interop.py --self --bin relocated-static/bin --isolate-windows-runtime
|
||||
run: |
|
||||
python tests/interop.py --self --bin relocated-static/bin --isolate-windows-runtime
|
||||
python tests/async_dns_interop.py --bin relocated-static/bin --isolate-windows-runtime
|
||||
- name: Run static consumer with only Windows system directories on PATH
|
||||
shell: pwsh
|
||||
run: |
|
||||
@@ -171,6 +187,7 @@ jobs:
|
||||
cmake --build build --parallel 4
|
||||
ctest --test-dir build -L 'unit|vendor' --output-on-failure --no-tests=error
|
||||
python3 tests/interop.py --self --bin build/bin
|
||||
python3 tests/async_dns_interop.py --bin build/bin
|
||||
cmake --install build --prefix "$PWD/install"
|
||||
cmake -S tests/consumer -B consumer -G Ninja -DCMAKE_PREFIX_PATH="$PWD/install"
|
||||
cmake --build consumer
|
||||
@@ -182,7 +199,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Source archive
|
||||
run: python3 scripts/source_archive.py release/shadowsocks-libev.tar.gz
|
||||
run: python3 scripts/source_archive.py release/shadowsocks-c.tar.gz
|
||||
- name: Prepare compiler image
|
||||
run: |
|
||||
printf 'FROM alpine:3.24\nRUN apk add --no-cache build-base cmake python3 linux-headers\n' > /tmp/ss-toolchain.Dockerfile
|
||||
@@ -191,7 +208,7 @@ jobs:
|
||||
run: |
|
||||
docker run --rm --network none -v "$PWD/release:/release:ro" ss-toolchain sh -ec '
|
||||
mkdir /src
|
||||
tar xzf /release/shadowsocks-libev.tar.gz -C /src --strip-components=1
|
||||
tar xzf /release/shadowsocks-c.tar.gz -C /src --strip-components=1
|
||||
cmake -S /src -B /build -DCMAKE_DISABLE_FIND_PACKAGE_Python3=TRUE
|
||||
cmake --build /build --parallel 4
|
||||
ctest --test-dir /build -L "unit|vendor" --output-on-failure --no-tests=error
|
||||
|
||||
@@ -7,6 +7,26 @@ on:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/setup-go@v6
|
||||
with:
|
||||
go-version: '1.25'
|
||||
cache: false
|
||||
- uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Install pinned linters
|
||||
run: |
|
||||
go install github.com/rhysd/actionlint/cmd/actionlint@v1.7.12
|
||||
python -m pip install ruff==0.15.6
|
||||
- name: Lint GitHub Actions workflows
|
||||
run: actionlint -shellcheck= -pyflakes=
|
||||
- name: Lint Python scripts and tests
|
||||
run: ruff check --select E9,F63,F7,F82 tests scripts
|
||||
|
||||
tests:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -20,11 +40,11 @@ jobs:
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libpcre2-dev libmbedtls-dev libsodium-dev libev-dev libc-ares-dev valgrind
|
||||
sudo apt-get install -y libpcre2-dev libmbedtls-dev libsodium-dev libuv1-dev libc-ares-dev valgrind
|
||||
|
||||
- name: Install dependencies (macOS)
|
||||
if: runner.os == 'macOS'
|
||||
run: brew install mbedtls@3 libsodium libev c-ares pcre2
|
||||
run: brew install mbedtls@3 libsodium libuv c-ares pcre2
|
||||
|
||||
- name: Build test binaries
|
||||
run: |
|
||||
@@ -62,7 +82,7 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libpcre2-dev libmbedtls-dev libsodium-dev libev-dev libc-ares-dev
|
||||
sudo apt-get install -y libpcre2-dev libmbedtls-dev libsodium-dev libuv1-dev libc-ares-dev
|
||||
|
||||
- name: Build with ASan + UBSan
|
||||
run: |
|
||||
@@ -91,14 +111,16 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y clang-tidy-18 clang-tools-18 libpcre2-dev libmbedtls-dev libsodium-dev libev-dev libc-ares-dev
|
||||
sudo apt-get install -y clang-tidy-18 clang-tools-18 libpcre2-dev libmbedtls-dev libsodium-dev libuv1-dev libc-ares-dev
|
||||
|
||||
- name: Configure (compile_commands.json)
|
||||
run: cmake -S . -B build
|
||||
|
||||
- name: Run clang-tidy on project sources
|
||||
run: |
|
||||
run-clang-tidy-18 -quiet -p build "$PWD/src/[^/]+\.c$" 2>/dev/null | tee tidy.log || true
|
||||
set -o pipefail
|
||||
tidy_status=0
|
||||
run-clang-tidy-18 -quiet -p build "$PWD/src/[^/]+\.c$" 2>&1 | tee tidy.log || tidy_status=$?
|
||||
grep 'warning:' tidy.log | sort -u > warnings.txt || true
|
||||
count="$(wc -l < warnings.txt)"
|
||||
echo "clang-tidy warnings: $count (max allowed: $MAX_WARNINGS)"
|
||||
@@ -108,8 +130,8 @@ jobs:
|
||||
cat warnings.txt
|
||||
echo '```'
|
||||
} >> "$GITHUB_STEP_SUMMARY"
|
||||
if ! grep -q . warnings.txt && grep -qE 'error:' tidy.log; then
|
||||
echo "clang-tidy produced errors:"; grep -E 'error:' tidy.log | sort -u
|
||||
if [ "$tidy_status" -ne 0 ] || grep -qE 'error:' tidy.log; then
|
||||
echo "clang-tidy failed (exit status: $tidy_status). See tidy.log for diagnostics."
|
||||
exit 1
|
||||
fi
|
||||
if [ "$count" -gt "$MAX_WARNINGS" ]; then
|
||||
@@ -118,6 +140,16 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Upload clang-tidy diagnostics
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: clang-tidy-diagnostics
|
||||
path: |
|
||||
tidy.log
|
||||
warnings.txt
|
||||
if-no-files-found: ignore
|
||||
|
||||
coverage:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -126,7 +158,7 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y lcov libpcre2-dev libmbedtls-dev libsodium-dev libev-dev libc-ares-dev
|
||||
sudo apt-get install -y lcov libpcre2-dev libmbedtls-dev libsodium-dev libuv1-dev libc-ares-dev
|
||||
|
||||
- name: Build with coverage instrumentation
|
||||
run: |
|
||||
@@ -160,7 +192,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Install dependencies and independent peer
|
||||
run: brew install mbedtls@3 libsodium libev c-ares pcre2 shadowsocks-rust
|
||||
run: brew install mbedtls@3 libsodium libuv c-ares pcre2 shadowsocks-rust
|
||||
- name: Build
|
||||
run: |
|
||||
cmake -S . -B build -DSS_DEPENDENCY_MODE=system -DWITH_STATIC=OFF
|
||||
|
||||
Reference in New Issue
Block a user