JetBrains Space Help

Node.js, npm

Prerequisites

  • You have a Node.js project with package.json in the project root.

  • (Optional) The project has some unit tests.

Eligible images

Building, running tests, and publishing in a Node.js project

Currently, Automation does not provide any API for working with npm. So, the only way to build, test, and publish Node.js projects is to use the npm tool in shell scripts.

The content of .space.kts may look like follows:

job("Run npm test and publish") { container("node:alpine") { env["REGISTRY"] = "https://npm.pkg.jetbrains.space/mycompany/p/projectkey/mynpm" shellScript { interpreter = "/bin/sh" content = """ echo Install npm dependencies... npm ci echo Run build if it exists in package.json... npm run build --if-present echo Run tests... npm run test echo Run publishing... chmod +x ./publish.sh ./publish.sh """ } } }

In more details:

  • env["REGISTRY"]: specifies an npm registry for publishing.

  • npm ci: installs npm dependencies.

  • npm run build: runs build step if it exists.

  • npm run test: runs tests.

  • ./publish.sh: runs the publishing script. See details below.

The publish.sh script authenticates in the registry using the .npmrc file and then publishes the npm package:

#!/bin/sh echo "Configure npm..." mkdir package && cd package echo "registry = $REGISTRY" >> ~/.npmrc AUTH=$(echo -ne "$JB_SPACE_CLIENT_ID:$JB_SPACE_CLIENT_SECRET" | base64 | tr -d \\n) echo "_auth = $AUTH" >> ~/.npmrc echo "email = mail@mail.com" >> ~/.npmrc echo "always-auth = true" >> ~/.npmrc echo "Publish package..." VERSION="0.0.$JB_SPACE_EXECUTION_NUMBER" npm config set init.version $VERSION npm init -y npm publish --registry $REGISTRY

In more details:

  • registry = $REGISTRY: specifies registry URL using the environment variable set in .space.kts.

  • $JB_SPACE_CLIENT_ID and $JB_SPACE_CLIENT_SECRET: environment variables that authenticate the Automation service in Space Packages.

  • VERSION="0.0.$JB_SPACE_EXECUTION_NUMBER": uses the $JB_SPACE_EXECUTION_NUMBER to specify the package version based on the script run number.

Last modified: 05 August 2020