106 lines
3.6 KiB
YAML
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: "."
|