fix: use watfaq-rustls instead of patched one #2760
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build/Test/Release | |
on: | |
push: | |
tags: ["v*"] | |
branches: ["master"] | |
pull_request: | |
branches: ["master"] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
env: | |
PACKAGE: "clash" | |
REGISTRY: "ghcr.io" | |
IMAGE_NAME: "clash-rs" | |
RUST_LOG: "clash=TRACE" | |
RUST_TOOLCHAIN: "nightly" | |
# Arm builder https://github.blog/changelog/2024-09-03-github-actions-arm64-linux-and-windows-runners-are-now-generally-available/ | |
jobs: | |
compile: | |
name: ${{ matrix.release-name || matrix.target || 'Unknown' }} | |
permissions: | |
contents: write | |
runs-on: ${{ matrix.os || 'ubuntu-latest' }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# Example | |
# when not set, default will be used (except target, cross) | |
# - os: ubuntu-latest | |
# target: x86_64-unknown-linux-gnu | |
# release-name: $target | |
# toolchain: nightly | |
# tool: cargo/cross | |
# postfix: "" | |
# extra-args: "" | |
# components: "" | |
# rustflags: "--cfg tokio_unstable" | |
# Linux x86 gnu | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
tool: cargo # report code coverage | |
extra-args: -F "plus" | |
coverage: true | |
- os: ubuntu-latest | |
target: i686-unknown-linux-gnu | |
tool: cross | |
extra-args: -F "plus" | |
# Linux x86 musl | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-musl | |
tool: cross | |
extra-args: -F "perf" | |
- os: ubuntu-latest | |
target: i686-unknown-linux-musl | |
tool: cross | |
extra-args: -F "plus" | |
# Linux x86 gnu static-crt | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
release-name: x86_64-unknown-linux-gnu-static-crt | |
tool: cross | |
extra-args: -F "plus" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
- os: ubuntu-latest | |
target: i686-unknown-linux-gnu | |
release-name: i686-unknown-linux-gnu-static-crt | |
tool: cross | |
extra-args: -F "plus" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
# Linux arm gnu | |
- os: ubuntu-latest | |
target: aarch64-unknown-linux-gnu | |
tool: cross | |
extra-args: -F "plus" | |
- os: ubuntu-latest | |
target: armv7-unknown-linux-gnueabi | |
tool: cross | |
extra-args: -F "plus" | |
- os: ubuntu-latest | |
target: armv7-unknown-linux-gnueabihf | |
tool: cross | |
extra-args: -F "plus" | |
# Linux arm musl | |
- os: ubuntu-latest | |
target: aarch64-unknown-linux-musl | |
tool: cross | |
extra-args: -F "perf" | |
- os: ubuntu-latest | |
target: armv7-unknown-linux-musleabihf | |
tool: cross | |
extra-args: -F "plus" | |
# Linux arm gnu static-crt | |
- os: ubuntu-latest | |
target: aarch64-unknown-linux-gnu | |
release-name: aarch64-unknown-linux-gnu-static-crt | |
tool: cross | |
extra-args: -F "plus" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
- os: ubuntu-latest | |
target: armv7-unknown-linux-gnueabi | |
release-name: armv7-unknown-linux-gnueabi-static-crt | |
tool: cross | |
extra-args: -F "plus" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
# Linux RISC-V gnu | |
- os: ubuntu-latest | |
target: riscv64gc-unknown-linux-gnu | |
tool: cross | |
extra-args: -F "shadowsocks, tuic" | |
# Windows | |
- os: windows-latest | |
target: x86_64-pc-windows-msvc | |
postfix: ".exe" | |
extra-args: -F "plus" | |
- os: windows-latest | |
target: i686-pc-windows-msvc | |
postfix: ".exe" | |
extra-args: -F "plus" | |
- os: windows-latest | |
target: aarch64-pc-windows-msvc | |
postfix: ".exe" | |
extra-args: -F "standard" | |
no-test: true | |
# Windows static-crt | |
- os: windows-latest | |
target: x86_64-pc-windows-msvc | |
release-name: x86_64-pc-windows-msvc-static-crt | |
postfix: ".exe" | |
extra-args: -F "plus" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
- os: windows-latest | |
target: i686-pc-windows-msvc | |
release-name: i686-pc-windows-msvc-static-crt | |
postfix: ".exe" | |
extra-args: -F "plus" | |
rustflags: >- | |
-Ctarget-feature=+crt-static | |
-Clink-args=/NODEFAULTLIB:libvcruntimed.lib | |
-Clink-args=/NODEFAULTLIB:vcruntime.lib | |
-Clink-args=/NODEFAULTLIB:vcruntimed.lib | |
-Clink-args=/NODEFAULTLIB:libcmtd.lib | |
-Clink-args=/NODEFAULTLIB:msvcrt.lib | |
-Clink-args=/NODEFAULTLIB:msvcrtd.lib | |
-Clink-args=/NODEFAULTLIB:libucrt.lib | |
-Clink-args=/NODEFAULTLIB:libucrtd.lib | |
-Clink-args=/DEFAULTLIB:libcmt.lib | |
-Clink-args=/DEFAULTLIB:libvcruntime.lib | |
-Clink-args=/DEFAULTLIB:ucrt.lib | |
--cfg tokio_unstable | |
- os: windows-latest | |
target: aarch64-pc-windows-msvc | |
release-name: aarch64-pc-windows-msvc-static-crt | |
postfix: ".exe" | |
extra-args: -F "standard" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
no-test: true | |
# MacOSX | |
- os: macos-14 | |
target: x86_64-apple-darwin | |
extra-args: -F "plus" | |
- os: macos-14 | |
target: aarch64-apple-darwin | |
extra-args: -F "plus" | |
# MacOSX static-crt | |
- os: macos-14 | |
target: x86_64-apple-darwin | |
release-name: x86_64-apple-darwin-static-crt | |
extra-args: -F "plus" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
- os: macos-14 | |
target: aarch64-apple-darwin | |
release-name: aarch64-apple-darwin-static-crt | |
tool: cargo | |
extra-args: -F "plus" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
# BSD | |
- os: ubuntu-latest | |
target: x86_64-unknown-freebsd | |
tool: cross | |
extra-args: --no-default-features -F "bsd" | |
no-test: true | |
- os: ubuntu-latest | |
target: i686-unknown-freebsd | |
tool: cross | |
extra-args: --no-default-features -F "bsd" | |
no-test: true | |
# Android (no release) | |
- os: ubuntu-latest | |
target: x86_64-linux-android | |
tool: cross | |
extra-args: --no-default-features -F "android" | |
no-release: true | |
no-test: true | |
# Linux mips: tier-3, pity | |
# Windows gnu: tokio dont work | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
/target | |
key: ${{ matrix.release-name || matrix.target }}-${{ hashFiles('**/Cargo.toml') }} | |
restore-keys: | | |
${{ matrix.release-name || matrix.target }} | |
- name: Cache Docker images. | |
uses: ScribeMD/docker-cache@0.5.0 | |
if: startsWith(matrix.os, 'ubuntu') && !matrix.no-docker-test | |
with: | |
key: matrix.os | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.toolchain || env.RUST_TOOLCHAIN || 'nightly' }} | |
targets: ${{ matrix.target }} | |
components: ${{ matrix.components || 'rustfmt, clippy' }} | |
- name: Install rust targets & cross | |
if: matrix.tool == 'cross' | |
run: | | |
rustup target add ${TARGET} | |
rm -f ~/.cargo/bin/cross* | |
cargo install cross --git https://github.com/cross-rs/cross | |
env: | |
TARGET: ${{ matrix.target }} | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v3 | |
with: | |
version: "23.x" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set environment variables (non Windows) | |
if: matrix.os != 'windows-latest' | |
run: | | |
echo "CLASH_GIT_REF=${GITHUB_REF}" >> $GITHUB_ENV | |
echo "CLASH_GIT_SHA=${GITHUB_SHA}" >> $GITHUB_ENV | |
- name: Set environment variables (Windows) | |
if: matrix.os == 'windows-latest' | |
run: | | |
echo "CLASH_GIT_REF=$env:GITHUB_REF" | Out-File -FilePath $env:GITHUB_ENV -Append | |
echo "CLASH_GIT_SHA=$env:GITHUB_SHA" | Out-File -FilePath $env:GITHUB_ENV -Append | |
- name: Cargo fmt | |
uses: clechasseur/rs-cargo@v3 | |
with: | |
command: fmt | |
args: --all -- --check | |
env: | |
CLASH_DOCKER_TEST: "true" | |
- name: Cargo clippy | |
uses: clechasseur/rs-cargo@v3 | |
with: | |
tool: ${{ matrix.tool }} | |
command: clippy | |
args: -p clash-rs --target ${{ matrix.target }} ${{ matrix.extra-args }} -- -D warnings | |
env: | |
CLASH_DOCKER_TEST: "true" | |
- name: Install cargo-llvm-cov | |
uses: taiki-e/install-action@cargo-llvm-cov | |
- name: Cargo test and coverage | |
uses: clechasseur/rs-cargo@v3 | |
if: ${{ !matrix.no-test }} | |
with: | |
tool: ${{ matrix.tool }} | |
command: ${{ matrix.coverage && 'llvm-cov' || 'test' }} | |
args: --workspace --exclude clash_ffi --target ${{ matrix.target }} ${{ matrix.extra-args }} ${{ matrix.coverage && '--codecov --output-path codecov.json' || '' }} | |
env: | |
CROSS_CONTAINER_OPTS: "--network host" | |
CLASH_DOCKER_TEST: ${{ (startsWith(matrix.os, 'ubuntu') && !matrix.no-docker-test) && 'true' || 'false' }} | |
RUSTFLAGS: ${{ matrix.rustflags || '--cfg tokio_unstable' }} | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v5 | |
if: ${{ !cancelled() && matrix.coverage }} | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: codecov.json | |
fail_ci_if_error: true | |
- name: Cargo build | |
uses: clechasseur/rs-cargo@v3 | |
with: | |
tool: ${{ matrix.tool }} | |
command: build | |
args: --release --target ${{ matrix.target }} ${{ matrix.extra-args }} | |
env: | |
RUSTFLAGS: ${{ matrix.rustflags || '--cfg tokio_unstable' }} | |
- name: Rename binary | |
run: mv target/${{ matrix.target }}/release/clash-rs${{ matrix.postfix }} ${{ env.PACKAGE }}-${{ matrix.release-name || matrix.target }}${{ matrix.postfix }} | |
- name: Upload binaries | |
uses: actions/upload-artifact@v4 | |
if: ${{ !matrix.no-release }} | |
with: | |
name: ${{ matrix.release-name || matrix.target }} | |
path: ${{ env.PACKAGE }}-${{ matrix.release-name || matrix.target }}${{ matrix.postfix }} | |
- name: Setup tmate session | |
if: ${{ failure() }} | |
uses: mxschmitt/action-tmate@v3 | |
with: | |
detached: true | |
timeout-minutes: 15 | |
limit-access-to-actor: true | |
release: | |
name: Release | |
needs: [compile] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
fetch-tags: true | |
- name: Merge binaries | |
uses: actions/upload-artifact/merge@v4 | |
with: | |
name: binaries | |
pattern: "*" | |
retention-days: 1 | |
- name: Download binaries | |
uses: actions/download-artifact@v4 | |
with: | |
name: binaries | |
path: ./packages | |
- name: Create SHA256Sums.txt and version.txt | |
run: | | |
cd packages | |
sha256sum * >> sha256sums.txt | |
cat sha256sums.txt | |
chmod +x ./clash-x86_64-unknown-linux-musl | |
./clash-x86_64-unknown-linux-musl -v >> version.txt | |
cat version.txt | |
- name: Move latest tag for git-cliff nightly | |
run: | | |
git tag latest -f | |
- name: Generate a changelog | |
uses: orhun/git-cliff-action@main | |
id: git-cliff | |
with: | |
config: .github/cliff.toml | |
args: --latest --strip header | |
env: | |
GITHUB_REPO: ${{ github.repository }} | |
- name: Github stable release | |
uses: softprops/action-gh-release@v2 | |
if: startsWith(github.ref, 'refs/tags/v') | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
prerelease: false | |
generate_release_notes: false | |
body: ${{ steps.git-cliff.outputs.content }} | |
files: | | |
packages/* | |
LICENSE* | |
- name: Delete old latest nightly release | |
if: startsWith(github.ref, 'refs/heads/master') | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{secrets.GITHUB_TOKEN}} | |
script: | | |
const tag = 'latest' | |
const { owner, repo } = context.repo | |
const { data: { id } } = await github.rest.repos.getReleaseByTag({ owner, repo, tag }) | |
await github.rest.repos.deleteRelease({ owner, repo, release_id: id }) | |
- name: Update Latest Tag | |
if: startsWith(github.ref, 'refs/heads/master') | |
uses: richardsimko/update-tag@v1 | |
with: | |
tag_name: latest | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Github nightly release | |
uses: softprops/action-gh-release@v2 | |
if: startsWith(github.ref, 'refs/heads/master') | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
prerelease: true | |
tag_name: "latest" | |
generate_release_notes: false | |
body: ${{ steps.git-cliff.outputs.content }} | |
files: | | |
packages/* | |
LICENSE* | |
docker-image: | |
needs: [compile] | |
name: Docker Image | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
packages: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Set docker image's tag | |
run: | | |
echo "TAG_VERSION=${REGISTRY}/${GITHUB_REPOSITORY_OWNER@L}/${IMAGE_NAME}:${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV | |
echo "TAG_LATEST=${REGISTRY}/${GITHUB_REPOSITORY_OWNER@L}/${IMAGE_NAME}:latest" >> $GITHUB_ENV | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Download binaries amd64 | |
uses: actions/download-artifact@v4 | |
with: | |
name: x86_64-unknown-linux-musl | |
path: ./clash-rs | |
- name: Download binaries arm64 | |
uses: actions/download-artifact@v4 | |
with: | |
name: aarch64-unknown-linux-musl | |
path: ./clash-rs | |
- name: Rename binary | |
run: | | |
mv ./clash-rs/clash-x86_64-unknown-linux-musl ./clash-rs/clash-amd64 | |
mv ./clash-rs/clash-aarch64-unknown-linux-musl ./clash-rs/clash-arm64 | |
- name: Log in to Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: watfaq | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build and push release | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: .github/Dockerfile | |
platforms: linux/amd64,linux/arm64 | |
push: true | |
tags: ${{ env.TAG_VERSION }},${{ env.TAG_LATEST }} |