0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Deno版dependabot(UDD)で自動アップデート

Last updated at Posted at 2022-07-04

depandabotはライブラリを自動アップデートしてくれるGitHubの機能です。
dependabotは今のところDenoには対応していないようですが、3rd party製ツールであるUDDを使うとdependabotと同じように自動アップデートをかけられます。

Deno版dependabot、「UDD」の使い方

UDDは「Update Deno Dependencies」の略で、その名の通りDenoのモジュールをアップデートしてくれるツールです。

このツールをGitHub Actionsを通して動かすことで、dependabotのような自動アップデートができます。

workflowの書き方

GitHub Actionsでuddを動かすには、以下のようなworkflowファイルをリポジトリに設置します。

.github/workflows/update.yml
name: deno-udd

on:
  push:
    branches:
      - main
  schedule:
    - cron: "0 9 25 * *" # 毎月25日 9時 0分に実行(※毎日/毎週実行するように変更することもできる)

jobs:
  update-deno-dependencies:
    permissions: write-all
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - uses: denoland/setup-deno@v1
      - name: run deno-udd # UDDで一括アップデート
        id: run-deno-udd
        env:
          NO_COLOR: true
        run: |
          UDD_RESULT=`deno run -A https://deno.land/x/udd/main.ts $(find . -type f | grep -E ".*\.([mc]?(ts|js)|(ts|js)x?)$" -)`
          UDD_RESULT="${UDD_RESULT//'%'/'%25'}"
          UDD_RESULT="${UDD_RESULT//$'\n'/'%0A'}"
          UDD_RESULT="${UDD_RESULT//$'\r'/'%0D'}"
          echo "::set-output name=UDD_RESULT::$UDD_RESULT"
      - name: Create Pull Request # プルリクを開いてアップデートを反映させる
        uses: peter-evans/create-pull-request@v3
        with:
          commit-message: "chore(deps): update deno dependencies"
          title: Update Deno Dependencies
          body: |-
            Some external modules are stale.
            <details><summary>Details</summary><div>
            
            ```
            ${{ steps.run-deno-udd.outputs.UDD_RESULT }}
            ```
            
            </div></details>
          branch: deno-udd
          author: GitHub <noreply@github.com>
          delete-branch: true

上記のworkflowファイルを設定すると、自動で下の画像のようなプルリクエストが開かれ、外部ライブラリを自動アップデートしてくれます。

image.png

便利ですね~

Deno標準ライブラリについては毎週新しいバージョンが公開されるため、毎週or毎日UDDを実行するように設定すると、毎週プルリクが開かれることになります。

リポジトリが増えてくるとこれが結構うるさいため、上記のworkflowでは毎月25日に実行されるように設定しています。

テストが実行されない時

ただし上のworkflowには欠点があって、UDDのプルリクが開かれた時、push時に走るように設定したworkflowが実行されないという問題があります。(参考
push時にテストが走るように設定していても実行されないので、ちょっと困ります。

これはpeter-evans/create-pull-request側の問題のようで、GitHub Actions上で使うトークンの権限に関する制限のようです。
対策としては、以下↓のリンクに書いてある通り、GitHubのパーソナルアクセストークン(PAT)を設定する方法などがあるようです。

または、UDDによって開かれたプルリクエストを一旦closeしてからopenすることでも他のworkflowをトリガーできるようです。

deps.tsやimport-mapいらず?

Denoでは、依存関係を記述する場所を1か所にまとめてアップデートしやすくする手法として、deps.tsimport-map.json使われています
ただUDDを使うとアップデートの手間もかからないですし、deps.tsやimport-mapは別に使わなくてもいいのかなと思います。(URLの入力に補完が効くので、import文に直接URLを書いてしまった方が楽)

もちろんPRのレビューの楽さからいうと、1か所に依存関係をまとてしまったほうがいいのかもしれませんが。

まとめ

  • dependabotはDeno非対応だが、代わりに使える3rd party製ツール(UDD)がある
  • GitHub Actionsを使って動かす
  • 使用されるトークンの権限によっては別のworkflowが実行されない
    • PATを設定するか、プルリク自体を一旦closeしてからopenすることで解決
  • deps.tsimport-map.jsonが無くても大丈夫かも
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?