Where to Contribute

Screwdriver has a modular architecture, and the various responsibilities are split up into separate repos.

Check out the architecture diagram to see the overall workflow of Continuous Delivery using Screwdriver. The next few sections will help lay out where different code repositories fit.

Screwdriver API

The screwdriver repo is the core of screwdriver, providing the API endpoints for everything that screwdriver does. The API is based on the hapijs framework and is implemented in node as a series of plugins.

Models

The object models provide the definition of the data that is saved in datastores (analogous to databases). This is done in two parts:

Datastores

A datastore implementation is used as the interface between the API and a data storage mechanism. There are several implementations written in node around a common interface.

Source Code Management

An SCM implementation is used as the interface between the API and an SCM. There are several implementations written in nodejs around a common interface.

The scm-router is a generic scm plugin that routes builds to a specified scm.

Notifications

The API can also send notifications to users.

Parsers

Parsers help validate and parse various flows in Screwdriver.

Templates and Commands

Templates are snippets of predefined code that people can use to replace a job definition in their screwdriver.yaml. A template contains a series of predefined steps along with a selected Docker image.

Commands are snippets of predefined code that people can use to replace a step definition in their screwdriver.yaml. A command contains a series of predefined commands.

Launcher

The launcher performs step execution and housekeeping internal to build containers. This is written in Go and mounted into build containers as a binary.

Queue

The queue-service is a highly available REST based queue service for Screwdriver to enqueue builds and process them. It makes use of Resque to add a queueing mechanism.

Executors

An executor is used to manage build containers for any given job. Several implementations of executors have been created. All are designed to follow a common interface. Executor implementations are written in node:

The executor-queue is a generic executor plugin that routes builds through a Redis queue. The executor-router is a generic executor plugin that routes builds to a specified executor.

Artifacts

The Artifact Store (not to be confused with the datastores mentioned above) is used for saving log outputs, shared steps, templates, test coverage, and any artifacts that are generated during a build.

UI

The UI is an Ember-based user interface of Screwdriver.

Guide and Homepage

The Guide is documentation! Everything you ever hoped to know about the Screwdriver project. The Homepage is the basic one-pager that powers Screwdriver.cd. The Community is where open source community meeting notes and docs are kept.

Miscellaneous Tools

Bootstrap SD

These repos help you get started running Screwdriver.

Other

Adding a New Screwdriver Repo

We have some tools to help start out new repos for Screwdriver:

If you create a new repo, please come back and edit this page so that others can know where your repo fits in.

Tests and Examples

The organization screwdriver-cd-test contains various example repos/screwdriver.yamls and acceptance tests for Screwdriver.cd.