Documentation
name: Release

on:
  push:
    branches: [ "main" ]

env:
  CARGO_TERM_COLOR: always

jobs:
  build:
    runs-on: '${{ matrix.os }}'
    strategy:
      matrix:
        include:
          - os: macos-latest
            target: x86_64-apple-darwin
            suffix: ''
          - os: ubuntu-latest
            target: x86_64-unknown-linux-gnu
            suffix: ''
          - os: windows-latest
            target: x86_64-pc-windows-msvc
            suffix: '.exe'
    steps:
      - uses: actions/checkout@master
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
      - name: build
        run: cargo build --release
      - uses: actions/upload-artifact@v4
        with:
          name: jawk-${{ matrix.target }}
          path: ./target/release/jawk${{ matrix.suffix }}
          retention-days: 1
  build-musl-and-docker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
      - name: install musl
        run:  rustup target add x86_64-unknown-linux-musl
      - name: build
        run: cargo build --release --target=x86_64-unknown-linux-musl
      - uses: actions/upload-artifact@v4
        with:
          name: jawk-x86_64-unknown-linux-musl
          path: ./target/x86_64-unknown-linux-musl/release/jawk
          retention-days: 1
      - name: Copy binary
        run: |
          rm -rf ./docker/target
          mkdir -p ./docker/target
          cp ./target/x86_64-unknown-linux-musl/release/jawk ./docker/target/jawk
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: docker
          push: true
          tags: yiftach/jawk:latest,yiftach/jawk:0.1

  produce-book-and-publish:
    needs:
      - build-musl-and-docker
      - build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
      - name: build
        run: cargo build --features=create-docs
      - name: create book
        run: target/debug/jawk -a mk-book
      - uses: actions/download-artifact@v4
        with:
          pattern: jawk-*
          path: target/docs/book/book/
      - uses: Dylan700/sftp-upload-action@latest
        with:
          server: ${{ secrets.FTP_SERVER }}
          username: ${{ secrets.FTP_USERNAME }}
          password: ${{ secrets.FTP_PASSSWORD }}
          port: 22
          uploads: |
            target/docs/book/book/ => ./

  cargo-publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
      - uses: katyo/publish-crates@v2
        with:
          registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}