🐡

compare_linkerをGithubActionsに組み込んでみた。しかし。。。

2025/01/14に公開

前回compare_linkerを使ってみるという記事を投稿させていただきましたが、今回はこちらをCI(GithubActions)に組み込んでみました。

コード(GithubActions)

※コードの一部を抜粋しています。

name: bundle-update-pull-request

on:
  schedule:
    - cron: "00 22 * * 3" # JST 07:00 (Thu)
  workflow_dispatch:

jobs:
  create_bundle_update_pr:
    runs-on: ubuntu-latest
    steps:
      - name: Create GitHub Apps Token
        id: github_apps
        uses: actions/create-github-app-token@v1
        with:
          app-id: ${{ secrets.APP_ID }}
          private-key: ${{ secrets.PRIVATE_KEY }}
      - uses: actions/checkout@v4
        with:
          token: ${{ steps.github_apps.outputs.token }}
      - name: libgsl-dev Install
        run: |
          if ! dpkg -l | grep -q "libgsl-dev"; then
            echo "Package not found. Installing..."
            sudo dpkg -i vendor/packages/gsl_2.3-1_amd64.deb
          else
            echo "Package already installed. Skipping installation."
          fi
      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
      - name: Set timezone to Asia/Tokyo
        run: |
          set -x
          cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
      - name: Update dependencies
        run: bundle update
      - name: Get current date
        id: date
        run: echo "::set-output name=current::$(date +'%Y-%m-%d')"
      - name: Create pull request
        id: cpr
        uses: peter-evans/create-pull-request@v7
        with:
          token: ${{ steps.github_apps.outputs.token }}
          commit-message: Update dependencies
          title: bundle update at ${{ steps.date.outputs.current }}
          branch: bundle-update-${{ steps.date.outputs.current }}
          labels: |
            dependencies
            ruby
      - name: Install dependencies
              run: |
                gem install compare_linker
      - name: Run comparison script
        env:
          OCTOKIT_ACCESS_TOKEN: ${{ steps.github_apps.outputs.token }}
        run: |
          ruby -e "
          require 'compare_linker'
          compare_linker = CompareLinker.new('${{ github.repository }}', ${{ steps.cpr.outputs.pull-request-number }})
          compare_linker.formatter = CompareLinker::Formatter::Markdown.new
          comment = compare_linker.make_compare_links.to_a.join("\n")
          compare_linker.add_comment('${{ github.repository }}', ${{ steps.cpr.outputs.pull-request-number }}, comment)
  • OCTOKIT_ACCESS_TOKENはGithubAppsを使っているのでそちらのTokenを使うようにしています
  • compare_linkerの取り入れ方は少々悩みましたが、直接rubyを叩く方法にしました
  • 前段のcreate-pull-requestでbundle updateのプルリクを作成しているのですがそのプルリクエストに対してコメントを追記する形にしています

実行してみた

前回の記事でも紹介させていただいたissueと同じエラーになりました。。。

GithubActionsのコード上でいうとエラーが発生するのはここの処理

comment = compare_linker.make_compare_links.to_a.join("\n")

コードを追っていくと。。。

https://github.com/masutaka/compare_linker/blob/84afaa5e255749e3880f63f348e0822e53eaac85/lib/compare_linker.rb#L21
https://github.com/masutaka/compare_linker/blob/84afaa5e255749e3880f63f348e0822e53eaac85/lib/compare_linker.rb#L33
https://github.com/masutaka/compare_linker/blob/84afaa5e255749e3880f63f348e0822e53eaac85/lib/compare_linker.rb#L48
https://github.com/masutaka/compare_linker/blob/84afaa5e255749e3880f63f348e0822e53eaac85/lib/compare_linker/github_tag_finder.rb#L2

エラーの原因ですが、compare_linkerの処理において各Gemのリリースタグの情報(Comparing changes)を取りに行っているんですが、特定のGemにおいてGitHubActionsからのアクセスが拒否されているっぽい?
自分のPCからはcompare_linkerは普通に実行できたのでGithubActionsからだけ拒否されている?? 🤔
そんなことあるのかな?? 🤔
なんか不思議な現象でした。。。。

結局どうしたか

現状budle updateのプルリクで出しているcompare_linkerの情報に関してはあまり重要視していない(File Changedで事足りる)とのことだったので処理を外しました。
そのうちなおってたりするのかな?? 🤔

NaviPlusテックブログ

Discussion