Visual representations of release pipelines.
Organization
s have manyProject
s- Each
Project
has an associated list ofStage
s, with their order determined byStage#position
(e.g., master, staging, and production) Stage
s must describe how to get information about their current state. This takes the form of a#git_remote
(e.g., referring to Github or Heroku), optional#branch
name (default: master), optional#hokusai
environment (e.g., staging or production), or#tag_pattern
(e.g., release-*). Thereleasecop
gem is used internally to determine stage diffs, so see that project for more detail.Stage
s can optionally be associated with aProfile
that stores credentials for accessing git providers or AWS.Snapshot
s capture the complete state of a project's stages at a point in time. EachSnapshot
has associatedComparison
s between the consecutive stages of a project (e).g., a comparison between master and staging, and a second between staging and production)- A cron periodically reevaluates these comparisons, creating a new snapshot if the state has changed at all.
hokusai dev run 'bundle exec rake db:migrate'
hokusai dev start
The administrative UI can then be found at http://localhost:3000/admin. Create organizations, projects, profiles, and stages from there. Alternatively, here's an example using the console:
org = Organization.create!(name: 'Acme')
website = org.projects.create!(name: 'acme.org')
heroku = org.profiles.create!(
name: 'heroku',
basic_username: 'heroku',
basic_password: '<heroku_token>'
)
github_aws = org.profiles.create!(
name: 'github/aws',
basic_username: 'github',
basic_password: '<github_token>',
environment: {'AWS_ACCESS_KEY_ID' => '<aws_id>', 'AWS_SECRET_ACCESS_KEY' => '<aws_secret>'}
)
website.stages.create!(
name: 'master',
git_remote: 'https://github.com/acme/website.git',
profile: github_aws
)
website.stages.create!(
name: 'staging',
git_remote: 'https://git.heroku.com/acme-website-staging.git',
profile: heroku
)
website.stages.create!(
name: 'production',
git_remote: 'https://git.heroku.com/acme-website-production.git',
profile: heroku
)
Once the cron has run, its snapshots are visible from the /projects
page.
Deployed manually via hokusai to only a staging environment.
hokusai registry push --force
hokusai staging deploy latest
Support hokusai- Better visual
Allow SSH keys to be configured for each org or project (probably likegit config --local core.sshCommand "ssh -i ~/.ssh/some_key_file"
...). (Maybe not necessary given github/heroku tokens in https URLs)sanitize URLs with tokens/credentials in theminstead of including tokens in each git URL, define "profiles" associated with each organization and project- Experiment with programmatic git/hokusai access instead of shelling out
- button to refresh project on-demand
- Fix ugly AWS credentials -> hokusai flow