はじめに
こんにちは!!こんにちは!!Webエンジニアのshimeです。
最近、GitHub Actionsを利用してGitHub Packagesにgemを公開する機会があったので、その方法をご紹介いたします!!
GitHub Actionsとは
改めて説明する必要は無いと思いますが、GitHub Actionsはワークフローの実行を自動化できるサービスです。
GitHubで任意のコードプロジェクトをビルド、テスト、パッケージ、リリース、 またはデプロイするためにリポジトリで設定できる、カスタムの自動プロセスです。
(引用元:GitHubヘルプ)
とあるように、CI、CD機能をリポジトリに直接ビルドし、特定のイベントをトリガーにワークフローファイルを実行するように設定することができます。
詳しくはGitHubヘルプをご確認ください。
GitHub Packagesとは
GitHub Packagesはパッケージホスティングサービスで、GitHubと完全に統合されています。 パッケージをパブリックリポジトリに公開(パブリックパッケージ)して、GitHubの全員と共有したり、 プライベートリポジトリに公開(プライベートパッケージ)してコラボレータやOrganizationと共有したりできます。
(引用元:GithuHubヘルプ)
とあるように、ソフトウェアパッケージホスティングサービスで npm
gem
といったパッケージをサポートしています。
gemをホスティングする場合は、 RubyGems.org
に公開することが一般的ですが、今回は社内で利用するprivateなgemなため、GitHub Packagesにホスティングする方法を選択しました。
RubyGems.org
に公開するほどでも無い時、障害の発生を考慮してGitHub Packagesにも公開しておきたい時、privateなgemをホスティングしたい時にGitHub Packagesが選択肢に上がるのではないでしょうか。
今回やったこと
今回はGitHub Actionsを利用してgemをGitHub Packagesに公開しました。
ワークフローの設定例がこちらです。
(社内で利用しているものはprivateなため、個人のリポジトリのものです。また、一部設定も変更しています。)
name: Publish Gem on: push: tags: - 'v*'
今回はv
から始まるタグがpushされた際にワークフローを実行しています。gemの公開という用途を考えると特定のタグやブランチがpushされた時が主な利用ケースになると思います。
また、タグの名前を?
や*
などのパターンマッチを用いてワークフローを実行することもできます。
詳しくはこちらをご参照ください。
- name: Setup Release Credentials env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} run: | mkdir -p $HOME/.gem touch $HOME/.gem/credentials chmod 600 $HOME/.gem/credentials echo "---" >$HOME/.gem/credentials echo ":github: Bearer ${GITHUB_TOKEN}" >> $HOME/.gem/credentials
ここではcredentials
ファイルを作成し、アクセストークンを記載しています。
通常であれば、write:packages
スコープを持ったアクセストーンを記載する必要がありますが、GitHub Actionsのワークフローでは、そのリポジトリに対するアクセストークンを利用できるので、個人のアクセストークンの設定や管理の手間を省くことができます。
- name: Publish Gem to GitHub Packages run: | export OWNER=$( echo ${{ github.repository }} | cut -d "/" -f 1 ) gem build *.gemspec gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
gem build *.gemspec
でリポジトリ直下のGEMNAME.gemspec
ファイルに基づいてgemをビルドし、
gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
でGitHub Packagesに公開しています。詳しくはこちら
上記のワークフローを設定している状態でv0.1.3
などのタグを付与するとワークフローが実行されGitHub Packagesに公開されます。
公開するとリポジトリやユーザーのページから確認することができます
インストール方法やダウンロード状況なども確認することができます。
また、パッケージの説明を記載することもできるため、リリースノートやチェンジログとして使うこともできそうです。
さいごに
GitHub Actionsを利用してGitHub Packagesにgemを公開する方法について記載しました。
GitHub Packagesへの公開の一部を自動化したい場合やprivateなgemをホスティングしたい場合などに是非利用してみてください!!