ci: release MCP binaries + path-gate heavyweight jobs

- build-cli.sh also builds containr-mcp-<os>-<arch> per platform; the
  existing containr-* asset glob in the release job picks them up
- paths-filter 'changes' job gates backend/frontend/smoke/docker on PRs —
  docs-only PRs skip ~10min of compute; skipped checks satisfy protection
- docker job requires success() explicitly (skipped parents would pass
  '!= failure'); release requires docker success to never release stale images

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
Tomas DvorakandDevin committed 2026-10-09 01:07:18 +02:00
1 parent b3da014d26
commit 57f8b4f56e
2 files changed
+39 -4

No files matched your search

+29 -1
View File
@@ -17,6 +17,27 @@ permissions:
contents: read contents: read
jobs: jobs:
# Cheap gate so docs-only/roadmap PRs skip the heavyweight jobs. Skipped
# required checks still satisfy branch protection ("skipped" = success).
changes:
name: Changed paths
runs-on: ubuntu-latest
outputs:
code: ${{ steps.filter.outputs.code }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
code:
- 'app/**'
- 'infra/**'
- 'docker-compose.yml'
- 'install.sh'
- '.github/workflows/**'
- 'docs/api/**'
infra: infra:
name: Infra (Compose + Scripts) name: Infra (Compose + Scripts)
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -48,6 +69,8 @@ jobs:
backend: backend:
name: Backend (Go) name: Backend (Go)
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.code == 'true' || github.event_name != 'pull_request'
defaults: defaults:
run: run:
working-directory: app/backend working-directory: app/backend
@@ -70,6 +93,8 @@ jobs:
frontend: frontend:
name: Frontend (React) name: Frontend (React)
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.code == 'true' || github.event_name != 'pull_request'
defaults: defaults:
run: run:
working-directory: app/frontend working-directory: app/frontend
@@ -100,6 +125,8 @@ jobs:
name: Compose boot smoke name: Compose boot smoke
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 20 timeout-minutes: 20
needs: changes
if: needs.changes.outputs.code == 'true' || github.event_name != 'pull_request'
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -137,6 +164,7 @@ jobs:
name: Build & publish images name: Build & publish images
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [backend, frontend, smoke] needs: [backend, frontend, smoke]
if: needs.backend.result == 'success' && needs.frontend.result == 'success' && needs.smoke.result == 'success'
permissions: permissions:
contents: read contents: read
packages: write packages: write
@@ -227,7 +255,7 @@ jobs:
name: Release name: Release
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [docker] needs: [docker]
if: github.event_name != 'pull_request' if: github.event_name != 'pull_request' && needs.docker.result == 'success'
permissions: permissions:
contents: write contents: write
packages: write packages: write
+10 -3
View File
@@ -21,18 +21,25 @@ for platform in $PLATFORMS; do
GOARCH=${platform#*/} GOARCH=${platform#*/}
OUTPUT_NAME="containr-${GOOS}-${GOARCH}" OUTPUT_NAME="containr-${GOOS}-${GOARCH}"
MCP_NAME="containr-mcp-${GOOS}-${GOARCH}"
if [ "$GOOS" = "windows" ]; then if [ "$GOOS" = "windows" ]; then
OUTPUT_NAME="${OUTPUT_NAME}.exe" OUTPUT_NAME="${OUTPUT_NAME}.exe"
MCP_NAME="${MCP_NAME}.exe"
fi fi
echo "📦 Building for ${platform}..." echo "📦 Building CLI for ${platform}..."
GOOS=$GOOS GOARCH=$GOARCH go build \ GOOS=$GOOS GOARCH=$GOARCH go build \
-ldflags "$LDFLAGS" \ -ldflags "$LDFLAGS" \
-o "bin/${OUTPUT_NAME}" \ -o "bin/${OUTPUT_NAME}" \
./cmd/cli ./cmd/cli
echo "✅ Built bin/${OUTPUT_NAME}" echo "📦 Building MCP server for ${platform}..."
GOOS=$GOOS GOARCH=$GOARCH go build \
-ldflags "$LDFLAGS" \
-o "bin/${MCP_NAME}" \
./cmd/mcp
echo "✅ Built bin/${OUTPUT_NAME} + bin/${MCP_NAME}"
done done
echo "🎉 CLI build complete!" echo "🎉 CLI build complete!"