forked from TrueCloudLab/neoneo-go
workflows: move docker push logic to the Build workflow
publish_to_dockerhub.yml duplicated build.yml and run_tests.yml in many ways. We always want to build docker images, it's just that we don't push them on every occasion and there is some additional logic around the latest tag. We also want to publish multiarch images now, so all of this logic better be consolidated in one workflow. It doesn't depend on tests, since we only publish on release or on manual run, so it's known to be good.
This commit is contained in:
parent
bc6787f17c
commit
7b6f23ee7e
2 changed files with 41 additions and 173 deletions
45
.github/workflows/build.yml
vendored
45
.github/workflows/build.yml
vendored
|
@ -8,12 +8,28 @@ on:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- 'scripts/**'
|
- 'scripts/**'
|
||||||
- '**/*.md'
|
- '**/*.md'
|
||||||
|
push:
|
||||||
|
# Build for the master branch.
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
release:
|
||||||
|
# Publish released commit as Docker `latest` and `git_revision` images.
|
||||||
|
types:
|
||||||
|
- published
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
ref:
|
ref:
|
||||||
description: 'Ref to build CLI for Ubuntu and Windows Server Core [default: latest master; examples: v0.92.0, 0a4ff9d3e4a9ab432fd5812eb18c98e03b5a7432]'
|
description: 'Ref to build CLI for Ubuntu and Windows Server Core [default: latest master; examples: v0.92.0, 0a4ff9d3e4a9ab432fd5812eb18c98e03b5a7432]'
|
||||||
required: false
|
required: false
|
||||||
default: ''
|
default: ''
|
||||||
|
push_image:
|
||||||
|
description: 'Push images to DockerHub [default: false; examples: true, false]'
|
||||||
|
required: false
|
||||||
|
default: 'false'
|
||||||
|
use_latest_tag:
|
||||||
|
description: 'Use `latest` tag while pushing images to DockerHub (applied to Ubuntu image only) [default: false; examples: true, false]'
|
||||||
|
required: false
|
||||||
|
default: 'false'
|
||||||
|
|
||||||
env:
|
env:
|
||||||
GO111MODULE: "on"
|
GO111MODULE: "on"
|
||||||
|
@ -65,7 +81,7 @@ jobs:
|
||||||
|
|
||||||
build_image:
|
build_image:
|
||||||
needs: build_cli
|
needs: build_cli
|
||||||
name: Build Docker image
|
name: Build and push docker image
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
@ -81,23 +97,34 @@ jobs:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
||||||
|
|
||||||
- name: Set vars
|
- name: Set vars
|
||||||
id: setvars
|
id: setvars
|
||||||
run: make gh-docker-vars
|
run: make gh-docker-vars
|
||||||
|
|
||||||
|
- name: Set latest tag
|
||||||
|
id: setlatest
|
||||||
|
if: ${{ (github.event_name == 'release' && github.event.release.target_commitish == 'master') || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true' && github.event.inputs.use_latest_tag == 'true') }}
|
||||||
|
run: echo "::set-output name=latest::,${{ steps.setvars.outputs.repo }}:latest"
|
||||||
|
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v3
|
||||||
with:
|
with:
|
||||||
push: false
|
push: ${{ github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true') }}
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
build-args: |
|
build-args: |
|
||||||
REPO=${{ steps.setvars.outputs.repo }}
|
REPO=${{ steps.setvars.outputs.repo }}
|
||||||
VERSION=${{ steps.setvars.outputs.version }}
|
VERSION=${{ steps.setvars.outputs.version }}
|
||||||
tags: ${{ steps.setvars.outputs.repo }}:${{ steps.setvars.outputs.version }}${{ steps.setvars.outputs.suffix }}
|
tags: ${{ steps.setvars.outputs.repo }}:${{ steps.setvars.outputs.version }}${{ steps.setvars.outputs.suffix }}${{ steps.setlatest.outputs.latest }}
|
||||||
|
|
||||||
build_image_wsc:
|
build_image_wsc:
|
||||||
needs: build_cli
|
needs: build_cli
|
||||||
name: Build Docker image (Windows Server Core)
|
name: Build and push docker image (Windows Server Core)
|
||||||
runs-on: windows-2022
|
runs-on: windows-2022
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
@ -112,5 +139,15 @@ jobs:
|
||||||
with:
|
with:
|
||||||
go-version: 1.18
|
go-version: 1.18
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
||||||
|
|
||||||
- name: Build Docker image
|
- name: Build Docker image
|
||||||
run: make image
|
run: make image
|
||||||
|
|
||||||
|
- 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
|
||||||
|
|
169
.github/workflows/publish_to_dockerhub.yml
vendored
169
.github/workflows/publish_to_dockerhub.yml
vendored
|
@ -1,169 +0,0 @@
|
||||||
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'
|
|
||||||
use_latest_tag:
|
|
||||||
description: 'Use `latest` tag while pushing images to DockerHub (applied to Ubuntu image only) [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.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: 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: Set up Go
|
|
||||||
uses: actions/setup-go@v2
|
|
||||||
with:
|
|
||||||
go-version: 1.18
|
|
||||||
|
|
||||||
- name: Build image
|
|
||||||
run: make image
|
|
||||||
|
|
||||||
- name: Build image with 'latest' tag
|
|
||||||
if: ${{ (github.event_name == 'release' && github.event.release.target_commitish == 'master') || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true' && github.event.inputs.use_latest_tag == 'true') }}
|
|
||||||
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') || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true' && github.event.inputs.use_latest_tag == 'true') }}
|
|
||||||
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.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: 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: Set up Go
|
|
||||||
uses: actions/setup-go@v2
|
|
||||||
with:
|
|
||||||
go-version: 1.18
|
|
||||||
|
|
||||||
- name: Build image
|
|
||||||
run: make image
|
|
||||||
|
|
||||||
- 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
|
|
Loading…
Reference in a new issue