2023-07-16

F# でコマンドレットを書いてる pt.20

久しぶりに pocof の開発をした。 ゆーても .NET 6 → .NET 7 と、 PowerShellGet → PSResourceGet だけ。

.NET 6 → .NET 7 #53

ASP.NET じゃないけどこれがやることわかりやすくまとまってたので参考にした。 Migrate from ASP.NET Core 6.0 to 7.0 | Microsoft Learn

SDK を global.json で固定するようにした。

dotnet new globaljson --sdk-version 7.0.306 --roll-forward latestFeature

その後 *.fsprojTargetFramework を net6.0 → net7.0 にする。 global.json の作成に先んじて TargetFramework を変更してビルドするとうまくいかなかったが、変えるとすんなりいった。キャッシュの影響?

NuGet Gallery | Microsoft.PowerShell.SDK 7.3.6 を見て .NET 7 と互換性がある Microsoft.PowerShell.SDK に変える。 7.2.47.3.6 にした。

これでビルドが通るようになる。

ビルド後に Regex 周りでエラーが出るようになった。 Regex.IsMatchメソッドで型推論できなくなった箇所があったので、型注釈して通るようにする。 IsMatch(ReadOnlySpan<Char>) が .NET 7 から増えたっぽいのでこの影響かなあ。 Regex.IsMatch Method (System.Text.RegularExpressions) | Microsoft Learn

また例外の文面も変わったらしくて、 1 つのテストケースで期待値を新しいものに合わせた。

GitHub Actions の job で actions/setup-dotnet@v3 に指定してるバージョンも 6.0.x7.0.x に変える。

この際 act 使った GitHub Actions の workflow テスト中に Docker が死んでしまった。 最近 disk 容量少なくなってて、 Docker image が pull されたタイミングで枯渇したの原因(一時的に残 100KB くらいになってた。やば)。

解消するために以下を参考にしたが、 dockerd の再起動だけでは解決しなかった。 dockerfile - Docker error with read-only file system unknown - Stack Overflow

結果的に空き容量確保後に PC 再起動したら直った。

これにて .NET 7 化は完了。

PowerShellGet → PSResourceGet #54

変えたのは Publish-ModulePublish-PSResource だけ。 前回の日記 にも追記したが、 Get-ModuleMicrosoft.PowerShell.Core の持ち物だったので変える必要なかった。

WhatIf までの確認に留めている。 というのも、結構パラメータが変わっておりホンマにうまく動くんかこれ...というのがあるため。 PSResourceGet の Issues 見て Publish-PSResource の状況をつかもうとしてるがまだまだあんまわからない。 それに Publish-PSResource の前例を検索してもほぼない。

既存モジュールでいきなりやるのはちょい不安。やるならまずテスト用の module 作ってそれで試すが吉とみた。 が、作るのめんどくせええええ、というのは否めない。

おわり

昔の日記 で書いてた platyPS の prerelease 使うとエラーになる件忘れていてまた引っかかったが、久しぶりの pocof 開発なんとかできてよかった。