From df22e6d0aea232e74cfe06933cfe320c8b7c6567 Mon Sep 17 00:00:00 2001 From: Conrad Date: Mon, 19 May 2025 17:51:44 +0200 Subject: [PATCH] feat: added docker config --- .github/workflows/ci.yml | 118 +++++++++++++++++++++++++++++++++++++++ Dockerfile | 25 +++++++++ requirements.txt | 9 --- 3 files changed, 143 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 Dockerfile diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..f112f26 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,118 @@ +name: Lint, Test, Tag, Build and Deploy DEV + +on: + push: + branches: + - dev + - master + - renovate/** + paths-ignore: + - "**/.gitignore" + - "**/.vscode/**" + - "**/README.md" + - "**/CHANGELOG.md" + - "**/docs/**" + workflow_dispatch: + pull_request: + branches: + - dev + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: psf/black@stable + with: + options: "-l 100 --exclude '/.venv/|alembic/|/__init__.py'" + - uses: creyD/autoflake_action@master + with: + no_commit: True + options: --in-place --remove-all-unused-imports -r --exclude **/__init__.py,**/db/models.py, + - uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: Adjusted files for isort & autopep + + tag: + needs: lint + runs-on: ubuntu-latest + if: (github.ref_name == 'master' || github.ref_name == 'dev') && github.event_name == 'push' + permissions: + contents: write # for the tags + outputs: + version: ${{ steps.git_version.outputs.version }} + + steps: + - uses: actions/checkout@v4 + with: + fetch-tags: true + ref: ${{ github.ref }} + fetch-depth: 0 + + - name: setup git + run: | + git config --local user.email "15138480+creyD@users.noreply.github.com" + git config --local user.name "creyD" + + - name: set version format + id: version_format + run: | + if [[ ${{ github.ref_name }} == 'master' ]]; then + echo "version_format=\${major}.\${minor}.\${patch}" >> $GITHUB_OUTPUT + else + echo "version_format=\${major}.\${minor}.\${patch}rc\${increment}" >> $GITHUB_OUTPUT + fi + + - name: Git Version + uses: PaulHatch/semantic-version@v5.4.0 + id: git_version + with: + tag_prefix: "" + major_pattern: "breaking:" + minor_pattern: "feat:" + enable_prerelease_mode: false + version_format: ${{ steps.version_format.outputs.version_format }} + + - name: Create & Push Tag + run: | + git tag ${{ steps.git_version.outputs.version }} + git push origin ${{ steps.git_version.outputs.version }} + + build_and_push: + runs-on: ubuntu-latest + permissions: write-all + if: github.event_name == 'push' + needs: tag + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-${{ github.ref_name }} + tags: latest + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: ./Dockerfile + build-args: | + VERSION=${{ needs.tag.outputs.version }}-${{ github.ref_name }} + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..73710f1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM python:3.13-slim +ARG VERSION=unkown + +WORKDIR /app +COPY . . + +# Python setup +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 +ENV VERSION=${VERSION} + +# Install dependencies +RUN pip install --no-cache-dir --upgrade -r requirements.txt +RUN pip install 'uvicorn[standard]' + +ENV ENV=DEV + +EXPOSE 8000 +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] + +# Install curl +RUN apt-get update && apt-get install -y curl && apt-get clean + +HEALTHCHECK --interval=30s --timeout=10s --retries=5 \ + CMD curl --fail http://localhost:8000/openapi.json || exit 1 diff --git a/requirements.txt b/requirements.txt index 703aa27..9f7f509 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,12 +13,3 @@ sniffio==1.3.1 # FastAPI starlette==0.46.2 # FastAPI typing-extensions==4.13.2 # FastAPI typing-inspection==0.4.0 # FastAPI - -click==8.1.7 # uvicorn server -httptools==0.6.4 # uvicorn server -pyyaml==6.0.2 # uvicorn server -uvicorn==0.32.0 # uvicorn server -uvloop==0.21.0 # uvicorn server -watchfiles==0.24.0 # uvicorn server -websockets==14.1 # uvicorn server -gunicorn==23.0.0 # uvicorn server