The Orb Starter Kit is a bash utility that makes creating your first orb a breeze!
What are orbs? Orbs are reusable commands, executors, and jobs (as well as usage examples)—snippets of CircleCI configuration—that can be shared across teams and projects. See CircleCI Orbs, Explore Orbs, Creating Orbs, and Using Orbs for further information.
This kit includes two main components:
- Hello World template.
- Within the /src folder you can find find the destructured source of a simple "Hello World" orb. You can simply copy this code and begin hacking.
- Orb init script.
- The Orb init script will assist you in automatically creating an automated build-test-deploy pipeline for your orb on CircleCI.
Why would you want an automated pipeline for your orb?
- Automated Semver release process
- Automated Integration Testing
- No need to use CLI commands.
Before getting started you will need the the following things:
- A CircleCI account.
- Git installed and configured locally.
- A CircleCI Personal API Token (Must be Org admin to claim a namespace and publish production Orbs)
1. Clone this repo into a new directory with the name of your orb:
git clone git@github.com:CircleCI-Public/orb-starter-kit.git My-Orb-Name
2. Create a new repository on GitHub with the same name. https://github.com/new
3. Run the orb-init.sh
script to begin.
The Orb Init script will automate the following tasks:
- Install and update the CircleCI CLI
- Request a CircleCI API token if none is currently set.
- Check to ensure git is installed and authenticated with GitHub.
- Connect your repository with the blank repo created in step 2.
- Create and switch to an "Alpha" branch
- Walk through creating a new orb via the CircleCI CLI
- Allow you to optionally enable advanced features.
- Create your customized config file
- Clean up - The script will remove itself from the repo for the next commit.
- Commit alpha branch with changes to GitHub.
Your orb will now be available at <your namespace>/<your orb>@dev:Alpha
The script will end by giving you a link to the running automated pipeline on your CircleCI account which will be building a "Hello World" orb.
4. Begin editing.
You may now edit the contents of the
/src
folder and commit your changes to theAlpha
branch or any non-master branch.
5. Build and test!
All commits to non-master branches will automatically result in the creation of a development orb under that branch. The automated pipeline will then run your integration tests against that newly created dev orb.
6. Publish!
Once ready to produce a new production version of your orb, you may merge your branch into the master branch to trigger the automated release process.
Recommended: If you have enabled the
fail-if-semver-not-indicated
option, your commit message when merging to master MUST include[semver:patch|minor|major|skip]
to designate the release type.You will need to manually publish the production version of your Orb for the initial version before the automated pipeline can update your production version later on. This is not needed on subsequent pushes.
Once the orb is complete, you will have two new Green workflows in your CircleCI account. The first one is for the initial setup and the second one will have produced a development version of your orb which contains a sample Command, Executor, and Job.
This orb provides a basic directory/file structure for a decomposed orb (where commands, jobs, examples, and executors each live in their own YAML file). Create each of your commands, jobs, examples, and executors within the requisite folders in the src
directory.
Following are some resources to help you build and test your orb:
- Intro to authoring orbs
- Orb Best Practices
- How to make an easy and valuable open source contribution with CircleCI orbs
Explanation of all permissions required for the script.
- sudo - The CircleCI CLI Update command will request sudo permissions to update.
Preview "Hello-World" Orb produced by this repo by default.
commands:
greet:
description: |
Replace this text with a description for this command. # What will this command do? # Descriptions should be short, simple, and clear.
parameters:
greeting:
default: Hello
description: Select a proper greeting
type: string
steps:
- run:
command: echo << parameters.greeting >> world
name: Hello World
description: |
Sample orb description # What will your orb allow users to do? # Descriptions should be short, simple, and clear.
examples:
example:
description: |
Sample example description. # What will this example document? # Descriptions should be short, simple, and clear.
usage:
jobs:
build:
machine: true
steps:
- foo/hello:
username: Anna
orbs:
foo: bar/foo@1.2.3
version: 2.1
executors:
default:
description: |
This is a sample executor using Docker and Node. # What is this executor? # Descriptions should be short, simple, and clear.
docker:
- image: circleci/node:<<parameters.tag>>
parameters:
tag:
default: latest
description: |
Pick a specific circleci/node image variant: https://hub.docker.com/r/circleci/node/tags
type: string
jobs:
hello:
description: |
# What will this job do? # Descriptions should be short, simple, and clear.
executor: default
parameters:
greeting:
default: Hello
description: Select a proper greeting
type: string
steps:
- greet:
greeting: << parameters.greeting >>
orbs:
hello: circleci/hello-build@0.0.5
version: 2.1