-
Notifications
You must be signed in to change notification settings - Fork 2
147 lines (136 loc) · 5.66 KB
/
codeql.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# ## Summary
#
# 変更されたファイルの拡張子をチェックし、結果に応じた言語のCodeQLワークフローを呼び出す
# ## Background
#
# ROUTE06では元々Code Scanningのデフォルト設定を使用していたが、
# 運用のなかで以下のような課題が見つかるようになった。
# ・ドキュメントのみの修正にも関わらず、すべてのプログラミング言語用のジョブが動く
# ・解析しなくてよいディレクトリ配下の指摘が多数見つかる
# 前述の課題を解決すべくデフォルト設定を使用せず、自前でワークフローを定義している。
# ## Setup
#
# リポジトリの Settings > Code security から、GitHub Advanced Security を有効化してください。
# https://github.com/{owner}/{repo}/settings/security_analysis
# ## Usage
#
# name: Run CodeQL
#
# on:
# push:
#
# permissions:
# actions: read
# checks: read
# contents: read
# security-events: write
#
# jobs:
# codeql:
# uses: route06/actions/.github/workflows/codeql.yml@v2
# ## Usage note
#
# マージキューを活用しているリポジトリでは、
# ジョブの実行ブランチが下記の命名規則に沿ったブランチになることがある
# gh-readonly-queue/{base_branch}/pr-{pr_num}-{base_branch_hash}
# この場合、上述のブランチはリモートには存在しないためdorny/paths-filterが失敗する場合がある
# その際は下記のようにブランチの除外条件を追加してください
# on:
# push:
# branches-ignore:
# - gh-readonly-queue/main/pr-*
name: Run CodeQL
on:
workflow_call:
jobs:
changes:
name: Filter Paths
runs-on: ubuntu-latest
timeout-minutes: 10
outputs:
languages: ${{ steps.format.outputs.languages }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
# GitHub Actions組み込みのpathsによるフィルタでは、そのymlで実行する複数のjobそれぞれでpathsによる分岐ができない
# そのため https://github.com/dorny/paths-filter を使い、フィルタのjob → 各jobの順で実行することで複数jobの分岐を実現する
- name: Determine languages
id: determine
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
with:
# ここで指定したkeyがoutputsに出力される
#
# 拡張子の一覧は以下を参考にしている
# https://codeql.github.com/docs/codeql-overview/supported-languages-and-frameworks/#languages-and-compilers
#
# JavascriptとTypeScriptの拡張子は意図的に同じキーにまとめている
# これはCodeQL内部で解析対象として、これらを同一に扱っていることに由来する
# https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning?learn=code_security_actions&learnProduct=code-security#changing-the-languages-that-are-analyzed
filters: |
go:
- added|modified: '**/*.go'
java:
- added|modified: '**/*.kt'
- added|modified: '**/*.kts'
- added|modified: '**/*.ktm'
javascript:
- added|modified: '**/*.js'
- added|modified: '**/*.jsx'
- added|modified: '**/*.mjs'
- added|modified: '**/*.es'
- added|modified: '**/*.es6'
- added|modified: '**/*.htm'
- added|modified: '**/*.html'
- added|modified: '**/*.xhtm'
- added|modified: '**/*.xhtml'
- added|modified: '**/*.vue'
- added|modified: '**/*.hbs'
- added|modified: '**/*.ejs'
- added|modified: '**/*.njk'
- added|modified: '**/*.json'
- added|modified: '**/*.yaml'
- added|modified: '**/*.yml'
- added|modified: '**/*.raml'
- added|modified: '**/*.xml'
- added|modified: '**/*.ts'
- added|modified: '**/*.tsx'
- added|modified: '**/*.mts'
- added|modified: '**/*.cts'
python:
- added|modified: '**/*.py'
ruby:
- added|modified: '**/*.rb'
- added|modified: '**/*.erb'
- added|modified: '**/*.gemspec'
- added|modified: '**/Gemfile'
swift:
- added|modified: '**/*.swift'
- added|modified: '**/*.plist'
- added|modified: '**/*.storyboard'
- added|modified: '**/*.xib'
- name: Format filtered languages
id: format
uses: actions/github-script@v7
with:
script: |
const outputs = {
go: ${{ steps.determine.outputs.go }},
java: ${{ steps.determine.outputs.java }},
javascript: ${{ steps.determine.outputs.javascript }},
python: ${{ steps.determine.outputs.python }},
ruby: ${{ steps.determine.outputs.ruby }},
swift: ${{ steps.determine.outputs.swift }},
};
const languages = Object.keys(outputs)
.filter(lang => outputs[lang]);
core.setOutput('languages', JSON.stringify(languages));
languages:
needs: changes
if: ${{ needs.changes.outputs.languages != '[]' }}
strategy:
fail-fast: false
matrix:
language: ${{ fromJson(needs.changes.outputs.languages) }}
uses: ./.github/workflows/codeql_core.yml
with:
language: ${{ matrix.language }}