ノート: Code scanningはGitHub Enterprise Server 2.22ではベータです。 Code Scanningの一般に利用なリリースについては、GitHub Enterprise Serverの最新リリースにアップグレードしてください。
ノート: この機能を使用するには、サイト管理者がGitHub Enterprise Serverのインスタンスのcode scanningを有効にする必要があります。 コードをスキャンするためにGitHub Actionsを使いなら、サイト管理者はGitHub Actionsの有効化と、必要なインフラストラクチャのセットアップもしなければなりません。 詳しい情報については「アプライアンスのためのcode scanningの設定」を参照してください。
CodeQL分析ワークフロー とコンパイル型言語について
GitHub がリポジトリに対して code scanning を実行できるようにするには、GitHub Actions ワークフローをリポジトリに追加します。 Note: This article refers to code scanning powered by CodeQL, not to code scanning resulting from the upload of third-party static analysis tools. 詳しい情報については、「リポジトリに対する code scanning をセットアップする」を参照してください。
通常、code scanning のデフォルトのワークフローを編集する必要はありません。 ただし、必要な場合にはワークフローを編集して設定の一部をカスタマイズできます。 たとえば、GitHubのCodeQL分析ワークフローを編集して、スキャンの頻度、スキャンする言語やディレクトリ、CodeQL code scanningがコード中で探すものを指定できます。 コードのコンパイルに特定のコマンドセットを使っている場合にも、CodeQL分析ワークフローを編集する必要があるかもしれません。 For general information about configuring code scanning and editing workflow files, see "Configuring code scanning" and "Learn GitHub Actions."
CodeQL の autobuild について
コードスキャンは、1 つ以上のデータベースに対してクエリを実行することにより機能します。 各データベースには、リポジトリにあるすべてのコードを 1 つの言語で表わしたものが含まれています。 コンパイル型言語の C/C++、C#、および Java では、このデータベースを生成するプロセスに、コードのビルドとデータの抽出が含まれています。 CodeQLは、プロジェクトをセットアップするためにGoのプロジェクトのビルドも実行します。 ただし、他のコンパイル言語とは対照的に、リポジトリ内のGoのファイルはビルドされるものだけでなく、すべてが展開されます。 ビルドが処理しないGoのファイルの展開をスキップするために、カスタムのビルドコマンドを使うこともできます。
サポートされているコンパイル言語では、コードをビルドするためにCodeQL分析ワークフロー内でautobuild
アクションを使うことができます。 これによって、C/C++、C#、Javaでは明示的にビルドコマンドを指定する必要がなくなります。
ワークフローが language
マトリクスを使用している場合、autobuild
はマトリクスに列記された各コンパイル型言語のビルドを試行します。 マトリクスがない場合、autobuild
はリポジトリ内でソースファイルの数が最も多い、サポートされているコンパイル型言語のビルドを試行します。 Go を除いて、明示的にビルドコマンドを使用しない限り、リポジトリにある他のコンパイル型言語の解析は失敗します。
注釈: GitHub Actions にセルフホストランナーを使用する場合、autobuild
プロセスを使用するために追加のソフトウェアをインストールする必要がある場合があります。 さらに、リポジトリに特定のバージョンのビルドツールが必要な場合は、手動でインストールする必要があります。 詳しい情報については、「GitHub ホストランナーの仕様」を参照してください。
C/C++
サポートされているシステムの種類 | システム名 |
---|---|
オペレーティングシステム | Windows、macOS、Linux |
ビルドシステム | Windows: MSbuild およびビルドスクリプト Linux および macOS: Autoconf、Make、CMake、qmake、 Meson、Waf、SCons、Linux Kbuild、およびビルドスクリプト |
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、および build.exe(Windows の場合、この順序で)を呼び出します。
Java
サポートされているシステムの種類 | システム名 |
---|---|
オペレーティングシステム | Windows、macOS、Linux (制限なし) |
ビルドシステム | Gradle、Maven、Ant |
autobuild
プロセスは、この戦略を適用して Java コードベースのビルドシステムを決定しようとします。
- ルートディレクトリでビルドファイルを検索します。 Gradle、Maven、Ant の各ビルドファイルを確認します。
- 最初に見つかったビルドファイルを実行します。 Gradle ファイルと Maven ファイルの両方が存在する場合は、Gradle ファイルが使用されます。
- それ以外の場合は、ルートディレクトリの直接サブディレクトリ内でビルドファイルを検索します。 1 つのサブディレクトリにのみビルドファイルが含まれている場合は、そのサブディレクトリで識別された最初のファイルを実行します(1 と同じ環境設定を使用)。 複数のサブディレクトリにビルドファイルが含まれている場合は、エラーを報告します。
コンパイル言語のビルドステップを追加する
リポジトリ内の C/C++、C#、またはJava のコードに非標準のビルドプロセスがある場合、 autobuild
が失敗することがあります。 ワークフローからautobuild
ステップを取り除き、手動でビルドのステップを追加する必要があるでしょう。 リポジトリのGoのファイルで展開するものを指定したい場合には、ビルドのステップを追加しなければなりません。ワークフローファイルの編集方法については、「code scanning を設定する」を参照してください。
autobuild
ステップを削除した後、run
ステップのコメントを外して、リポジトリに適したビルドコマンドを追加します。 ワークフロー run
ステップは、オペレーティングシステムのシェルを使用してコマンドラインプログラムを実行します。 これらのコマンドを変更し、さらにコマンドを追加して、ビルドプロセスをカスタマイズできます。
- run: |
make bootstrap
make release
run
キーワードに関する詳しい情報については、「"GitHub Actionsのためのワークフローの構文」を参照してください。
複数のコンパイル言語を含むリポジトリでは、言語に固有のビルドコマンドを指定できます。 たとえば、リポジトリがC/C++、C#、Javaを含んでおり、autobuild
が正しく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が動作しない場合は、your site administratorにお問い合わせください。