diff options
author | Christopher Baines <mail@cbaines.net> | 2018-02-18 11:23:41 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2018-03-29 07:41:09 +0100 |
commit | bc1ffc5214ab3f563b60523d9c349fab7974e634 (patch) | |
tree | 1caa1ed8bf2fb96c4d340aeffd53cd50a8799980 /app/jobs/govuk_guix | |
parent | 700b8b0a112fa976b9850418a7f0c71d95b6dd79 (diff) | |
download | govuk-mini-environment-admin-bc1ffc5214ab3f563b60523d9c349fab7974e634.tar govuk-mini-environment-admin-bc1ffc5214ab3f563b60523d9c349fab7974e634.tar.gz |
Add some govuk-guix related jobs
And various other views and routes.
Diffstat (limited to 'app/jobs/govuk_guix')
-rw-r--r-- | app/jobs/govuk_guix/build_job.rb | 33 | ||||
-rw-r--r-- | app/jobs/govuk_guix/fetch_revision_job.rb | 49 | ||||
-rw-r--r-- | app/jobs/govuk_guix/job.rb | 24 |
3 files changed, 106 insertions, 0 deletions
diff --git a/app/jobs/govuk_guix/build_job.rb b/app/jobs/govuk_guix/build_job.rb new file mode 100644 index 0000000..381a717 --- /dev/null +++ b/app/jobs/govuk_guix/build_job.rb @@ -0,0 +1,33 @@ +require 'ruby_terraform' +require 'open3' + +class GovukGuix::BuildJob < GovukGuix::Job + @retry_interval = 30 + + def run(mini_environment_id) + logger.info "GovukGuix::BuildJob: Building mini environment #{mini_environment_id}" + + mini_environment = MiniEnvironment.find(mini_environment_id) + + slug = mini_environment.name.parameterize + + command = [ + "#{mini_environment.govuk_guix_revision.store_path}/bin/govuk", + "system", + "build", + "--rails-environment=production", + "--app-domain=#{slug}.aws.cbaines.net", + "--web-domain=www.#{slug}.aws.cbaines.net", + "--use-high-ports=false", + "--use-https=certbot", + "--fallback", + ] + + run_command(command) do |output| + store_path = output.last.strip + logger.debug("GovukGuix::BuildJob: start_command: #{store_path}") + + mini_environment.update(start_command: store_path) + end + end +end diff --git a/app/jobs/govuk_guix/fetch_revision_job.rb b/app/jobs/govuk_guix/fetch_revision_job.rb new file mode 100644 index 0000000..b1cb171 --- /dev/null +++ b/app/jobs/govuk_guix/fetch_revision_job.rb @@ -0,0 +1,49 @@ +require 'ruby_terraform' +require 'git' +require 'open3' + +class GovukGuix::FetchRevisionJob < GovukGuix::Job + @retry_interval = 30 + + def run(commit_hash) + repository.fetch + + repository.checkout(commit_hash) + + command = [ + "#{repository_directory}/guix-pre-inst-env", + "guix", + "build", + "-e", + "(begin (use-modules (gds packages govuk)) (current-govuk-guix))" + ] + + run_command(command) do |output| + store_path = output.last.strip + logger.debug("FetchRevisionJob: store_path: #{store_path}") + + GovukGuix::Revision.create( + commit_hash: commit_hash, + store_path: store_path + ) + end + end + + def repository + @_repository ||= begin + if File.exists? repository_directory + Git.open(repository_directory, :log => Rails.logger) + else + Git.clone(repository_remote_location, repository_directory) + end + end + end + + def repository_directory + 'tmp/cache/govuk-guix' + end + + def repository_remote_location + 'git@git.cbaines.net:gds/govuk-guix' + end +end diff --git a/app/jobs/govuk_guix/job.rb b/app/jobs/govuk_guix/job.rb new file mode 100644 index 0000000..0161cb1 --- /dev/null +++ b/app/jobs/govuk_guix/job.rb @@ -0,0 +1,24 @@ +class GovukGuix::Job < Que::Job + def run_command(command) + logger.debug("#{self.class}: Running command #{command}") + + Open3.popen2e(*command) do |stdin, stdout_and_stderr, wait_thr| + logger.info("#{self.class}: commmand running, pid #{wait_thr.pid}") + + output = [] + stdout_and_stderr.each_line do |line| + logger.debug("#{self.class}: #{line}") + output << line + end + + exit_status = wait_thr.value + unless exit_status == 0 + logger.error("#{self.class}: failed, exit status #{exit_status}") + + raise "#{output.join}\n" + end + + yield(output) + end + end +end |