name: Build

on:
  pull_request:
    branches:
      - master
    types: [opened, synchronize]
    paths-ignore:
      - 'scripts/**'
      - '**/*.md'
  workflow_dispatch:
    inputs:
      ref:
        description: 'Ref to build CLI for Ubuntu and Windows Server Core [default: latest master; examples: v0.92.0, 0a4ff9d3e4a9ab432fd5812eb18c98e03b5a7432]'
        required: false
        default: ''

env:
  GO111MODULE: "on"

jobs:
  build_cli_ubuntu:
    name: Build CLI (Ubuntu)
    runs-on: ubuntu-20.04

    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.inputs.ref }}
          # Allows to fetch all history for all branches and tags. Need this for proper versioning.
          fetch-depth: 0

      - name: Set up Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.18

      - name: Restore Go modules from cache
        uses: actions/cache@v2
        with:
          path: /home/runner/go/pkg/mod
          key: deps-${{ hashFiles('go.sum') }}

      - name: Update Go modules
        run: go mod download -json

      - name: Build CLI
        run: make build

      - name: Upload artifact
        uses: actions/upload-artifact@v2
        with:
          name: neo-go-binaries-ubuntu
          path: ./bin/neo-go
          if-no-files-found: error

  build_cli_wsc:
    name: Build CLI (Windows Server Core)
    runs-on: windows-2022

    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.inputs.ref }}
          fetch-depth: 0

      - name: Set up Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.18

      - name: Restore Go modules from cache
        uses: actions/cache@v2
        with:
          path: /home/runner/go/pkg/mod
          key: deps-${{ hashFiles('go.sum') }}

      - name: Update Go modules
        run: go mod download -json

      - name: Build CLI
        run: make build

      - name: Upload artifact
        uses: actions/upload-artifact@v2
        with:
          name: neo-go-binaries-wsc
          path: ./bin/neo-go.exe
          if-no-files-found: error

  build_image_ubuntu:
    needs: build_cli_ubuntu
    name: Build Docker image (Ubuntu)
    runs-on: ubuntu-20.04

    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.inputs.ref }}
          fetch-depth: 0

      # For proper `deps` make target execution.
      - name: Set up Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.18

      - name: Build Docker image
        run: make image

  build_image_wsc:
    needs: build_cli_wsc
    name: Build Docker image (Windows Server Core)
    runs-on: windows-2022

    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.inputs.ref }}
          fetch-depth: 0

      # For proper `deps` make target execution.
      - name: Set up Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.18

      - name: Build Docker image
        run: make image

  build_privnet_image_ubuntu:
    needs: build_cli_ubuntu
    name: Build privnet Docker image (Ubuntu)
    runs-on: ubuntu-20.04

    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.inputs.ref }}
          fetch-depth: 0

      # For proper `deps` make target execution.
      - name: Set up Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.18

      # For information purposes.
      - name: Print Docker version
        run: docker --version

      - name: Build privnet Docker image
        run: make env_image

  build_privnet_image_wsc:
    needs: build_cli_wsc
    name: Build privnet Docker image (Windows Server Core)
    runs-on: windows-2022

    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.inputs.ref }}
          fetch-depth: 0

      # For proper `deps` make target execution.
      - name: Set up Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.18

      # For information purposes.
      - name: Print Docker version
        run: docker --version

      - name: Build privnet Docker image
        run: make env_image