こんにちは。 Githubリリースサイトからバージョン番号を抽出しようとしています。後でAnsibleロールが必要です。
たとえば、githubから最新バージョンのneovimの正しいバージョン番号を取得したいとします。これまで私はこれを得ました:
curl -s https://api.github.com/repos/neovim/neovim/releases/latest | grep NVIM | cut -c 1-35
出力は次のとおりです
"body": "```\nNVIM v0.9.0\nBuild
私は成功せずにバージョン番号を抽出するためにsedを使ってみました。
残念ながら、このブログ投稿は私には適していませんhttps://fabianlee.org/2021/02/16/bash-ok-latest-github-release-tag-and-version/
答え1
このリポジトリは正規リリースではなくタグを公開するため、最新バージョンのページ全体を検索し、「v」で始まり、後に数字が続くタグを見つける必要があります。
$ curl -s https://api.github.com/repos/neovim/neovim/releases | \
jq -r 'first(.[].tag_name | select(test("^v[0-9]")))'
v0.9.0
これは、「v」で始まるバージョンを反映するタグ付きバージョンを公開するすべてのリポジトリに適用されます。
より一般的なアプローチは、タグを見つけることです。
curl -s https://api.github.com/repos/neovim/neovim/tags | \
jq -r 'first(.[].name | select(test("^v[0-9]")))'
これはGitHubバージョンを公開しないプロジェクトにも当てはまります。リリースバージョンプロジェクトでは、これはバージョンに対応するタグだけでなく、すべてのタグと一致します。
一部のプロジェクトでは、前に「v」のないバージョンラベルを使用します。正規表現は、次のことを許可するように具体化できます。
curl -s https:/api.github.com/repos/akucukelbir/resmap/tags | \
jq -r 'first(.[].name | select(test("^v?[0-9]")))'
一部のプロジェクトはタグをまったくプッシュせず、そのための普遍的な解決策はありません。
答え2
コマンドを次にパイプします。
sed -E 's/^.*v([0-9.]*).*$/\1/'
答え3
そしてgron
そしてGNU grep
:
$ gron https://api.github.com/repos/neovim/neovim/releases/latest |
grep -oP '^json.body = ".*\KNVIM v(\d+\.?)+'
または以下を使用してPerl
:
$ gron https://api.github.com/repos/neovim/neovim/releases/latest |
perl -pe 'print $& if /^json.body = ".*\KNVIM v(\d+\.?)+/'
出力
NVIM v0.9.0
もう気づいてたんだけど、API はプロジェクト間で同じ JSON を生成しません。