DocsCLIArtifacts

Artifacts

GitHub Actions artifacts management.

πŸ’‘

This command is usually used in the publish step, before the npm publish command and after the Download artifacts step.

Flags List

FlagType/Default ValueDescription
-d ,--dirString/artifactsThe source dir which contains all the artifacts output in build phase.
--distString/npmThe dist dir where the native addon will be copied into.

How does it work

Assume you have a project which builds native addon for these platform:

  • x86_64-apple-darwin
  • x86_64-pc-windows-msvc
  • x86_64-unknown-linux-gnu
  • aarch64-apple-darwin
  • aarch64-linux-android
  • aarch64-unknown-linux-gnu
  • aarch64-unknown-linux-musl
  • aarch64-pc-windows-msvc
  • armv7-unknown-linux-gnueabihf
  • arm-linux-androideabi
  • x86_64-unknown-linux-musl
  • x86_64-unknown-freebsd
  • i686-pc-windows-msvc

And you can download these artifacts via actions/download-artifact:

- name: Download all artifacts
  uses: actions/download-artifact@v2
  with:
  	path: artifacts

Now the directory structure will look like this:

directory structure
.
β”œβ”€β”€ artifacts
|   β”œβ”€β”€ bindings-x86_64-apple-darwin
|   β”‚Β Β  └── blake.darwin-x64.node
|   β”œβ”€β”€ bindings-x86_64-pc-windows-msvc
|   β”‚Β Β  └── blake.win32-x64.node
|   β”œβ”€β”€ bindings-x86_64-unknown-linux-gnu
|   β”‚Β Β  └── blake.linux-x64-gnu.node
|   β”œβ”€β”€ bindings-aarch64-apple-darwin
|   β”‚Β Β  └── blake.darwin-arm64.node
|   β”œβ”€β”€ bindings-aarch64-linux-android
|   β”‚Β Β  └── blake.android-arm64.node
|   β”œβ”€β”€ bindings-aarch64-unknown-linux-gnu
|   β”‚Β Β  └── blake.linux-arm64-gnu.node
|   β”œβ”€β”€ bindings-aarch64-unknown-linux-musl
|   β”‚Β Β  └── blake.linux-arm64-musl.node
|   β”œβ”€β”€ bindings-aarch64-pc-windows-msvc
|   β”‚Β Β  └── blake.win32-arm64-msvc.node
|   β”œβ”€β”€ bindings-armv7-unknown-linux-gnueabihf
|   β”‚Β Β  └── blake.linux-arm-gnueabihf.node
|   β”œβ”€β”€ bindings-arm-linux-androideabi
|   β”‚Β Β  └── blake.android-arm-eabi.node
|   β”œβ”€β”€ bindings-x86_64-unknown-linux-musl
|   β”‚Β Β  └── blake.linux-x64-musl.node
|   β”œβ”€β”€ bindings-x86_64-unknown-freebsd
|   β”‚Β Β  └── blake.freebsd-x64.node
|   └── bindings-i686-pc-windows-msvc
|       └── blake.win32-ia32-msvc.node
β”œβ”€β”€ npm
β”‚Β Β  β”œβ”€β”€ android-arm-eabi
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ android-arm64
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ darwin-arm64
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ darwin-x64
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ freebsd-x64
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ linux-arm-gnueabihf
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ linux-arm64-gnu
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ linux-arm64-musl
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ linux-x64-gnu
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ linux-x64-musl
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ win32-arm64-msvc
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ win32-ia32-msvc
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  └── win32-x64-msvc
β”‚Β Β      β”œβ”€β”€ README.md
β”‚Β Β      └── package.json

As you can see, we need to copy all .node files into the npm directory so that we can publish them via the napi prepublish command.

napi artifacts command will do this job for you. Assume the -d flag and --dist flags are the default value, and the directory structure is the same as below. After napi artifacts command run, the directory structure will become:

directory structure
.
β”œβ”€β”€ artifacts
β”œβ”€β”€ npm
β”‚Β Β  β”œβ”€β”€ android-arm-eabi
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
|   |   β”œβ”€β”€ blake.android-arm-eabi.node
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ android-arm64
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
|   |   β”œβ”€β”€ blake.android-arm64.node
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ darwin-arm64
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
|   |   β”œβ”€β”€ blake.darwin-arm64.node
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ darwin-x64
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
|   |   β”œβ”€β”€ blake.darwin-x64.node
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ freebsd-x64
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
|   |   β”œβ”€β”€ blake.freebsd-x64.node
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ linux-arm-gnueabihf
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
|   |   β”œβ”€β”€ blake.linux-arm-gnueabihf.node
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ linux-arm64-gnu
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
|   |   β”œβ”€β”€ blake.linux-arm64-gnu.node
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ linux-arm64-musl
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
|   |   β”œβ”€β”€ blake.linux-arm64-musl.node
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ linux-x64-gnu
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
|   |   β”œβ”€β”€ blake.linux-x64-gnu.node
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ linux-x64-musl
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
|   |   β”œβ”€β”€ blake.linux-x64-musl.node
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ win32-arm64-msvc
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
|   |   β”œβ”€β”€ blake.win32-arm64-msvc.node
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  β”œβ”€β”€ win32-ia32-msvc
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
|   |   β”œβ”€β”€ blake.win32-ia32-msvc.node
β”‚Β Β  β”‚Β Β  └── package.json
β”‚Β Β  └── win32-x64-msvc
β”‚Β Β      β”œβ”€β”€ README.md
|       β”œβ”€β”€ blake.win32-x64-msvc.node
β”‚Β Β      └── package.json