🦕

GitHub ActionsでDeno Deployにデプロイする

2023/07/06に公開

Deno Deployは非常に便利です。GitHubのリポジトリと連携してpushすれば自動でデプロイまでやってくれます。

しかし、何故かここ数日それが自動で行われません。Deno Deployから再デプロイみたいなものはないし、リポジトリのUnlinkとLinkを使って数回しのぎましたが、一向に直る気配がありません。

そんな時、Link時にGitHub Actions経由でデプロイができそうだったので、再デプロイが簡単なこともありGitHub Actions経由に切り替えることにしました。今回はその連携に必要な作業をまとめようと思います。

Deno Deploy側の作業

DenoがDeno Deployと正式に連携するツールを公開しているので、これを使っていきます。

https://github.com/denoland/deployctl

まずはDeno Deploy側で必要な作業を行っていきます。

プロジェクトの連携方法を変更

まずはプロジェクトの Settings タブを開きます。Git Integration の項目から連携方法を変更するため一度Unlinkで連携を解除後、再度Linkしましょう。

ブランチを選択した後どうやってデプロイするかの選択肢が現れるので、ここで Automatic ではなく Github Actions を選びます。

その後設定をしてくれと言われるのですが必要な情報があるのでそれを取得後にやっていきます。

プロジェクト名の取得

ついでにプロジェクト名も取得しておきます。
同じページの最上部に Project Name があるのでそこの入力エリア内の名前をコピーしてください。

アクセストークンの発行

次にDeno Deploy側のアクセストークンを取得します。

https://dash.deno.com/account#access-tokens

Access Tokens の一番下に + New Access Token というボタンがあるのでクリックして、アクセストークンを作成します。とりあえずわかりやすく GitHub Actions 等の名前をつけると良いでしょう。

作成直後にアクセストークンが発行されるので消えないうちにコピーしましょう。

これでDeno Deploy側の作業は終了です。

GitHub側の作業

次にGitHub Actionsの設定になります。デプロイするためには先程のアクセストークンが必要なので、それを環境変数として参照できるようにします。

次にDeno Deployにデプロイする対象のリポジトリに入り、Settings タブを開いてください。
左側のサイドメニューの下に Secrets and variables があるのでクリックすると環境変数を設定可能な候補が出てくるので、今回は Actions を選んでください。

ここで New repository secret をクリックして、値を設定します。

NameDENO_DEPLOY_TOKENSecret には先程のアクセストークンを貼り付けてください。改行などが入ると良くないので気をつけてください。

GitHub Actionsの作成

では最後にGitHub Actionsを作成します。今回は再デプロイも簡単なように、main ブランチへのpushとワークフローからの実行のタイミングで行います。

.github/workflows/deploy.yml を作成します。

.github/workflows/deploy.yml
name: DenoDeploy

on:
  push:
    branches:
      - 'main'
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest

    permissions:
      id-token: write
      contents: read

    steps:
      - name: Clone repository
        uses: actions/checkout@v3

      - name: Deploy to Deno Deploy
        uses: denoland/deployctl@v1
        with:
          project: プロジェクト名
          entrypoint: main.ts

エントリーポイントが異なる場合は main.ts を書き換えてください。これでGitHub Actions経由でDeno Deployにデプロイが可能になりました。

まとめ

Denoが正式なツールを提供していてくれたので、スムーズに切り替え作業ができました。
必要な値もアクセストークンとプロジェクト名くらいなもので、さくっと作れるのは良いですね。

これで今回のような連携不具合?が発生しても任意のタイミングで再デプロイ可能になったので、しばらくはこれで運用していこうと思います。

Discussion