ci #42
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 . |