Add Dockerfile and CI workflow
This commit is contained in:
commit
62d588dee7
61
.github/workflows/docker-ci.yml
vendored
Normal file
61
.github/workflows/docker-ci.yml
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
cache: 'pip'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip setuptools
|
||||
pip install poetry
|
||||
poetry config virtualenvs.create false
|
||||
if [ -f poetry.lock ]; then poetry install --no-dev; else pip install .; fi
|
||||
pip install flake8 mypy
|
||||
|
||||
- name: Lint with flake8
|
||||
run: flake8 .
|
||||
|
||||
- name: Static analysis with mypy
|
||||
run: mypy .
|
||||
|
||||
- name: Run tests
|
||||
run: |
|
||||
pip install pytest
|
||||
pytest -q
|
||||
|
||||
- name: Log in to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build Docker image
|
||||
run: |
|
||||
IMAGE_TAG=ghcr.io/${{ github.repository_owner }}/${{ github.repository_name }}:$(git rev-parse --short HEAD)
|
||||
docker build -t $IMAGE_TAG .
|
||||
|
||||
- name: Push Docker image
|
||||
if: success()
|
||||
run: |
|
||||
IMAGE_TAG=ghcr.io/${{ github.repository_owner }}/${{ github.repository_name }}:$(git rev-parse --short HEAD)
|
||||
docker push $IMAGE_TAG
|
||||
39
Dockerfile
Normal file
39
Dockerfile
Normal file
@ -0,0 +1,39 @@
|
||||
# Dockerfile for MCP server
|
||||
# Uses Python 3.12 slim image, installs the application and its dependencies
|
||||
|
||||
FROM python:3.12-slim AS base
|
||||
|
||||
# Install system dependencies (if any)
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
build-essential \
|
||||
gcc \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create a non-root user
|
||||
ARG USERNAME=appuser
|
||||
ARG UID=1000
|
||||
RUN adduser --uid ${UID} --disabled-password --gecos "" ${USERNAME}
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy only requirements first for caching layers
|
||||
COPY pyproject.toml poetry.lock* /app/ || true
|
||||
|
||||
# Install poetry (or pip) and dependencies
|
||||
RUN pip install --upgrade pip setuptools && \
|
||||
pip install poetry && \
|
||||
poetry config virtualenvs.create false && \
|
||||
if [ -f poetry.lock ]; then poetry install --no-dev; else pip install .; fi
|
||||
|
||||
# Copy the rest of the source code
|
||||
COPY . /app
|
||||
|
||||
# Switch to non-root user
|
||||
USER ${USERNAME}
|
||||
|
||||
# Expose the service port (adjust if needed)
|
||||
EXPOSE 8000
|
||||
|
||||
# Default command – run the FastAPI server (adjust entrypoint as needed)
|
||||
CMD ["uvicorn", "mcp_server.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||
Loading…
x
Reference in New Issue
Block a user