#
# REF:
#   1. https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrixinclude
#
name: Create Release Draft

on:
  workflow_dispatch:
  push:
    tags:
      - '[0-9]+.[0-9]+.[0-9]+*'
      - '!*nightly*'  # Don't trigger release for nightly tags

defaults:
  run:
    shell: bash

jobs:
  release:
    name: Nu

    strategy:
      fail-fast: false
      matrix:
        target:
        - aarch64-apple-darwin
        - x86_64-apple-darwin
        - x86_64-pc-windows-msvc
        - aarch64-pc-windows-msvc
        - x86_64-unknown-linux-gnu
        - x86_64-unknown-linux-musl
        - aarch64-unknown-linux-gnu
        - aarch64-unknown-linux-musl
        - armv7-unknown-linux-gnueabihf
        - armv7-unknown-linux-musleabihf
        - riscv64gc-unknown-linux-gnu
        - loongarch64-unknown-linux-gnu
        extra: ['bin']
        include:
        - target: aarch64-apple-darwin
          os: macos-latest
        - target: x86_64-apple-darwin
          os: macos-latest
        - target: x86_64-pc-windows-msvc
          extra: 'bin'
          os: windows-latest
        - target: x86_64-pc-windows-msvc
          extra: msi
          os: windows-latest
        - target: aarch64-pc-windows-msvc
          extra: 'bin'
          os: windows-latest
        - target: aarch64-pc-windows-msvc
          extra: msi
          os: windows-latest
        - target: x86_64-unknown-linux-gnu
          os: ubuntu-22.04
        - target: x86_64-unknown-linux-musl
          os: ubuntu-22.04
        - target: aarch64-unknown-linux-gnu
          os: ubuntu-22.04
        - target: aarch64-unknown-linux-musl
          os: ubuntu-22.04
        - target: armv7-unknown-linux-gnueabihf
          os: ubuntu-22.04
        - target: armv7-unknown-linux-musleabihf
          os: ubuntu-22.04
        - target: riscv64gc-unknown-linux-gnu
          os: ubuntu-22.04
        - target: loongarch64-unknown-linux-gnu
          os: ubuntu-22.04

    runs-on: ${{matrix.os}}

    steps:
    - uses: actions/checkout@v4

    - name: Update Rust Toolchain Target
      run: |
        echo "targets = ['${{matrix.target}}']" >> rust-toolchain.toml

    - name: Setup Rust toolchain
      uses: actions-rust-lang/setup-rust-toolchain@v1.11.0
      # WARN: Keep the rustflags to prevent from the winget submission error: `CAQuietExec: Error 0xc0000135`
      with:
        cache: false
        rustflags: ''

    - name: Setup Nushell
      uses: hustcer/setup-nu@v3
      with:
        version: 0.101.0

    - name: Release Nu Binary
      id: nu
      run: nu .github/workflows/release-pkg.nu
      env:
        OS: ${{ matrix.os }}
        REF: ${{ github.ref }}
        TARGET: ${{ matrix.target }}
        _EXTRA_: ${{ matrix.extra }}

    # WARN: Don't upgrade this action due to the release per asset issue.
    # See: https://github.com/softprops/action-gh-release/issues/445
    - name: Publish Archive
      uses: softprops/action-gh-release@v2.0.5
      if: ${{ startsWith(github.ref, 'refs/tags/') }}
      with:
        draft: true
        files: ${{ steps.nu.outputs.archive }}
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  sha256sum:
    needs: release
    name: Create Sha256sum
    runs-on: ubuntu-latest
    steps:
    - name: Download Release Archives
      env:
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: >-
        gh release download ${{ github.ref_name }}
        --repo ${{ github.repository }}
        --pattern '*'
        --dir release
    - name: Create Checksums
      run: cd release && shasum -a 256 * > ../SHA256SUMS
    - name: Publish Checksums
      uses: softprops/action-gh-release@v2.0.5
      with:
        draft: true
        files: SHA256SUMS
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
