Azure Pipelines でバックグランドタスクを実行する方法
appium をバックグラウンドで実行しておき、E2E テストを別タスクで実行したかったのだけれど、普通に appium &
を実行するとここで当該タスクが終了せずに待ち続ける...
なので、START /B <コマンド>
と呼び出せば OK。
- script: | START /B npm run start-background displayName: 'Run appium server'
参考
Prettier の Options デフォルト値
デフォルト値がちょこちょこ変わっていたりするのでメモしておこうと。2023-7-6 現在最新の v3.0.0 をベースにしています。公式ドキュメントで [Deprecated]
となっているものは記載していません。
printWidth: 80 tabWidth: 2 useTabs: false semi: true singleQuote: false quoteProps: "as-needed" jsxSingleQuote: false trailingComma: "all" bracketSpacing: true bracketSameLine: false arrowParens: "always" rangeStart: 0 # デフォルト値は無限大。実際の値は数値で指定。 # rangeEnd: Infinity parser: "none" filepath: "none" requirePragma: false insertPragma: false proseWrap: "preserve" htmlWhitespaceSensitivity: "css" vueIndentScriptAndStyle: false endOfLine: "lf" embeddedLanguageFormatting: "auto" singleAttributePerLine: false
公式ドキュメントはここ。 prettier.io
ちなみに、Prettier と重複している EditorConfig の設定は以下の 4 つ。
end_of_line
indent_style
indent_size/tab_width
max_line_length
更新履歴
- 2023-7-6
- v3.0.0 で
trailingComma
のデフォルト値がes5
からall
に変更 bracketSpacing
追加
- v3.0.0 で
GitHub Actions から git で commit & push
Update: 2022/4/13
name: CI on: pull_request: types: [opened, synchronize, reopened] branches: - main paths-ignore: - "docs/**" permissions: contents: write pull-requests: write jobs: setup: runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v3 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.ref }} - name: Setup Node.js environment uses: actions/setup-node@v3 with: node-version: 16 - name: Setup development environment run: | npm install -g npm@8 npm install - name: Commit updated files run: | git config core.filemode false if ! git diff --exit-code --quiet then git add -A git config user.name github-actions git config user.email action@github.com git commit -m "Commit updated files" git push fi
(以下は actions/checkout/v2 までの実装)
GitHub Actions で dotnet ef dbcontext scaffold
した結果、差分があればそのまま commit しちゃいたいなーと思ったので。
- name: git commit & push run: | git config core.filemode false if ! git diff --exit-code --quiet then git add --update git config user.name github-actions git config user.email action@github.com git commit -m "Commit by github-actions" git push https://${{github.actor}}:${{secrets.GITHUB_TOKEN}}@github.com/${{github.repository}}.git HEAD:${{github.ref}} fi
git config core.filemode false
: ファイルのパーミッション変更を無視。if ! git diff --exit-code --quiet
:git diff
で何らかの差分がある時のみ実行。標準出力は--quiet
で抑制。git add --update
: バージョン管理対象のファイルで差分があったものを全てインデックスに追加。${{github.actor}}
: ワークフローの実行を開始したユーザー。${{github.ref}}
: ワークフローの実行をトリガーしたブランチまたはタグ。
Cake v0.24.0 released
2017/12/29にCake v0.24.0がリリースされました!公式ブログ記事を簡単に邦訳しましたので、以下に記載します。
Cakeチームとcontributorsからのささやかな休日の贈り物として、2017年最後のバージョンをリリースしました! このリリースには破壊的変更は含まれておらず、いくつかの改善、バグ修正および新機能が含まれています。
特筆すべき新機能は、Cakeスクリプトランナーに組み込まれたmoduleのbootstrappingです。これは、既に#tool
や#addin
プリプロセッサーディレクティブで可能なように、ビルドスクリプトに#module
でライブラリーを指定することで、対象のmoduleをNuGetからダウンロードおよびインストールすることができます。
#module nuget:?package=Cake.UrlLoadDirective.Module&version=1.0.2
moduleはCakeの内部構造を変更・拡張することができるため、このbootstrappingはCakeスクリプト実行の前に実施する必要があることには注意が必要です。これは、通常のビルドスクリプトを実行する前に、引数として--bootstrap
を渡してCakeプロセスを開始することで解決できます。
./cake.exe build.cake --bootstrap ./cake.exe build.cake
大きな改善として、Roslyn 2.6.1にアップグレードしたことにより、ビルドスクリプト中でC# 7.2がサポートされるようになりました。
そして、Cakeのcontributorおよびユーザーの方々に感謝します。Cakeはあなた方抜きでは存在し得ません!
本リリースのcontributor:
- patriksvensson
- holytshirt
- gep13
- devlead
- phillipsj
- Marusyk
- johankson
- kcamp
- Cheesebaron
- onovotny
- Sam13
- robsammons
- mholo65
- Richard J Foster
- DorSoluto
- Thealexbarney
- djdelaney
- gabrielweyer
- BKDEVCONSTRUCTIV
- Bert Van Steen
本リリースの詳細は以下の通りです。
本リリースで、私たちは33のissuesをcloseしました。
Features
- #1950 Allow Cake modules to be bootstrapped by Cake in a pre-processing phase
- #1833 NUnit: Add support for /labels
- #1653 Add Before and After options to NUnit3Labels enum
- #74 MSpec support
Bugs
- #1957 Use working directory instead if initial script path for resolving tools directory in NuGetLoadDirectiveProvider
- #1939 Bug - TypeExtensions.GetFullName doesn't handle nested types correctly
- #1933 NuGetPackSettings.Properties does not support whitespaces.
- #1930 The "out" parameters are not compiled properly.
- #1915 Only set working directory on process runner if set in settings
- #1889 XmlPoke ignores BOM encoding settings
- #1874 NuGet script load: Do not add include for all cake scripts when include already specified
Improvements
- #1968 Add interface for AssemblyVerifier so that it can be mocked
- #1960 Update Roslyn to 2.6.1
- #1955 ResultsDirectory is missing from DotNetCoreTestSettings
- #1952 Add support for class/namespace/method arguments for XUnit2
- #1946 Add option to pack files into the NuGet tool directory
- #1943 Chocolatey package dependencies cannot be set using the ChocolateyPackSettings
- #1936 Move to signing service v2
- #1931 Allow passing a nuget.config as environment variable or in cake.config
- #1924 Set UserAgent for in process nuget
- #1922 GitVersion is missing AssemblySemFileVer
- #1912 Support for DotCover Process Filter
- #1910 MSBuild property values should escape carriage return and line feed
- #1855 SignTool is not found with latest windows 10 SDK
- #1796 Obsolete DotNetBuild and ultimately remove it
- #1692 Log script compilation warnings and other diagnostics
- #1522 The MSTest tool doesn't pick up the mstest.exe from Visual Studio 2017
Documentation
- #1811 Add code sample to build system properties
Cake Intellisense in Visual Studio Code
2017/11/8にやっとCakeでIntellisenseが効くようになりました!公式ブログ記事を簡単に邦訳しましたので、以下に記載します。
Intellisense
もしかしたらもう気づいたかもしれませんが、CakeチームはVisual Studio CodeでCakeファイルを編集中にIntellisenseが効くよう開発をおこなってきました。今日、OmniSharpが私たちのプルリクエスト(#932および#1681)をmergeし、Cakeのサポートを含むC# extension for Visual Studio Codeのv1.13.0がリリースされたことをアナウンスすることができ、大変嬉しく思います。これに加え、私たちはbakeryという新しいツールをリリースしました。これはスクリプト解析/コード生成ツールエンジンであり、CakeのIntellisenseを可能にしています。bakeryのより詳細な情報や、バックグラウンドで何が起こっているのかについては、後日ブログで紹介します。
How
どうやってIntellisenseを有効化するのでしょうか?それでは以下の手順に従ってください(Visual Studio Codeは既にインストール済みであると仮定します)。
- Visual Studio Codeを起動し、Cakeファイルの存在するフォルダへ移動します。
- C# for Visual Studio Codeのv1.13.0がインストールされていることを確認します。
- Visual Studio Code Extension for Cakeのv0.10.1がインストールされていることを確認します。
- Cakeが
tools
フォルダにインストールされていることを確認します。addinが2回インストールされることを避けるため、v0.22.0以降を推奨します。最も簡単な方法は、.\build.ps1
を実行することです。 - Bakeryが
tools
フォルダにインストールされていることを確認します。最も簡単な方法は、Visual Studio Code Extension for CakeのInstall intellisense support
コマンドを実行することです。コマンドパレットを開いて「cake」と入力し、当該オプションを選択してください。 - ここで、Visual Studio Code上で当該フォルダを閉じ、再び開く必要があります。
- Success!
Troubleshooting
Q: 上記手順を実行しましたが、Intellisenseが有効になりません。
C# Extension for Visual Studio Codeは、全ての*.sln
ファイルを検知し、omnisharp
起動時にそのディレクトリを対象とします。もし*.cake
ファイルが異なる階層に配置されていた場合、project selectorでCake
プロジェクトを選択する必要があります。
Q: Cake
プロジェクトを選択しましたが、Intellisenseが有効になりません。
OmniSharp Log
にエラーや警告が表示されていないかどうか確認してください。
[warn]: OmniSharp.Cake.CakeProjectSystem Cake script service not connected. Aborting.
上記のログは、Cake.Bakery
がtools
フォルダにインストールされていないことを示しています。それに対して、以下のログは大抵の場合、Cake
がtools
フォルダにインストールされていないことを示しています(よりよいエラーメッセージに向けて修正中です)。
[fail]: OmniSharp.Cake.CakeProjectSystem c:\Users\mb\src\gh\bakery\setup.cake will be ignored due to an following error System.TypeLoadException: A null or zero length string does not represent a valid Type.
Q: エラーメッセージは表示されていませんが、それでもIntellisenseが有効になりません。
OmniSharp Log
を表示し、Cake
に関係する箇所を探してください。もし適切にセットアップされていれば、少なくとも以下のようなログが表示されているはずです。
[info]: OmniSharp.Cake.CakeProjectSystem Detecting Cake files in 'c:\Users\mb\src\gh\bakery'. [info]: OmniSharp.Cake.CakeProjectSystem Found 29 Cake files.
表示されていない場合、C#拡張機能v1.13.0のインストール時に問題が発生した可能性があります。拡張機能を一度アンインストールし、その後再度インストールしてみてください。その後、Windowsの場合は%userprofile%\.vscode\extensions\ms-vscode.csharp-1.13.0\.omnisharp\
、LinuxないしmacOSの場合は~/.vscode/extensions/ms-vscode.csharp-1.13.0/.omnisharp/
を開き、OmniSharp.Cake.dll
が存在することを確認してください。
Q: Intellisenseが有効になりましたが、その後追加したファイルが表示されません。
これはomnisharp
の既知の問題であり、*.csx
でも同様です。omnisharp
チームとともに今後のリリースで改善されるよう取り組んでいます。
Q: Cake.CoreCLR
がtools
フォルダにインストールされていればそれで充分でしょうか。
いいえ、現時点ではCake.CoreCLR
ではIntellisenseが有効になりません。
Q: 上記全てを試しましたが、まだIntellisenseが有効になりません。
Cake-Intellisence beta
※2017/11/07
C# Extension v1.13.0 beta5がリリースされたので、該当箇所を更新しました。
最近よく使っているCake。そろそろIntelliSenseが効くようになりそうです!
Visual Studio CodeのC# Extension v1.13.0からサポートされる予定ですが、現在beta5で動作確認できます。
以下、簡単な検証方法です(くれぐれも自己責任で!)。
Cake IntelliSence検証手順
- Visual Studio CodeのC#拡張を既にインストールしている場合はアンインストール。
- ここからcsharp-1.13.0-beta5.vsixをダウンロード。
- ダウンロードしたVSIXをインストール。
- Cake Extensionをインストールしていない場合はインストール。
- F1 → Cake: Install intellisence support
/tools
ディレクトリにCake.Bakery
がダウンロードされます。 - 対象の.cakeファイルを開き、Omnisharpと.NET Core Debuggerがインストールされるのを確認。
- 右下のSwitch projectsを選択。
- Cakeを選択。
- こんな感じでIntelliSenseが効くようになっているはず!
F12も使えます。
いやーリリースが待ち遠しい!
Cakeビルド時エラー:Unknown token (2)
去年、Cakeビルド時のエラーについて触れました。
ビルド対象のプロジェクトのパスにマルチバイト文字が含まれているとエラーになります。 0.15.2まではうまくいってたんだけど、0.16.0からエラーになるみたい。
その後ソースを確認してみたところ、どうもTool(NuGet)を.cakeファイル内で読み込もうとすると、Globbingの際に一文字ずつこんな条件を満たすかどうかチェックしてるっぽい。
new Regex("^[0-9a-zA-Z\\+&%!@(). _-]$", RegexOptions.Compiled).IsMatch(character.ToString())
パスに使えない文字だけをホワイトリスト方式で検出するようにPR送ってもいいけど、対策見つけたんでちょっと保留。
対策
.cakeファイル内に#tool nuget:?package=NUnit.ConsoleRunner&version=3.4.0
と書いてNuGetパッケージを読み込むのではなく、tools
ディレクトリ内にpackages.config
を置いてこんな感じに書いておく。
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="Cake" version="0.19.3" /> <package id="NUnit.ConsoleRunner" version="3.4.0" /> </packages>
そうすると、bootstrapperを走らせた時にNuGetパッケージも復元してくれるので、パスにマルチバイト文字が含まれていてもビルド時にエラーにはならない(参考)。
マルチバイト文字なんか使わないのが一番なんだけど、リポジトリの都合上仕方がない場面もあるかと思います。そんな時は、bootstrapperでNuGet復元するようにしましょう。