on:
  push:
    tags:
      - "v*.*.*"

name: Build and Release

jobs:
  build-releases:
    runs-on: ubuntu-latest

    outputs:
      tag: ${{ steps.current_tag.outputs.tag }}

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

      - name: Cache build artifacts
        id: cache-cargo
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/bin
            ~/.cargo/registry
            ~/.cargo/git
          key: build-${{ runner.os }}-cargo-any

      - name: Install Rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          components: rustfmt
          override: true

      - name: Install cross-compilation tools (if needed)
        run: which cross >/dev/null || cargo install cross

      - name: Verify versions
        run: rustc --version && rustup --version && cargo --version && cross --version

      - name: Get current tag
        id: current_tag
        uses: WyriHaximus/github-action-get-previous-tag@v1

      - name: Release package
        run: cargo publish --no-verify --token ${CRATES_TOKEN}
        env:
          CRATES_TOKEN: ${{ secrets.CRATES_TOKEN }}

      - name: Release binaries
        run: ./scripts/release_binaries.sh --version=${{ steps.current_tag.outputs.tag }}

      - name: Release new version
        uses: softprops/action-gh-release@v1
        with:
          tag_name: ${{ steps.current_tag.outputs.tag }}
          name: Bandurria ${{ steps.current_tag.outputs.tag }}
          body: "⚠️ Changelog not yet provided."
          files: ./${{ steps.current_tag.outputs.tag }}-*.tar.gz
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  build-docker:
    needs: build-releases
    runs-on: ubuntu-latest

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

      - name: Acquire Docker image metadata
        id: metadata
        uses: docker/metadata-action@v4
        with:
          images: valeriansaliou/bandurria

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

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build and push Docker image
        uses: docker/build-push-action@v6
        with:
          context: .
          tags: ${{ steps.metadata.outputs.tags }}
          labels: ${{ steps.metadata.outputs.labels }}
          push: true
          build-args: |
            PREBUILT_TAG=${{ needs.build-releases.outputs.tag }}
          platforms: |
            linux/amd64
            linux/arm64
