Skip to content

ci

ci #42

name: ci
on:
push:
paths:
- "src/**" # trigger only on src changes
workflow_dispatch:
inputs:
image_tag:
description: "Custom image tag"
required: true
# default: "manual"
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
image:
- name: preprocessing
dir: src/preprocessing
dockerfile: src/preprocessing/Dockerfile
- name: ensemble
dir: src/ensemble
dockerfile: src/ensemble/Dockerfile
- name: inference_cpu
dir: src/inference
dockerfile: src/inference/Dockerfile.cpu
- name: ml_consumer
dir: src/ml_consumer
dockerfile: src/ml_consumer/Dockerfile
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 2 # needed for git diff between commits
- name: Check if ${{ matrix.image.dir }} changed
id: changes
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "Manual dispatch detected. Forcing build..."
echo "changed=true" >> $GITHUB_OUTPUT
exit 0
fi
echo "Checking changes in ${{ matrix.image.dir }}..."
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD)
echo "Changed files:"
echo "$CHANGED_FILES"
if echo "$CHANGED_FILES" | grep -q "^${{ matrix.image.dir }}/"; then
echo "changed=true" >> $GITHUB_OUTPUT
else
echo "changed=false" >> $GITHUB_OUTPUT
fi
- name: Login to Docker Hub
if: steps.changes.outputs.changed == 'true'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up QEMU
if: steps.changes.outputs.changed == 'true'
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
if: steps.changes.outputs.changed == 'true'
uses: docker/setup-buildx-action@v3
- name: Download inference data from Google Drive
if: matrix.image.name == 'inference_cpu' && steps.changes.outputs.changed == 'true'
run: |
pip install gdown
# Replace with your actual Google Drive folder URL or ID
gdown --folder https://drive.google.com/drive/folders/1199uWd593syj7WHTCOdEbw4SHJQXQySo --output ./inference/
docker buildx build --platform linux/amd64,linux/arm64 \
-t rdsea/${{ matrix.image.name }}:${{ github.event.inputs.image_tag || 'latest' }} \
-f ${{ matrix.image.dockerfile }} --output type=registry .
- name: Build and push ${{ matrix.image.name }} image
if: steps.changes.outputs.changed == 'true' && ( matrix.image.name == 'preprocessing' || matrix.image.name == 'ensemble' || matrix.image.name == 'ml_consumer')
run: |
docker buildx build --platform linux/amd64,linux/arm64 \
-t rdsea/${{ matrix.image.name }}:${{ github.event.inputs.image_tag || 'latest' }} \
-f ${{ matrix.image.dockerfile }} --output type=registry .