kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

WinGetへのパッケージ登録注意点

WinGetのパッケージリポジトリにPackerとGolangを登録しているのですが、PRコメントでいろいろ修正もらったので、備忘録として書いておきます。なんか、自分が登録した行数よりも多くコメント受けて、申し訳ない気持ちでいっぱいです…。

Wingetcreate update 実行後再度チェック忘れずに

リリース日付

1.20.4/1.19.9を提出したときReleaseDateという項目が1.20.3の時のままだったので直してねと言われました。wingetcreateツールでは直してくれない?ようなので、明示的に手作業で直しましょう。レビュワーがUS時間なので、日本の前日の日付でいわれましたが、アプリのリリース日にすればいいんじゃないかなと思います。

PackageVersion

PackageVersion:が1.20.3のままだったので、指摘受けました。ここもwingetcreateで直してくれないので、手作業でした*1。ちなみにPackageVersionとmanifestのフォルダー構造が違っている状態でもvalidationは通ります。

MinimumOSVersion

いらない?みたいですね。削除されました。

InstallerType

learn.microsoft.com

これはアプリケーションインストーラーがなにで作られているかという指定です。指定可能な項目はexe, msi, msix, inno, wix, nullsoft, appxです。wingetcreateコマンドが判定してくれるので、自分で指定する必要はないのですが、x86/x64/Arm64の複数のバイナリーがあった場合、Architectureごとに指定されるのがデフォルトです。しかし、通常Architecture単位で別のインストーラーを指定するアプリはないので、全部同じであった場合、一つにまとめればいいようです。

PackageIdentifier: GoLang.Go
PackageVersion: 1.20.4
InstallerLocale: en-US
InstallerType: wix
Scope: machine
(略)
Installers:
- Architecture: x86
  InstallerUrl: https://dl.google.com/go/go1.20.4.windows-386.msi
  InstallerSha256: 03BDB95782028AF5140233DE1649D5E1B76B046955502F9C51FC364DC1AC4C5C
  ProductCode: '{7697003C-D4E0-4007-8A23-8296D9F87917}'
  AppsAndFeaturesEntries:
  - DisplayName: Go Programming Language 386 go1.20.4
    UpgradeCode: '{1C3114EA-08C3-11E1-9095-7FCA4824019B}'
(略)

望ましい指定方法。

PackageIdentifier: GoLang.Go
PackageVersion: 1.20.3
InstallerLocale: en-US
Scope: machine
(略)
Installers:
- Architecture: x64
  InstallerType: wix
  InstallerUrl: https://golang.google.cn/dl/go1.20.3.windows-amd64.msi
  InstallerSha256: 233E9ED046D5664131328A5A7E7F6DC0A4AB6D3FA0D17F8FC655A4A5BFEF572D
  ProductCode: '{0BA1000D-4944-4E57-9DE4-34AEB4602D39}'
- Architecture: x86
  InstallerType: wix
  InstallerUrl: https://golang.google.cn/dl/go1.20.3.windows-386.msi
  InstallerSha256: 9B7D44C4C4D50C386F81FCEBFA48FFA792DDD12E54781321834259754EC2E374
  ProductCode: '{B34ABCB0-5637-414E-830D-3BFD61116D9B}'
- Architecture: arm64
  InstallerType: wix
  InstallerUrl: https://golang.google.cn/dl/go1.20.3.windows-arm64.msi
  InstallerSha256: 3A76DE1542F456D60128716811801AF68E14FDC8BF73DD4E2305BA5B631DB5A6
  ProductCode: '{5FD2C5FC-91A9-424B-8508-4ED8635816A7}'
ManifestType: installer

冗長な方法。

ダウンロードURI

最初、GoのリリースページにあるURLからコピーしたhttps://golang.google.cn/dl/を書いていたらGoogleのURL(https://dl.google.com/go/)に直されました。cnだからたぶん私のロケーションから最も近いエッジサイトが自動的に表示されていてそれじゃダメってことなのでしょうか。

ポータブルアプリの注意点

インストーラーがあるものばかりならいいのですが、ないものもしばしば存在します。私が登録しているPackerとかもそれ。zipファイルで提供されているものと、exeがそのまま存在するものと二種類あります。

zipの場合

私が登録しているPackerを例にとってみるとこんな感じ。

PackageVersion: 1.8.7
InstallerType: zip
ReleaseDate: 2023-05-04
Installers:
- Architecture: x64
  NestedInstallerType: portable
  NestedInstallerFiles:
  - RelativeFilePath: packer.exe
    PortableCommandAlias: packer
(略)

zipファイルを展開してほしいので、InstallerTypezip、そして、アーキテクチャごとのzipファイルの中に何があるかということでNestedInstallerType: portableつまり、単体のexeだよという指定です。RelativeFilePathは対象のexe名、でいいのかな。そしてPortableCommandAliasはシンボリックリンク名です。Chocolateyでは所定のフォルダーに展開して、そのフォルダーに環境変数PATHを設定しますが、WinGetではシンボリックリンクを設定します。

単体のexeをそのまま配布している場合

こちらはちょっと変わります。Pattern and PracticeのM365コマンドラインツールで紹介します。

PackageIdentifier: pnpm.pnpm
PackageVersion: 8.4.0
MinimumOSVersion: 10.0.0.0
InstallerType: portable
Commands:
- pnpm
ReleaseDate: 2023-05-02
Installers:
- Architecture: x64
  InstallerUrl: https://github.com/pnpm/pnpm/releases/download/v8.4.0/pnpm-win-x64.exe

こちらはnode.jsアプリをWindowsのexeファイルにしています。このような場合はInstallerType: portableで、単独のexeであると指定しておけばpnpm-win-x64.exepnpmという名前で登録してくれます。

*1:これくらいツールでやってくれてもと思った…あとでwingetcreateのソース見てみたい