168 lines
5.6 KiB
YAML
168 lines
5.6 KiB
YAML
name: (CD) Publish docker + s3
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
projects:
|
|
required: true
|
|
type: string
|
|
|
|
jobs:
|
|
publish-dist:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
app: ${{ fromJSON(inputs.projects) }}
|
|
name: ${{ matrix.app }}
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 10
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v3
|
|
|
|
- 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: Log in to the Container registry
|
|
uses: docker/login-action@v2
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Setup node
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version-file: '.nvmrc'
|
|
# https://stackoverflow.com/questions/61010294/how-to-cache-yarn-packages-in-github-actions
|
|
cache: yarn
|
|
|
|
- name: Cache node modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: node_modules
|
|
key: ${{ runner.os }}-cache-node-modules-${{ hashFiles('yarn.lock') }}
|
|
|
|
# https://docs.github.com/en/actions/learn-github-actions/contexts
|
|
- name: Define variables
|
|
run: |
|
|
envName=''
|
|
dockerfile="dist.Dockerfile"
|
|
if [[ "${{ github.event_name }}" = "push" ]]; then
|
|
domain="vega.rocks"
|
|
if [[ "${{ github.ref }}" =~ .*release/.* ]]; then
|
|
envName="$(echo ${{ github.ref }} | rev | cut -d '/' -f 1 | rev)"
|
|
if [[ "${{ github.ref }}" =~ .*mainnet.* ]]; then
|
|
domain="vega.community"
|
|
if [[ "${{ matrix.app }}" = "trading" ]]; then
|
|
dockerfile="ipfs.Dockerfile"
|
|
fi
|
|
fi
|
|
elif [[ "${{ github.ref }}" =~ .*develop$ ]]; then
|
|
envName="stagnet3"
|
|
fi
|
|
bucketName="${{ matrix.app }}.${envName}.${domain}"
|
|
echo BUCKET_NAME=${bucketName} >> $GITHUB_ENV
|
|
fi
|
|
nodeVersion=$(cat .nvmrc | head -n 1)
|
|
echo ENV_NAME=${envName} >> $GITHUB_ENV
|
|
echo NODE_VERSION=${nodeVersion} >> $GITHUB_ENV
|
|
echo DOCKERFILE=docker/${dockerfile} >> $GITHUB_ENV
|
|
|
|
- name: Build local dist
|
|
if: ${{ env.DOCKERFILE != 'docker/ipfs.Dockerfile' }}
|
|
run: |
|
|
flags=""
|
|
if [[ ! -z "${{ env.ENV_NAME }}" ]]; then
|
|
if [[ "${{ env.ENV_NAME }}" != "ops-vega" ]]; then
|
|
flags="--env=${{ env.ENV_NAME }}"
|
|
fi
|
|
fi
|
|
|
|
if [ "${{ matrix.app }}" = "trading" ]; then
|
|
yarn nx export trading $flags || (yarn install && yarn nx export trading $flags)
|
|
DIST_LOCATION=dist/apps/trading/exported
|
|
else
|
|
yarn nx build ${{ matrix.app }} $flags || (yarn install && yarn nx build ${{ matrix.app }} $flags)
|
|
DIST_LOCATION=dist/apps/${{ matrix.app }}
|
|
fi
|
|
mv $DIST_LOCATION dist-result
|
|
tree dist-result
|
|
|
|
- name: Build and export to local Docker
|
|
id: docker_build
|
|
uses: docker/build-push-action@v3
|
|
with:
|
|
context: .
|
|
file: ${{ env.DOCKERFILE }}
|
|
load: true
|
|
build-args: |
|
|
APP=${{ matrix.app }}
|
|
NODE_VERSION=${{ env.NODE_VERSION }}
|
|
ENV_NAME=${{ env.ENV_NAME }}
|
|
tags: |
|
|
ghcr.io/vegaprotocol/frontend/${{ matrix.app }}:local
|
|
|
|
- name: Sanity check docker image
|
|
run: |
|
|
echo "Check ipfs-hash"
|
|
if [[ "${{ env.DOCKERFILE }}" = "docker/ipfs.Dockerfile" ]]; then
|
|
docker run --rm ghcr.io/vegaprotocol/frontend/${{ matrix.app }}:local cat /ipfs-hash
|
|
fi
|
|
|
|
echo "List html directory"
|
|
docker run --rm ghcr.io/vegaprotocol/frontend/${{ matrix.app }}:local sh -c 'apk add --update tree; tree .'
|
|
|
|
- name: Copy dist to local filesystem
|
|
if: ${{ env.DOCKERFILE != 'docker/ipfs.Dockerfile' }}
|
|
run: |
|
|
docker create --name=dist ghcr.io/vegaprotocol/frontend/${{ matrix.app }}:local
|
|
docker cp dist:/usr/share/nginx/html dist
|
|
|
|
echo "check local dist files"
|
|
tree dist
|
|
|
|
- name: Publish dist as docker image
|
|
uses: docker/build-push-action@v3
|
|
if: ${{ github.event_name == 'pull_request' }}
|
|
with:
|
|
context: .
|
|
file: ${{ env.DOCKERFILE }}
|
|
push: true
|
|
build-args: |
|
|
APP=${{ matrix.app }}
|
|
NODE_VERSION=${{ env.NODE_VERSION }}
|
|
ENV_NAME=${{ env.ENV_NAME }}
|
|
tags: |
|
|
ghcr.io/vegaprotocol/frontend/${{ matrix.app }}:${{ github.event.pull_request.head.sha || github.sha }}
|
|
|
|
# bucket creation in github.com/vegaprotocol/terraform//frontend
|
|
- name: Publish dist to s3
|
|
uses: jakejarvis/s3-sync-action@master
|
|
if: ${{ github.event_name == 'push' }}
|
|
with:
|
|
args: --acl private --follow-symlinks --delete
|
|
env:
|
|
AWS_S3_BUCKET: ${{ env.BUCKET_NAME }}
|
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
AWS_REGION: 'eu-west-1'
|
|
SOURCE_DIR: 'dist'
|
|
|
|
- name: Add preview label
|
|
uses: actions-ecosystem/action-add-labels@v1
|
|
if: ${{ github.event_name == 'pull_request' }}
|
|
with:
|
|
labels: ${{ matrix.app }}-preview
|
|
number: ${{ github.event.number }}
|
|
|
|
- name: Image digest
|
|
run: echo ${{ steps.docker_build.outputs.digest }}
|