0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitHub Actions で簡単なビルドチェックを作る

Posted at

この記事は?

最近、GitHub Actions をちょっと勉強し、その練習ついでにつくったものを紹介。

Linux コマンドの基礎が分かっている前提です。また、GitHub Actions の詳しい使い方などについては説明していません。

C/C++ のビルドチェック

さして難しいことはありません。全ての .c ファイルを gcc にかける、ただそれだけです。

name: Build Check

on: push

jobs:
  build_test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Building test in GCC
        run: find * -type f -name '*.c' | xargs -r -t -L 1 gcc -c -o /dev/null
  1. actions/checkout@v3 で、リポジトリのファイルをワークスペースに出力
  2. find コマンドで ~~.c ファイルを検索
  3. 見つかったファイルを GCC に入れてコンパイル

C++ に対応させるには、*.c*.cpp に、gccg++ に変えるだけで OK です。

このままだと、変更の有無を問わず、push される度に全てのファイルをコンパイル (チェック) することになってしまいます。ソース数が多い場合はまともに使えなくなることも考えられます。

最後の行 run: ... がメインの箇所です。findxargs の概要は割愛して、オプションの説明をします。

find

まずは、find.c ファイルの検索をします。

オプション 意味
* カレント上のファイル (ディレクトリ内含む) 全てのファイルを選択
-type f ファイルのみ表示 (ディレクトリは除外される)
-name '*.c' ファイル名が ~~.c である (* はワイルドカード)

これで、~~.c という名前のファイル一覧が出力されます。

xargs

次に、xargs で各ファイル名を引数にコマンドを実行します。ここでは、ファイル名 1つ 1つに対して、gcc -c -o /dev/null {ファイル名} というようなコマンドが実行されることになります。

オプション 意味
-r 入力が無いとき、コマンドを実行しない (つまり、find でファイルが見つからなかったとき何もされない)
-t 実行されるコマンドを標準出力
-L 1 パイプなどから複数行の入力があっても、コマンドに 1引数ずつだけ入れる

gcc

最後に、gcc のオプションは次の通り。

オプション 意味
-c コンパイルとアセンブルは行うが、リンクを行わない (これにより、複数ファイルにまたがるコードでも、1ファイルずつテストを行える)
-o /dev/null 出力ファイルの指定 (/dev/null に書き込まれたデータは即時削除、これによりビルドはするがファイルを保存しないという動作を実現する)

Python のビルドチェック

py_compile を使う

やることは 9割同じです。オプションが少し異なるので、そこだけ紹介。run: ... の部分だけ書くと、次のようになります。

      - name: Building test in py_compile
        run: |
          find * -type f -name '*.py' | xargs -r -t -L 1 python3 -m py_compile

-m py_compile により、Python コードのコンパイルを行います。これにより、構文解析をするが、実行はしないという動作を実現します。

参考元:

pylint を使う

ちなみに、全く同じ要領で pylint を用いて、より高度な構文チェックを行うことができます。(同様の linter は他にもあります。)

pip install pylint
      - name: Building test in py_compile
        run: |
          find * -type f -name '*.py' | xargs -r -t -L 1 pylint

しかし、pylint は評価結果が 10点満点でないと、ステータスコードが 0以外で終了するようです。そのため、満点でないと GitHub 上で結果が Failure として扱われることになってしまいます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?