Skip to content

Add item queue, download, view (modal) and delete #399

Add item queue, download, view (modal) and delete

Add item queue, download, view (modal) and delete #399

name: test_fastapi_server
on:
push:
paths:
- fastapi_server/**
- .github/workflows/test_fastapi_server.yml
pull_request:
branches:
- master
- develop
env:
SUBDIRECTORY: fastapi_server
IMAGENAME: fastapi_server
VERSION_NUMBER: 1.1.1
jobs:
run_pre_commit_checks:
name: pre_commit_check_py${{ matrix.python-version }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
python-version: ['3.10', '3.11', '3.12']
runs-on: ${{ matrix.os }}
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
# https://earthly.dev/get-earthly
- name: Install Earthly
run: sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/latest/download/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly && /usr/local/bin/earthly bootstrap --with-autocomplete'
- name: Install
working-directory: ${{ env.SUBDIRECTORY }}
run: earthly +install-dev --verbose true --PYTHONVERSION=${{ matrix.python-version }}
- name: Run code checks
working-directory: ${{ env.SUBDIRECTORY }}
run: earthly +pre-commit --verbose true --PYTHONVERSION=${{ matrix.python-version }}
test_backend:
name: test_backend_py${{ matrix.python-version }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
python-version: ['3.10', '3.11', '3.12']
runs-on: ${{ matrix.os }}
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- name: Set up postgres and minio test instances
working-directory: ${{ env.SUBDIRECTORY }}
run: |
docker compose --profile test up -d
- name: Set up npm for prisma
uses: actions/setup-node@v4
with:
node-version: 18
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install poetry
run: pip install poetry --no-cache-dir poetry==1.8
- name: Make poetry use local .venv folder
run: poetry config virtualenvs.in-project true
- name: Install packages
working-directory: ${{ env.SUBDIRECTORY }}
run: poetry install
- name: Generate prisma types
working-directory: ${{ env.SUBDIRECTORY }}
run: poetry run prisma generate
- name: Run pytest
working-directory: ${{ env.SUBDIRECTORY }}
run: poetry run python -m pytest test --random-order
build_and_deploy_docker_image:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Build docker image
working-directory: ${{ env.SUBDIRECTORY }}
run: |
docker build -t burnysc2/${{ env.IMAGENAME }}:latest .
docker build -t burnysc2/${{ env.IMAGENAME }}:latest_dev .
docker build -t burnysc2/${{ env.IMAGENAME }}:${{ env.VERSION_NUMBER}} .
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- id: wait-for-jobs
uses: yogeshlonkar/wait-for-jobs@v0
with:
gh-token: ${{ secrets.GITHUB_TOKEN }}
jobs: |
pre_commit_check_py3.10
pre_commit_check_py3.11
pre_commit_check_py3.12
test_backend_py3.10
test_backend_py3.11
test_backend_py3.12
- name: Upload docker image (develop)
if: github.ref == 'refs/heads/develop' && github.event_name == 'push'
run: |
docker push burnysc2/${{ env.IMAGENAME }}:latest_dev
docker push burnysc2/${{ env.IMAGENAME }}:${{ env.VERSION_NUMBER}}
- name: Upload docker image (master)
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
run: docker push burnysc2/${{ env.IMAGENAME }}:latest
deploy_backend:
if: github.ref == 'refs/heads/develop'
needs: [build_and_deploy_docker_image]
strategy:
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
env:
USERNAME: fastapidev
steps:
- uses: actions/checkout@v4
- name: Update docker-compose.yml
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
port: 22
username: ${{ env.USERNAME }}
key: ${{ secrets.FASTAPISERVERDEVKEY }}
passphrase: ''
source: "fastapi_server/docker-compose.yml"
target: /home/${{ env.USERNAME }}/
strip_components: 1
# overwrite: true
- name: Update docker image on server and restart server
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
port: 22
username: ${{ env.USERNAME }}
key: ${{ secrets.FASTAPISERVERDEVKEY }}
passphrase: ''
script: |
cd /home/${{ env.USERNAME }}
docker compose --profile prod pull
docker compose --profile prod down
docker compose --profile prod up -d