shadowsocks-rust 1.24.0

shadowsocks is a fast tunnel proxy that helps you bypass firewalls.
Documentation
name: Build Releases
on:
  push:
    tags:
      - v*
  workflow_dispatch:
    inputs:
      tag:
        description: 'Release Tag'
        required: true
        type: string

env:
  CARGO_TERM_COLOR: always

jobs:
  build-release-cross:
    runs-on: ubuntu-latest
    env:
      RUST_BACKTRACE: full
    strategy:
      fail-fast: false
      matrix:
        platform:
          - target: i686-unknown-linux-musl
            toolchain: stable
          - target: x86_64-pc-windows-gnu
            toolchain: stable
          - target: x86_64-unknown-linux-gnu
            toolchain: stable
          - target: x86_64-unknown-linux-musl
            toolchain: stable
          - target: armv7-unknown-linux-musleabihf
            toolchain: stable
          - target: armv7-unknown-linux-gnueabihf
            toolchain: stable
          - target: arm-unknown-linux-gnueabi
            toolchain: stable
          - target: arm-unknown-linux-gnueabihf
            toolchain: stable
          - target: arm-unknown-linux-musleabi
            toolchain: stable
          - target: arm-unknown-linux-musleabihf
            toolchain: stable
          - target: aarch64-unknown-linux-gnu
            toolchain: stable
          - target: aarch64-unknown-linux-musl
            toolchain: stable
          - target: mips-unknown-linux-gnu
            toolchain: nightly
          # cross mips-*-musl images are disabled
          # - target: mips-unknown-linux-musl
          #   toolchain: nightly
          - target: mipsel-unknown-linux-gnu
            toolchain: nightly
          # - target: mipsel-unknown-linux-musl
          #   toolchain: nightly
          # FIXME: ring doesn't support mips64 CPU
          # - target: mips64-unknown-linux-gnuabi64
          #   toolchain: nightly
          # - target: mips64-unknown-linux-muslabi64
          #   toolchain: nightly
          - target: mips64el-unknown-linux-gnuabi64
            toolchain: nightly
          # FIXME: Link Error. 
          #   = note: mips64el-linux-muslsf-gcc: error: crt1.o: No such file or directory
          #           mips64el-linux-muslsf-gcc: error: crti.o: No such file or directory
          #           mips64el-linux-muslsf-gcc: error: crtbegin.o: No such file or directory
          #           mips64el-linux-muslsf-gcc: error: crtend.o: No such file or directory
          #           mips64el-linux-muslsf-gcc: error: crtn.o: No such file or directory
          # - target: mips64el-unknown-linux-muslabi64
          #   toolchain: nightly
          - target: x86_64-unknown-freebsd
            toolchain: stable
          - target: x86_64-unknown-netbsd
            toolchain: stable
          - target: loongarch64-unknown-linux-gnu
            toolchain: stable
          - target: loongarch64-unknown-linux-musl
            toolchain: stable
          - target: riscv64gc-unknown-linux-gnu
            toolchain: stable
          - target: riscv64gc-unknown-linux-musl
            toolchain: stable
          - target: aarch64-linux-android
            toolchain: stable
          - target: x86_64-linux-android
            toolchain: stable

    steps:
      - name: Free Disk Space (Ubuntu)
        uses: jlumbroso/free-disk-space@main

      - name: Install LLVM and Clang
        run: sudo apt update && sudo apt install -y clang

      - uses: actions/checkout@v6

      - name: Install Rust
        run: |
          rustup set profile minimal
          rustup toolchain install ${{ matrix.platform.toolchain }}
          rustup default ${{ matrix.platform.toolchain }}
          rustup override set ${{ matrix.platform.toolchain }}

      - name: Install cross
        run: cargo install cross --git https://github.com/cross-rs/cross

      - name: Build ${{ matrix.platform.target }}
        timeout-minutes: 120
        run: |
          compile_target=${{ matrix.platform.target }}

          compile_features="-f full"

          if [[ "$compile_target" == *"-windows-"* ]]; then
            compile_features="$compile_features -f winservice"
          fi

          if [[ "$compile_target" == "mips-"* || "$compile_target" == "mipsel-"* || "$compile_target" == "mips64-"* || "$compile_target" == "mips64el-"* ]]; then
            sudo apt-get update -y && sudo apt-get install -y upx;
            if [[ "$?" == "0" ]]; then
              compile_compress="-u"
            fi

            compile_nightly="-n"
            #compile_cargo_flags="-Z build-std=std,panic_abort,proc_macro"
          fi

          cd build
          ./build-release -t ${{ matrix.platform.target }} $compile_features $compile_compress $compile_nightly $compile_cargo_flags

      - name: Upload Github Assets
        uses: softprops/action-gh-release@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          files: build/release/*
          prerelease: ${{ contains(github.ref_name, '-') }}
          tag_name: ${{ inputs.tag || github.ref_name }}

  build-release-unix:
    runs-on: ${{ matrix.os }}
    env:
      BUILD_EXTRA_FEATURES: "full"
      RUST_BACKTRACE: full
    strategy:
      fail-fast: false
      matrix:
        # os: [ubuntu-latest, macos-latest]
        os: [macos-latest]
        target:
          - x86_64-apple-darwin
          - aarch64-apple-darwin
    steps:
      - uses: actions/checkout@v6

      - name: Install GNU tar
        if: runner.os == 'macOS'
        run: |
          brew install gnu-tar
          # echo "::add-path::/usr/local/opt/gnu-tar/libexec/gnubin"
          echo "/usr/local/opt/gnu-tar/libexec/gnubin" >> $GITHUB_PATH

      - name: Install Rust
        run: |
          rustup set profile minimal
          rustup toolchain install stable
          rustup default stable
          rustup override set stable
          rustup target add --toolchain stable ${{ matrix.target }}

      - name: Build release
        shell: bash
        run: |
          ./build/build-host-release -t ${{ matrix.target }}

      - name: Upload Github Assets
        uses: softprops/action-gh-release@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          files: build/release/*
          prerelease: ${{ contains(github.ref_name, '-') }}
          tag_name: ${{ inputs.tag || github.ref_name }}

  build-release-windows:
    runs-on: windows-latest
    env:
      RUSTFLAGS: "-C target-feature=+crt-static"
      RUST_BACKTRACE: full
    steps:
      - uses: actions/checkout@v6
      - uses: ilammy/setup-nasm@v1

      - name: Install Rust
        run: |
          rustup set profile minimal
          rustup toolchain install stable
          rustup default stable
          rustup override set stable

      - name: Build release
        run: |
          pwsh ./build/build-host-release.ps1 "full winservice"

      - name: Upload Github Assets
        uses: softprops/action-gh-release@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          files: build/release/*
          prerelease: ${{ contains(github.ref_name, '-') }}
          tag_name: ${{ inputs.tag || github.ref_name }}