feat(tun): auto route on macos #2258
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.sha || github.ref }} | |
cancel-in-progress: true | |
env: | |
PACKAGE: "clash" | |
REGISTRY: "ghcr.io" | |
IMAGE_NAME: "clash-rs" | |
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: x86_64-linux | |
# toolchain: stable | |
# cross: true | |
# postfix: "" | |
# extra-args: "" | |
# components: "" | |
# rustflags: "" | |
# Linux x86 | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
cross: true | |
extra-args: "--all-features" | |
- os: ubuntu-latest | |
target: i686-unknown-linux-gnu | |
cross: true | |
extra-args: "--all-features" | |
# Linux x86 static-crt | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
release-name: x86_64-unknown-linux-gnu-static-crt | |
cross: true | |
extra-args: "--all-features" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
# Linux x86_64-unknown-linux-musl | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-musl | |
release-name: x86_64-unknown-linux-musl | |
cross: true | |
extra-args: "--all-features" | |
- os: ubuntu-latest | |
target: i686-unknown-linux-gnu | |
release-name: i686-unknown-linux-gnu-static-crt | |
cross: true | |
extra-args: "--all-features" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
# Linux arm | |
- os: ubuntu-latest | |
target: aarch64-unknown-linux-gnu | |
cross: true | |
extra-args: "--all-features" | |
- os: ubuntu-latest | |
target: armv7-unknown-linux-gnueabi | |
cross: true | |
extra-args: "--all-features" | |
- os: ubuntu-latest | |
target: armv7-unknown-linux-gnueabihf | |
cross: true | |
extra-args: "--all-features" | |
# Linux arm static-crt | |
- os: ubuntu-latest | |
target: aarch64-unknown-linux-gnu | |
release-name: aarch64-unknown-linux-gnu-static-crt | |
cross: true | |
extra-args: "--all-features" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
- os: ubuntu-latest | |
target: aarch64-unknown-linux-musl | |
release-name: aarch64-unknown-linux-musl | |
cross: true | |
extra-args: "--all-features" | |
- os: ubuntu-latest | |
target: armv7-unknown-linux-gnueabi | |
release-name: armv7-unknown-linux-gnueabi-static-crt | |
cross: true | |
extra-args: "--all-features" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
- os: ubuntu-latest | |
target: armv7-unknown-linux-musleabihf | |
cross: true | |
extra-args: "--all-features" | |
rustflags: "--cfg tokio_unstable" | |
# Windows | |
- os: windows-latest | |
target: x86_64-pc-windows-msvc | |
cross: false | |
postfix: ".exe" | |
extra-args: "--all-features" | |
- os: windows-latest | |
target: i686-pc-windows-msvc | |
cross: false | |
postfix: ".exe" | |
extra-args: "--all-features" | |
# Windows static-crt | |
- os: windows-latest | |
target: x86_64-pc-windows-msvc | |
release-name: x86_64-pc-windows-msvc-static-crt | |
cross: false | |
postfix: ".exe" | |
extra-args: "--all-features" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
- os: windows-latest | |
target: i686-pc-windows-msvc | |
release-name: i686-pc-windows-msvc-static-crt | |
cross: false | |
postfix: ".exe" | |
extra-args: "--all-features" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
# MacOSX | |
- os: macos-12 | |
target: x86_64-apple-darwin | |
cross: false | |
extra-args: "--all-features" | |
- os: macos-14 | |
target: aarch64-apple-darwin | |
cross: false | |
extra-args: "--all-features" | |
# MacOSX static-crt | |
- os: macos-12 | |
target: x86_64-apple-darwin | |
release-name: x86_64-apple-darwin-static-crt | |
cross: false | |
extra-args: "--all-features" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
- os: macos-14 | |
target: aarch64-apple-darwin | |
release-name: aarch64-apple-darwin-static-crt | |
cross: false | |
extra-args: "--all-features" | |
rustflags: "-Ctarget-feature=+crt-static --cfg tokio_unstable" | |
# Linux mips: tier-3, pity | |
# Linux risc-v: needs update rustls | |
# Windows gnu: tokio dont work | |
# Windows aarch: todo | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
key: ${{ matrix.release-name || matrix.target }}-${{ hashFiles('**/Cargo.toml') }} | |
restore-keys: | | |
${{ matrix.release-name || matrix.target }} | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.toolchain || 'nightly' }} | |
target: ${{ matrix.target }} | |
components: ${{ matrix.components || 'rustfmt, clippy' }} | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v3 | |
with: | |
version: "23.x" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Cargo fmt | |
uses: clechasseur/rs-cargo@v2 | |
with: | |
use-cross: ${{ matrix.cross }} | |
command: fmt | |
args: --all -- --check | |
- name: Cargo clippy | |
uses: clechasseur/rs-cargo@v2 | |
with: | |
use-cross: ${{ matrix.cross }} | |
command: clippy | |
args: --all --target ${{ matrix.target }} ${{ matrix.extra-args }} -- -D warnings | |
env: | |
RUSTFLAGS: ${{ matrix.rustflags || '--cfg tokio_unstable' }} | |
- name: Cargo test | |
uses: clechasseur/rs-cargo@v2 | |
if: startsWith(matrix.os, 'ubuntu') | |
with: | |
use-cross: ${{ matrix.cross }} | |
command: test | |
args: --all --target ${{ matrix.target }} ${{ matrix.extra-args }} | |
env: | |
CROSS_CONTAINER_OPTS: "--network host" | |
RUSTFLAGS: ${{ matrix.rustflags || '--cfg tokio_unstable' }} | |
- name: Cargo test (no docker test) | |
uses: clechasseur/rs-cargo@v2 | |
if: ${{ !startsWith(matrix.os, 'ubuntu') }} | |
with: | |
use-cross: ${{ matrix.cross }} | |
command: test | |
args: --all --target ${{ matrix.target }} ${{ matrix.extra-args }} | |
env: | |
CLASH_RS_CI: "true" | |
RUSTFLAGS: ${{ matrix.rustflags || '--cfg tokio_unstable' }} | |
- name: Cargo build | |
uses: clechasseur/rs-cargo@v2 | |
with: | |
use-cross: ${{ matrix.cross }} | |
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 | |
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 | |
if: github.event_name != 'pull_request' | |
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: Delete previous latest tag | |
run: | | |
git tag -d latest || true | |
git push origin :refs/tags/latest || true | |
gh release list | grep Draft | awk '{print $1 " \t"}' | while read -r line; do gh release delete -y "$line"; done | |
env: | |
GH_TOKEN: ${{ github.token }} | |
- name: Create new latest tag | |
if: startsWith(github.ref, 'refs/heads/master') | |
run: | | |
git tag latest | |
git push origin latest | |
- 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: 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 | |
runs-on: ubuntu-latest | |
if: startsWith(github.ref, 'refs/tags/v') | |
permissions: | |
contents: read | |
packages: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Get the current Git commit hash | |
id: get-info | |
run: | | |
echo "OWNER=${GITHUB_REPOSITORY_OWNER@L}" >> $GITHUB_OUTPUT | |
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: Log in to Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ steps.get-info.outputs.OWNER }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- 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: 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 }} | |