name: Build release binary

env:
  CARGO_INCREMENTAL: 0
  CARGO_NET_RETRY: 10
  CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
  RUSTFLAGS: "-D warnings -W unreachable-pub -W rust-2021-compatibility"
  RUSTUP_MAX_RETRIES: 10
  RUST_BACKTRACE: short

on:
  workflow_dispatch:
  push:
    tags:
      - v*

jobs:
  build:
    name: Build on ${{ matrix.build }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        build: [linux-amd64, ]
        include:
          - build: linux-amd64
            os: ubuntu-latest
            rust: stable
            artifact_name: 'meli-linux-amd64'
            target: x86_64-unknown-linux-gnu
    steps:
      - uses: https://github.com/actions/checkout@v2
      - id: os-deps
        name: install OS dependencies
        run: |
          apt-get update
          apt-get install -y libdbus-1-dev pkg-config mandoc libssl-dev
          #- id: cache-rustup
          #  name: Cache Rust toolchain
          #  uses: https://github.com/actions/cache@v3
          #  with:
          #    path: ~/.rustup
          #    key: toolchain-${{ matrix.os }}-${{ matrix.rust }}
          #- if: ${{ steps.cache-rustup.outputs.cache-hit != 'true' }}
      - name: Install Rust ${{ matrix.rust }}
        uses: https://github.com/actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ matrix.rust }}
          target: ${{ matrix.target }}
          override: true
      - name: Configure cargo data directory
        # After this point, all cargo registry and crate data is stored in
        # $GITHUB_WORKSPACE/.cargo_home. This allows us to cache only the files
        # that are needed during the build process. Additionally, this works
        # around a bug in the 'cache' action that causes directories outside of
        # the workspace dir to be saved/restored incorrectly.
        run: echo "CARGO_HOME=$(pwd)/.cargo_home" >> $GITHUB_ENV
          #- id: cache-cargo
          #  name: Cache cargo configuration and installations
          #  uses: https://github.com/actions/cache@v3
          #  with:
          #    path: ${{ env.CARGO_HOME }}
          #    key: cargo-${{ matrix.os }}-${{ matrix.rust }}
          #- if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} && matrix.target
      - name: Setup Rust target
        run: |
          mkdir -p "${{ env.CARGO_HOME }}"
          cat << EOF > "${{ env.CARGO_HOME }}"/config.toml
          [build]
          target = "${{ matrix.target }}"
          EOF
      - name: Build binary
        run: |
          make
          mkdir artifacts
          mv target/*/release/* target/ || true
          mv target/release/* target/ || true
          mv target/meli  artifacts/
      - name: Upload Artifacts
        uses: https://github.com/actions/upload-artifact@v2
        with:
          name: ${{ matrix.artifact_name }}
          path: artifacts
          if-no-files-found: error
          retention-days: 1
