標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

PowerShell で GitHub Releases のダウンロード数を確認する

前回 チラ見せしていた、Gitレポジトリの releases ページからのダウンロード数を確認する PowerShell スクリプトの完成形は以下のとおりである。カレントディレクトリのレポジトリの1番目のリモートブランチの releases にある各 assets にあるファイルとそのダウンロード数を標準出力に表示する。

Set-PSDebug -Strict
function Get-Repo {
    $branch = (git remote show -n | Select-Object -First 1)
    if ( $branch ) {
        foreach ( $line in (git remote show -n $branch) ){
            if ( $line -match "Push +URL: \w+@github.com:([\w-]+/[\w-]+).git" ){
                return $matches[1]
            }
        }
    }
    return $null
}

$repo = (Get-Repo)
if ( -not $repo ){
    Write-Host "git information not found"
    exit 1
}
$url = "https://api.github.com/repos/$repo/releases"

Invoke-WebRequest -URI $url | ConvertFrom-Json | ForEach-Object {
    foreach ($p in $_.assets){
        Write-Host $p.name $p.download_count
    }
}
$ Download-Count.ps1 | head
nyagos-4.4.14_0-linux-amd64.zip 20
nyagos-4.4.14_0-windows-386.zip 1409
nyagos-4.4.14_0-windows-amd64.zip 1770
nyagos-4.4.13_3-linux-amd64.tar.gz 25
nyagos-4.4.13_3-windows-386.zip 1427
nyagos-4.4.13_3-windows-amd64.zip 1883
nyagos-4.4.13_2-linux-amd64.tar.gz 13
nyagos-4.4.13_2-windows-386.zip 105
nyagos-4.4.13_2-windows-amd64.zip 207
nyagos-4.4.13_1-linux-amd64.tar.gz 23
$

最初の Get-Repo は現在カレントディレクトリがあるレポジトリのリモートブランチの "(ユーザ名)/(レポジトリ名)" を得る。


ところで、これ最初不具合があって、API からエラーが返されていた。
(元ソースは上書きしてしまっていてないので、記憶から再現)

git remote show -n $branch | ForEach-Object {
    if ( $_ -match "Push +URL: \w+@github.com:([\w-]+/[\w-]+).git" ){
        return $matches[1]
    }
}
return $null

これ、なぜか戻り値に nyaosorg/nyagos と末尾に空白がついてしまう。

おそらくだが、return $matches[1] の戻る対象先が関数ではなく ForEach-Object ブロックになっていて、$matches[1] のセットと $null のリストが関数の戻り値となってしまっていたのだろう。失敗失敗