GitHub Actions の ruby/setup-ruby で Ruby のバージョンを .ruby-version から取得して指定する
2022/12/27
以下の記事を読んで Ruby もできたらいいなと調べたら、書き方は違うができる方法がちゃんと用意されていた
これで Rails アプリとかの Ruby バージョンを上げる際に変更するファイルが1つ減らせる
やり方
with で ruby-version に .ruby-version と指定するだけ
- uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
default にしてもよい(.ruby-version、.tool-versions の順で読み込む仕様)
- uses: ruby/setup-ruby@v1
with:
ruby-version: default
もっというと、デフォルト値が default になっているので何も指定しなくても良かったりする
でもちゃんと書いた方が、.ruby-version から読み込んでいることが一目でわかるので親切だと思う
実装について
ついでにどうやって実現しているのか気になったからコードを読んだ
説明不要なシンプルな実装になってた
if (rubyVersion === 'default') {
if (fs.existsSync('.ruby-version')) {
rubyVersion = '.ruby-version'
} else if (fs.existsSync('.tool-versions')) {
rubyVersion = '.tool-versions'
} else {
throw new Error('input ruby-version needs to be specified if no .ruby-version or .tool-versions file exists')
}
}
if (rubyVersion === '.ruby-version') { // Read from .ruby-version
rubyVersion = fs.readFileSync('.ruby-version', 'utf8').trim()
console.log(`Using ${rubyVersion} as input from file .ruby-version`)
} else if (rubyVersion === '.tool-versions') { // Read from .tool-versions
const toolVersions = fs.readFileSync('.tool-versions', 'utf8').trim()
const rubyLine = toolVersions.split(/\r?\n/).filter(e => /^ruby\s/.test(e))[0]
rubyVersion = rubyLine.match(/^ruby\s+(.+)$/)[1]
console.log(`Using ${rubyVersion} as input from file .tool-versions`)
}
https://github.com/ruby/setup-ruby/blob/8a6667e214803d030def654bc64a71ceeec500d1/index.js