Skip to content

edahlseng/configuration-ci-general

Repository files navigation

General Continuous Integration Configuration

A CircleCI Orb with general purpose continuous integration configuration.

Getting Started

Reference the orb within a CircleCI configuration file:

version: 2.1

orbs:
  general: edahlseng/general@X.Y.Z

See the releases tab for the latest published version number.

Documentation

Full documentation for this orb can be found in the CircleCI Orbs Registry: edahlseng/general documentation.

Motivation

There are different "chunks" of configuration in this orb, each with a different motivation, described below.

State

It can be a helpful abstraction to think of jobs and commands as functions that transform some input state to some output state. A workflow then becomes a composition of these different functions. While this abstraction doesn't always fit 100% (many jobs produce effects that break this input ⟶ output model) it can help lead to more deterministic and understandable workflows.

In CircleCI, a workflow's workspace, test results, and artifacts can be thought of as the different components of state that a given job or command may accept as an input or produce as an output. A collection of commands in this orb simplify the process of dealing with this state:

  • get-workspace
  • put-all
  • put-directory
  • put-test-results

This concept of state was inspired by Concourse tasks and the state monad.

Release Process

The best release process is one that is automated, removing the barrier to releasing quickly and often. A collection of jobs and commands in this orb automate the release process across a variety of different project types:

  • Commands
    • halt-if-not-release-commit
    • halt-if-release-commit
    • setup-git-user
    • tag
  • Jobs
    • create-release-pr
    • publish-circleci-dev
    • tag
    • tag-and-publish-circleci
    • tag-and-publish-npm

Miscellaneous Configuration

Many projects share similar workflows related to linting, building, running tests, etc. The rest of this orb contains configuration aimed at reducing the boilerplate needed when running these common steps across different projects. Note that this configuration is very opinionated, reflecting the way that my other projects are set up. See the full documentation for this orb for more information on this miscellaneous configuration.