diff --git a/.gitignore b/.gitignore index 93931df849..7c92721e53 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ msbuild-*.log msbuild-*.log.csv msbuild-*.log.xlsx sha256.txt +*.bak *.pyc /tests/build /cppcheck-install.log @@ -20,3 +21,6 @@ tags testData_*.txt html doxygen*.log +.sonarqube +build-wrapper-win-x86* +bw-output diff --git a/README.md b/README.md index 59623fc239..9ffcba80f5 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ [![License: Zlib](https://img.shields.io/badge/License-Zlib-lightgrey.svg)](https://opensource.org/licenses/Zlib) [![CodeFactor](https://www.codefactor.io/repository/github/sakura-editor/sakura/badge)](https://www.codefactor.io/repository/github/sakura-editor/sakura) [![Build Status](https://dev.azure.com/sakuraeditor/sakura/_apis/build/status/sakura-editor.sakura?branchName=master)](https://dev.azure.com/sakuraeditor/sakura/_build/latest?definitionId=3&branchName=master) +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=sakura-editor_sakura&metric=alert_status)](https://sonarcloud.io/dashboard?id=sakura-editor_sakura) diff --git a/SonarQube.md b/SonarQube.md new file mode 100644 index 0000000000..82f839d4a5 --- /dev/null +++ b/SonarQube.md @@ -0,0 +1,236 @@ +# SonarQube + + + + +[sonarsource]: https://www.sonarsource.com/ "SonarSource" +[SonarQube]: https://www.sonarsource.com/products/sonarqube/ "SonarQube" +[SonarCloud]: https://sonarcloud.io/about "SonarCloud" +[SonarScanner for MSBuild (SonarScanner.MSBuild.exe)]: https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+MSBuild "SonarScanner for MSBuild (SonarScanner.MSBuild.exe)" +[chocolatey]: https://chocolatey.org/ "chocolatey" +[build-wrapper-win-x86.zip]: https://sonarcloud.io/static/cpp/build-wrapper-win-x86.zip "https://sonarcloud.io/static/cpp/build-wrapper-win-x86.zip" +[Git for Windows]: https://gitforwindows.org/ "Git for Windows" +[curl]: https://curl.haxx.se/download.html "curl" +[build-sln.bat]: build-sln.bat "build-sln.bat" +[build-sonar-qube-env.bat]: build-sonar-qube-env.bat "build-sonar-qube-env.bat" +[build-sonar-qube-start.bat]: build-sonar-qube-start.bat "build-sonar-qube-start.bat" +[build-sonar-qube-finish.bat]: build-sonar-qube-finish.bat "build-sonar-qube-finish.bat" +[azure pipelines の sakura editor のプロジェクト]: https://dev.azure.com/sakuraeditor/sakura "https://dev.azure.com/sakuraeditor/sakura" +[Azure Pipelines の Secret Variable]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch&viewFallbackFrom=vsts#secret-variables +[Azure Pipelines の variables]: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch +[Azure Pipelines の timeoutInMinutes]: https://docs.microsoft.com/ja-jp/azure/devops/pipelines/process/phases?view=azure-devops&tabs=yaml#timeouts +[Azure Pipelines の Predefined build variables]: https://docs.microsoft.com/ja-jp/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml +[Azure Pipelines の conditon]: https://docs.microsoft.com/ja-jp/azure/devops/pipelines/process/conditions?view=azure-devops&viewFallbackFrom=vsts&tabs=yaml +[appveyor の Secure Variables]: https://www.appveyor.com/docs/build-configuration/#secure-variables + + + + +## SonarQube および SonarCloud + +### SonarQube + +[SonarQube][SonarQube] は +[sonarsource][sonarsource] が提供する静的解析サービス。 + + +### SonarCloud + +[SonarCloud][SonarCloud] は [SonarQube][SonarQube] のクラウド版。 +いつものごとく、オープンソースに対してはタダです。 + +サクラエディタのソースコード解析には 1時間半ほどかかるので、並列実行が可能な Azure Pipelines で夜間の定期タスクのみで解析を実施します。 +(Appveyor では実施しない。定期タスク以外でも実施しない。) + +## SonarQube のローカルでの使用方法 + +### SonarQube のアカウント設定 + +https://sonarcloud.io/sessions/new にアクセスして GitHub アカウントでログインします。 + +### プロジェクトの作成 + +https://sonarcloud.io/projects/create にアクセスしてプロジェクトを作成します。 + +- Organization 名をメモしておきます。 +- Project 名をメモしておきます。 +- Access Token をメモしておきます。 +**この情報はパスワードと同じ意味を持つので漏れないように注意します。** + +### ローカルで実行する場合の環境設定 (事前準備) + +1. https://www.java.com/ja/download/ から JAVA のランタイムをダウンロードしてインストールする +1. `JAVA_HOME` の環境変数を設定する + + 例 + + `set JAVA_HOME=C:\Program Files (x86)\Java\jre1.8.0_201` + +1. https://chocolatey.org/install#install-with-cmdexe を参考に chocolatey をインストールする。 + +### 解析手順の流れ (一般論) + +1. [chocolatey] で [SonarScanner for MSBuild (SonarScanner.MSBuild.exe)][SonarScanner for MSBuild (SonarScanner.MSBuild.exe)] をダウンロードする +1. curl で [build-wrapper-win-x86.zip] をダウンロードして解凍する +1. `C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe begin` を呼ぶ。 +1. `build-wrapper-win-x86.zip` の中の `build-wrapper-win-x86-64.exe` を使って msbuild.exe を起動する。 +1. `C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe end` を呼ぶ。 + +メモ: [curl] は [Git for Windows] をインストールすると `C:\Program Files\Git\mingw64\bin\curl.exe` にインストールされて、自動的にパスも通されます。 + +### 解析手順の流れ (サクラエディタ) + +1. [chocolatey] で [SonarScanner for MSBuild (SonarScanner.MSBuild.exe)] をダウンロードする + 1. `choco install "msbuild-sonarqube-runner" -y` +1. [build-sln.bat] でソリューションをビルドする + 1. [build-sonar-qube-start.bat] で SonarQube の準備を行う。 + 1. [build-sonar-qube-env.bat] を呼び出し必要な環境変数の設定を行う。 + 1. curl で [build-wrapper-win-x86.zip] をダウンロードして解凍する。 + 1. `C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe begin` を呼んで SonarQube の解析を開始する。 + 1. [build-wrapper-win-x86.zip] の中の `build-wrapper-win-x86-64.exe` 経由で `msbuild.exe` を起動する。 + 1. [build-sonar-qube-finish.bat] で SonarQube の解析結果を [SonarCloud] のサーバーに結果を送る。 + 1. `C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe end` を呼ぶ。 + +## サクラエディタを SonarQube でビルドする手順 + +`SONAR_QUBE_TOKEN` の値は SonarQube のサイトにログインして確認できます。 + +`SONAR_QUBE_ORG` と `SONAR_QUBE_PROJECT` と `SONAR_QUBE_TOKEN` の値はそれぞれ自分が作成したものに読み替えてください。 + +``` +set SONAR_QUBE=Yes +set SONAR_QUBE_ORG=sakura-editor +set SONAR_QUBE_PROJECT=sakura-editor_sakura +set SONAR_QUBE_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +build-sln.bat Win32 Release +``` + +## SonarQube に関する情報 + +### SonarQube の使用方法に関するサイト + +- https://www.appveyor.com/blog/2016/12/23/sonarqube/ +- https://docs.sonarqube.org/7.4/analysis/analysis-parameters/ + +### SonarScanner の使用方法 + +https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+MSBuild#AnalyzingwithSonarQubeScannerforMSBuild-Usage + +## CI でのビルド + +### azure pipelines の設定 + +#### 環境変数 + +1. [azure pipelines の sakura editor のプロジェクト] にアクセスします。 +2. `Pipelines` を選ぶ +3. `Edit` ボタンを押す +4. `Run` の右隣りのアイコンをクリックする +5. `Variables` のボタンを押す +6. `Pipelines Variables` で `Add` を押す +7. `SONAR_QUBE_ORG` と `SONAR_QUBE_PROJECT` を追加してそれぞれ値を設定する +8. `SONAR_QUBE_TOKEN` を追加して値を設定し、 鍵のアイコンをクリックする (重要) +9. `Save & Queue` で `Save` を選ぶ + + ![環境変数の設定画面](azure-SonarQube.png) + +#### スケジュール設定 + +1. [azure pipelines の sakura editor のプロジェクト] にアクセスします。 +2. `Pipelines` を選ぶ +3. `Edit` ボタンを押す +4. `Run` の右隣りのアイコンをクリックする +5. `Triggers` のボタンを押す +6. `Scheduled` の `Add` をクリックする + ![スケジュール設定1](azure-SonarQube-schedule1.png) +7. 実行させたいスケジュールを設定して、実行させる対象ブランチを設定する + ![スケジュール設定2](azure-SonarQube-schedule2.png) +8. 設定を保存する + ![スケジュール設定3](azure-SonarQube-schedule3.png) + +#### azure-pipelines.yml の設定 + +##### Job の設定 + +``` +- job: SonarQube + timeoutInMinutes: 120 + variables: + SONAR_QUBE: Yes + condition: + eq(variables['Build.Reason'], 'Schedule') +``` + +1. SonarQube の実行には時間がかかるので [Azure Pipelines の timeoutInMinutes] の設定を行いタイムアウト時間を延ばす +1. [Azure Pipelines の variables] の設定で `SONAR_QUBE` の環境変数を定義して、[build-sln.bat] に [SonarQube] を有効にしたビルドであると伝える +1. [Azure Pipelines の Predefined build variables] のうち `Build.Reason` を参照して、どういうトリガーでビルドが行われたかを yaml の中からあるいはビルド用のバッチファイル等から参照することができる。 + - `Build.Reason` を yaml の中で参照するとき `variables['Build.Reason']` + - `Build.Reason` を バッチファイル の中で参照するとき `BUILD_REASON` +1. [Azure Pipelines の conditon] でビルドトリガーの条件を設定する。条件指定では and や or の条件を指定することができる。 + + `Build.Reason` としてどういう値を設定できるかは [Azure Pipelines の variables] の `Build.Reason` に説明がある。 + + +例: ビルドトリガーが定期実行のとき + +``` + condition: + eq(variables['Build.Reason'], 'Schedule') +``` + + +例: ビルドトリガーが定期実行でも PullRequest でもないとき + +``` + condition: + and + ( + ne(variables['Build.Reason'], 'Schedule'), + ne(variables['Build.Reason'], 'PullRequest') + ) +``` + +##### Steps の設定 + + +``` +steps: +- script: choco install "msbuild-sonarqube-runner" -y + displayName: install msbuild-sonarqube-runner + +# Build solution with SonarQube +- script: build-sln.bat $(BuildPlatform) $(Configuration) + displayName: Build solution with SonarQube + + env: + SONAR_QUBE_ORG: $(SONAR_QUBE_ORG) + SONAR_QUBE_PROJECT: $(SONAR_QUBE_PROJECT) + SONAR_QUBE_TOKEN: $(SONAR_QUBE_TOKEN) +``` + +1. `choco install "msbuild-sonarqube-runner" -y` を実行して `SonarScanner.MSBuild.exe` をインストールする +2. `script` で `build-sln.bat` を実行する +3. `env` で `環境変数` のところで設定した環境変数が有効になるように設定する。 + + [Azure Pipelines の Secret Variable] の項目を参照 + +### Appveyor の設定 + +**appveyor で実施する場合、タイムアウトになってビルドに成功しないので現状で使用していない ** + +Appveyor のプロジェクトで Settings の Environment にアクセスして `Add variable` を押して環境変数を追加する。 + +|変数名|意味|注意| +|--|--|--| +|SONAR_QUBE_ORG|Sonar Qube のOrganization 識別子|| +|SONAR_QUBE_PROJECT|Sonar Qube のプロジェクト識別子|| +|SONAR_QUBE_TOKEN|Sonar Qube のアクセスキー (API キー)|追加するとき右の鍵マークを押して秘密の環境変数に設定する| + +![環境変数の設定画面](appveyor-SonarQube.png) + + +#### Secure the GitHub Authentication token + +SonarQube で使用するアクセストークンを暗号化するために使用する + +[appveyor の Secure Variables] diff --git a/appveyor-SonarQube.png b/appveyor-SonarQube.png new file mode 100644 index 0000000000..33e96ce268 Binary files /dev/null and b/appveyor-SonarQube.png differ diff --git a/azure-SonarQube-schedule1.png b/azure-SonarQube-schedule1.png new file mode 100644 index 0000000000..2b52f441b4 Binary files /dev/null and b/azure-SonarQube-schedule1.png differ diff --git a/azure-SonarQube-schedule2.png b/azure-SonarQube-schedule2.png new file mode 100644 index 0000000000..6449469071 Binary files /dev/null and b/azure-SonarQube-schedule2.png differ diff --git a/azure-SonarQube-schedule3.png b/azure-SonarQube-schedule3.png new file mode 100644 index 0000000000..1def333d1d Binary files /dev/null and b/azure-SonarQube-schedule3.png differ diff --git a/azure-SonarQube.png b/azure-SonarQube.png new file mode 100644 index 0000000000..ac2ac87021 Binary files /dev/null and b/azure-SonarQube.png differ diff --git a/azure-pipelines.md b/azure-pipelines.md index 9ad195d3ab..a825754a3c 100644 --- a/azure-pipelines.md +++ b/azure-pipelines.md @@ -53,6 +53,7 @@ https://azure.microsoft.com/ja-jp/services/devops/pipelines/ にアクセスし - [azure-pipelines.yml](azure-pipelines.yml) 最上位の設定ファイル - [ci/azure-pipelines/template.job.build-unittest.yml](ci/azure-pipelines/template.job.build-unittest.yml) sakura editor 本体のビルド、HTML ヘルプのビルド、インストーラのビルド、単体テストのビルド、実行 - [ci/azure-pipelines/template.steps.install-python-modules.yml](ci/azure-pipelines/template.steps.install-python-modules.yml) 必要な python モジュールのインストール + - [ci/azure-pipelines/template.job.SonarQube.yml](ci/azure-pipelines/template.job.SonarQube.yml) SonarQube での解析 - [ci/azure-pipelines/template.job.checkEncoding.yml](ci/azure-pipelines/template.job.checkEncoding.yml) 文字コードの確認 - [ci/azure-pipelines/template.job.cppcheck.yml](ci/azure-pipelines/template.job.cppcheck.yml) cppcheck の実行 - [ci/azure-pipelines/template.job.doxygen.yml](ci/azure-pipelines/template.job.doxygen.yml) doxygen の実行 @@ -60,7 +61,7 @@ https://azure.microsoft.com/ja-jp/services/devops/pipelines/ にアクセスし ## Azure Pipelines の template ファイルの命名規則 -| JOB 名 | 説明 | job を定義する template | +| JOB 名 | 説明 | ドキュメント | ----|----|---- |template.job.***.yml | job を定義する template | [Job reuse](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops#job-reuse) | |template.steps.***.yml | steps を定義する template | [Step re-use](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops#step-re-use) | @@ -70,6 +71,7 @@ https://azure.microsoft.com/ja-jp/services/devops/pipelines/ にアクセスし | JOB 名 | 説明 | job を定義する template | ----|----|---- |VS2017 | サクラエディタのビルドを行う | [ci/azure-pipelines/template.job.build-unittest.yml](ci/azure-pipelines/template.job.build-unittest.yml) | +|SonarQube | SonarQube での解析を行う | [ci/azure-pipelines/template.job.SonarQube.yml](ci/azure-pipelines/template.job.SonarQube.yml) | |cppcheck | cppcheck を行う | [ci/azure-pipelines/template.job.cppcheck.yml](ci/azure-pipelines/template.job.cppcheck.yml) | |doxygen | doxygen を行う | [ci/azure-pipelines/template.job.doxygen.yml](ci/azure-pipelines/template.job.doxygen.yml) | |checkEncoding | 文字コードのチェックを行う | [ci/azure-pipelines/template.job.checkEncoding.yml](ci/azure-pipelines/template.job.checkEncoding.yml) | diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7346cef632..e427195f9f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -45,6 +45,13 @@ jobs: vmImage: 'VS2017-Win2016' displayName: VS2017 +# SonarQube で解析を行う JOB +- template: ci/azure-pipelines/template.job.SonarQube.yml + parameters: + name: SonarQube + vmImage: 'VS2017-Win2016' + displayName: SonarQube + # Cppcheck を行う JOB - template: ci/azure-pipelines/template.job.cppcheck.yml parameters: diff --git a/build-sln.bat b/build-sln.bat index ba91c7a87c..42e42eae2a 100644 --- a/build-sln.bat +++ b/build-sln.bat @@ -39,13 +39,30 @@ set LOG_FILE=msbuild-%platform%-%configuration%.log @rem https://msdn.microsoft.com/ja-jp/library/ms171470.aspx set LOG_OPTION=/flp:logfile=%LOG_FILE% -@echo "%CMD_MSBUILD%" %SLN_FILE% /p:Platform=%platform% /p:Configuration=%configuration% /t:"Build" %EXTRA_CMD% %LOG_OPTION% - "%CMD_MSBUILD%" %SLN_FILE% /p:Platform=%platform% /p:Configuration=%configuration% /t:"Build" %EXTRA_CMD% %LOG_OPTION% +call %~dp0build-sonar-qube-start.bat +if errorlevel 1 ( + echo ERROR build %errorlevel% + exit /b 1 +) + +if "%SONAR_QUBE_TOKEN%" == "" ( + @echo "%CMD_MSBUILD%" %SLN_FILE% /p:Platform=%platform% /p:Configuration=%configuration% /t:"Build" %EXTRA_CMD% %LOG_OPTION% + "%CMD_MSBUILD%" %SLN_FILE% /p:Platform=%platform% /p:Configuration=%configuration% /t:"Build" %EXTRA_CMD% %LOG_OPTION% +) else ( + @echo "%BUILDWRAPPER_EXE%" --out-dir %~dp0bw-output "%CMD_MSBUILD%" %SLN_FILE% /p:Platform=%platform% /p:Configuration=%configuration% /t:"Rebuild" %LOG_OPTION% + "%BUILDWRAPPER_EXE%" --out-dir %~dp0bw-output "%CMD_MSBUILD%" %SLN_FILE% /p:Platform=%platform% /p:Configuration=%configuration% /t:"Rebuild" %LOG_OPTION% +) if errorlevel 1 ( echo ERROR in msbuild.exe errorlevel %errorlevel% exit /b 1 ) +call %~dp0build-sonar-qube-finish.bat +if errorlevel 1 ( + echo ERROR build %errorlevel% + exit /b 1 +) + @echo call parse-buildlog.bat %LOG_FILE% call parse-buildlog.bat %LOG_FILE% if errorlevel 1 ( diff --git a/build-sonar-qube-env.bat b/build-sonar-qube-env.bat new file mode 100644 index 0000000000..c3428b72d9 --- /dev/null +++ b/build-sonar-qube-env.bat @@ -0,0 +1,23 @@ +@rem to ensure hide variable SONAR_QUBE_TOKEN +@echo off +if "%SONAR_QUBE_TOKEN%" == "" ( + @echo SONAR_QUBE_TOKEN is not defined. Abort without building. + exit /b 0 +) + +if "%SONAR_QUBE_ORG%" == "" ( + @echo SONAR_QUBE_ORG is not defined. Abort without building. + exit /b 0 +) + +if "%SONAR_QUBE_PROJECT%" == "" ( + @echo SONAR_QUBE_PROJECT is not defined. Abort without building. + exit /b 0 +) + +set URL_BUILDWRAPPER_ZIP=https://sonarcloud.io/static/cpp/build-wrapper-win-x86.zip +set BUILDWRAPPER_ZIP=.\build-wrapper-win-x86.zip +set BUILDWRAPPER_DIR=build-wrapper-win-x86 +set BUILDWRAPPER_EXE=%BUILDWRAPPER_DIR%\build-wrapper-win-x86\build-wrapper-win-x86-64.exe +set SonarScanner_MSBUILD=C:\ProgramData\chocolatey\bin\SonarScanner.MSBuild.exe +exit /b 0 diff --git a/build-sonar-qube-finish.bat b/build-sonar-qube-finish.bat new file mode 100644 index 0000000000..18613ae3f0 --- /dev/null +++ b/build-sonar-qube-finish.bat @@ -0,0 +1,18 @@ +call %~dp0build-sonar-qube-env.bat +if "%SonarScanner_MSBUILD%" == "" ( + echo do nothing + exit /b 0 +) +if "%SONAR_QUBE_TOKEN%" == "" ( + echo do nothing + exit /b 0 +) + +@rem to ensure hide variable SONAR_QUBE_TOKEN +@echo off +"%SonarScanner_MSBUILD%" end /d:sonar.login="%SONAR_QUBE_TOKEN%" +if errorlevel 1 ( + echo ERROR in %SonarScanner_MSBUILD% end errorlevel %errorlevel% + exit /b 1 +) +exit /b 0 diff --git a/build-sonar-qube-start.bat b/build-sonar-qube-start.bat new file mode 100644 index 0000000000..722ad6116f --- /dev/null +++ b/build-sonar-qube-start.bat @@ -0,0 +1,34 @@ +@rem to ensure hide variable SONAR_QUBE_TOKEN +call %~dp0build-sonar-qube-env.bat +if "%SonarScanner_MSBUILD%" == "" ( + echo do nothing + exit /b 0 +) +if "%SONAR_QUBE_TOKEN%" == "" ( + echo do nothing + exit /b 0 +) + +curl %URL_BUILDWRAPPER_ZIP% -o %BUILDWRAPPER_ZIP% +if errorlevel 1 ( + echo ERROR in download from %URL_BUILDWRAPPER_ZIP% + exit /b 1 +) +call %~dp0tools\zip\unzip.bat %BUILDWRAPPER_ZIP% %BUILDWRAPPER_DIR% + +if exist .sonarqube rmdir /s /q .sonarqube + +@rem to ensure hide variable SONAR_QUBE_TOKEN +@echo off +"%SonarScanner_MSBUILD%" begin ^ + /k:"%SONAR_QUBE_PROJECT%" ^ + /o:"%SONAR_QUBE_ORG%" ^ + /d:sonar.cfamily.build-wrapper-output=%~dp0bw-output ^ + /d:sonar.sourceEncoding=UTF-8 ^ + /d:sonar.host.url="https://sonarcloud.io" ^ + /d:sonar.login="%SONAR_QUBE_TOKEN%" +if errorlevel 1 ( + echo ERROR in %SonarScanner_MSBUILD% begin errorlevel %errorlevel% + exit /b 1 +) +exit /b 0 diff --git a/ci/azure-pipelines/template.job.SonarQube.yml b/ci/azure-pipelines/template.job.SonarQube.yml new file mode 100644 index 0000000000..6f88468423 --- /dev/null +++ b/ci/azure-pipelines/template.job.SonarQube.yml @@ -0,0 +1,57 @@ +parameters: + name: '' + vmImage: '' + displayName: '' + +jobs: +- job: ${{ parameters.name }} + displayName: ${{ parameters.displayName }} + pool: + vmImage: ${{ parameters.vmImage }} + + # see https://docs.microsoft.com/ja-jp/azure/devops/pipelines/process/phases?view=azure-devops&tabs=yaml#timeouts + timeoutInMinutes: 120 + + strategy: + maxParallel: 4 + matrix: + Win32_Debug: + BuildPlatform: 'Win32' + Configuration: 'Debug' + Win32_Release: + BuildPlatform: 'Win32' + Configuration: 'Release' + Win64_Debug: + BuildPlatform: 'x64' + Configuration: 'Debug' + Win64_Release: + BuildPlatform: 'x64' + Configuration: 'Release' + + # https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch + variables: + SONAR_QUBE: Yes + + # set condition at https://docs.microsoft.com/ja-jp/azure/devops/pipelines/process/conditions?view=azure-devops&viewFallbackFrom=vsts&tabs=yaml + # see Build.Reason at https://docs.microsoft.com/ja-jp/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml + condition: + #and + #( + # ne(variables['Build.Reason'], 'Schedule'), + # ne(variables['Build.Reason'], 'PullRequest') + #) + eq(variables['Build.Reason'], 'Schedule') + + steps: + - script: choco install "msbuild-sonarqube-runner" -y + displayName: install msbuild-sonarqube-runner + + # Build solution with SonarQube + - script: build-sln.bat $(BuildPlatform) $(Configuration) + displayName: Build solution with SonarQube + + # see https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch&viewFallbackFrom=vsts#secret-variables + env: + SONAR_QUBE_ORG: $(SONAR_QUBE_ORG) + SONAR_QUBE_PROJECT: $(SONAR_QUBE_PROJECT) + SONAR_QUBE_TOKEN: $(SONAR_QUBE_TOKEN) diff --git a/ci/azure-pipelines/template.job.checkEncoding.yml b/ci/azure-pipelines/template.job.checkEncoding.yml index a88b618303..c37e64c77a 100644 --- a/ci/azure-pipelines/template.job.checkEncoding.yml +++ b/ci/azure-pipelines/template.job.checkEncoding.yml @@ -9,6 +9,7 @@ jobs: displayName: ${{ parameters.displayName }} pool: vmImage: ${{ parameters.vmImage }} + steps: # show environmental variables for debug. - script: set