name: Publish release draft

on:
  workflow_dispatch:
    inputs:
      tag:
        description: Release tag
        required: true
      prerelease:
        description: Prerelease
        type: boolean
      generatenotes:
        description: Generate release notes
        type: boolean
      
jobs:
  release:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    
    steps:
    - uses: actions/checkout@v3
    - name: Setup .NET
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: 7.0.x
    - name: Restore dependencies
      run: dotnet restore
    - name: Build
      run: dotnet build --no-restore
    - name: Test
      run: dotnet test --no-build --verbosity normal
      
    - name: Publish for Linux x64
      run: dotnet publish Capy64/Capy64.csproj -c Release --no-self-contained -a x64 --os linux -p:PublishSingleFile=true -o publish/linux-x64
    - name: Publish for Windows x64
      run: dotnet publish Capy64/Capy64.csproj -c Release --no-self-contained -a x64 --os win -p:PublishSingleFile=true -o publish/win-x64
      
    - name: Upload Linux x64 artifact
      uses: actions/upload-artifact@v3.1.2
      with:
        name: Linux-x64
        path: publish/linux-x64/**
        if-no-files-found: error
    - name: Upload Windows x64 artifact
      uses: actions/upload-artifact@v3.1.2
      with:
        name: Windows-x64
        path: publish/win-x64/**
        if-no-files-found: error
        
    - name: Zip Linux x64
      run: 7z a capy64-linux-x64.zip publish/linux-x64/**
    - name: Zip Windows x64
      run: 7z a capy64-windows-x64.zip publish/win-x64/**
      
    - name: Create Release
      uses: ncipollo/release-action@v1.12.0
      with:
        commit: ${{ github.ref_name }}
        tag: ${{ inputs.tag }}
        allowUpdates: true
        artifactErrorsFailBuild: true
        artifacts: "capy64-linux-x64.zip,capy64-windows-x64.zip"
        draft: true
        generateReleaseNotes: ${{ inputs.generatenotes }}
        makeLatest: true
        prerelease: ${{ inputs.prerelease }}