Conch API

Logo

Datacenter build and management service

View the Project on GitHub joyent/conch-api

Development Process

Introduction

The Conch API is developed using Github.

Requests and bugs are tracked using Github Issues.

The master branch is protected and cannot be modified directly:

The build world is an odd duck in that we are also the customers of our own work. The Conch Shell (kosh) and Conch Web UI are the main consumers of the API and also owned by the Build Team. Those projects each obviously have their own customers and needs but the features and optimizations for the API can largely be determined in-house.

Release Process

Currently, deploys are scheduled for Monday afternoons (US/Eastern) and are visible in the BuildOps Google Calendar.

In general, we prefer a two week deploy cadence. v2.45.0 goes into staging on Monday and we begin accepting PRs for v2.46. Two weeks later, v2.45 goes to production, v2.46 is deployed to staging, and we begin to accept PRs for v2.47.

Tests

Every change pushed to github (unless a branch rule has been configured on a subbranch) will result in a webhook event that triggers Buildbot to execute a test run. These test results are reported to the ~conch-devel chat channel, as well as emailed to the user who triggered the build.

The tests are executed via make test in the Makefile at the root of the repository. The tests cover all aspects of the application, from low level functionality such as database access, logging, and json schema evaluation, to higher level integration testing of individual api endpoints. All the tests live in the t/ directory in the repository.

It is a necessary requirement that all pull requests must pass tests before they are considered for merging, whether to the master branch or a topic/feature branch. If you received a failure notificaton, follow the links in Buildbot to get more information about how your tests failed.

Summary

When written out like this, the development and release processes seem complicated. In practice, however, it is pretty lightweight and has minimal requirements for the developer. The release process requires more work out of the release manager but, again, in practice the process is pretty lightweight, particularly on a two week release cadence.