PR Checks / hadolint (pull_request) Successful in 28s
PR Checks / pytest (pull_request) Successful in 7m14s
PR Checks / build-test (pull_request) Successful in 5m15s
Docker Build and Push / test (pull_request) Successful in 3m40s
Docker Build and Push / integration-test (pull_request) Successful in 3m54s
Docker Build and Push / build (pull_request) Successful in 3m4s
A release only reached perso_private/tf-depl-kubernetes on the next hourly Renovate scan, so the image bump PR could lag up to an hour behind the tag. After the image push completes, dispatch that repo's Renovate workflow through the Gitea API (workflow_dispatch is already enabled there). It authenticates with the RENOVATE_TOKEN org secret of this organisation — the same token the Renovate instance itself uses, no extra credential. The job fails loudly so a rotated token shows up instead of the trigger silently going missing.
117 lines
4.1 KiB
YAML
117 lines
4.1 KiB
YAML
name: Tag Release
|
|
|
|
on:
|
|
push:
|
|
tags: ['*']
|
|
|
|
jobs:
|
|
hadolint:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
- uses: hadolint/hadolint-action@06be81baf89a55ffd0e24b8f04a4185738dd3387 # v3.5.0
|
|
continue-on-error: true
|
|
with:
|
|
dockerfile: pkg/Dockerfile
|
|
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
with:
|
|
python-version: "3.14"
|
|
- name: Install dependencies
|
|
run: pip install -r requirements.txt pytest
|
|
- name: Run unit tests
|
|
run: pytest tests/ -v
|
|
env:
|
|
# indexer/server read env at import; unit tests need no real backend
|
|
QDRANT_URL: http://localhost:6333
|
|
COLLECTION_NAME: test
|
|
|
|
integration-test:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
|
|
- name: Cleanup old Qdrant container
|
|
run: |
|
|
docker rm -f qdrant-${{ github.run_id }} 2>/dev/null || true
|
|
|
|
- name: Start Qdrant
|
|
run: |
|
|
docker run -d --name qdrant-${{ github.run_id }} \
|
|
--network "container:$(hostname)" \
|
|
docker.io/qdrant/qdrant:latest
|
|
|
|
- name: Wait for Qdrant
|
|
run: |
|
|
for i in $(seq 1 30); do
|
|
curl -s http://localhost:6333/healthz \
|
|
&& echo "QDRANT ready" && break
|
|
echo "Waiting for Qdrant... ($i/30)"
|
|
sleep 1
|
|
done
|
|
curl -s http://localhost:6333/healthz > /dev/null
|
|
|
|
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
with:
|
|
python-version: "3.14"
|
|
- name: Install dependencies
|
|
run: pip install -r requirements.txt pytest
|
|
- name: Run integration tests
|
|
run: pytest tests/ -v -m integration
|
|
env:
|
|
QDRANT_URL: http://localhost:6333
|
|
COLLECTION_NAME: test_mcp_maildir
|
|
|
|
- name: Cleanup Qdrant
|
|
if: always()
|
|
run: docker rm -f qdrant-${{ github.run_id }} || true
|
|
|
|
build-push:
|
|
needs: [test, integration-test]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
- uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4
|
|
- uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4
|
|
with:
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
- id: meta
|
|
uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6
|
|
with:
|
|
images: jcabillot/mcp-maildir
|
|
tags: |
|
|
type=ref,event=tag
|
|
type=ref,event=tag,suffix=-latest
|
|
- uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
|
|
with:
|
|
context: .
|
|
file: pkg/Dockerfile
|
|
push: true
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
pull: true
|
|
|
|
trigger-renovate:
|
|
# The deployment repo perso_private/tf-depl-kubernetes pins this image; its
|
|
# Renovate instance only scans hourly, so this dispatch opens the image bump
|
|
# PR within minutes of the release instead of up to an hour later.
|
|
needs: [build-push]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Trigger Renovate on perso_private/tf-depl-kubernetes
|
|
# needs: build-push — Renovate reads Docker Hub, so a scan started before
|
|
# the push lands would only see the previous release.
|
|
# RENOVATE_TOKEN is the org-level secret of this organisation.
|
|
run: |
|
|
curl -sS -f -X POST \
|
|
-u "renovate:${{ secrets.RENOVATE_TOKEN }}" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{{"ref":"main"}}' \
|
|
"https://scm.cabillot.eu/api/v1/repos/perso_private/tf-depl-kubernetes/actions/workflows/renovate.yaml/dispatches"
|
|
echo "Renovate dispatched on perso_private/tf-depl-kubernetes"
|