Skip to content

[ci] Quality of life updates #879

[ci] Quality of life updates

[ci] Quality of life updates #879

name: SKEMA TR docker
on:
push:
branches: [main]
tags:
- "**"
pull_request:
branches: [main]
release:
types: [published]
# builds and publishes docker images for the default branch.
# images are tagged with short commit hash, latest, and any tags.
jobs:
# Determine value for app version
app_version:
name: "Determine app version"
runs-on: ubuntu-latest
outputs:
app_version: ${{ steps.app_version.outputs.app_version }}
commit: ${{ steps.app_version.outputs.commit }}
steps:
- name: Set APP_VERSION output
id: app_version
run: |
echo "app_version=${{github.ref_name}}"
if [ -z "${app_version}" ]; then
app_version=${{github.sha}}
echo "app_version=${app_version}"
fi
echo "app_version=$app_version" >> "$GITHUB_OUTPUT"
echo "commit=${{github.sha}}" >> "$GITHUB_OUTPUT"
echo "app_version=$app_version"
echo "commit=${{github.sha}}"
text_reading:
name: "docker image for text reading component"
needs: [app_version]
runs-on: ubuntu-latest
steps:
# Setup docker
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
# for multi-arch builds (ex. ARM 64)
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-flags: --debug
driver: docker
# - name: Prepare buildx builder
# run: |
# docker buildx create --use --name "multiarch-builder" --platform linux/amd64,linux/arm64 --driver "docker-container"
- name: Inspect builder
run: |
echo "Name: ${{ steps.buildx.outputs.name }}"
echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}"
echo "Status: ${{ steps.buildx.outputs.status }}"
echo "Flags: ${{ steps.buildx.outputs.flags }}"
echo "Platforms: ${{ steps.buildx.outputs.platforms }}"
# Checkout code
- name: Checkout code
uses: actions/checkout@v4
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.LUM_ASKEM_DOCKERHUB_USERNAME }}
password: ${{ secrets.LUM_ASKEM_DOCKERHUB_TOKEN }}
########################################
# lumai/askem-skema-text-reading
########################################
- name: Setup JDK (w/ SBT)
uses: actions/setup-java@v3
with:
distribution: temurin
java-version: 11
# Unfortunately, this will immediately
# blow through the GH Actions cache...
#cache: 'sbt'
# The TR image is huge.
# We need to free up every last bit of space we can.
- name: Free disk space (aggressively)
# https://github.com/jlumbroso/free-disk-space
uses: jlumbroso/[email protected]
with:
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: true
# NOTE: this might remove things we actually need.
tool-cache: true
- name: Generate Dockerfile (TR)
working-directory: ./skema/text_reading/scala
env:
#APP_VERSION: ${{needs.app_version.outputs.app_version}}
APP_VERSION: ${{needs.app_version.outputs.commit}}
run: |
sbt "webapp/docker:stage"
- name: Tags for image (TR)
id: tags
# see https://github.com/docker/metadata-action
uses: docker/metadata-action@v4
with:
images: lumai/askem-skema-text-reading
tags: |
# latest
type=raw,value=latest
# version
type=semver,pattern={{version}}
# other tags
type=ref,event=tag
# short commit hash
type=sha
- name: Build and push image (TR)
# see https://github.com/docker/build-push-action
uses: docker/build-push-action@v5
# our AWS deployment doesn't rely on this image being published
with:
context: ./skema/text_reading/scala/webapp/target/docker/stage
# NOTE: dynet throws an UnsatisfiedLinkError on ARM64 even with a platform compatible JRE.. :(
platforms: linux/amd64
provenance: false
no-cache: true
pull: true
push: ${{ github.event_name != 'pull_request' }}
# references `tags` step in steps for current job
tags: ${{ steps.tags.outputs.tags }}