ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

SARIF ファイルを GitHub にアップロードする

サードパーティの静的解析ツールからGitHubにSARIFファイルをアップロードし、リポジトリ内でそれらのツールからのcode scanningアラートを見ることができます。

People with write permissions to a repository can upload code scanning data generated outside GitHub.

Code scanning is available for all public repositories and for private repositories owned by organizations where GitHub Advanced Security is enabled. 詳しい情報については、「GitHub Advanced Security について」を参照してください。

ここには以下の内容があります:

code scanning に対する SARIF ファイルのアップロードについて

SARIF ファイルに partialFingerprints が含まれていない場合、upload-sarif アクションは、partialFingerprints フィールドを計算し、アラートの重複を防止しようと試みます。 GitHub は、リポジトリに SARIF ファイルと静的分析で使用されるソースコードの両方が含まれている場合にのみ、partialFingerprints を作成できます。 For more information, see "Managing code scanning alerts for your repository."

You can generate SARIF files using many static analysis security testing tools, including CodeQL. The results must use SARIF version 2.1.0. 詳しい情報については「code scanningの SARIF サポート」を参照してください。

You can upload the results using GitHub Actions, the code scanning API, or the CodeQL runner. The best upload method will depend on how you generate the SARIF file, for example, if you use:

  • GitHub Actions to run the CodeQL action, there is no further action required. SARIF ファイルは、ファイルのアップロードに使用したものと同じ GitHub Actions ワークフローで実行する SARIF 互換の分析ツールから生成できます。
  • "ワークフロー実行の管理"
  • GitHub は、リポジトリにアップロードされた SARIF ファイルからの code scanning アラートを表示します。 If you block the automatic upload, when you are ready to upload results you can use the upload command (for more information, see "Running CodeQL code scanning in your CI system").
  • A tool that generates results as an artifact outside of your repository, you can use the code scanning API to upload the file (for more information, see "Upload an analysis as SARIF data").

ノート: プライベート及びインターナルリポジトリについては、code scanningはGitHub Advanced Security機能がそのリポジトリで有効化されている場合に利用できます。 Advanced Security must be enabled for this repository to use code scanning(Code Scanningを利用するためにはAdvanced Securityが有効になっていなければなりません)というエラーが表示されたなら、GitHub Advanced Securityが有効になっているかをチェックしてください。 詳しい情報については「リポジトリのセキュリティ及び分析の設定の管理」を参照してください。

GitHub Actions での code scanning 分析をアップロードする

サードパーティの SARIF ファイルを GitHub にアップロードするには、GitHub Actions ワークフローが必要です。 For more information, see "Learn GitHub Actions" and "Learn GitHub Actions."

ワークフローは、upload-sarif アクションを使用する必要があります。 これには、アップロードの設定に使用できる入力パラメータがあります。 使用する主な入力パラメータは、アップロードする SARIF ファイルのファイルまたはディレクトリを設定する sarif-file です。 ディレクトリまたはファイルのパスは、リポジトリのルートからの相対パスです。 詳しい情報については、「upload-sarif アクション」を参照してください。

upload-sarif アクションは、push および scheduled イベントが発生したときに実行するように設定できます。 GitHub Actions イベントについて詳しい情報は、「ワークフローをトリガーするイベント」を参照してください。

SARIF ファイルに partialFingerprints が含まれていない場合、upload-sarif アクションは、partialFingerprints フィールドを計算し、アラートの重複を防止しようと試みます。 GitHub は、リポジトリに SARIF ファイルと静的分析で使用されるソースコードの両方が含まれている場合にのみ、partialFingerprints を作成できます。 重複アラートの防止に関する詳しい情報については、「コードスキャンに対する SARIF サポートについて」を参照してください。

ノート: SARIFアップロードは、アップロードごとに1000件の結果をサポートしています。 この制限を超えた結果は無視されます。 ツールがあまりに多くの結果を生成する場合、最も重要なルールやクエリに対する結果に焦点を当てるよう、設定を更新すべきです。

リポジトリ外で生成された SARIF ファイルのワークフロー例

SARIF ファイルをリポジトリにコミットした後でアップロードする新しいワークフローを作成できます。 これは、SARIF ファイルがリポジトリ外のアーティファクトとして生成される場合に役立ちます。

この例のワークフローは、コミットがリポジトリにプッシュされるたびに実行されます。 アクションは partialFingerprints プロパティを使用して、変更が発生したかどうかを判断します。 コミットがプッシュされたときに実行されるだけでなく、ワークフローは週に 1 回実行されるようにスケジュールされます。 詳しい情報については、「ワークフローをトリガーするイベント」を参照してください。

このワークフローは、リポジトリのルートにある results.sarif ファイルをアップロードします。 For more information about creating a workflow file, see "Learn GitHub Actions."

または、このワークフローを変更して、SARIF ファイルのディレクトリをアップロードすることもできます。 たとえば、すべての SARIF ファイルをリポジトリのルートにある sarif-output というディレクトリに配置し、アクションの入力パラメータ sarif_filesarif-output に設定できます。

name: "Upload SARIF"

# コードがリポジトリにプッシュされるたびに、スケジュールに従ってワークフローを実行します。
# The scheduled workflow runs every Thursday at 15:45 UTC.
on:
  push:
  schedule:
  - cron: '45 15 * * 4'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    # このステップでは、リポジトリのコピーをチェックアウトします。
    - name: Checkout repository
      uses: actions/checkout@v2
    - name: Upload SARIF file
      uses: github/codeql-action/upload-sarif@v1
      with:
        # リポジトリのルートに対する SARIF ファイルへの相対パス
        sarif_file: results.sarif

ESLint 分析ツールを実行するワークフローの例

継続的インテグレーション(CI)ワークフローの一部としてサードパーティの SARIF ファイルを生成する場合は、CI テストの実行後のステップとして、upload-sarif アクションを追加できます。 CI ワークフローがない場合は、GitHub Actions テンプレートを使用して作成できます。 詳しい情報については、「GitHub Actions のクイックスタート」を参照してください。

この例のワークフローは、コミットがリポジトリにプッシュされるたびに実行されます。 アクションは partialFingerprints プロパティを使用して、変更が発生したかどうかを判断します。 コミットがプッシュされたときに実行されるだけでなく、ワークフローは週に 1 回実行されるようにスケジュールされます。 詳しい情報については、「ワークフローをトリガーするイベント」を参照してください。

ワークフローでは、ESLint 静的分析ツールをワークフローのステップとして実行する例を示しています。 Run ESLint ステップは ESLint ツールを実行して、results.sarif ファイルを出力します。 次に、ワークフローは upload-sarif アクションを使用して、results.sarif ファイルを GitHub にアップロードします。 For more information about creating a workflow file, see "Introduction to GitHub Actions."

name: "ESLint analysis"

# コードがリポジトリにプッシュされるたびに、スケジュールに従ってワークフローを実行します。
# The scheduled workflow runs every Wednesday at 15:45 UTC.
on:
  push:
  schedule:
  - cron: '45 15 * * 3'

jobs:
  build:
    steps:
    - uses: actions/checkout@v2
    - name: Run npm install
      run: npm install
    # Runs the ESlint code analysis
    - name: Run ESLint
      # eslint exits 1 if it finds anything to report
      run: node_modules/.bin/eslint build docs lib script spec-main -f node_modules/@microsoft/eslint-formatter-sarif/sarif.js -o results.sarif || true
    # Uploads results.sarif to GitHub repository using the upload-sarif action
    - uses: github/codeql-action/upload-sarif@v1
      with:
        # Path to SARIF file relative to the root of the repository
        sarif_file: results.sarif

参考リンク

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

OR, learn how to contribute.