CLI tool to generate Buildkite pipeline YAML
Project description
=====
bkyml
=====
.. image:: https://travis-ci.org/joscha/bkyml.svg?branch=master
:target: https://travis-ci.org/joscha/bkyml
.. image:: https://coveralls.io/repos/github/joscha/bkyml/badge.svg?branch=master
:target: https://coveralls.io/github/joscha/bkyml?branch=master
A CLI tool to generate a ``pipeline.yaml`` file for Buildkite on the fly.
Install via :code:`pip install bkyml` (see https://pypi.org/project/bkyml/)
Example:
.. code:: shell
bkyml comment 'Frontend tests pipeline'
bkyml env \
--var FORCE_COLOR 1
bkyml steps
bkyml command \
--command 'yarn install' \
--command 'yarn test' \
--label ':karma: tests'
bkyml wait
bkyml plugin \
--plugin 'org/upload-coverage#1.0.0' dir=./coverage
will produce
.. code:: yaml
# Frontend tests pipeline
env:
FORCE_COLOR: '1'
steps:
- label: ':karma: tests'
command:
- yarn install
- yarn test
- wait
- plugins:
org/upload-coverage#1.0.0:
dir: ./coverage
This allows you to dynamically generate pipelines:
.. code:: shell
#!/bin/env bash
set -eu -o pipefail
bkyml comment "Pipeline for running all tests in test/*"
bkyml steps
# add a new command step to run the tests in each test directory
for test_dir in test/*/; do
bkyml command \
--command "run_tests ${test_dir}" \
--label "Run tests for '${test_dir}'"
done
Sub-Commands
============
steps
-----
Example:
.. code:: shell
bkyml steps
will produce
.. code:: yaml
steps:
comment
-------
Example:
.. code:: shell
bkyml comment \
'Hello world!' 'What a nice day :)'
will produce
.. code:: yaml
# Hello world!
# What a nice day :)
env
---
Example:
.. code:: shell
bkyml env \
--var A B \
--var C D
will produce
.. code:: yaml
env:
A: B
C: D
command
-------
Example:
.. code:: shell
bkyml command \
--command 'yarn install' \
--command 'yarn test' \
--env FORCE_COLOR 1 \
--branches master \
--label ':yarn: tests' \
--agents yarn true \
--artifact-paths 'logs/**/*' 'coverage/**/*' \
--parallelism 5 \
--concurrency 2 \
--concurrency-group my/group \
--timeout-in-minutes 60 \
--skip 'Some reason' \
--retry automatic \
--retry-automatic-tuple '*' 2 \
--retry-automatic-tuple 1 3 \
--plugin docker-compose#v1.3.2 build=app image-repository=index.docker.io/org/repo
will produce
.. code:: yaml
- label: ':yarn: tests'
command:
- yarn install
- yarn test
branches: master
env:
FORCE_COLOR: '1'
agents:
yarn: 'true'
artifact_paths:
- logs/**/*
- coverage/**/*
parallelism: 5
concurrency: 2
concurrency_group: my/group
timeout_in_minutes: 60
skip: Some reason
retry:
automatic:
- exit_status: '*'
limit: 2
- exit_status: 1
limit: 3
plugins:
docker-compose#v1.3.2:
build: app
image-repository: index.docker.io/org/repo
There is also:
* :code:`--retry-automatic-limit`
* :code:`--retry-automatic-exit-code`
which can't be used in conjunction with --retry-automatic-tuple
And:
* :code:`--retry-manual-allowed` (allowing manual retries, default)
* :code:`--no-retry-manual-allowed` (disallowing manual retries)
* :code:`--retry-manual-reason REASON` (giving a reason why retries are forbidden)
* :code:`--retry-manual-permit-on-passed` (allowing retries after the job has passed)
* :code:`--no-retry-manual-permit-on-passed` (disallowing retries after the job has passed, default)
Example:
.. code:: shell
bkyml command \
--command 'x' \
--retry manual \
--retry-manual-permit-on-passed \
--no-retry-manual-allowed \
--retry-manual-reason "Just because"
will result in
.. code:: yaml
- command: x
retry:
manual:
allowed: false
reason: Just because
permit_on_passed: true
plugin
------
Example:
.. code:: shell
bkyaml plugin \
--plugin 'org/repo#1.0.0' some=var other=var \
--plugin 'org/other_repo' more=var \
--name 'My name is working'
will result in
.. code:: yaml
- name: My name is working
plugins:
org/repo#1.0.0:
some: var
other: var
org/other_repo:
more: var
wait
----
Example:
.. code:: shell
bkyaml wait \
--continue-on-failure
will result in
.. code:: yaml
- wait:
continue_on_failure: true
trigger
-------
Example:
.. code:: shell
bkyaml trigger 'my-pipeline' \
--branches master '*-release' \
--build-message 'My build message' \
--build-commit c0ffee \
--build-branch green \
--build-env FORCE_COLOR 1 \
--build-meta-data release-name 1.0.0
will result in
.. code:: yaml
- trigger: my-pipeline
branches: master *-release
build:
branch: green
commit: c0ffee
message: My build message
env:
FORCE_COLOR: '1'
meta_data:
release-name: 1.0.0
block
-----
Example:
.. code:: shell
bkyaml block ':rocket: Release'
will result in
.. code:: yaml
- block: ':rocket: Release'
Example with a select field:
.. code:: shell
bkyaml block ':rocket: Release!' \
--field-select \
'key' \
'Field label' \
'Some hint' \
true \
a \
'a=A label' \
'b=B label'
will result in:
..code:: yaml
- block: ':rocket: Release!'
fields:
- text: Field label
key: key
hint: Some hint
required: true
default: a
options:
- label: A label
value: a
- label: B label
value: b
Example with a text field:
.. code:: shell
bkyaml block ':rocket: Release!' \
--field-text \
'release-name' \
'Release name' \
'What should the next release name be?' \
true \
'Some release name'
will result in:
..code:: yaml
- block: ':rocket: Release!'
fields:
- text: Release name
key: release-name
hint: What should the next release name be?
required: true
default: Some release name
bkyml
=====
.. image:: https://travis-ci.org/joscha/bkyml.svg?branch=master
:target: https://travis-ci.org/joscha/bkyml
.. image:: https://coveralls.io/repos/github/joscha/bkyml/badge.svg?branch=master
:target: https://coveralls.io/github/joscha/bkyml?branch=master
A CLI tool to generate a ``pipeline.yaml`` file for Buildkite on the fly.
Install via :code:`pip install bkyml` (see https://pypi.org/project/bkyml/)
Example:
.. code:: shell
bkyml comment 'Frontend tests pipeline'
bkyml env \
--var FORCE_COLOR 1
bkyml steps
bkyml command \
--command 'yarn install' \
--command 'yarn test' \
--label ':karma: tests'
bkyml wait
bkyml plugin \
--plugin 'org/upload-coverage#1.0.0' dir=./coverage
will produce
.. code:: yaml
# Frontend tests pipeline
env:
FORCE_COLOR: '1'
steps:
- label: ':karma: tests'
command:
- yarn install
- yarn test
- wait
- plugins:
org/upload-coverage#1.0.0:
dir: ./coverage
This allows you to dynamically generate pipelines:
.. code:: shell
#!/bin/env bash
set -eu -o pipefail
bkyml comment "Pipeline for running all tests in test/*"
bkyml steps
# add a new command step to run the tests in each test directory
for test_dir in test/*/; do
bkyml command \
--command "run_tests ${test_dir}" \
--label "Run tests for '${test_dir}'"
done
Sub-Commands
============
steps
-----
Example:
.. code:: shell
bkyml steps
will produce
.. code:: yaml
steps:
comment
-------
Example:
.. code:: shell
bkyml comment \
'Hello world!' 'What a nice day :)'
will produce
.. code:: yaml
# Hello world!
# What a nice day :)
env
---
Example:
.. code:: shell
bkyml env \
--var A B \
--var C D
will produce
.. code:: yaml
env:
A: B
C: D
command
-------
Example:
.. code:: shell
bkyml command \
--command 'yarn install' \
--command 'yarn test' \
--env FORCE_COLOR 1 \
--branches master \
--label ':yarn: tests' \
--agents yarn true \
--artifact-paths 'logs/**/*' 'coverage/**/*' \
--parallelism 5 \
--concurrency 2 \
--concurrency-group my/group \
--timeout-in-minutes 60 \
--skip 'Some reason' \
--retry automatic \
--retry-automatic-tuple '*' 2 \
--retry-automatic-tuple 1 3 \
--plugin docker-compose#v1.3.2 build=app image-repository=index.docker.io/org/repo
will produce
.. code:: yaml
- label: ':yarn: tests'
command:
- yarn install
- yarn test
branches: master
env:
FORCE_COLOR: '1'
agents:
yarn: 'true'
artifact_paths:
- logs/**/*
- coverage/**/*
parallelism: 5
concurrency: 2
concurrency_group: my/group
timeout_in_minutes: 60
skip: Some reason
retry:
automatic:
- exit_status: '*'
limit: 2
- exit_status: 1
limit: 3
plugins:
docker-compose#v1.3.2:
build: app
image-repository: index.docker.io/org/repo
There is also:
* :code:`--retry-automatic-limit`
* :code:`--retry-automatic-exit-code`
which can't be used in conjunction with --retry-automatic-tuple
And:
* :code:`--retry-manual-allowed` (allowing manual retries, default)
* :code:`--no-retry-manual-allowed` (disallowing manual retries)
* :code:`--retry-manual-reason REASON` (giving a reason why retries are forbidden)
* :code:`--retry-manual-permit-on-passed` (allowing retries after the job has passed)
* :code:`--no-retry-manual-permit-on-passed` (disallowing retries after the job has passed, default)
Example:
.. code:: shell
bkyml command \
--command 'x' \
--retry manual \
--retry-manual-permit-on-passed \
--no-retry-manual-allowed \
--retry-manual-reason "Just because"
will result in
.. code:: yaml
- command: x
retry:
manual:
allowed: false
reason: Just because
permit_on_passed: true
plugin
------
Example:
.. code:: shell
bkyaml plugin \
--plugin 'org/repo#1.0.0' some=var other=var \
--plugin 'org/other_repo' more=var \
--name 'My name is working'
will result in
.. code:: yaml
- name: My name is working
plugins:
org/repo#1.0.0:
some: var
other: var
org/other_repo:
more: var
wait
----
Example:
.. code:: shell
bkyaml wait \
--continue-on-failure
will result in
.. code:: yaml
- wait:
continue_on_failure: true
trigger
-------
Example:
.. code:: shell
bkyaml trigger 'my-pipeline' \
--branches master '*-release' \
--build-message 'My build message' \
--build-commit c0ffee \
--build-branch green \
--build-env FORCE_COLOR 1 \
--build-meta-data release-name 1.0.0
will result in
.. code:: yaml
- trigger: my-pipeline
branches: master *-release
build:
branch: green
commit: c0ffee
message: My build message
env:
FORCE_COLOR: '1'
meta_data:
release-name: 1.0.0
block
-----
Example:
.. code:: shell
bkyaml block ':rocket: Release'
will result in
.. code:: yaml
- block: ':rocket: Release'
Example with a select field:
.. code:: shell
bkyaml block ':rocket: Release!' \
--field-select \
'key' \
'Field label' \
'Some hint' \
true \
a \
'a=A label' \
'b=B label'
will result in:
..code:: yaml
- block: ':rocket: Release!'
fields:
- text: Field label
key: key
hint: Some hint
required: true
default: a
options:
- label: A label
value: a
- label: B label
value: b
Example with a text field:
.. code:: shell
bkyaml block ':rocket: Release!' \
--field-text \
'release-name' \
'Release name' \
'What should the next release name be?' \
true \
'Some release name'
will result in:
..code:: yaml
- block: ':rocket: Release!'
fields:
- text: Release name
key: release-name
hint: What should the next release name be?
required: true
default: Some release name
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
bkyml-1.4.0.tar.gz
(25.6 kB
view hashes)
Built Distribution
bkyml-1.4.0-py2.py3-none-any.whl
(11.8 kB
view hashes)
Close
Hashes for bkyml-1.4.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca53ccbd82521ed6a268aa006150528f7afb5206af38c028f3882fa63f408ed4 |
|
MD5 | d641f36c1f670c7e34334fb8532f1175 |
|
BLAKE2b-256 | 900caa93e9a36bea5c6ff9c44c6daef57e9d29f2f75bee5efbdf1de4a44d56ad |