Skip to content

godaddy/carpenterd-worker

Repository files navigation

carpenterd-worker

Version npm License npm Downloads Build Status Dependencies

carpenterd-worker is responsible for receiving job messages from carpenterd and executing the builds. After fetching a pre-installed npm tarball from a distributed storage like amazon s3. A workers-factory instance will build the bundle.

Install

npm install carpenterd-worker --save

Usage

const carpenterd = require('carpenterd-worker');

const app = new Map();
// Select the directory that contains a `config` directory so that `slay-config`
// works appropriately
app.rootDir = require('path').join(__dirname);

carpenterd(app)
  .start(carpenterd.worker);

Dependencies

  • nsq for job distribution to all the workers in given cluster.
  • amazon s3 or an s3 like store for storing built assets and for fetching tarballs stored by carpenterd.

Configuration

See the example config config.example.json in this repo.

notes

  • nsq config option is for a fork of nsq.js that has kubernetes support but otherwise has the same options. Note: there is an additional configuration option statusTopic for setting the nsq topic that should be written to for status updates.
  • assets.prefix in the config is the bucket name for where the public CDN assets are uploaded.
  • http is the http port the healhcheck listens on.
  • npm-tars the npm tarball bucket to fetch from.
  • database the configuration for the database.

Build Options

promote

When work is queued with carpenterd-worker it can optionally be marked to disable build promotion. Normally when a build completes it is marked as the build-head. Meaning it will be the build that is used for the given environment for that package. If the JSON status message used to queue the build contains "promote": false then it will be built only and not promoted / served for the given environment.

Status-Api

Carpenterd-worker supports posting messages to the [warehouse.ai] status-api via NSQ. It will post messages to the nsq topic configured at:

{
  // ...other configuration
  "nsq": {
    "statusTopic": "an-nsq-topic", // topic that you choose for the status-api to consume
    // ...other nsq setup
  },
  // ...other configuration
}

The NSQ payloads will be object that take the form:

{
    eventType: "event|error|complete", // The type of status event that occurred
    name: "package-name",
    env: "dev", // The environment that is being built
    version: "1.2.3", // The version of the build
    locale: "en-US", // (Optional) The locale that is being built
    buildType: "webpack", // The type of the build (typically just webpack)
    message: "Description of what happened"
  }

Event Types

In the status-api NSQ payload there is a field called eventType. The possible values that carpenterd-worker will send are:

  • event - Used for interim statuses that a user might care about, but doesn't affect/progress the overall build status
  • complete - Used to indicate that the build is completed
  • error - Used to indicate that carpenterd-worker encountered an error and wasn't able to complete the build

Build types

The buildType value is parsed from the package.json by carpenterd. The types of supported builds are webpack/browserify/babel. For a more detailed description see carpenterd build documentation.

Tests

Run an AWS local cloud stack, pull latest [localstack]. This requires docker to be setup.

docker pull localstack/localstack:latest
npm run localstack

Run tests in a separate terminal.

npm test

About

the worker process for carpenterd

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published