name: Release

on:
  workflow_dispatch:
    inputs:
      releaseVersion:
        description: 'Release version'
        required: true
        default: '1.0.0-preview1'
      packageSource:
        description: 'Package source'
        required: true
        default: 'https://api.nuget.org/v3/index.json'

env:
  Version: ${{ github.event.inputs.releaseVersion }}
  PackageVersion: ${{ github.event.inputs.releaseVersion }}

jobs:
  verify:
    name: Run tests
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.x
    - name: Test
      run: dotnet test --verbosity normal

  release_zip:
    needs: verify
    name: Release BaGet.zip to GitHub
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.x
    - name: Publish
      run: dotnet publish src/BaGet --configuration Release --output artifacts
    - name: Upload
      uses: actions/upload-artifact@v2
      with:
        name: BaGet
        path: artifacts

  release_packages:
    needs: verify
    name: Release packages to nuget.org
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.x
    - name: Pack
      run: dotnet pack --configuration Release --output artifacts
    - name: Push
      run: dotnet nuget push "*" -s ${{ github.event.inputs.packageSource }} -k ${{secrets.NUGET_API_KEY}}
      working-directory: artifacts

  release_docker_image:
    needs: verify
    name: Release Docker image to Docker Hub
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Log in to Docker Hub
      uses: docker/login-action@v1
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}

    - name: Build and push Docker image
      uses: docker/build-push-action@v2
      with:
        context: .
        push: true
        tags: |
          loicsharma/baget:latest
          loicsharma/baget:${{ github.event.inputs.releaseVersion }}
