name: Build for release

on:
  workflow_dispatch: # can't publish from dispatch
  workflow_call:
    inputs:
      publish:
        description: "Set to the release metadata JSON to publish the release"
        required: false
        type: string

env:
  CARGO_TERM_COLOR: always
  CARGO_UNSTABLE_SPARSE_REGISTRY: "true"

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        include:
          - { o: macos-latest,    t: x86_64-apple-darwin                      }
          - { o: macos-latest,    t: aarch64-apple-darwin                     }
          - { o: ubuntu-20.04,    t: x86_64-unknown-linux-gnu                 }
          - { o: ubuntu-20.04,    t: armv7-unknown-linux-gnueabihf,   c: true }
          - { o: ubuntu-20.04,    t: aarch64-unknown-linux-gnu                }
          - { o: ubuntu-latest,   t: x86_64-unknown-linux-musl                }
          - { o: ubuntu-latest,   t: armv7-unknown-linux-musleabihf,  c: true }
          - { o: ubuntu-latest,   t: aarch64-unknown-linux-musl,      c: true }
          - { o: windows-latest,  t: x86_64-pc-windows-msvc                   }
          - { o: windows-latest,  t: aarch64-pc-windows-msvc                  }

    name: ${{ matrix.t }}
    runs-on: ${{ matrix.o }}
    env:
      CARGO_BUILD_TARGET: ${{ matrix.t }}
      JUST_USE_CROSS: ${{ matrix.c }}
      JUST_FOR_RELEASE: true

    steps:
    - uses: actions/checkout@v3
    - uses: ./.github/actions/just-setup
      with:
        tools: cross
        cache-suffix: release-${{ matrix.t }}

    - run: just toolchain rust-src
    - run: just ci-install-deps
    - run: just package
    - if: runner.os == 'Windows'
      run: Get-ChildItem packages/
    - if: runner.os != 'Windows'
      run: ls -shal packages/

    - if: ${{ inputs.publish }}
      name: Publish release
      uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844
      with:
        tag_name: ${{ fromJSON(inputs.publish).version }}
        name: ${{ fromJSON(inputs.publish).version }}
        body: ${{ fromJSON(inputs.publish).notes }}
        append_body: false
        files: |
          packages/cargo-binstall-*
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    - if: ${{ !inputs.publish || runner.os == 'macOS' }}
      name: Upload artifact
      uses: actions/upload-artifact@v3
      with:
        name: ${{ matrix.t }}
        path: packages/cargo-binstall-*
        retention-days: 1

  lipo:
    needs: build
    name: universal-apple-darwin
    runs-on: macos-latest
    env:
      JUST_FOR_RELEASE: true

    steps:
    - uses: actions/checkout@v3
    - uses: ./.github/actions/just-setup
      with:
        cache: false

    - uses: actions/download-artifact@v3
      with:
        name: x86_64-apple-darwin
        path: packages/
    - uses: actions/download-artifact@v3
      with:
        name: aarch64-apple-darwin
        path: packages/

    - run: ls -shalr packages/
    - run: just repackage-lipo
    - run: ls -shal packages/

    - if: ${{ inputs.publish }}
      name: Publish release
      uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844
      with:
        tag_name: v${{ fromJSON(inputs.publish).version }}
        name: v${{ fromJSON(inputs.publish).version }}
        body: ${{ fromJSON(inputs.publish).notes }}
        append_body: false
        files: |
          packages/cargo-binstall-universal-*
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    - if: ${{ !inputs.publish }}
      name: Upload artifact
      uses: actions/upload-artifact@v3
      with:
        name: universal-apple-darwin
        path: packages/cargo-binstall-universal-*
        retention-days: 1