Skip to content

Build and push to docker hub #5

Build and push to docker hub

Build and push to docker hub #5

name: CI
on:
push:
branches: [ "**" ]
pull_request:
branches: [ "**" ]
jobs:
test:
strategy:
fail-fast: false
matrix:
python-version: ["3.11", "3.12", "3.13"]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e .
pip install pytest
- name: Run tests
run: pytest -q
docker:
runs-on: ubuntu-latest
needs: test
if: github.event_name == 'pull_request' || github.ref == 'refs/heads/main' || (github.event_name == 'release' && github.event.action == 'published')
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build test stage (no push) for PR
if: github.event_name == 'pull_request'
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/Dockerfile
target: test
push: false
- name: Login to Docker Hub
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Run tests by building test stage before push
if: github.event_name != 'pull_request'
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/Dockerfile
target: test
push: false
- name: Build and push :latest on push to main
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/Dockerfile
target: runtime
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/alphajudge:latest
- name: Build and push :<tag> on release
if: github.event_name == 'release' && github.event.action == 'published'
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/Dockerfile
target: runtime
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/alphajudge:${{ github.event.release.tag_name }}