Adds hooks to MRSK. Currently just two hooks, pre-build and post-push. We could break the build and push into two separate commands if we found the need for post-build and/or pre-push hooks. Hooks are stored in `.mrsk/hooks`. Running `mrsk init` will now create that folder and add sample hook scripts. Hooks returning non-zero exit codes will abort the current command. Further potential work here: - We could replace the audit broadcast command with a post-deploy/post-rollback hook or similar - Maybe provide pre-command/post-command hooks that run after every mrsk invocation - Also look for hooks in `~/.mrsk/hooks`
33 lines
840 B
Ruby
33 lines
840 B
Ruby
require "test_helper"
|
|
|
|
class CommandsHookTest < ActiveSupport::TestCase
|
|
include ActiveSupport::Testing::TimeHelpers
|
|
|
|
setup do
|
|
freeze_time
|
|
|
|
@config = {
|
|
service: "app", image: "dhh/app", registry: { "username" => "dhh", "password" => "secret" }, servers: [ "1.1.1.1" ],
|
|
traefik: { "args" => { "accesslog.format" => "json", "metrics.prometheus.buckets" => "0.1,0.3,1.2,5.0" } }
|
|
}
|
|
|
|
@performer = `whoami`.strip
|
|
@recorded_at = Time.now.utc.iso8601
|
|
end
|
|
|
|
test "run" do
|
|
assert_equal [
|
|
".mrsk/hooks/foo",
|
|
{ env: {
|
|
"MRSK_RECORDED_AT" => @recorded_at,
|
|
"MRSK_PERFORMER" => @performer,
|
|
"MRSK_VERSION" => "123" } }
|
|
], new_command.run("foo")
|
|
end
|
|
|
|
private
|
|
def new_command
|
|
Mrsk::Commands::Hook.new(Mrsk::Configuration.new(@config, version: "123"))
|
|
end
|
|
end
|