🐶

GitLab CI で reviewdog と PHPStan を使いたい

2025/01/04に公開

はじめに

GitLab CI でも reviewdogPHPStan したい。

準備

1. reviewdog 用のユーザーを作成する

Access

  • Projects limit: 1
  • Can create group: No
  • Access level: Regular
  • External: Yes

気分が上がるので Aveter のアイコンを設定しておくこと!

2. 作成したユーザーのアクセストークンを作成する

User Settings -> Access Tokens -> Personal Access Tokens

  • Name: reviewdog
  • Scopes: api

3. プロジェクトに作成したユーザーを追加する

Members -> Invite member

  • GitLab member: reviewdog
  • Role: Reporter

4. プロジェクトの CI の環境変数を設定する

Settings -> CI/CD -> Variables

  • Key: REVIEWDOG_GITLAB_API_TOKEN
  • Value: 2 で作成したアクセストークン
  • Type: Variable
  • Environment scope: All
  • Protect variable: No
  • Mask variable: Yes

5. .gitlab-ci.yml を作成する

.gitlab-ci.yml

stages:
  - reviewdog

reviewdog-phpstan:
  stage: reviewdog
  variables:
    GIT_STRATEGY: clone
    GIT_DEPTH: 0
  rules:
    - if: $CI_MERGE_REQUEST_ID ## MR の場合のみ実行
  image: composer:2
  allow_failure: true
  before_script:
    - wget -O - -q 
      https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh
      | sh -s
  script:
    - composer require -q --no-ansi --no-interaction --no-scripts 
      --no-progress --prefer-dist --dev phpstan/phpstan:2.1
    - bin/reviewdog -version
    - ./vendor/bin/phpstan -V
    - ./vendor/bin/phpstan analyse --no-progress --error-format=raw
      | ./bin/reviewdog -f=phpstan -reporter=gitlab-mr-discussion

動作確認

以下のようなディレクトリ構成、ファイルで MergeRequest を作成。

.
├── .gitlab-ci.yml
├── phpstan.dist.neon
└── src
    └── sample.php
phpstan.dist.neon
parameters:
    level: 7
    paths:
        - src
src/sample.php
<?php

declare(strict_types=1);

function addNumbers(int $a, int $b): int {
    return $a + $b;
}

echo addNumbers(5, 10) . PHP_EOL;
echo addNumbers('5', 10) . PHP_EOL;

MergeRequest に以下のようなコメントがつけば成功。

環境

  • GitLab: 13.12.10-ce 古っっ
  • GitLab Runner: 15.8.2 古っっ

Discussion