はじめに
チーム内の方のコードレビューでGitHub Actionsをレビューを行ったの際に得た知識からGHA触ってみたりしたので、記事に起こそうと思いますー 。
前提条件
チームではGitHub Enterprise(以下GHE)でGitHub Actionsを利用するため、セルフホステッド ランナーを使用していますが、今回はphpの静的解析ツール(phpstan)をGitHub Actionsでインストールなど試みたかった(※)のでGitHubのGitHub ホステッド ランナーで動かしていきます。
※セルフホステッド ランナーではgithub公式が提供しているアクションのみ使用できるため、php関連のアクションはサードパーティーのものしかなく、そちらを使うにはGitHub ホステッド ランナーのみ使用可能
GitHub Actionsとは
GitHub Actions は、ビルド、テスト、デプロイのパイプラインを自動化できる継続的インテグレーションと継続的デリバリー (CI/CD) のプラットフォームです。 リポジトリに対するすべての pull request をビルドしてテストしたり、マージされた pull request を運用環境にデプロイしたりするワークフローを作成できます。
GitHub Docs/GitHub Actions について
というものになり、2019年11月にリリースされたのでもので割と新しい技術になるみたいです。
フォルダ構成
action
┣━ .github
┃ ┗━ workflows
┃ ┗━ PhpCheckTest.yml
┣━ test
┃ ┗━ test.php
┗━ composer.json
- 今回は
action
がリポジトリになり、リポジトリ配下にある.github
があると思うのでそこにworkflows
とymlファイルPhpCheckTest.yml
を設置 - test/test.phpが今回チェックされるphpファイルになる。
- composer.jsonはphpstanをインストールする際に使うのでaction直下に設置
各ファイルの中身
PhpCheckTest.yml
name: PHPStanTest
# Github Actionsが動く際のトリガー、ここではプルリクエスト[opened, synchronize, reopend]の際に発火
on: [pull_request]
jobs:
phpstantest:
runs-on: ubuntu-latest
steps:
#こちらはGithub謹製のアクション
- uses: actions/checkout@v3
- name: Setup PHP
#こちらはサードパーティ製のアクションのアクション
uses: shivammathur/setup-php@v2
with:
php-version: '7.2.34'
#こちらもサードパーティ製のアクションのアクション
- uses: reviewdog/action-setup@v1
with:
reviewdog_version: latest
- name: Composer install
run: composer install
#Phpstanをインストール
- name: phpstan install
run: composer require phpstan/phpstan
- name: run phpstan and reviewdog
env:
#Githubにコメントを書きこむため、トークンが必要
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: vendor/bin/phpstan analyse test --level max --memory-limit=-1 --error-format=raw --no-progress | reviewdog -reporter=github-pr-review -f=phpstan
test.php
<?php
class RegularEmployee2
{
/**
* @var int
*/
private $employee_id;
/**
* @var string
*/
private $name;
/**
* @param $employee_id
* @param $name
*/
public function __construct($employee_id, $name)
{
$this->employee_id = $employee_id;
$this->name = $name;
}
/**
* @return int
*/
public function getEmployeeId(): int
{
return $this->employee_id;
}
/**
* @return mixed
*/
public function getName(): mixed
{
return $this->name;
}
}
$employee = new RegularEmployee("1","山田");
echo $employee->getEmployeeId();
echo $employee->getName();
composer.json
{
"require": {
"monolog/monolog": "1.0.*"
}
}
動かしてみるでー
準備はできたので、こちらをプルリクにプッシュ、、、、
Method RegularEmployee::__construct() has parameter $employee_id with no type specified.
Method RegularEmployee::__construct() has parameter $name with no type specified.
Parameter #1 (mixed) of echo cannot be converted to string.
ちゃんと怒られましたね
コメントもちゃんとできているのでOKそうですね
はまったとこ
-
GHE(セルフホステッド ランナー)で最初は上記のyamlを実行しようとしていましたが、
サードパーティ製のアクションが使えないことを後で知り時間を使ってしまった。 -
地味にはまったのはGithubの設定にあるWorkflow permissionsがreadのみだとコメントが書きこめないのでそこらへんを触る必要があった。
参考記事:リポジトリの GitHub Actions の設定を管理する/既定の GITHUB_TOKEN のアクセス許可の構成
まとめ
今回はGitHub Actionsの実行ファイルのyaml上でphpstanを動かしたりしたっかたので、
GHEではなくGithub.comで行いましたが、あらかじめphpstanを落としたりしておけば、
GHEでも解析を行う方法もあるのでまた、機会があればGHEでも挑戦したいと思います
見て頂いてありがとうございますー