Hugo Deploy Error

- Hugo

deploy.yaml に Hugo バージョン 0.101.1 を修正してすると、GitHub Actions において出力された以下のようなエラーメッセージによりデプロイができなかった。

Setup Hugo
Run peaceiris/actions-hugo@v2
  with:
    hugo-version: 0.101.1
    extended: false
  env:
    pythonLocation: /opt/hostedtoolcache/Python/3.9.16/x64
    LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.9.16/x64/lib
Hugo version: 0.101.1
Error: Action failed with error Unexpected HTTP response: 404

なぜかわからないが、Hugo バージョン 0.101.1 を指定できないようだった。

下記の公式ページを確認したが、使用できるバージョン一覧等は確認できなかった。Hugo のバージョンは何でもよかったので、サンプルで挙げられていた 0.110.0 を使用するとデプロイエラーは解消された。

        with:
          hugo-version: '0.110.0'

エラーの原因は不明だが、何となく気になったので、エラーの原因を調査してみた。

エラーメッセージを出力しているのは以下の関数である。

    core.setFailed(`Action failed with error ${e.message}`);

本来だったらエラーにならず成功するはずの main.run() の処理を追って行く。

メインの処理は以下である。

export async function run(): Promise<ActionResult> {
  const toolVersion: string = core.getInput('hugo-version');

... (省略)

  if (toolVersion === '' || toolVersion === 'latest') {
    installVersion = await getLatestVersion(Tool.Org, Tool.Repo, 'brew');
  } else {
    installVersion = toolVersion;
  }

... (省略)

  await installer(installVersion);

... (省略)

yamlhugo-version を指定するとそのバージョンが変数 toolVersion に格納される。そのバージョンをもとに関数 installer() が呼び出される。実装の詳細は以下である。

export async function installer(version: string): Promise<void> {

... (省略)

  const toolURL: string = getURL(osName, archName, extended, version);
  core.debug(`toolURL: ${toolURL}`);

... (省略)

hugo-version を使用して Hugo のバイナリを取得する関数が getURL() なので、その詳細を確認する。

... (省略)

  const hugoName = `hugo_${extendedStr(extended)}${version}_${os}-${arch}`;
  const baseURL = 'https://github.com/gohugoio/hugo/releases/download';
  const url = `${baseURL}/v${version}/${hugoName}.${ext(os)}`;

... (省略)

あー、これ、単純に Hugo のバイナリを配布しているリリースノートのリンクを生成してるだけっぽい。配布されているバージョンを以下のリンクから確認すると、配布されているバージョンに 0.101.1 はそもそもないため、404 のエラーが返っていた。

以上から、hugo-version で指定できるバージョンは Hugo のリリースノートに記載されているバージョンを適切に指定しないといけない。