# Szablon do włączenia w repozytorium docelowym: # # include: # - project: 'pubi/agentic-codemod-pipeline' # ref: 'v0.1.0' # file: '/.gitlab/ci/agentic-codemod.template.yml' # inputs: # image: 'registry.internal/pubi/agentic-codemod:0.1.0' # target_branch: 'main' # # Szablon dodaje trzy joby: przygotowanie kontekstu APM, plan (bez zmian w kodzie) # oraz wdrożenie zmian za bramką manualną. spec: inputs: image: default: "registry.internal/pubi/agentic-codemod:0.1.0" description: "Obraz runnera z zainstalowanym agentic-codemod i APM CLI" stage_context: default: "prepare" stage_plan: default: "plan" stage_apply: default: "apply" target_branch: default: "main" description: "Gałąź docelowa merge requesta" apm_root: default: "." description: "Katalog z apm.yml i .apm/ (kontekst agentowy)" --- .codemod-base: image: $[[ inputs.image ]] variables: GIT_DEPTH: "0" CODEMOD_RUN_DIR: "$CI_PROJECT_DIR/.runs/$CI_PIPELINE_ID" CODEMOD_APM_ROOT: $[[ inputs.apm_root ]] before_script: - git config --global --add safe.directory "$CI_PROJECT_DIR" artifacts: when: always expire_in: 90 days paths: - .runs/ codemod:context: extends: .codemod-base stage: $[[ inputs.stage_context ]] script: # Kontekst agentowy jest zależnością jak każda inna: instalowany z pinów, audytowany, # a lockfile ląduje w artefaktach jako dowód, co dokładnie dostał model. - apm install - apm audit - agentic-codemod context --apm-root "$CODEMOD_APM_ROOT" --json | tee .runs/apm-context.json artifacts: when: always expire_in: 90 days paths: - apm_modules/ - apm.lock.yaml - .runs/ reports: dotenv: [] codemod:plan: extends: .codemod-base stage: $[[ inputs.stage_plan ]] needs: ["codemod:context"] script: - | agentic-codemod run \ --repo "$CI_PROJECT_DIR" --in-place --plan-only \ --package "$CODEMOD_PACKAGE" --to-version "$CODEMOD_TO_VERSION" \ --module "${CODEMOD_MODULE:-}" --constraints "${CODEMOD_CONSTRAINTS:-}" \ --run-dir "$CODEMOD_RUN_DIR" rules: - if: '$CODEMOD_PACKAGE' codemod:apply: extends: .codemod-base stage: $[[ inputs.stage_apply ]] needs: ["codemod:plan"] # Bramka człowieka przed jakąkolwiek modyfikacją kodu i przed utworzeniem MR. # Świadomie NIE automatyzujemy tego kroku - podpis pod zmianą ma mieć właściciela. when: manual allow_failure: false script: - | agentic-codemod run \ --repo "$CI_PROJECT_DIR" --in-place --publish \ --package "$CODEMOD_PACKAGE" --to-version "$CODEMOD_TO_VERSION" \ --module "${CODEMOD_MODULE:-}" --constraints "${CODEMOD_CONSTRAINTS:-}" \ --issue "${CODEMOD_ISSUE:-}" \ --target-branch $[[ inputs.target_branch ]] \ --run-dir "$CODEMOD_RUN_DIR" rules: - if: '$CODEMOD_PACKAGE'