はじめに
以前、Cloudflare Workersのプロジェクトを自動デプロイするため、GitHub Actionsを設定する方法を書いたことがあります。
しかし、新規プロジェクトを生成し、自動デプロイを設定しましたが、GitHub Actionsからの自動デプロイが失敗してしまったことがありました。 (昔に作成したプロジェクトは問題なく自動デプロイできました。)
色々調べて、今は問題解決ができたので、今回は、その解決方法を記録しておきたいと思います。
環境
- Ubuntu 24.04
- Wrangler 3.107.3
作成したworkflowファイルの内容は以下になります。
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
name: Deploy
steps:
- uses: actions/checkout@v4
- name: Deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
デプロイ成功/失敗の状況
ローカル環境でデプロイすると正常にデプロイできるが、GitHubにpushしてGitHub Actionsからデプロイすると失敗になります。
環境 | デプロイ 成功/失敗 |
---|---|
ローカル | 成功 |
GitHub Actions | 失敗 |
GitHub Actionsの処理が失敗内容は以下のようにでした。
/usr/local/bin/npx wrangler deploy
⛅️ wrangler 3.90.0 (update available 3.107.3)
----------------------------------------------
✘ [ERROR] Missing entry-point: The entry-point should be specified via the command line (e.g. `wrangler deploy path/to/script`) or the `main` config field.
原因
結論から言うと、新規プロジェクト作成で使用したローカルのWranglerのバージョンと、Github Actionsのバージョンの違いが自動デプロイ失敗の原因だと思います。
まず、以下のエラーメッセージは、ルートディレクトリにwrangler.toml
ファイルがない場合、発生するエラーでした。
✘ [ERROR] Missing entry-point: The entry-point should be specified via the command line (e.g. `wrangler deploy path/to/script`) or the `main` config field.
確かに、新規生成したプロジェクトのディレクトリを確認してみると、wrangler.toml
はなく、wrangler.json
ファイルがありました。
しかし、私はプロジェクトを新規作成した後、ファイルを触ったことがありませんでした。
もう少し調べてみると、Wrangler 3.91.0バージョンから、設定ファイルの仕様変更があったことを見つけました。
As of Wrangler v3.91.0 Wrangler supports both JSON (wrangler.json or wrangler.jsonc) and TOML (wrangler.toml) for its configuration file. Prior to that version, only wrangler.toml was supported. The format of Wrangler's configuration file is exactly the same across both languages, except that the syntax is JSON rather than TOML. Throughout this page and the rest of Cloudflare's documentation config snippets are provided as both JSON and TOML.
つまり、3.91.0バージョンからは設定ファイルとしてJSON (wrangler.json
またはwrangler.jsonc
)とTOML (wrangler.toml
)を両方使えるようになったようです。
なので、最新のWranglerバージョンからは新規プロジェクトを生成すると、wrangler.toml
ではなくwrangler.json
ファイルを生成するようですね。
しかし、GitHub Actionsで動作するWranglerは、cloudflare/wrangler-action
が起動するとき、Wranglerの存在をチェックし、存在しないならWranglerをインストールしてDeployをしますが、デフォルトで設定されているWranglerバージョンが3.90.0のようです。(2025/02/09時点)
const DEFAULT_WRANGLER_VERSION = "3.90.0";
整理すると、ローカル環境と、GitHub Actionsで動いているWranglerのバージョンは以下のように違いがありました。
環境 | Wranglerバージョン |
---|---|
ローカル | 3.107.3 |
GitHub Actions | 3.90.0 |
ローカル環境のWrangler (v3.107.3)から新規のプロジェクトを生成すると、wrangler.toml
ファイルはなくwrangler.json
ファイルのみ生成されますが、
GitHub Actionsでインストールされて動作するWrangler (v3.90.0)はwrangler.toml
がないとエラーが発生されます。
これが、今回の自動デプロイ失敗の原因だと思います。
解決
古いバージョンのWranglerがインストールされることが問題だと思ったので、Deploy前にパッケージをインストールし、最新のWranglerでDeployを行うようにworkflowファイルを修正して問題を解決しました。
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
name: Deploy
steps:
- uses: actions/checkout@v4
+ - name: Install # 追加
+ run: npm install # 追加
- name: Deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
おわりに
新規生成したプロジェクトは急に自動デプロイができなかったのでびっくりしましたが、cloudflare/wrangler-action
で設定されているWranglerのデフォルトバージョンが最新に変更されたら、別に何もしなくても解決されると思います。
参考