ip-tools 0.2.0

A CLI tool and library to retrieve the local IP address and list network interfaces
name: CD # Continuous Deployment

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

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: ""
                        cross-compile: false
                    -   os: macos-latest
                        os-name: macos
                        target: aarch64-apple-darwin
                        architecture: arm64
                        binary-postfix: ""
                        cross-compile: false
                    -   os: ubuntu-latest
                        os-name: linux
                        target: x86_64-unknown-linux-gnu
                        architecture: x86_64
                        binary-postfix: ""
                        cross-compile: false
                    -   os: windows-latest
                        os-name: windows
                        target: x86_64-pc-windows-msvc
                        architecture: x86_64
                        binary-postfix: ".exe"
                        cross-compile: false
                    -   os: ubuntu-latest
                        os-name: linux
                        target: aarch64-unknown-linux-gnu
                        architecture: arm64
                        binary-postfix: ""
                        cross-compile: true
                    -   os: ubuntu-latest
                        os-name: linux
                        target: i686-unknown-linux-gnu
                        architecture: i686
                        binary-postfix: ""
                        cross-compile: true

        steps:
            -   name: Checkout repository
                uses: actions/checkout@v7
            -   name: Install Rust toolchain
                uses: dtolnay/rust-toolchain@stable
                with:
                    targets: ${{ matrix.job.target }}
            -   uses: Swatinem/rust-cache@v2
            -   name: Install cross-compilation dependencies
                shell: bash
                run: |
                    if [[ ${{ matrix.job.target }} == aarch64-unknown-linux-gnu ]]; then
                        sudo apt update
                        sudo apt-get install -y binutils-aarch64-linux-gnu
                    elif [[ ${{ matrix.job.target }} == i686-unknown-linux-gnu ]]; then
                        sudo apt update
                        sudo apt-get install -y gcc-multilib
                    fi
            -   name: Cargo build
                run: cargo build --release --target ${{ matrix.job.target }}

            -   name: Packaging final binary
                shell: bash
                run: |
                    cd target/${{ matrix.job.target }}/release

                    ####### reduce binary size by removing debug symbols #######
                    BINARY_NAME=ip-tools${{ 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=ip-tools-${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@v3
                with:
                    files: |
                        target/${{ matrix.job.target }}/release/ip-tools-*.tar.gz
                        target/${{ matrix.job.target }}/release/ip-tools-*.sha256
                env:
                    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

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