vane 0.9.2

A flow-based reverse proxy with multi-layer routing and programmable pipelines.
name: Package Debian

on:
  workflow_call:
    inputs:
      ref:
        required: true
        type: string
        description: 'Git ref to checkout (tag or branch)'

jobs:
  debian:
    strategy:
      matrix:
        include:
          - arch: x86_64
            deb_arch: amd64
          - arch: aarch64
            deb_arch: arm64

    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          ref: ${{ inputs.ref }}

      - name: Get package info
        id: pkg
        run: |
          BIN_NAME=$(grep -A1 '^\[\[bin\]\]' Cargo.toml | grep '^name' | head -1 | sed 's/.*= *"\([^"]*\)".*/\1/' || true)
          if [ -z "$BIN_NAME" ]; then
            BIN_NAME=$(grep '^name' Cargo.toml | head -1 | sed 's/.*= *"\([^"]*\)".*/\1/')
          fi
          VERSION="${{ inputs.ref }}"
          VERSION="${VERSION#v}"
          echo "bin_name=$BIN_NAME" >> $GITHUB_OUTPUT
          echo "version=$VERSION" >> $GITHUB_OUTPUT

      - name: Download pre-built binary
        uses: actions/download-artifact@v7
        with:
          name: ${{ steps.pkg.outputs.bin_name }}-linux-gnu-${{ matrix.arch }}
          path: build

      - name: Extract binary
        run: |
          cd build
          tar -xzf *.tar.gz
          mv ${{ steps.pkg.outputs.bin_name }} ../

      - name: Build deb package
        run: |
          PKG_ROOT="${{ steps.pkg.outputs.bin_name }}_${{ steps.pkg.outputs.version }}_${{ matrix.deb_arch }}"
          mkdir -p "$PKG_ROOT/DEBIAN"
          mkdir -p "$PKG_ROOT/usr/bin"
          mkdir -p "$PKG_ROOT/usr/lib/systemd/system"
          mkdir -p "$PKG_ROOT/usr/share/licenses/${{ steps.pkg.outputs.bin_name }}"
          mkdir -p "$PKG_ROOT/etc/vane"

          # Binary
          cp ${{ steps.pkg.outputs.bin_name }} "$PKG_ROOT/usr/bin/"
          chmod 755 "$PKG_ROOT/usr/bin/${{ steps.pkg.outputs.bin_name }}"

          # Systemd service
          cp package/default/vane.service "$PKG_ROOT/usr/lib/systemd/system/"

          # License
          cp LICENSE "$PKG_ROOT/usr/share/licenses/${{ steps.pkg.outputs.bin_name }}/"

          # Config files (copy all from default, rename .env.example)
          cp -r package/default/* "$PKG_ROOT/etc/vane/"
          # Explicitly copy .env.example as .env
          cp package/default/.env.example "$PKG_ROOT/etc/vane/.env"
          rm -f "$PKG_ROOT/etc/vane/vane.service"

          # Control file
          cp package/debian/control "$PKG_ROOT/DEBIAN/"
          sed -i "s/%VERSION%/${{ steps.pkg.outputs.version }}/g" "$PKG_ROOT/DEBIAN/control"
          sed -i "s/%ARCH%/${{ matrix.deb_arch }}/g" "$PKG_ROOT/DEBIAN/control"

          # Conffiles
          cp package/debian/conffiles "$PKG_ROOT/DEBIAN/"

          # Postinst
          cp package/debian/postinst "$PKG_ROOT/DEBIAN/"
          chmod 755 "$PKG_ROOT/DEBIAN/postinst"

          # Build
          dpkg-deb --build "$PKG_ROOT"

      - name: Rename and upload
        run: |
          FINAL_NAME="${{ steps.pkg.outputs.bin_name }}-v${{ steps.pkg.outputs.version }}-debian-${{ matrix.arch }}.deb"
          mv *.deb "$FINAL_NAME"

      - name: Upload artifact
        uses: actions/upload-artifact@v6
        with:
          name: ${{ steps.pkg.outputs.bin_name }}-debian-${{ matrix.arch }}
          path: ${{ steps.pkg.outputs.bin_name }}-v${{ steps.pkg.outputs.version }}-debian-${{ matrix.arch }}.deb
          retention-days: 1