Files
kompas3d-mcp/.gitea/workflows/ci.yml
T

65 lines
3.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: ci
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
# Плагин: server.lock.json — то, что скачивает лаунчер; plugin.json — то, что видит
# Claude Code как версию установки. Обе должны совпадать между собой, иначе релизный
# workflow отдал бы плагин с пином, который сам себе противоречит.
- name: инструменты для проверки манифеста плагина
run: apt-get update -qq && apt-get install -y -qq jq
- name: согласованность plugin.json и server.lock.json
run: |
MANIFEST_VERSION=$(jq -r '.version' plugin/.claude-plugin/plugin.json)
LOCK_VERSION=$(jq -r '.version' plugin/server.lock.json)
LOCK_SHA256=$(jq -r '.sha256' plugin/server.lock.json)
if [ "$MANIFEST_VERSION" != "$LOCK_VERSION" ]; then
echo "версия plugin.json ($MANIFEST_VERSION) не совпадает с server.lock.json ($LOCK_VERSION)"
exit 1
fi
# 0.0.0 — состояние «релиз ещё не публиковался»: url/sha256 намеренно пустые
# (см. tests/Kompas.Mcp.Tests/PluginManifestTests.cs, Lock_WhenReleased_HasUrlAndSha256).
if [ "$LOCK_VERSION" != "0.0.0" ]; then
if [ -z "$LOCK_SHA256" ] || [ "$LOCK_SHA256" = "null" ]; then
echo "server.lock.json: версия $LOCK_VERSION опубликована, но sha256 пуст"
exit 1
fi
if ! echo "$LOCK_SHA256" | grep -Eq '^[0-9a-f]{64}$'; then
echo "server.lock.json: sha256 '$LOCK_SHA256' не похож на 64-символьный hex"
exit 1
fi
fi
echo "ok: plugin.json/server.lock.json согласованы (version=$LOCK_VERSION)"
# Проекты указаны явно, а не через решение: формат KompasMcp.slnx понимает только
# SDK 9+, а здесь стоит 8.0.x — на решении сборка падает с MSB1003.
# EnableWindowsTargeting: проект таргетит net8.0-windows, сборка идёт на Linux.
- name: build
run: dotnet build src/Kompas.Mcp.Host/Kompas.Mcp.Host.csproj -c Release -p:EnableWindowsTargeting=true
# Что здесь НЕ выполняется и почему:
# Category=Integration — нужен запущенный КОМПАС с GUI и лицензией;
# Requires=Windows — КОМПАС не нужен, но нужна Windows (STA-апартамент
# в KompasDispatcher: на Linux SetApartmentState бросает
# PlatformNotSupportedException).
# Оба класса гоняются на машине разработчика, см. CLAUDE.md.
- name: unit tests
run: dotnet test tests/Kompas.Mcp.Tests/Kompas.Mcp.Tests.csproj --filter "Category=Unit&Requires!=Windows" -c Release -p:EnableWindowsTargeting=true