145 lines
4.6 KiB
YAML
145 lines
4.6 KiB
YAML
---
|
|
|
|
name: Build and Deploy CI
|
|
|
|
on:
|
|
push:
|
|
branches: [ 'dev-**', 'pr-**', staging, master ]
|
|
tags: [ '**' ]
|
|
pull_request:
|
|
branches: [ staging, master ]
|
|
schedule:
|
|
# At 02:30 on Saturday
|
|
- cron: '30 2 * * 6'
|
|
|
|
jobs:
|
|
|
|
build_docker:
|
|
|
|
name: Build Docker Image
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
flavour: ["debian", "arch"]
|
|
|
|
steps:
|
|
# Fetch shallow git repository
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
# Use QEMU to build
|
|
- name: Set up QEMU
|
|
if: success()
|
|
id: qemu
|
|
uses: docker/setup-qemu-action@v1
|
|
|
|
# Use docker buildx to build the docker image
|
|
- name: Build the Docker image
|
|
uses: docker/setup-buildx-action@v1
|
|
if: success()
|
|
id: buildx
|
|
with:
|
|
version: latest
|
|
|
|
# Generate 'prepare' build arguments to be retrieved later on
|
|
- name: Prepare
|
|
if: success()
|
|
id: prepare
|
|
run: |
|
|
FLAVOUR=${{ matrix.flavour }}
|
|
echo "FLAVOUR='${FLAVOUR}'"
|
|
echo "GITHUB_REF='${GITHUB_REF}'"
|
|
echo "GITHUB_REPOSITORY='${GITHUB_REPOSITORY}'"
|
|
DOCKER_IMAGE=docker.io/josh5/steam-headless
|
|
VERSION_TAG=${GITHUB_REF#refs/*/}
|
|
DOCKER_TAGS=""
|
|
if [[ ${VERSION_TAG%/merge} == 'master' ]]; then
|
|
if [[ ${FLAVOUR} == 'debian' ]]; then
|
|
DOCKER_TAGS="${DOCKER_TAGS}${DOCKER_IMAGE}:latest,"
|
|
fi
|
|
DOCKER_TAGS="${DOCKER_TAGS}${DOCKER_IMAGE}:${FLAVOUR},"
|
|
elif [[ ${VERSION_TAG%/merge} == 'staging' ]]; then
|
|
DOCKER_TAGS="${DOCKER_TAGS}${DOCKER_IMAGE}:${FLAVOUR}-staging,"
|
|
elif [[ ${VERSION_TAG%/merge} =~ "dev-"* ]]; then
|
|
DOCKER_TAGS="${DOCKER_TAGS}${DOCKER_IMAGE}:${FLAVOUR}-${VERSION_TAG%/merge},"
|
|
fi
|
|
if [[ ${GITHUB_REF} == refs/tags/* ]]; then
|
|
VERSION=${GITHUB_REF#refs/tags/}
|
|
if [[ ${VERSION} =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}[-\w]*$ ]]; then
|
|
DOCKER_TAGS="${DOCKER_TAGS}${DOCKER_IMAGE}:${FLAVOUR}-${VERSION},"
|
|
if [[ ${FLAVOUR} == 'debian' ]]; then
|
|
DOCKER_TAGS="${DOCKER_TAGS}${DOCKER_IMAGE}:latest,"
|
|
fi
|
|
fi
|
|
fi
|
|
echo "DOCKER_TAGS='${DOCKER_TAGS}'"
|
|
|
|
echo "Build: [$(date +"%F %T")] [${GITHUB_REF_NAME}] [${GITHUB_SHA}] [${FLAVOUR}]" > ./overlay/version.txt
|
|
|
|
DOCKER_PUSH="true"
|
|
if [[ ${DOCKER_IMAGE} != 'docker.io/josh5/steam-headless' ]]; then
|
|
DOCKER_PUSH="false"
|
|
fi
|
|
if [[ ${VERSION_TAG%/merge} =~ "pr-"* ]]; then
|
|
DOCKER_PUSH="false"
|
|
fi
|
|
if [[ ${VERSION_TAG%/merge} =~ ^[0-9]+$ ]]; then
|
|
DOCKER_PUSH="false"
|
|
fi
|
|
if [[ "X${DOCKER_TAGS}" == "X" ]]; then
|
|
DOCKER_PUSH="false"
|
|
fi
|
|
echo "DOCKER_PUSH='${DOCKER_PUSH}'"
|
|
cat ./overlay/version.txt
|
|
|
|
echo "docker_image=${DOCKER_IMAGE}" >> $GITHUB_OUTPUT
|
|
echo "docker_tags=$(echo ${DOCKER_TAGS} | sed 's/,$//')" >> $GITHUB_OUTPUT
|
|
echo "docker_platforms=linux/amd64" >> $GITHUB_OUTPUT
|
|
echo "docker_push=${DOCKER_PUSH}" >> $GITHUB_OUTPUT
|
|
|
|
# Cache the build
|
|
- name: Cache Docker layers
|
|
uses: actions/cache@v2
|
|
id: cache
|
|
with:
|
|
path: /tmp/.buildx-cache
|
|
key: ${{ runner.os }}-buildx-${{ matrix.flavour }}-${{ github.sha }}
|
|
restore-keys: |
|
|
${{ runner.os }}-buildx-${{ matrix.flavour }}-
|
|
|
|
# Login to Docker Hub
|
|
- name: Login to Docker Hub
|
|
if: success() && (startsWith(github.ref, 'refs/heads/') || startsWith(github.ref, 'refs/tags/'))
|
|
uses: docker/login-action@v1
|
|
with:
|
|
username: ${{ secrets.DOCKER_USERNAME }}
|
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
|
|
# Run docker build and push
|
|
- name: Docker Build and Push
|
|
if: success()
|
|
uses: docker/build-push-action@v2
|
|
with:
|
|
context: .
|
|
file: Dockerfile.${{ matrix.flavour }}
|
|
pull: true
|
|
platforms: ${{ steps.prepare.outputs.docker_platforms }}
|
|
push: ${{ steps.prepare.outputs.docker_push }}
|
|
tags: |
|
|
${{ steps.prepare.outputs.docker_tags }}
|
|
cache-from: type=local,src=/tmp/.buildx-cache
|
|
cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new
|
|
|
|
# Keep only latest cache
|
|
# https://github.com/docker/build-push-action/issues/252
|
|
# https://github.com/moby/buildkit/issues/1896
|
|
- name: Move cache
|
|
if: always()
|
|
run: |
|
|
if [[ -e /tmp/.buildx-cache-new ]]; then
|
|
echo "Cleaning up old cache..."
|
|
rm -rf /tmp/.buildx-cache
|
|
mv -v /tmp/.buildx-cache-new /tmp/.buildx-cache
|
|
fi
|