This commit is contained in:
2025-09-27 03:33:29 +00:00
parent cda334a45d
commit 78a7acbe3e
6 changed files with 188 additions and 0 deletions

31
.github/workflows/ci.yaml vendored Normal file
View File

@@ -0,0 +1,31 @@
name: CI
on:
push:
branches:
- main
jobs:
ci:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Install uv
uses: astral-sh/setup-uv@v6.5.0
with:
enable-cache: true
- name: Install the project
run: uv sync --locked --all-extras --dev
- name: Run formatter
run: uv run ruff format --check
- name: Run linter
run: uv run ruff check
- name: Run tests with coverage
run: uv run pytest

64
.github/workflows/deploy.yaml vendored Normal file
View File

@@ -0,0 +1,64 @@
name: Deploy
on:
push:
tags:
- 'v*'
jobs:
ci:
uses: ./.github/workflows/ci.yaml
push:
needs: ci
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: gitea.ia-innovacion.work
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: gitea.ia-innovacion.work/innovacion/searchbox-mcp
tags: |
type=ref,event=branch
type=ref,event=pr
type=sha,prefix={{branch}}-
type=raw,value=latest,enable={{is_default_branch}}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
# deploy:
# needs: release
# runs-on: ubuntu-latest
# steps:
# - name: Checkout code
# uses: actions/checkout@v4
# - name: Install kubectl
# uses: azure/setup-kubectl@v3
# - name: Deploy to cluster
# env:
# KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG_CONTENT }}
# run: |
# echo "$KUBECONFIG_CONTENT" > kubeconfig
# export KUBECONFIG=$PWD/kubeconfig
# kubectl apply -f .k8s/
# kubectl rollout restart deployment/python-demo
# kubectl rollout status deployment/python-demo

36
.github/workflows/release.yaml vendored Normal file
View File

@@ -0,0 +1,36 @@
name: Release
on:
push:
tags:
- 'v*'
jobs:
ci:
uses: ./.github/workflows/ci.yaml
release:
needs: ci
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Install uv
uses: astral-sh/setup-uv@v6.5.0
with:
enable-cache: true
- name: Install the project
run: uv sync --locked
- name: Build package
run: uv build
- name: Publish to registry
env:
UV_PUBLISH_URL: ${{ vars.UV_PUBLISH_URL }}
UV_PUBLISH_USERNAME: ${{ vars.UV_PUBLISH_USERNAME }}
UV_PUBLISH_PASSWORD: ${{ secrets.UV_PUBLISH_PASSWORD }}
run: uv publish

24
.k8s/deployment.yaml Normal file
View File

@@ -0,0 +1,24 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: searchbox-mcp
namespace: apps
labels:
app: searchbox-mcp
spec:
replicas: 1
selector:
matchLabels:
app: searchbox-mcp
template:
metadata:
labels:
app: searchbox-mcp
spec:
imagePullSecrets:
- name: gitea-registry-cred
containers:
- name: searchbox-mcp
image: gitea.ia-innovacion.work/innovacion/searchbox-mcp:latest
ports:
- containerPort: 8000

29
Dockerfile Normal file
View File

@@ -0,0 +1,29 @@
FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim AS builder
ENV UV_COMPILE_BYTECODE=1 \
UV_LINK_MODE=copy \
UV_PYTHON_DOWNLOADS=0
WORKDIR /app
RUN --mount=type=cache,target=/root/.cache/uv \
--mount=type=bind,source=uv.lock,target=uv.lock \
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
uv sync --locked --no-install-project --no-dev
COPY . /app
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --extra mcp --locked --no-dev
FROM python:3.13-slim-bookworm AS runtime
COPY --from=builder --chown=app:app /app /app
RUN echo '[tool.vault-settings]\nsecret="qdrant-mcp"' > pyproject.toml
ENV PATH="/app/.venv/bin:$PATH"
EXPOSE 8000
CMD [ "searchbox-mcp" ]

View File

@@ -73,3 +73,7 @@ precision = 2
[tool.coverage.html] [tool.coverage.html]
directory = "htmlcov" directory = "htmlcov"
[[tool.uv.index]]
name = "innovacion"
url = "https://innovacion:9afcfaab597db77f75ce5f08f7fca8ef69800b10@gitea.ia-innovacion.work/api/packages/innovacion/pypi/simple"