# 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: "."