127 lines
4.1 KiB
YAML
127 lines
4.1 KiB
YAML
name: Publish docker containers
|
|
|
|
'on':
|
|
push:
|
|
tags:
|
|
- 'v[0-9]+.[0-9]+.[0-9]+'
|
|
- 'v[0-9]+.[0-9]+.[0-9]+-*'
|
|
|
|
workflow_dispatch:
|
|
inputs:
|
|
publish:
|
|
description: 'Publish tag to Docker Hub & GitHub Registry'
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
tag:
|
|
description: 'Git Tag to build and publish'
|
|
required: false
|
|
type: string
|
|
default: ''
|
|
apps:
|
|
description: 'Applications to build and publish'
|
|
required: false
|
|
type: choice
|
|
options:
|
|
- '["explorer", "token", "trading"]'
|
|
- '["explorer"]'
|
|
- '["token"]'
|
|
- '["trading"]'
|
|
archs:
|
|
description: 'Architecture to build and publish'
|
|
required: false
|
|
type: choice
|
|
options:
|
|
- linux/amd64, linux/arm64
|
|
- linux/amd64
|
|
- linux/arm64
|
|
|
|
jobs:
|
|
master:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
app: ${{ fromJson(inputs.apps || '["explorer", "token", "trading"]') }}
|
|
name: Build the ${{ matrix.app }} image
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v3
|
|
with:
|
|
ref: ${{ inputs.tag }}
|
|
|
|
- name: Set up QEMU
|
|
id: quemu
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Available platforms
|
|
run: echo ${{ steps.qemu.outputs.platforms }}
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Login to DockerHub
|
|
if: ${{ inputs.publish || startsWith(github.ref, 'refs/tags/') }}
|
|
uses: docker/login-action@v2
|
|
with:
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
|
|
- name: Determine Docker Image tag
|
|
id: tags
|
|
run: |
|
|
hash=$(git rev-parse HEAD|cut -b1-8)
|
|
versionTag=${{ inputs.tag || startsWith(github.ref, 'refs/tags/') && github.ref_name || '${hash}' }}
|
|
echo ::set-output name=version::${versionTag}
|
|
echo ::set-output name=npmVersion::$(cat dockerfiles/${{ matrix.app =='trading' && 'Dockerfile.next' || 'Dockerfile.cra' }} | grep FROM | head -n 1 | awk '{print $2}' | cut -d ':' -f 2 | cut -d '-' -f 1 )
|
|
|
|
- name: Print config
|
|
run: |
|
|
git rev-parse --verify HEAD
|
|
git status
|
|
echo "inputs.tag=${{ inputs.tag }}"
|
|
echo "inputs.publish=${{ inputs.publish }}"
|
|
echo "inputs.apps=${{ inputs.apps }}"
|
|
echo "inputs.archs=${{ inputs.archs }}"
|
|
echo "steps.tags.outputs.version=${{ steps.tags.outputs.version }}"
|
|
|
|
- uses: actions/setup-node@v3
|
|
with:
|
|
node-version: ${{ steps.tags.outputs.npmVersion }}
|
|
|
|
- name: Build frontend dists
|
|
run: |
|
|
yarn --verbose --pure-lockfile
|
|
yarn nx ${{ matrix.app =='trading' && 'export' || 'build' }} ${{ matrix.app }} --pure-lockfile
|
|
|
|
- name: Build and export to local Docker
|
|
uses: docker/build-push-action@v3
|
|
with:
|
|
context: .
|
|
push: false
|
|
file: dockerfiles/${{ matrix.app =='trading' && 'Dockerfile.next' || 'Dockerfile.cra' }}.dist
|
|
build-args: APP=${{ matrix.app }}
|
|
load: true
|
|
tags: vegaprotocol/${{ matrix.app }}:local
|
|
|
|
- name: Sanity check docker image
|
|
run: |
|
|
docker run --rm vegaprotocol/${{ matrix.app }}:local cat .env
|
|
docker run --rm vegaprotocol/${{ matrix.app }}:local ls -lah
|
|
|
|
- name: Build and push to DockerHub
|
|
id: docker_build
|
|
uses: docker/build-push-action@v3
|
|
with:
|
|
context: .
|
|
push: ${{ inputs.publish || startsWith(github.ref, 'refs/tags/') }}
|
|
file: dockerfiles/${{ matrix.app =='trading' && 'Dockerfile.next' || 'Dockerfile.cra' }}.dist
|
|
build-args: APP=${{ matrix.app }}
|
|
platforms: ${{ inputs.archs || 'linux/amd64, linux/arm64' }}
|
|
tags: |
|
|
vegaprotocol/${{ matrix.app }}:latest
|
|
vegaprotocol/${{ matrix.app }}:${{ steps.tags.outputs.version }}
|
|
|
|
- name: Image digest
|
|
run: echo ${{ steps.docker_build.outputs.digest }}
|