name: Alembic Upgrade Validation
on:
pull_request:
branches: ["main"]
paths:
- "mcpgateway/alembic/**"
- "scripts/ci/run_upgrade_validation.sh"
- ".github/workflows/alembic-upgrade-validation.yml"
push:
branches: ["main"]
paths:
- "mcpgateway/alembic/**"
- "scripts/ci/run_upgrade_validation.sh"
- ".github/workflows/alembic-upgrade-validation.yml"
workflow_dispatch:
inputs:
base_image:
description: "Base release image used for upgrade checks"
required: false
default: "ghcr.io/jrmatherly/mcp-context-forge:latest"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
actions: read
jobs:
upgrade-validation:
name: SQLite + PostgreSQL Fresh/Upgrade
runs-on: ubuntu-latest
timeout-minutes: 50
env:
TARGET_IMAGE: jrmatherly/mcp-context-forge:upgrade-ci-${{ github.sha }}
ARTIFACT_DIR: artifacts/upgrade-validation
BASE_IMAGE: ${{ github.event.inputs.base_image || format('ghcr.io/{0}:latest', github.repository) }}
steps:
- name: Checkout code
uses: actions/checkout@v6.0.2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.12.0
- name: Build candidate image
uses: docker/build-push-action@v6.19.2
with:
context: .
file: Containerfile.lite
platforms: linux/amd64
load: true
push: false
tags: ${{ env.TARGET_IMAGE }}
cache-from: type=gha,scope=alembic-upgrade-validation
cache-to: type=gha,mode=max,scope=alembic-upgrade-validation
- name: Run upgrade validation
run: |
bash scripts/ci/run_upgrade_validation.sh
- name: Upload upgrade validation logs
if: always()
uses: actions/upload-artifact@v6.0.0
with:
name: alembic-upgrade-validation-logs
path: artifacts/upgrade-validation
if-no-files-found: ignore
retention-days: 14