OrgUpdateMatrix
This gem revceives data from a Capistrano run and updates a specified YAML file in the specified GitHub repository.
Depends on the "octokit" gem https://github.com/octokit/octokit.rb
Installation
Add this line to your application's Gemfile:
gem 'orgupdatematrix'
And then execute:
$ bundle
Or install it yourself as:
$ gem install orgupdatematrix
Usage
Add to your Capfile:
require 'orgupdatematrix'
Add an :app_url
variable to each deploy env file such as deploy/environments/staging.rb
:
set :app_url, 'https://staging.my-application.com'
Add the matrix
role to the servers you want to report from:
server 'staging.my-application.com', user: 'deploy', roles: %w{web matrix}
Auth: generate a GitHub personal access token and supply it at deploy time:
GITHUB_API_TOKEN=token-value cap production deploy
Add the following task to your Capistrano config eg. deploy/config.rb
:
desc 'Update Matrix'
task :update_matrix do
optional_extras = {
'my_var1' => 'value1',
'my_var2' => 'value2'
}
on roles(:matrix) do
within repo_path do
info 'Updating deploy matrix!'
commit = capture(:git, 'rev-list', '-n', '1', fetch(:branch)).chomp
updater = OrgUpdateMatrix::Updater.new('GitHubUser/RepoName', 'file-path.yml', ENV['GITHUB_API_TOKEN'])
updater.update(fetch(:application), fetch(:stage), fetch(:branch), commit, fetch(:app_url), fetch(:repo_url), fetch(:extra_env))
end
end
end
after :finished, :update_matrix
This will update the remote YAML file to look like this:
---
app_name:
stage_name:
branch: branch_or_tag_name
commit: 6209dc2138df2ecb808559d8f1c5bc41bfd17d0d
updated: 2019-05-09 03:51:50 UTC
app_url: https://staging.my-application.com
github_url: https://github.com/MyUser/AppRepo.git
extras:
my_var1: value1
my_var2: value2
Only the specified application
+ stage
section will be updated. The rest of the file's contents will remain unchanged.