0760e5486b
Turns out that caching the golang:windowsservercore-ltsc2022 image between GithubAction workflow runs is a bad idea because `docker load` command still takes too long to load image from cached archive (~9-10min on standard windows runner). And after that runner still needs to build the neo-go image itself. However, standard GA windows runner is supplied with prefetched latest mcr.microsoft.com/windows/servercore:ltsc2022 image, so using it costs almost nothing. Thus, the other approach is implemented: we use standard mcr.microsoft.com/windows/servercore:ltsc2022 image as both build-base and final-base. Then we install all required tools for building neo-go manually on build-base image (these tools are git and go 1.17). Compared to the first approach, the publishing job (included build and publish to DockerHub) takes ~7-8min to finish.
155 lines
4.6 KiB
YAML
155 lines
4.6 KiB
YAML
name: Push images to DockerHub
|
|
|
|
# Controls when the action will run.
|
|
on:
|
|
push:
|
|
# Publish `master` as Docker `latest` and `git_revision` images.
|
|
branches:
|
|
- master
|
|
release:
|
|
# Publish released commit as Docker `latest` and `git_revision` images.
|
|
types:
|
|
- published
|
|
|
|
# Allows to run this workflow manually from the Actions tab.
|
|
workflow_dispatch:
|
|
inputs:
|
|
ref:
|
|
description: 'Ref to build Docker images for Ubuntu and Windows Server Core [default: latest master; examples: v0.92.0, 0a4ff9d3e4a9ab432fd5812eb18c98e03b5a7432]'
|
|
required: false
|
|
default: ''
|
|
push_image:
|
|
description: 'Push images to DockerHub [default: false; examples: true, false]'
|
|
required: false
|
|
default: 'false'
|
|
|
|
# Environment variables.
|
|
env:
|
|
GO111MODULE: "on"
|
|
|
|
# A workflow run.
|
|
jobs:
|
|
tests_ubuntu:
|
|
name: Run Ubuntu-based tests before publishing
|
|
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: Sync VM submodule
|
|
run: |
|
|
git submodule sync
|
|
git submodule update --init
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: 1.17
|
|
|
|
- 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: Run tests
|
|
run: make test
|
|
publish_ubuntu:
|
|
# Ensure test job passes before pushing image.
|
|
needs: tests_ubuntu
|
|
name: Publish Ubuntu-based image to DockerHub
|
|
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: Build image
|
|
run: make image
|
|
|
|
- name: Build image with 'latest' tag
|
|
if: ${{ github.event_name == 'release' && github.event.release.target_commitish == 'master' }}
|
|
run: make image-latest
|
|
|
|
- name: Login to DockerHub
|
|
uses: docker/login-action@v1
|
|
with:
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
|
|
|
- name: Push image to registry
|
|
if: ${{ github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true') }}
|
|
run: make image-push
|
|
|
|
- name: Push image with 'latest' tag to registry
|
|
if: ${{ github.event_name == 'release' && github.event.release.target_commitish == 'master' }}
|
|
run: make image-push-latest
|
|
|
|
tests_wsc:
|
|
name: Run WindowsServerCore-based tests before publishing
|
|
runs-on: windows-2022
|
|
|
|
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: Sync VM submodule
|
|
run: |
|
|
git submodule sync
|
|
git submodule update --init
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: 1.17
|
|
|
|
- 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: Run tests
|
|
run: make test
|
|
publish_wsc:
|
|
# Ensure test job passes before pushing image.
|
|
needs: tests_wsc
|
|
name: Publish WindowsServerCore-based image to DockerHub
|
|
runs-on: windows-2022
|
|
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: Show docker images
|
|
run: docker images
|
|
|
|
- name: Build image
|
|
run: make image-wsc
|
|
|
|
- name: Login to DockerHub
|
|
uses: docker/login-action@v1
|
|
with:
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
|
|
|
- name: Push image to registry
|
|
if: ${{ github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true') }}
|
|
run: make image-wsc-push
|