CI Overhaul (#83)

Multiple changes made to the CI workflow.

Docker images are now built for AMD64, ARM64 and ARMv7
Docker images are now built for each release and published on docker hub
Release workflow now successfully create release and upload assets
Added ARM64 to list of binaries compiled during release
This commit is contained in:
Markus Viitamäki
2020-07-22 16:33:37 +02:00
committed by GitHub
parent 670cb87ffd
commit 709fb144f1
3 changed files with 278 additions and 137 deletions
+24 -21
View File
@@ -1,4 +1,4 @@
name: Review & Build name: PR
on: on:
push: push:
branches-ignore: master branches-ignore: master
@@ -7,10 +7,10 @@ on:
- master - master
jobs: jobs:
review: review:
name: Review code name: Code Review
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- uses: actions/checkout@master - uses: actions/checkout@v2
- name: Use Node.js - name: Use Node.js
uses: actions/setup-node@v1 uses: actions/setup-node@v1
@@ -40,7 +40,7 @@ jobs:
- name: Check suspicious constructs (1) - name: Check suspicious constructs (1)
uses: "cedrickring/golang-action@1.5.2" uses: "cedrickring/golang-action@1.5.2"
with: with:
args: go get honnef.co/go/tools/cmd/staticcheck; staticcheck -checks all,-ST1003,-U1000,-ST1005 ./... # have to disable ST1003,U1000,ST1005 due to the generated code args: go get -u honnef.co/go/tools/cmd/staticcheck; staticcheck -checks all,-ST1003,-U1000,-ST1005 ./... # have to disable ST1003,U1000,ST1005 due to the generated code
- name: Check suspicious constructs (2) - name: Check suspicious constructs (2)
uses: "cedrickring/golang-action@1.5.2" uses: "cedrickring/golang-action@1.5.2"
@@ -51,27 +51,30 @@ jobs:
uses: "cedrickring/golang-action@1.5.2" uses: "cedrickring/golang-action@1.5.2"
with: with:
# TODO: remove `-exclude=G110` once https://github.com/go-bindata/go-bindata/pull/50 is merged and released # TODO: remove `-exclude=G110` once https://github.com/go-bindata/go-bindata/pull/50 is merged and released
args: go get github.com/securego/gosec/cmd/gosec; gosec -exclude=G110 ./... # https://github.com/securego/gosec args: go get -u github.com/securego/gosec/cmd/gosec; gosec -exclude=G110 ./... # https://github.com/securego/gosec
build: build:
name: Build code name: Build wg-ui
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- uses: actions/checkout@master - name: Checkout
uses: actions/checkout@v2
- name: Clean out old builds from disk - name: Setup NodeJS
run: | uses: actions/setup-node@v1
df -h / && df -h /mnt with:
sudo apt-get clean -qq node-verison: '12.x'
sudo apt-get autoclean -qq
docker rmi $(docker image ls -aq)
df -h / && df -h /mnt
- name: Install buildah - name: Setup Go
run: | uses: actions/setup-go@v2
sudo apt-get install -qq -y software-properties-common with:
sudo apt-get update -qq go-version: '1.14'
sudo apt-get -qq -y install buildah
- name: Build the Docker image - name: Build binary
run: buildah bud --format=docker --layers -f Dockerfile . run: make build
- name: Check binary
run: file bin/wireguard-ui
- name: Cleanup
run: rm -rf bin/
+100 -116
View File
@@ -1,127 +1,111 @@
name: Build & Release name: Main
on: on:
push: push:
branches: branches:
- master - master
jobs: jobs:
build: docker-build:
name: Build name: Docker
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- uses: actions/checkout@v1 -
- name: Install buildah name: Checkout
run: | uses: actions/checkout@v2
sudo apt-get install -qq -y software-properties-common -
sudo apt-get update -qq name: Prepare
sudo apt-get -qq -y install buildah id: prepare
- name: Free disk space run: |
run: | DOCKER_IMAGE=embarkstudios/wireguard-ui
df -h / && df -h /mnt DOCKER_PLATFORMS=linux/amd64,linux/arm64,linux/arm/v7
sudo apt-get clean -qq VERSION=latest
sudo apt-get autoclean -qq
docker rmi $(docker image ls -aq)
df -h / && df -h /mnt
- name: Build & push the Docker image
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: |
buildah bud --format=docker --layers -t embarkstudios/wireguard-ui:latest -t embarkstudios/wireguard-ui:$GITHUB_SHA -f Dockerfile .
buildah push --creds $DOCKER_USERNAME:$DOCKER_PASSWORD --format=v2s2 embarkstudios/wireguard-ui
release: TAGS="--tag ${DOCKER_IMAGE}:${VERSION}"
name: Release echo ::set-output name=docker_image::${DOCKER_IMAGE}
needs: build echo ::set-output name=version::${VERSION}
if: startsWith(github.ref, 'refs/tags/') echo ::set-output name=buildx_args::--platform ${DOCKER_PLATFORMS} \
--build-arg VERSION=${VERSION} \
${TAGS} --file Dockerfile .
-
name: Set up Docker Buildx
uses: crazy-max/ghaction-docker-buildx@master
-
name: Docker Buildx (build)
run: |
docker buildx build --output "type=image,push=false" ${{ steps.prepare.outputs.buildx_args }}
-
name: Docker Login
if: success()
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: |
echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin
-
name: Docker Buildx (push)
if: success()
run: |
docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }}
-
name: Docker Check Manifest
if: always()
run: |
docker run --rm mplatform/mquery ${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }}
-
name: Clear
if: always()
run: |
rm -f ${HOME}/.docker/config.json
docker-debug:
name: Debug
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- uses: actions/checkout@master -
name: Checkout
uses: actions/checkout@v2
-
name: Prepare
id: prepare
run: |
DOCKER_IMAGE=embarkstudios/wireguard-ui
DOCKER_PLATFORMS=linux/amd64,linux/arm64,linux/arm/v7
VERSION=debug
- name: Setup NodeJS TAGS="--tag ${DOCKER_IMAGE}:${VERSION}"
uses: actions/setup-node@v1 echo ::set-output name=docker_image::${DOCKER_IMAGE}
with: echo ::set-output name=version::${VERSION}
node-verison: '12.x' echo ::set-output name=buildx_args::--platform ${DOCKER_PLATFORMS} \
--build-arg VERSION=${VERSION} \
- name: npm install & build ${TAGS} --file Dockerfile.debug .
run: | -
make ui name: Set up Buildx
uses: crazy-max/ghaction-docker-buildx@master
- name: Setup Go -
uses: actions/setup-go@v2 name: Bocker Buildx (build)
with: run: |
go-version: '1.14' docker buildx build --output "type=image,push=false" ${{ steps.prepare.outputs.buildx_args }}
-
- name: Insert assets into go name: Docker Login
run: | if: success()
make assets env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
- name: Build wg-ui for Linux (AMD64) DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: | run: |
name=wg-ui echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin
tag=$(git describe --tags --abbrev=0) -
target=linux-amd64 name: Docker Buildx (push)
release_name="$name-$tag-$target" if: success()
release_tar="$release_name.tar.gz" run: |
env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o "$release_name" docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }}
tar czvf "$release_tar" "$release_name" -
echo -n "$(shasum -ba 256 "${release_tar}" | cut -d " " -f 1)" > "${release_tar}.sha256" name: Docker Check Manifest
rm "$release_name" if: always()
run: |
- name: Build wg-ui for Linux (ARMv5) docker run --rm mplatform/mquery ${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }}
run: | -
name=wg-ui name: Clear
tag=$(git describe --tags --abbrev=0) if: always()
target=linux-armv5 run: |
release_name="$name-$tag-$target" rm -f ${HOME}/.docker/config.json
release_tar="$release_name.tar.gz"
env CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=5 go build -o "$release_name"
tar czvf "$release_tar" "$release_name"
echo -n "$(shasum -ba 256 "${release_tar}" | cut -d " " -f 1)" > "${release_tar}.sha256"
rm "$release_name"
- name: Build wg-ui for Linux (ARMv6)
run: |
name=wg-ui
tag=$(git describe --tags --abbrev=0)
target=linux-armv6
release_name="$name-$tag-$target"
release_tar="$release_name.tar.gz"
env CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -o "$release_name"
tar czvf "$release_tar" "$release_name"
echo -n "$(shasum -ba 256 "${release_tar}" | cut -d " " -f 1)" > "${release_tar}.sha256"
rm "$release_name"
- name: Build wg-ui for Linux (ARMv7)
run: |
name=wg-ui
tag=$(git describe --tags --abbrev=0)
target=linux-armv7
release_name="$name-$tag-$target"
release_tar="$release_name.tar.gz"
env CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build -o "$release_name"
tar czvf "$release_tar" "$release_name"
echo -n "$(shasum -ba 256 "${release_tar}" | cut -d " " -f 1)" > "${release_tar}.sha256"
rm "$release_name"
- name: Install buildah
run: |
sudo apt-get install -qq -y software-properties-common
sudo apt-get update -qq
sudo apt-get -qq -y install buildah
- name: Build & push wg-ui to docker hub
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: |
tag=$(git describe --tags --abbrev=0)
buildah bud --format=docker --layers -t embarkstudios/wireguard-ui:$tag -t embarkstudios/wireguard-ui:$GITHUB_SHA -f Dockerfile .
buildah push --creds $DOCKER_USERNAME:$DOCKER_PASSWORD --format=v2s2 embarkstudios/wireguard-ui
- name: Publish release
uses: softprops/action-gh-release@v1
with:
draft: true
files: "wg-ui*"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+154
View File
@@ -0,0 +1,154 @@
name: Release
on:
push:
branches:
- master
tags:
- v*
jobs:
release-docker:
name: Docker
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-20.04
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Prepare
id: prepare
run: |
DOCKER_IMAGE=embarkstudios/wireguard-ui
DOCKER_PLATFORMS=linux/amd64,linux/arm64,linux/arm/v7
VERSION=${GITHUB_REF#refs/tags/v}
TAGS="--tag ${DOCKER_IMAGE}:${VERSION}"
echo ::set-output name=docker_image::${DOCKER_IMAGE}
echo ::set-output name=version::${VERSION}
echo ::set-output name=buildx_args::--platform ${DOCKER_PLATFORMS} \
--build-arg VERSION=${VERSION} \
${TAGS} --file Dockerfile .
-
name: Set up Docker Buildx
uses: crazy-max/ghaction-docker-buildx@master
-
name: Docker Buildx (build)
run: |
docker buildx build --output "type=image,push=false" ${{ steps.prepare.outputs.buildx_args }}
-
name: Docker Login
if: success()
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: |
echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin
-
name: Docker Buildx (push)
if: success()
run: |
docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }}
-
name: Docker Check Manifest
if: always()
run: |
docker run --rm mplatform/mquery ${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }}
-
name: Clear
if: always()
run: |
rm -f ${HOME}/.docker/config.json
release-binary:
name: Binary
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Setup NodeJS
uses: actions/setup-node@v1
with:
node-verison: '12.x'
- name: npm install & build
run: |
make ui
- name: Setup Go
uses: actions/setup-go@v2
with:
go-version: '1.14'
- name: Insert assets into go
run: |
make assets
- name: Build wg-ui for Linux (AMD64)
run: |
name=wg-ui
target=linux-amd64
release_name="$name-${GITHUB_REF#refs/tags/v}-$target"
release_tar="$release_name.tar.gz"
env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o "$release_name"
tar czvf "$release_tar" "$release_name"
echo -n "$(shasum -ba 256 "${release_tar}" | cut -d " " -f 1)" > "${release_tar}.sha256"
rm "$release_name"
- name: Build wg-ui for Linux (ARMv5)
run: |
name=wg-ui
target=linux-armv5
release_name="$name-${GITHUB_REF#refs/tags/v}-$target"
release_tar="$release_name.tar.gz"
env CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=5 go build -o "$release_name"
tar czvf "$release_tar" "$release_name"
echo -n "$(shasum -ba 256 "${release_tar}" | cut -d " " -f 1)" > "${release_tar}.sha256"
rm "$release_name"
- name: Build wg-ui for Linux (ARMv6)
run: |
name=wg-ui
target=linux-armv6
release_name="$name-${GITHUB_REF#refs/tags/v}-$target"
release_tar="$release_name.tar.gz"
env CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -o "$release_name"
tar czvf "$release_tar" "$release_name"
echo -n "$(shasum -ba 256 "${release_tar}" | cut -d " " -f 1)" > "${release_tar}.sha256"
rm "$release_name"
- name: Build wg-ui for Linux (ARMv7)
run: |
name=wg-ui
target=linux-armv7
release_name="$name-${GITHUB_REF#refs/tags/v}-$target"
release_tar="$release_name.tar.gz"
env CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build -o "$release_name"
tar czvf "$release_tar" "$release_name"
echo -n "$(shasum -ba 256 "${release_tar}" | cut -d " " -f 1)" > "${release_tar}.sha256"
rm "$release_name"
- name: Build wg-ui for Linux (ARM64)
run: |
name=wg-ui
target=linux-arm64
release_name="$name-${GITHUB_REF#refs/tags/v}-$target"
release_tar="$release_name.tar.gz"
env CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o "$release_name"
tar czvf "$release_tar" "$release_name"
echo -n "$(shasum -ba 256 "${release_tar}" | cut -d " " -f 1)" > "${release_tar}.sha256"
rm "$release_name"
- name: List content
run: |
ls -lah wg-ui*
- name: GitHub Release
uses: softprops/action-gh-release@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
draft: true
files: "wg-ui-*"