havn 0.1.2

A fast configurable port scanner with reasonable defaults
name: Release CI
on:
  push:
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+'
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      #########################
      ## Publish to crates.io #
      #########################

      - name: publish to crates.io
        uses: katyo/publish-crates@v1
        with:
          registry-token: ${{ secrets.CRATES_IO_TOKEN }}

      ####################################
      ## Build binaries for release page #
      ####################################
      
      # Install stable rust, and associated tools
      - name: install rust
        uses: dtolnay/rust-toolchain@stable

      # Setup caching - not sure if will have any effect
      - name: Rust cache
        uses: swatinem/rust-cache@v2

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

        # Build for linux x86 musl
      - name: build x86_64-unknown-linux-musl
        run: cross build --target x86_64-unknown-linux-musl --release
      # Compress output into tar
      - name: compress aarch64 binary
        run: tar -C target/x86_64-unknown-linux-musl/release -czf ./havn_linux_x86_64.tar.gz havn

      # Build for linux aarch64, aka 64 bit pi 4
      - name: build aarch64-unknown-linux-musl
        run: cross build --target aarch64-unknown-linux-musl --release
      # Compress output into tar
      - name: compress aarch64 binary
        run: tar -C target/aarch64-unknown-linux-musl/release -czf ./havn_linux_aarch64.tar.gz havn

      # Build for linux armv6, aka 32 bit pi zero w
      - name: build arm-unknown-linux-musleabihf
        run: cross build --target arm-unknown-linux-musleabihf --release
      # Compress output into tar
      - name: compress armv6 binary
        run: tar -C target/arm-unknown-linux-musleabihf/release -czf ./havn_linux_armv6.tar.gz havn

      # Build for windows
      - name: build release windows_x86_64
        run: cross build --target x86_64-pc-windows-gnu --release
      # Compress output into zip
      - name: compress windows_x86_64 binary
        run: zip -j ./havn_windows_x86_64.zip target/x86_64-pc-windows-gnu/release/havn.exe

      #########################################
      ## Build images for Dockerhub & ghcr.io #
      #########################################

      - name: Login to GitHub Container Registry
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Login to DockerHub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Write release version to env
        run: |
          CURRENT_SEMVER=${GITHUB_REF_NAME#v}
          echo "CURRENT_SEMVER=$CURRENT_SEMVER" >> $GITHUB_ENV

      - uses: docker/setup-buildx-action@v2
        id: buildx
        with:
          install: true
      - name: Build for Dockerhub & ghcr.io
        run: |
          docker build --platform linux/arm/v6,linux/arm64,linux/amd64 \
          -t ${{ secrets.DOCKERHUB_USERNAME }}/havn:${{env.CURRENT_SEMVER}} \
          -t ${{ secrets.DOCKERHUB_USERNAME }}/havn:latest \
          -t ghcr.io/${{ github.repository }}:latest \
          -t ghcr.io/${{ github.repository }}:${{env.CURRENT_SEMVER}} \
          --provenance=false --sbom=false \
          --push \
          -f containerised/Dockerfile .

      ###################
      ## Create release #
      ###################
      
      - name: Release
        uses: softprops/action-gh-release@v1
        with:
          tag_name: ${{ github.ref }}
          name: ${{ github.ref_name }}
          body_path: ".github/release-body.md"
          draft: false
          files: |
             havn_linux_x86_64.tar.gz
             havn_linux_aarch64.tar.gz
             havn_linux_armv6.tar.gz
             havn_windows_x86_64.zip
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}