name: Release

on:
  release:
    types: [published]
    branches: [ master ]

jobs:

  build_assets:
    
    runs-on: ubuntu-latest
    steps:

    - name: Set up Go 1.x
      uses: actions/setup-go@v2
      with:
        go-version: 1.15
      id: go
    - name: Check out code into the Go module directory
      uses: actions/checkout@v2
    - name: Get dependencies
      run: |
        go get -v -t -d ./...
        if [ -f Gopkg.toml ]; then
            curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
            dep ensure
        fi
    - name: Build
      run: |
        chmod +x build.assets.sh
        ./build.assets.sh
    - name: Upload
      uses: softprops/action-gh-release@v1
      if: startsWith(github.ref, 'refs/tags/')
      with:
        files: |
          freebsd_386_client.tar.gz
          freebsd_386_server.tar.gz
          freebsd_amd64_client.tar.gz
          freebsd_amd64_server.tar.gz
          freebsd_arm_client.tar.gz
          freebsd_arm_server.tar.gz
          linux_386_client.tar.gz
          linux_386_server.tar.gz
          linux_amd64_client.tar.gz
          linux_amd64_server.tar.gz
          linux_arm64_client.tar.gz
          linux_arm64_server.tar.gz
          linux_arm_v5_client.tar.gz
          linux_arm_v6_client.tar.gz
          linux_arm_v7_client.tar.gz
          linux_arm_v5_server.tar.gz
          linux_arm_v6_server.tar.gz
          linux_arm_v7_server.tar.gz
          linux_mips64le_client.tar.gz
          linux_mips64le_server.tar.gz
          linux_mips64_client.tar.gz
          linux_mips64_server.tar.gz
          linux_mipsle_client.tar.gz
          linux_mipsle_server.tar.gz
          linux_mips_client.tar.gz
          linux_mips_server.tar.gz
          darwin_amd64_client.tar.gz
          darwin_amd64_server.tar.gz
          windows_386_client.tar.gz
          windows_386_server.tar.gz
          windows_amd64_client.tar.gz
          windows_amd64_server.tar.gz
          npc_sdk.tar.gz
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        
  build_android:
    
    runs-on: ubuntu-latest
    steps:

    - name: Check out code into the Go module directory
      uses: actions/checkout@v2
    - name: Build
      run: |
        chmod +x build.android.sh
        docker run --rm -i -w /app -v $(pwd):/app -e ANDROID_HOME=/usr/local/android_sdk -e GOPROXY=direct fyneio/fyne-cross:android-latest /app/build.android.sh
    - name: Upload
      uses: softprops/action-gh-release@v1
      if: startsWith(github.ref, 'refs/tags/')
      with:
        files: |
          android_client.apk
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  build_spk:
    
    runs-on: ubuntu-latest
    steps:

    - name: Check out code into the Go module directory
      uses: actions/checkout@v2
    - name: Set env
      run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
    - name: Build
      run: |
        git clone https://github.com/cnlh/spksrc.git ~/spksrc
        mkdir ~/spksrc/nps && cp -rf ./* ~/spksrc/nps/
        docker run -id --name spksrc --env VERSION=${{ env.RELEASE_VERSION }} -e GOPROXY=direct -v ~/spksrc:/spksrc synocommunity/spksrc /bin/bash
        docker exec spksrc /bin/bash -c 'cd /spksrc && make setup && cd /spksrc/spk/npc && make'
        cp ~/spksrc/packages/npc_noarch-all_${{ env.RELEASE_VERSION }}-1.spk ./npc_syno.spk
    - name: Upload
      uses: softprops/action-gh-release@v1
      if: startsWith(github.ref, 'refs/tags/')
      with:
        files: |
          npc_syno.spk
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  build_docker:
    
    runs-on: ubuntu-latest
    steps:

    - name: Check out code into the Go module directory
      uses: actions/checkout@v2
    - name: Set env
      run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
    - name: Set up QEMU
      uses: docker/setup-qemu-action@v1
    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v1
    - name: Cache Docker layers
      uses: actions/cache@v2
      with:
        path: /tmp/.buildx-cache
        key: ${{ runner.os }}-buildx-${{ github.sha }}
        restore-keys: |
          ${{ runner.os }}-buildx-
    - name: Login to DockerHub
      uses: docker/login-action@v1 
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}
    - name: Build and push nps
      uses: docker/build-push-action@v2
      with:
        context: .
        file: ./Dockerfile.nps
        platforms: linux/amd64,linux/arm,linux/arm64
        push: true
        tags: |
          ${{ secrets.DOCKERHUB_USERNAME }}/nps:latest
          ${{ secrets.DOCKERHUB_USERNAME }}/nps:${{ env.RELEASE_VERSION }}
    - name: Build and push npc
      uses: docker/build-push-action@v2
      with:
        context: .
        file: ./Dockerfile.npc
        platforms: linux/amd64,linux/arm,linux/arm64
        push: true
        tags: |
          ${{ secrets.DOCKERHUB_USERNAME }}/npc:latest
          ${{ secrets.DOCKERHUB_USERNAME }}/npc:${{ env.RELEASE_VERSION }}
