name: Release
permissions: read-all

on:
  # For manual tests.
  workflow_dispatch:
  release:
    types: [created]

jobs:
  publish-npm:
    name: Publish NPM
    runs-on: ubuntu-latest    
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '16.x'
          registry-url: 'https://registry.npmjs.org'
          
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
          
  publish-pypi:
    name: Publish PyPi
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./python
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.10'
      
      - name: Install Dependencies
        run: |
          python3 -m pip install --upgrade pip
          python3 -m pip install setuptools wheel twine
      
      - name: Build
        run: |
          python3 setup.py sdist bdist_wheel
         
      - name: Upload to PyPi
        run: |
          python3 -m twine upload dist/*
        env:
          TWINE_USERNAME: __token__
          TWINE_PASSWORD: ${{ secrets.TWINE_TOKEN }}

  publish-nuget:
    name: Publish NuGet
    runs-on: windows-latest
    defaults:
      run:
        working-directory: ./net/flatbuffers
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-dotnet@v3
        with:
          dotnet-version: '6.0.x'
          
      - name: Build
        run: |
          dotnet build Google.FlatBuffers.csproj -c Release
          
      - name: Pack
        run: |
          dotnet pack Google.FlatBuffers.csproj -c Release
          
      - name: Upload to NuGet
        run: |
          dotnet nuget push .\bin\Release\Google.FlatBuffers.*.nupkg -k ${{ secrets.NUGET_API_KEY }} -s https://api.nuget.org/v3/index.json 
   
  publish-maven:
    name: Publish Maven
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./java
    steps:
      - uses: actions/checkout@v3
      
      - name: Set up Maven Central Repository
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'
          cache: 'maven'
          server-id: ossrh
          server-username: OSSRH_USERNAME
          server-password: OSSRH_PASSWORD
          gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}
          gpg-passphrase: MAVEN_GPG_PASSPHRASE # this needs to be an env var
      
      - name: Publish Maven
        run: mvn --batch-mode clean deploy
        env:
          OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          OSSRH_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
          MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
          
      
    
