Thank you for considering contributing! There are many ways you can help.
File an issue if you think you've found a bug. Be sure to describe
- How can it be reproduced?
- What did you expect?
- What actually occurred?
- Version, platform, etc. if possibly relevant.
You can file all issues with Screwdriver in the screwdriver repo. We will update any issues we're working on with a daily summary. To see what we're currently working on, you can check out our digital scrum board in the Projects section in the Screwdriver API repo.
Documentation, READMEs, and examples are extremely important. Please help improve them and if you find a typo or notice a problem, feel free to send a fix or say something.
Patches for fixes, features, and improvements are accepted through pull requests.
- Write good commit messages, in the present tense! (Add X, not Added X). Short title, blank line, bullet points if needed. Capitalize the first letter of the title or bullet item. No punctuation in the title.
- Code must pass lint and style checks.
- All external methods must be documented. Add README docs and/or user documentation in our guide when appropriate.
- Include tests to improve coverage and prevent regressions.
- Squash changes into a single commit per feature/fix. Ask if you're unsure how to discretize your work.
Please ask before embarking on a large improvement so you're not disappointed if it does not align with the goals of the project or owner(s).
Commit Message Format
We use semantic-release, which requires commit messages to be in this specific format:
- feat (feature)
- fix (bug fix)
- docs (documentation)
- style (formatting, missing semi colons, …)
- test (when adding missing tests)
- chore (maintain)
- Scope: anything that specifies the scope of the commit. Can be blank or
- Subject: description of the commit. For breaking changes that require major version bump, add
BREAKING CHANGEto the commit message.
Examples commit messages:
fix: Remove extra space
feat(scm): Support new scm plugin. BREAKING CHANGE: github no longer works
Make the case for a feature via an issue with a good title. The feature should be discussed and given a target inclusion milestone or closed.
Where to Contribute
Screwdriver has a modular architecture, and the various responsibilities are split up in separate repos.
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.
The launcher performs step execution and housekeeping internal to build containers. This is written in Go, and mounted into build containers as a binary.
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:
- executor-base: Common interface
- executor-docker: Docker implementation
- executor-j5s: Jenkins implementation
- executor-k8s: Kubernetes implementation
The object models provide the definition of the data that is stored in data stores. This is done in two parts:
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.
- datastore-base: Common interface
- datastore-sequelize: Mysql, postgres, sqlite3 and mssql implementation
An scm implementation is used as the interface between the API and an scm. There are several implementations written in node around a common interface.
- scm-base: Common interface
- scm-bitbucket: Bitbucket implementation
- scm-github: Github implementation
Node module for validating and parsing user's
This documentation! Everything you ever hoped to know about the Screwdriver project.
- client: Simple Go-based CLI for accessing the Screwdriver API
- gitversion: Go-based tool for updating git tags on a repo for a new version number
- circuit-fuses: Wrapper to provide a node-circuitbreaker w/ callback interface
- keymbinatorial: Generates the unique combinations of key values by taking a single value from each keys array
Adding a New Screwdriver Repo
We have some tools to help start out new repos for screwdriver: