A CLI tool for common Continuous Integration/Continuous Delivery Tasks
Current Integrations:
-
Source Control/Build Management
-
Code Analysis
-
Agile Process Management
-
Deployment Management
-
Notification Management
-
Plugins
- If they exist, see plugins/README.md
- Backlog: Pivotal Tracker
- Docker:
- Chat: gitter.im
For instructions on contributing, please see CONTRIBUTING.md.
python3 setup.py install
which flow
NOTE: The installation may require sudo based on user permissions.
Please configure buildConfig.json.
Generates version numbers (using either semantic or calver versioning), attaches release notes and retrieves the latest version number.
Actions:
version
- create new version, tag repo with version number and append build notes
getversion
- returns the latest version number.
Usage: flow github [Flags] [Action] [Environment]
Flags:
-v VERSION, --version VERSION (optional) If manually versioning, this is passed in by the user. Note: versionStrategy in buildConfig should be set to "manual"
-sy, --short-year (optional) causes flow to create a calver_year version with a 2 digit year instead of a 4 digit year. Note: versionStrategy in buildConfig must be set to "calver_year"
-o OUTPUT, --output OUTPUT (optional) Writes the version number to a file. Use only if you need to persist the version number in a file.
--no-publish (optional) Stops publish to GitHub releases
-rnop RELEASE_NOTES_OUTPUT_PATH, --release-notes-output-path RELEASE_NOTES_OUTPUT_PATH (optional) Writes the release notes to a file. Use only if you need to persist the release notes in a file.
Environment Variables:
Variable Name | Required/Optional | Description |
---|---|---|
TRACKER_TOKEN | Required | to access Pivotal Tracker story information when building release notes (don't use if you have a JIRA_TOKEN instead) |
JIRA_USER | Required | to access Jira story information when building release notes (don't use if you have a TRACKER_TOKEN instead) |
JIRA_TOKEN | Required | to access Jira story information when building release notes (don't use if you have a TRACKER_TOKEN instead) |
GITHUB_TOKEN | Required | for access to your project API NOTE: Requires repo access only. |
SLACK_WEBHOOK_URL | Optional | for sending error messages from Flow to your slack channel |
calver_year version strategy:
The versionStrategy under projectInfo in buildConfig.json must be set to 'calver_year'
The format of the version string under this strategy looks like: year.major.patch+snapshot
Each component of the version will be incremented based upon the configuration for the specified build environment from buildConfig.json.
- snapshot increments when the build environment from buildConfig.json specifies artifactCategory as 'snapshot'.
- patch increments when the build environment from buildConfig.json specifies artifactCategory as 'release' and calverBumpStrategy as 'patch'.
- major increments when the build environment from buildConfig.json specifies artifactCategory as 'release' and calverBumpStrategy as 'major'.
- year increments after the 00:00 on Jan 01 of a new year. The default year format is 4 digit long year.
If the build environment from buildConfig.json specifies calverYearFormat as 'short' or the short_year flag is passed to the version command then the year will be displayed as 2 digits.
Build Config Setup:
"projectInfo": {
"name": "flow",
"language": "python",
"versionStrategy": "calver_year"
},
"environments" : {
"build_env_calver_long_snapshot" : {
"artifactCategory": "snapshot",
"associatedBranchName": "develop",
"calverBumpStrategy": "patch",
"calverYearFormat": "long"
},
"build_env_calver_long_release_patch" : {
"artifactCategory": "release",
"associatedBranchName": "master",
"calverBumpStrategy": "patch",
"calverYearFormat": "long"
},
"build_env_calver_long_release_major" : {
"artifactCategory": "release",
"associatedBranchName": "master",
"calverBumpStrategy": "major",
"calverYearFormat": "long"
},
"build_env_calver_short_snapshot" : {
"artifactCategory": "snapshot",
"associatedBranchName": "develop",
"calverBumpStrategy": "patch",
"calverYearFormat": "short"
},
"build_env_calver_short_release_patch" : {
"artifactCategory": "release",
"associatedBranchName": "master",
"calverBumpStrategy": "patch",
"calverYearFormat": "short"
},
"build_env_calver_short_release_major" : {
"artifactCategory": "release",
"associatedBranchName": "master",
"calverBumpStrategy": "major",
"calverYearFormat": "short"
}
}
For the help documentation, please check flow github -h
Label stories with the version number.
Actions:
label-release
- lookup stories in commit history and tag each story with the current version number
Usage: flow tracker [Flags] [Action] [Environment]
Flags:
-v VERSION, --version VERSION (optional) If manually versioning, this is passed in by the user. Note: versionStrategy in buildConfig should be set to "manual"
Environment Variables:
Variable Name | Required/Optional | Description |
---|---|---|
TRACKER_TOKEN | Required | for accessing story information and labeling stories |
GITHUB_TOKEN | Required | for access to your project API NOTE: Requires repo access only. |
SLACK_WEBHOOK_URL | Optional | for sending error messages from Flow to your slack channel |
Settings.ini (Global Settings):
- url (required) to the tracker server. Priority is given if a value in buildConfig.json is specified.
Build Config Setup:
"projectTracking" : {
"tracker" : {
"projectId" : 1234567
}
}
or
"projectTracking" : {
"tracker" : {
"projectIds" : [ 1234567, 7654321 ]
}
}
The following are deprecated, please use one of the previous options
"tracker" : {
"projectId" : 1234567
}
or
"tracker" : {
"projectIds" : [ 1234567, 7654321 ]
}
For the help documentation, please check flow tracker -h
Label stories with the version number.
Actions:
label-release
- lookup stories in commit history and tag each story with the current version number
Usage: flow jira [Flags] [Action] [Environment]
Flags:
-v VERSION, --version VERSION (optional) If manually versioning, this is passed in by the user. Note: versionStrategy in buildConfig should be set to "manual"
Environment Variables:
Variable Name | Required/Optional | Description |
---|---|---|
JIRA_USER | Required | user account email for accessing story information and labeling stories |
JIRA_TOKEN | Required | user account token for accessing story information and labeling stories |
GITHUB_TOKEN | Required | for access to your project API NOTE: Requires repo access only. |
SLACK_WEBHOOK_URL | Optional | for sending error messages from Flow to your slack channel |
Settings.ini (Global Settings):
- url (required) to the jira server. Priority is given if a value in buildConfig.json is specified.
Build Config Setup:
"projectTracking" : {
"jira" : {
"projectKey" : "SAMPLEKEY"
}
}
or
"projectTracking" : {
"jira" : {
"projectKeys" : [ "SAMPLEKEY", "OTHERKEY" ]
}
}
For the help documentation, please check flow jira -h
Publishes release notes after a deployment.
Actions:
release
- ship release notes to slack after a deployment has completed
message
- Sends custom slack messages. One use case is for sending flow deprecation messages to teams during their deployment.
Notes: If no channel is defined in buildConfig.json, this will publish to the default channel for the webhook. It also provides links for manually publishing to other environments specified in the buildConfig.json.
Usage: flow slack [Flags] [Action] [Environment]
Flags:
-c CHANNEL, --channel CHANNEL Slack channel to post in.
-v VERSION, --version VERSION (optional) Defaults to latest version. If upload is for a previous version, pass in the version number here.
-m MESSAGE, --message MESSAGE For use with message action. Message to be published.
-s USER, --user USER (optional) For use with message action. User name for message.
-i ICON, --icon ICON (optional) For use with message action. Icon to be displayed in footer.
-e EMOJI, --emoji EMOJI (optional) For use with message action. Emoji for message.
-a ATTACHMENT_COLOR, --attachment-color ATTACHMENT_COLOR (optional) For use with message action. Color for attachment bar.
-u SLACK_URL, --slack_url SLACK_URL (optional) For use with message action. Slack webhook url.
Environment Variables:
Variable Name | Required/Optional | Description |
---|---|---|
TRACKER_TOKEN | Required | for accessing story information and labeling stories (don't use if you have a JIRA_TOKEN instead) |
JIRA_USER | Required | for accessing story information and labeling stories (don't use if you have a TRACKER_TOKEN instead) |
JIRA_TOKEN | Required | for accessing story information and labeling stories (don't use if you have a TRACKER_TOKEN instead) |
GITHUB_TOKEN | Required | for access to your project API NOTE: Requires repo access only. |
SLACK_WEBHOOK_URL | Required | for sending release notes to slack |
Settings.ini (Global Settings):
-
bot_name (required) default bot name. Can be overridden by users in their buildConfig.json.
-
emoji (required) default emoji. Can be overridden by users in their buildConfig.json.
-
release_note_attachment_color (required) default bar color for release notes. Can be overridden by users in their buildConfig.json.
-
error_attachment_color (required) default bar color for errors sent to slack. Can be overridden by users in their buildConfig.json.
-
generic_message_slack_url (optional) sets generic channel when using the custom message feature of slack
For the help documentation, please check flow slack -h
Triggers a sonar scan of your project.
Notes: Project configuration should be defined in sonar-project.properties. For an example, see this.
The sonar task requires installation of sonar-runner. The name of the local sonar runner executable needs to be defined in settings.ini.
The sonar task requires an environment variable, called SONAR_HOME that points to your sonar runner directory.
Actions:
scan
- submit code to sonar for code quality scan
Usage: flow sonar [Flags] [Action] [Environment]
Flags:
-v VERSION, --version VERSION (optional) If manually versioning, this is passed in by the user.
Environment Variables:
Variable Name | Required/Optional | Description |
---|---|---|
SLACK_WEBHOOK_URL | Required | for sending error messages from Flow to your slack channel |
Settings.ini (Global Settings):
- sonar_runner (required) path to sonar runner executable
For the help documentation, please check flow sonar -h
Task used to upload/download artifacts to/from artifactory.
Actions:
upload
- uploads artifact to artifactory. location is based on settings in buildConfig.json.
download
- downloads artifact from artifactory. location is based on settings in buildConfig.json and optional version number passed in.
NOTE: To include a POM in the upload, set includePom
in your buildConfig.json, artifact
stanza.
Usage: flow artifactory [Flags] [Action] [Environment]
Flags:
-x EXTRACT, --extract EXTRACT (optional) Only used for download action. Specifies whether the downloaded artifact should be extracted (only applies to .tar .tar.gz .zip file formats). Default True.
-v VERSION, --version VERSION (optional) If manually versioning, this is passed in by the user. Note: versionStrategy in buildConfig should be set to "manual"
Environment Variables:
Variable Name | Required/Optional | Description |
---|---|---|
SLACK_WEBHOOK_URL | Optional | for sending error messages from Flow to your slack channel |
ARTIFACTORY_TOKEN | Required | api token to artifactory OR encrypted password for user if used in conjunction with ARTIFACTORY_USER |
ARTIFACTORY_USER | Optional | user for uploading to artifactory |
ARTIFACT_BUILD_DIRECTORY | Required | directory location where artifact is built |
For the help documentation, please check flow artifactory -h
Performs a zero-downtime deployment to cloud foundry expecting a manifest named after your environment (e.g. development.manifest.yml). The version for the deployed application defaults to the latest release in GitHub but can be overwritten with the -v
or --version
flag. This currently (12-07-16) requires an artifact in artifactory to function.
Actions:
deploy
- push application to Pivotal Cloud Foundry
Usage: flow cf [Flags] [Action] [Environment]
Flags:
-v VERSION, --version VERSION (optional) Defaults to latest version. If deployment is for a previous version, pass in the version number here.
-f FORCE, --force FORCE (optional) Force the deploy even if the same version number is already running. Note: Zero-downtime deployment will not occur if forcing a deploy on the same version number.
-s SCRIPT, --script SCRIPT (optional) If you choose to use a custom deploy script instead of the default zero-downtime, pass in the path to deploy script here.
-metrics MANIFEST, --manifest MANIFEST (optional) Custom manifest name if you choose not to follow standard pattern of{environment}.manifest.yml
--no-download (optional) Skips downloading and extraction of artifact. Useful if the artifact was downloaded and extracted previously. Environment Variables:
Variable Name | Required/Optional | Description |
---|---|---|
SLACK_WEBHOOK_URL | Required | for sending error messages from Flow to your slack channel |
GITHUB_TOKEN | Required | for access to your project API NOTE: Requires repo access only. |
ARTIFACTORY_TOKEN | Required | api token to artifactory OR encrypted password for user if used in conjunction with ARTIFACTORY_USER (api token is preferred over password) |
DEPLOYMENT_USER | Required | for logging into PCF |
DEPLOYMENT_PWD | Required | for logging into PCF |
ARTIFACTORY_USER | Optional | User for uploading to artifactory |
CF_BUILDPACK | Optional | Custom build packs should typically be indicated in your manifest; however, sometimes URLs for build packs may contains sensitive information, such as a github oauth token. You can use this environment variable to avoid exposing this in your manifest. |
CF_VARS | Optional | to specify a vars file or path to vars file to use as argument for --vars-file |
Settings.ini (Global Settings):
- cli_download_path (required) path to download cf cli
For the help documentation, please check flow cf -h
Performs a deployment to Google App Engine expecting an application yaml named after your environment (e.g. app-development.yaml/yml) or a custom app-yml name to be passed in. The version for the deployed application defaults to the latest release in GitHub but can be overwritten with the -v
or --version
flag. This currently (12-07-16) requires an artifact in artifactory to function.
Actions:
deploy
- ship version of code to Google Cloud App Engine
Usage: flow gcappengine [Flags] [Action] [Environment]
Flags:
-v VERSION, --version VERSION (optional) Defaults to latest version. If deployment is for a previous version, pass in the version number here.
-d DEPLOY_DIRECTORY, --deploy-directory DEPLOY_DIRECTORY (optional) Directory to download artifact to. By default it's downloaded to a new directory called 'fordeployment'
-y APP_YAML, --app-yaml APP_YAML (optional) Custom app manifest. Default is app-{environment}.yaml
-p PROMOTE, --promote PROMOTE (optional) Automatically promote new version and stop routing traffic to the older version. Default is true.
Environment Variables:
Variable Name | Required/Optional | Description |
---|---|---|
GCAPPENGINE_USER_JSON | Required | the contents of a service account json created from Google's Instructions here NOTE: this is json content, not a uri to a file. |
CLOUDSDK_CORE_PROJECT | Required | project name as displayed in google cloud |
Settings.ini (Global Settings):
- cloud_sdk_path (required) path to download gcloud cli
For the help documentation, please check flow gcappengine -h
Licensed under the Apache License
Andrew Turner @aturnerbulldawg
Cade Thacker
Jeff Billimek
Corbett Waddingham
Jimmy Joy
Jermaine Davis
Nick Bunn
Preston Turner
Chris Leatherwood
Notable Mentions: Jeff Anderson, Patrick Baggett, Micahel Celeste, Mark Dedula, Adam Edelman, Chris Gruel, Joey Guerra, Nolan Hedstrom, Muhammad Ikram, John Jimenez, Shane Keels, David Kowis, John Mckenna, Winston Milling, Dhakshna Munusamy, Sanjay Nair, Nikeshbhai Patel, Priyesh Patel, Cody Stamps, Ian Stansbury, Alvaro Ramirez-del Villar