working-directoryを指定したjobでArtifactをアップロードしたらハマってしまいました

GitHub ActionsUpload / Download Artifactworking-directoryCI/CD

はじめに

実現しようとしていたことは、一方のJobではNodeでのテストやビルドを実施するものです。 このテストやビルドは特定のディレクトリに対して実施するものだったので、working-directoryを利用して該当ディレクトリをjob全体の作業ディレクトリとして指定しました。 Artifactのやり取りについては、以下の2つのActionを利用します。このような時に、僕のハマったポイントをみなさんお伝えできればと思います。

ディレクトリ構成

まずは、今回のディレクトリ構成をお伝えします。 packagesディレクトリにはビルド前の(TypeScript)コードが配置されています。 このコードに対してビルドを行うと、buildディレクトリに出力されます。

.
└── packages
    ├── build
    │   └── webhook
    │       └── index.js
    ├── package.json
    ├── pnpm-lock.yaml
    ├── tsconfig.json
    └── webhook
        └── src
            ├── index.ts
            └── tsconfig.json

GitHub Actionsの作業ディレクトリ

上のディレクトリ構成をご覧いただくとわかるとおり、ビルドはpackagesディレクトリで実施します。 そのため、このビルドを行うjobに対しては以下のコードのようにworking-directoryで作業ディレクトリを指定しました。

jobs:
  build:
    name: 'Build'
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: bash
        working-directory: packages

		steps:
			...

上の指定により、このjob内の作業ディレクトリは原則として、packagesディレクトリとなります。

ArtifactのアップロードでArtifactが存在しない

この指定によって問題なく、ビルド自体は行われていました。 しかしならが、upload-artifactを使用して、以下のようにアップロードを実施しようとしましたが、Warningが発生しました。

アップロード部分のコード

pathでは、アップロード対象であるファイルパスやディレクトリを指定します。 このjobでは、作業ディレクトリをpackagesにしていたので、その直下にbuildディレクトリは存在しています。 そのため、path: buildと記述しました。

- name: 'Upload Artifacts'
  uses: actions/upload-artifact@v4
  with:
    name: build_artifact
    path: build

発生したWarning

しかし、GitHub Actionsを実行してみると、以下のようなWarningが発生しました。 実際にアップロードされているArtifactも存在しない状態です。

upload-artifactのpathはrootディレクトリが起点

このWarningの原因は、upload-artifactのpathはrootディレクトリが起点となるということを見落としていたことにあります。 そのため、pathはpackage/buildを指定しなければならなかったのです。 公式ドキュメントの記載はまだ見つけられていないですが…。 これにより、無事にArtifactをアップロードすることができました。

download-artifactのpathも同様の考え方

download-artifactもダウンロードしたArtifactをどこに配置するか、pathで指定することができます。 このpathも起点はrootディレクトリになります。

さいごに

いかがでしたでしょうか。 原因としてはシンプルかつ初歩的なものだと思いますが、地味に躓いてしまったところなので共有としてお伝えできればと思います。 誰かのお役に立てれば幸いです。