Repository navigation
187 lines (161 loc) · 6.92 KB
/
Copy pathcodeql.yml
File metadata and controls
187 lines (161 loc) · 6.92 KB
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
name: "CodeQL Advanced"
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
schedule:
- cron: "44 14 * * 1"
# GitHub Actions画面から手動実行できるようにする
workflow_dispatch:
jobs:
analyze:
name: Analyze (${{ matrix.language }})
runs-on: ubuntu-latest
# GradleやCodeQLが停止した場合に無制限に実行し続けないための上限
timeout-minutes: 60
permissions:
# Code scanningの解析結果を登録するために必要
security-events: write
# CodeQL query packや依存関係の取得に使用
packages: read
# リポジトリ読み取り
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
# Goはこれまでどおり自動ビルド
- language: go
build-mode: autobuild
# Kotlinは自動ビルドに失敗するため手動ビルド
- language: java-kotlin
build-mode: manual
# JavaScript / TypeScriptはビルド不要
- language: javascript-typescript
build-mode: none
steps:
# ------------------------------------------------------------
# リポジトリ取得
# ------------------------------------------------------------
- name: Checkout repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
# ------------------------------------------------------------
# Android / Kotlinの実行環境
#
# AGP 8.9.0を動かすため、JDK 17を使用する。
# Gradleキャッシュもここで有効化する。
# ------------------------------------------------------------
- name: Set up JDK 17
if: matrix.language == 'java-kotlin'
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: temurin
java-version: "17"
cache: gradle
cache-dependency-path: |
src/android/**/*.gradle*
src/android/gradle/libs.versions.toml
src/android/gradle/wrapper/gradle-wrapper.properties
src/wear_os/**/*.gradle*
src/wear_os/gradle/libs.versions.toml
src/wear_os/gradle/wrapper/gradle-wrapper.properties
# ------------------------------------------------------------
# CodeQL初期化
#
# Java/Kotlinの場合、この処理より後に実行されたコンパイルを
# CodeQLが追跡して解析データベースを作る。
# ------------------------------------------------------------
- name: Initialize CodeQL
uses: github/codeql-action/init@24c54180a607b1449ed407dd24f251e4e9147c8d # v4
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# 実行するクエリスイートと解析対象パスは設定ファイル側で定義している
config-file: ./.github/codeql/codeql-config.yml
# ------------------------------------------------------------
# Gradle Wrapper確認
#
# Wrapper関連ファイルが不足している場合に、
# 分かりやすい場所で失敗させる。
# ------------------------------------------------------------
- name: Verify Gradle wrappers
if: matrix.language == 'java-kotlin'
shell: bash
run: |
test -f src/android/gradlew
test -f src/android/gradle/wrapper/gradle-wrapper.jar
test -f src/android/gradle/wrapper/gradle-wrapper.properties
test -f src/wear_os/gradlew
test -f src/wear_os/gradle/wrapper/gradle-wrapper.jar
test -f src/wear_os/gradle/wrapper/gradle-wrapper.properties
chmod +x src/android/gradlew
chmod +x src/wear_os/gradlew
# ------------------------------------------------------------
# CodeQL解析用のKotlinバージョン固定
#
# CodeQLのKotlin extractorは 2.4.10 未満にしか対応しておらず、
# 2.4.10 のままだと compileDebugKotlin が
# KotlinVersionTooRecentError で落ちて解析が一切行われない
# (java-kotlinの解析結果が0件のままになる)。
# ここでの書き換えはCIの作業ツリー限りで、コミットはしない。
# CodeQLが 2.4.10 に対応したらこのステップごと削除する。
# ------------------------------------------------------------
- name: Pin Kotlin version for CodeQL
if: matrix.language == 'java-kotlin'
shell: bash
run: |
sed -i 's/^kotlin = ".*"/kotlin = "2.4.0"/' \
src/android/gradle/libs.versions.toml \
src/wear_os/gradle/libs.versions.toml
grep -n '^kotlin' \
src/android/gradle/libs.versions.toml \
src/wear_os/gradle/libs.versions.toml
# ------------------------------------------------------------
# AndroidアプリのKotlin / Javaをビルド
#
# 対象:
# src/android/app
# ------------------------------------------------------------
# --no-build-cache が要る理由:
# CodeQLはinit以降に走ったコンパイルを追跡して解析データベースを作る。
# ビルドキャッシュ(org.gradle.caching=true)が効くとコンパイルタスクが
# キャッシュから復元されて実際には走らないため、CodeQLは何も観測できず
# 「didn't build any of it」で解析ごと失敗する。
# キャッシュが温まった2回目以降に必ず起きるので、ここでは無効にする。
- name: Build Android application
if: matrix.language == 'java-kotlin'
working-directory: src/android
shell: bash
run: |
./gradlew \
:app:assembleDebug \
--no-build-cache \
--no-daemon \
--stacktrace
# ------------------------------------------------------------
# Wear OSアプリのKotlin / Javaをビルド
#
# 対象:
# src/wear_os/watch_app
# src/wear_os/phone_companion
# ------------------------------------------------------------
- name: Build Wear OS applications
if: matrix.language == 'java-kotlin'
working-directory: src/wear_os
shell: bash
run: |
./gradlew \
:watch_app:assembleDebug \
:phone_companion:assembleDebug \
--no-build-cache \
--no-daemon \
--stacktrace
# ------------------------------------------------------------
# 解析実行・GitHubへの結果登録
# ------------------------------------------------------------
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@24c54180a607b1449ed407dd24f251e4e9147c8d # v4
with:
category: "/language:${{ matrix.language }}"