Files
2026-08-29 13:17:59 +02:00

106 lines
3.6 KiB
YAML

# Pipeline repozytorium wzorcowego.
#
# Dwa niezależne przepływy:
# 1. jakość samego silnika (lint, testy, przebieg offline na fixture, obraz runnera),
# 2. demonstracja użycia: te same joby, które repozytoria docelowe dostają przez include
# pliku .gitlab/ci/agentic-codemod.template.yml.
stages: [test, build, prepare, plan, apply]
# Joby instalują zależności wprost przez pip, a nie przez Taskfile: w obrazie
# python:3.12-slim nie ma PEP 668 ani systemowego interpretera do ochrony, a runner
# nie musi wtedy mieć go-task. Lokalnym odpowiednikiem tych trzech jobów jest `task ci`.
default:
image: python:3.12-slim
interruptible: true
before_script:
- apt-get update -qq && apt-get install -y -qq --no-install-recommends git ripgrep >/dev/null
- pip install -q -e ".[dev]"
# Formularz uruchomienia ręcznego (Build > Pipelines > Run pipeline).
# Zmienne z opisem i listą wartości renderują się jako pola formularza -
# to jest "wsad" dla sieci agentowej podawany przez człowieka.
variables:
CODEMOD_PACKAGE:
value: ""
description: "Pakiet do podniesienia, np. acme-sdk (puste = tylko testy silnika)"
CODEMOD_TO_VERSION:
value: ""
description: "Wersja docelowa, np. 2.1.0"
CODEMOD_MODULE:
value: ""
description: "Nazwa modułu importu, jeśli inna niż nazwa pakietu"
CODEMOD_CONSTRAINTS:
value: ""
description: "Dodatkowe ograniczenia z issue lub decyzji architektonicznej"
CODEMOD_ISSUE:
value: ""
description: "Numer issue do skomentowania po utworzeniu MR"
CODEMOD_MODEL_PROVIDER:
value: "vllm"
options: ["vllm", "ollama", "openai_like"]
description: "Backend LLM"
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_PIPELINE_SOURCE == "web"'
- if: '$CI_PIPELINE_SOURCE == "schedule"'
- if: '$CI_PIPELINE_SOURCE == "trigger"' # wyzwalane z issue/webhooka
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
# ---------------------------------------------------------------- jakość silnika
lint:
stage: test
script:
- ruff check src tests llm
- ruff format --check src tests llm
# Testy obejmują też ścieżkę agentową: tests/test_llm_path.py podnosi atrapę serwera
# OpenAI (llm/mock_server.py) i przepuszcza przez nią pełny przebieg z agentami.
# Bez GPU, bez pobierania modelu, tak samo na Linuksie i macOS.
unit:
stage: test
script:
- pytest -q --junitxml=report.xml
artifacts:
when: always
reports:
junit: report.xml
# Smoke test całego przepływu bez modelu językowego: kontekst APM, adaptery, sandbox,
# workflow agno i weryfikacja. Nie wymaga GPU ani dostępu do endpointu LLM,
# więc może być bramką na każdym merge requeście.
e2e-offline:
stage: test
script:
- |
agentic-codemod run \
--repo examples/fixtures/acme-app \
--package acme-sdk --module acme --to-version 2.1.0 \
--offline --run-dir "$CI_PROJECT_DIR/.runs/$CI_PIPELINE_ID"
- |
grep -q '"status": "success"' ".runs/$CI_PIPELINE_ID/run.json"
artifacts:
when: always
expire_in: 30 days
paths: [".runs/"]
runner-image:
stage: build
image: gcr.io/kaniko-project/executor:debug
before_script: []
script:
- /kaniko/executor --context "$CI_PROJECT_DIR" --dockerfile ci/Dockerfile
--destination "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"
--destination "$CI_REGISTRY_IMAGE:latest"
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
# ------------------------------------------------------- demonstracja użycia szablonu
include:
- local: '/.gitlab/ci/agentic-codemod.template.yml'
inputs:
image: "python:3.12-slim"
apm_root: "."