tailscale-systray 0.3.0

Application Indicator (SNI) for Tailscale
name: Release

on:
  push:
    tags:
      - '*'

env:
  RUST_VERSION: "1.91.1"

jobs:
  build-linux-amd64:
    name: Build Linux AMD64 (Static)
    runs-on: ubuntu-latest
    container:
      image: alpine:latest

    steps:
      - name: Install build dependencies
        run: |
          apk add --no-cache \
            git \
            curl \
            bash \
            build-base \
            pkgconfig \
            dbus-dev \
            gtk+3.0-dev \
            libnftnl-dev \
            libmnl-dev \
            libmnl-static \
            musl-dev

      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install Rust via rustup
        run: |
          curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain ${{ env.RUST_VERSION }} --profile minimal
          source $HOME/.cargo/env
          rustc --version
          cargo --version

      - name: Cache cargo registry
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: alpine-amd64-cargo-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            alpine-amd64-cargo-

      - name: Build static release binary
        run: |
          source $HOME/.cargo/env
          RUSTC_LOG=rustc_codegen_ssa::back::link=info \
            RUSTFLAGS='-C target-feature=+crt-static -C link-arg=-Wl,-static -C link-arg=-lmnl -C link-arg=-lc' \
            cargo build --release --target x86_64-unknown-linux-musl

      - name: Prepare artifacts
        run: |
          cp -v target/x86_64-unknown-linux-musl/release/tailscale-systray \
            tailscale-systray-linux-amd64
          sha256sum tailscale-systray-linux-amd64 > tailscale-systray-linux-amd64.sha256
          file tailscale-systray-linux-amd64
          ldd tailscale-systray-linux-amd64 || echo "Static binary - no dynamic dependencies"

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: tailscale-systray-linux-amd64
          path: |
            tailscale-systray-linux-amd64
            tailscale-systray-linux-amd64.sha256
          retention-days: 7

  build-linux-arm64:
    name: Build Linux ARM64 (Static)
    runs-on: ubuntu-24.04-arm

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Build in Alpine container
        run: |
          docker run --rm \
            -v "${{ github.workspace }}:/workspace" \
            -w /workspace \
            alpine:latest \
            sh -c '
              set -e
              apk add --no-cache \
                git \
                curl \
                bash \
                build-base \
                pkgconfig \
                dbus-dev \
                gtk+3.0-dev \
                libnftnl-dev \
                libmnl-dev \
                libmnl-static \
                musl-dev

              curl --proto "=https" --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain ${{ env.RUST_VERSION }} --profile minimal
              source $HOME/.cargo/env

              RUSTFLAGS="-C target-feature=+crt-static -C link-arg=-Wl,-static -C link-arg=-lmnl -C link-arg=-lc" \
                cargo build --release --target aarch64-unknown-linux-musl

              cp -v target/aarch64-unknown-linux-musl/release/tailscale-systray tailscale-systray-linux-arm64
              sha256sum tailscale-systray-linux-arm64 > tailscale-systray-linux-arm64.sha256
              file tailscale-systray-linux-arm64
              ldd tailscale-systray-linux-arm64 || echo "Static binary - no dynamic dependencies"
            '

      - name: Verify artifacts were created
        run: |
          ls -lh tailscale-systray-linux-arm64*

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: tailscale-systray-linux-arm64
          path: |
            tailscale-systray-linux-arm64
            tailscale-systray-linux-arm64.sha256
          retention-days: 7

  create-release:
    name: Create GitHub Release
    runs-on: ubuntu-latest
    needs: [build-linux-amd64, build-linux-arm64]
    permissions:
      contents: write

    steps:
      - name: Download all artifacts
        uses: actions/download-artifact@v4
        with:
          path: artifacts

      - name: Display artifact structure
        run: ls -R artifacts

      - name: Prepare release files
        run: |
          mkdir -p release
          cp artifacts/tailscale-systray-linux-amd64/* release/
          cp artifacts/tailscale-systray-linux-arm64/* release/
          ls -lh release/

      - name: Create GitHub Release
        uses: softprops/action-gh-release@v2
        with:
          draft: true
          generate_release_notes: true
          files: |
            release/tailscale-systray-linux-amd64
            release/tailscale-systray-linux-amd64.sha256
            release/tailscale-systray-linux-arm64
            release/tailscale-systray-linux-arm64.sha256
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}