注: この機能を使うには、サイト管理者が の code scanning を有効にする必要があります。 コードをスキャンするためにGitHub Actionsを使いなら、サイト管理者はGitHub Actionsの有効化と、必要なインフラストラクチャのセットアップもしなければなりません。 詳細については、「アプライアンスでの code scanning の構成」を参照してく� さい。
CodeQL analysis workflowとコンパイル型言語について
GitHub がリポジトリに対して code scanning を実行できるようにするには、GitHub Actions ワークフローをリポジトリに追� します。 CodeQL code scanning では、CodeQL analysis workflowを追� できます。 詳細については、「リポジトリの code scanning の設定」を参照してく� さい。
通常、code scanning のデフォルトのワークフローを編集する必要はありません。 た� し、必要な� �合にはワークフローを編集して設定の一部をカスタマイズできます。 たとえば、GitHub の CodeQL analysis workflowを編集すると、スキャンの� �度、スキャンする言語やディレクトリ、CodeQL code scanning を使ったコード内での検索対象を指定できます。 コードのコンパイルに特定のコマンド セットを使う� �合にも、CodeQL analysis workflowの編集が必要となる� �合があります。 code scanning の構成とワークフロー ファイルの編集に関する一般的な情� �については、「code scanning を構成する」および「GitHub Actions について学ぶ」をご覧く� さい。
CodeQL の autobuild について
Code scanning は、1 つ以上のデータベースに対してクエリを実行することにより機能します。 各データベースには、リポジトリにあるすべてのコードを 1 つの言語で表わしたものが含まれています。
コンパイル型言語の C/C++、C#、Java では、このデータベースを生成するプロセスに、コードのビルドとデータの抽出が含まれています。 これらの言語では、CodeQL は、ビルドされたリポジトリ内のソース ファイルを分析します。 これらの言語の� �合は、autobuild
を無効にし、その代わりにカスタ� ビルド コマンドによってビルドされたファイルのみを分析するためにこれらのカスタ� コマンドを使用できます。
サポートされているコンパイル言語の� �合、CodeQL analysis workflowの autobuild
アクションを使ってコードをビルドできます。 これにより、C/C++、C#、Java の明示的なビルド コマンドを指定する必要がなくなります。
ワークフローで language
マトリックスを使っている� �合、autobuild
はマトリックスに列記された各コンパイル型言語のビルドを試行します。 マトリックスがない� �合、autobuild
は、サポートされているコンパイル型言語で、リポジトリ内のソース ファイルの数が最も多いもののビルドを試みます。 Go を除いて、明示的にビルドコマンドを使用しない限り、リポジトリにある他のコンパイル型言語の解析は失敗します。
注: GitHub Actions にセルフホステッド ランナーを使う� �合は、autobuild
プロセスを使うために追� のソフトウェアをインストールすることが必要になる� �合があります。 さらに、リポジトリに特定のバージョンのビルドツールが必要な� �合は、手動でインストールする必要があります。 詳しくは、「GitHub ホステッド ランナーの概要」をご覧く� さい。
C/C++
サポートされているシステ� の種類 | システ� 名 |
---|---|
オペレーティング システ� | Windows、macOS、Linux |
ビルドシステ� | Windows: MSbuild スクリプトと build スクリプト Linux と macOS: Autoconf、Make、CMake、qmake、 Meson、Waf、SCons、Linux Kbuild、build の各スクリプト |
autobuild
ステップの動作は、抽出を実行するオペレーティング システ� によって異なります。 Windows の autobuild
ステップでは、以下の方法を使って C/C++ に適したビルド方法の自動検出が試みられます。
- ルートに最も近いソリューション (
.sln
) またはプロジェクト (.vcxproj
) ファイルでMSBuild.exe
を呼び出します。autobuild
が最上位ディレクトリから同じ (最短) 深度で複数のソリューションまたはプロジェクト ファイルを検出した� �合、それらすべてのビルドが試みられます。 - ビルド スクリプトのように見えるスクリプト、つまり build.bat、build.cmd、build.exe を、この� �番で呼び出します。
Linux と macOS の autobuild
ステップでは、リポジトリ内にあるファイルが確認されて、使われているビルド システ� が特定されます。
- ルートディレクトリでビルドシステ� を探します。
- 何も見つからない� �合は、C/C++ のビルドシステ� で一意のディレクトリをサブディレクトリで検索します。
- 適切なコマンドを実行してシステ� を設定します。
C#
サポートされているシステ� の種類 | システ� 名 |
---|---|
オペレーティング システ� | Windows と Linux |
ビルドシステ� | .NET と MSbuild、およびビルドスクリプト |
autobuild
プロセスは、次の方法を使って C# に適したビルド方法の自動検出を試みます。
- ルートに最も近いソリューション (
.sln
) またはプロジェクト (.csproj
) ファイルでdotnet build
を呼び出します。 - ルートに最も近いソリューションまたはプロジェクト ファイルで、
MSbuild
(Linux) またはMSBuild.exe
(Windows) を呼び出します。autobuild
が最上位ディレクトリから同じ (最短) 深度で複数のソリューションまたはプロジェクト ファイルを検出した� �合、それらすべてのビルドが試みられます。 - ビルド スクリプトのように見えるスクリプト、つまり build と build.sh (Linux の� �合、この� �序で) または build.bat、build.cmd、and build.exe (Windows の� �合、この� �序で) を呼び出します。
Java
サポートされているシステ� の種類 | システ� 名 |
---|---|
オペレーティング システ� | Windows、macOS、Linux (制限なし) |
ビルドシステ� | Gradle、Maven、Ant |
autobuild
プロセスは、この戦略を適用して、Java コードベース用のビルド システ� の特定を試みます。
- ルートディレクトリでビルドファイルを検索します。 Gradle、Maven、Ant の各ビルドファイルを確認します。
- 最初に見つかったビルドファイルを実行します。 Gradle ファイルと Maven ファイルの両方が存在する� �合は、Gradle ファイルが使用されます。
- それ以外の� �合は、ルートディレクトリの直接サブディレクトリ内でビルドファイルを検索します。 1 つのサブディレクトリにのみビルドファイルが含まれている� �合は、そのサブディレクトリで識別された最初のファイルを実行します(1 と同じ環境設定を使用)。 複数のサブディレクトリにビルドファイルが含まれている� �合は、エラーを� �告します。
コンパイル言語のビルドステップを追� する
autobuild
が失敗した� �合、または autobuild
プロセスによってビルドされたものとは異なるソース ファイルのセットを分析する� �合は、ワークフローから autobuild
ステップを削除し、ビルド ステップを手動で追� する必要があります。 C/C++、C#、Go、Java プロジェクトの� �合、CodeQL では、指定したビルド ステップによってビルドされたソース コードを分析します。ワークフロー ファイルの編集方法については、「code scanning を構成する」をご覧く� さい。
autobuild
ステップを削除したら、run
ステップをコメント解除して、リポジトリに適したビルド コマンドを追� します。 ワークフローの run
ステップでは、オペレーティング システ� のシェルを使ってコマンド ライン プログラ� が実行されます。 これらのコマンドを変更し、別のコマンドを追� してビルド プロセスをカスタマイズできます。
- run: |
make bootstrap
make release
run
キーワードについて詳しくは、「GitHub Actions のワークフロー構文」をご覧く� さい。
リポジトリに複数のコンパイル済み言語が含まれている� �合は、言語固有のビルド コマンドを指定できます。 たとえば、リポジトリに C/C++、C#、Java が含まれていて、autobuild
によって C/C++ と C# は正しくビルドされるが、Java のビルドは失敗する� �合は、ワークフローの init
ステップの後で次の構成を使用できます。 これにより、C/C++ と C# には autobuild
をそのまま使用しつつ、Java のビルド ステップを指定します。
- if: matrix.language == 'cpp' || matrix.language == 'csharp'
name: Autobuild
uses: github/codeql-action/autobuild@v1
- if: matrix.language == 'java'
name: Build Java
run: |
make bootstrap
make release
if
条件について詳しくは、「GitHub Actions のワークフロー構文」をご覧く� さい。
autobuild
でコードがビルドされない理由に関するその他のヒントとテクニックについては、「CodeQL ワークフローのトラブルシューティング」をご覧く� さい。
コンパイル言語にマニュアルのビルドステップを追� しても、リポジトリで依然としてcode scanningが動作しない� �合は、サイト管理者にお問い合わせく� さい。