proxy-x 0.2.1

A simple proxy config tool.
Documentation
name: CD # Continuous Deployment

on:
    push:
        tags:
            - '[v]?[0-9]+.[0-9]+.[0-9]+'

permissions:
    contents: write

jobs:

    publish:
        name: Publishing for ${{ matrix.job.os }}
        runs-on: ${{ matrix.job.os }}
        strategy:
            matrix:
                rust: [ stable ]
                job:
                    -   os: macos-latest
                        os-name: macos
                        target: x86_64-apple-darwin
                        architecture: x86_64
                        binary-postfix: ""
                        use-cross: false
                    -   os: macos-latest
                        os-name: macos
                        target: aarch64-apple-darwin
                        architecture: arm64
                        binary-postfix: ""
                        use-cross: false
                    -   os: ubuntu-latest
                        os-name: linux
                        target: x86_64-unknown-linux-gnu
                        architecture: x86_64
                        binary-postfix: ""
                        use-cross: false
                    -   os: windows-latest
                        os-name: windows
                        target: x86_64-pc-windows-msvc
                        architecture: x86_64
                        binary-postfix: ".exe"
                        use-cross: false
                    -   os: ubuntu-latest
                        os-name: linux
                        target: aarch64-unknown-linux-gnu
                        architecture: arm64
                        binary-postfix: ""
                        use-cross: true
                    -   os: ubuntu-latest
                        os-name: linux
                        target: i686-unknown-linux-gnu
                        architecture: i686
                        binary-postfix: ""
                        use-cross: true

        steps:
            -   name: Checkout repository
                uses: actions/checkout@v4
            -   name: Install Rust toolchain
                uses: actions-rs/toolchain@v1
                with:
                    toolchain: ${{ matrix.rust }}
                    target: ${{ matrix.job.target }}
                    profile: minimal
                    override: true
            -   uses: Swatinem/rust-cache@v2
            -   name: Cargo build
                uses: actions-rs/cargo@v1
                with:
                    command: build
                    use-cross: ${{ matrix.job.use-cross }}
                    toolchain: ${{ matrix.rust }}
                    args: --release --target ${{ matrix.job.target }}

            -   name: install strip command
                shell: bash
                run: |
                    if [[ ${{ matrix.job.target }} == aarch64-unknown-linux-gnu ]]; then
                        sudo apt update
                        sudo apt-get install -y binutils-aarch64-linux-gnu
                    fi
            -   name: Packaging final binary
                shell: bash
                run: |
                    cd target/${{ matrix.job.target }}/release

                    ####### reduce binary size by removing debug symbols #######
                    BINARY_NAME=proxy-x${{ matrix.job.binary-postfix }}
                    if [[ ${{ matrix.job.target }} == aarch64-unknown-linux-gnu ]]; then
                      GCC_PREFIX="aarch64-linux-gnu-"
                    else
                      GCC_PREFIX=""
                    fi
                    "$GCC_PREFIX"strip $BINARY_NAME

                    ########## create tar.gz ##########
                    RELEASE_NAME=proxy-x-${GITHUB_REF/refs\/tags\//}-${{ matrix.job.os-name }}-${{ matrix.job.architecture }}
                    tar czvf $RELEASE_NAME.tar.gz $BINARY_NAME

                    ########## create sha256 ##########
                    if [[ ${{ runner.os }} == 'Windows' ]]; then
                      certutil -hashfile $RELEASE_NAME.tar.gz sha256 | grep -E [A-Fa-f0-9]{64} > $RELEASE_NAME.sha256
                    else
                      shasum -a 256 $RELEASE_NAME.tar.gz > $RELEASE_NAME.sha256
                    fi
            -   name: Releasing assets
                uses: softprops/action-gh-release@v1
                with:
                    files: |
                        target/${{ matrix.job.target }}/release/proxy-x-*.tar.gz
                        target/${{ matrix.job.target }}/release/proxy-x-*.sha256
                env:
                    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    publish-cargo:
        name: Publishing to Cargo
        runs-on: ubuntu-latest
        steps:
            -   name: Checkout repository
                uses: actions/checkout@v4
            -   name: Install Rust toolchain
                uses: dtolnay/rust-toolchain@stable
            -   uses: Swatinem/rust-cache@v2
            -   run: cargo publish
                env:
                    CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}