neoneo-go/.github/workflows/build.yml
Roman Khimov b8b85ce911 workflows/Makefile: build Docker image for MacOS
We build multiarch linux/amd64 and linux/arm64, because MacOS runner can't
build docker images and even if it could that'd be linux/amd64 while we want
linux/arm64 for Apple CPUs.

Unfortunately, given the way GitHub workflows work we can't avoid using a
Makefile helper, there is no easy way to set variables conditionally and/or
use some logic to affect their contents.

We reintroduce build_image_wsc as well here because Windows images can't be
built with buildx using GitHub runners.
2022-07-20 17:38:41 +03:00

146 lines
3.5 KiB
YAML

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:
name: Build CLI
runs-on: ${{matrix.os}}
strategy:
matrix:
os: [ubuntu-20.04, windows-2022, macos-12]
arch: [amd64, arm64]
exclude:
- os: windows-2022
arch: 'arm64'
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
env:
GOARCH: ${{ matrix.arch }}
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: neo-go-${{ matrix.os }}-${{ matrix.arch }}
path: ./bin/neo-go*
if-no-files-found: error
build_image:
needs: build_cli
name: Build Docker image
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.event.inputs.ref }}
fetch-depth: 0
- name: Set up QEMU
if: runner.os != 'Windows'
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Set vars
id: setvars
run: make gh-docker-vars
- name: Build and push
uses: docker/build-push-action@v3
with:
push: false
platforms: linux/amd64,linux/arm64
build-args: |
REPO=${{ steps.setvars.outputs.repo }}
VERSION=${{ steps.setvars.outputs.version }}
tags: ${{ steps.setvars.outputs.repo }}:${{ steps.setvars.outputs.version }}${{ steps.setvars.outputs.suffix }}
build_image_wsc:
needs: build_cli
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:
needs: build_cli
name: Build privnet Docker image
runs-on: ${{matrix.os}}
strategy:
matrix:
os: [ubuntu-20.04, windows-2022]
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.event.inputs.ref }}
fetch-depth: 0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
# 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