AI Review - Codex w gitlab-ci

Od dawna, pracując nad własnymi projektami w homelabie i traktując je jako przestrzeń do nauki oraz eksperymentów, brakowało mi jednego elementu – kogoś, kto spojrzy na mój kod z dystansu. Nie w kontekście pracy zespołowej, bo tam code review jest naturalnym elementem procesu, ale w prywatnym środowisku, gdzie większość decyzji podejmuje się samodzielnie.
Sztuczna inteligencja zaczęła pełnić rolę cichego recenzenta — analizuje kod, podpowiada możliwe usprawnienia, wyłapuje potencjalne problemy i robi to dokładnie tam, gdzie i tak już wszystko się dzieje: w pipeline CI/CD. W tym artykule pokazuję, jak wykorzystuję AI Review – Codex w gitlab-ci w homelabie jako narzędzie edukacyjne, które realnie wspiera naukę, eksperymentowanie i podnoszenie jakości własnych projektów.
Krok po kroku
Section titled “Krok po kroku”-
Utworzenie repozytoriów
Section titled “Utworzenie repozytoriów”- Definicja repozytorium pl.rachuna-net/artifacts/containers/codex
-
Utworzenie kontenera za pomocą image buildera
Section titled “Utworzenie kontenera za pomocą image buildera”Wydanie wersji codex v1.0.0
-
Utworzenie promtów
Section titled “Utworzenie promtów”ci_jobs/code_review
. ├── .codex │ └── manifest.sh.yml ├── job.yml └── README.md -
Stworzenie gitlab-ci joba
Section titled “Stworzenie gitlab-ci joba”Wydanie wersji v1.7.0
W pierwszej kolejności jako użytkownik chciałem mieć możliwość uruchamia joba, kiedy będę uważał za stosowne. Idealnym miejscem “wyboru” czy chcę Code Rewiew czy nie jest dodanie w MR odpowiedniego reviewer
if ! echo "$REVIEWER_LOGINS" | grep -Fq -- "$AI_REVIEWER_USERNAME"; then echo "⛔ Ten MR nie ma wymaganego reviewera – pomijam AI Code Review." exit 0 fiW kolejnej fazie wygenerowałem plik diff MR
echo -e "\033[1;34m--> Pobieram diff z MR #$CI_MERGE_REQUEST_IID\033[0m" CHANGES_JSON=$(curl -sS -H "PRIVATE-TOKEN: $GITLAB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID/changes") echo "$CHANGES_JSON" | jq -e '.changes' >/dev/null 2>&1 || { echo "Nie udało się sparsować odpowiedzi z GitLaba (brak .changes)." echo "$CHANGES_JSON" exit 1 }Następnie sklejam prompts w całość i uruchomienie codex
{ cat .codex/prompts/001-code-review.md echo echo "## MR_DIFF_START" cat .codex/artifacts/mr-diff echo "## MR_DIFF_END" } | codex exec \ --model "${CODEX_MODEL}" \ --sandbox danger-full-access \ --cd "$CI_PROJECT_DIR" \ - \ >> "$CODEX_LOG" 2>&1 || EXIT_CODE=$?Na końcu publikuje komentarz do MR i otwiera wątki
