diff options
author | Francisco Javier López <fjlopez@gitlab.com> | 2018-07-05 16:55:10 +0300 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2018-07-05 16:55:10 +0300 |
commit | a7a1531fe5d030d47d63bfcd86a7168a8437ff86 (patch) | |
tree | 65854ce75eb6b6f6061fef114f95076fae2ab9a8 /app/models/ci | |
parent | 9a62e72db9892708ab360c59a9f77695d9253c34 (diff) |
Web Terminal Ci Build
Diffstat (limited to 'app/models/ci')
-rw-r--r-- | app/models/ci/build.rb | 14 | ||||
-rw-r--r-- | app/models/ci/build_runner_session.rb | 25 |
2 files changed, 39 insertions, 0 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 41446946a5e..bf93a2caf72 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -27,7 +27,13 @@ module Ci has_one :job_artifacts_trace, -> { where(file_type: Ci::JobArtifact.file_types[:trace]) }, class_name: 'Ci::JobArtifact', inverse_of: :job, foreign_key: :job_id has_one :metadata, class_name: 'Ci::BuildMetadata' + has_one :runner_session, class_name: 'Ci::BuildRunnerSession', validate: true, inverse_of: :build + + accepts_nested_attributes_for :runner_session + delegate :timeout, to: :metadata, prefix: true, allow_nil: true + delegate :url, to: :runner_session, prefix: true, allow_nil: true + delegate :terminal_specification, to: :runner_session, allow_nil: true delegate :gitlab_deploy_token, to: :project ## @@ -174,6 +180,10 @@ module Ci after_transition pending: :running do |build| build.ensure_metadata.update_timeout_state end + + after_transition running: any do |build| + Ci::BuildRunnerSession.where(build: build).delete_all + end end def ensure_metadata @@ -584,6 +594,10 @@ module Ci super(options).merge(when: read_attribute(:when)) end + def has_terminal? + running? && runner_session_url.present? + end + private def update_artifacts_size diff --git a/app/models/ci/build_runner_session.rb b/app/models/ci/build_runner_session.rb new file mode 100644 index 00000000000..6f3be31d8e1 --- /dev/null +++ b/app/models/ci/build_runner_session.rb @@ -0,0 +1,25 @@ +module Ci + # The purpose of this class is to store Build related runner session. + # Data will be removed after transitioning from running to any state. + class BuildRunnerSession < ActiveRecord::Base + extend Gitlab::Ci::Model + + self.table_name = 'ci_builds_runner_session' + + belongs_to :build, class_name: 'Ci::Build', inverse_of: :runner_session + + validates :build, presence: true + validates :url, url: { protocols: %w(https) } + + def terminal_specification + return {} unless url.present? + + { + subprotocols: ['terminal.gitlab.com'].freeze, + url: "#{url}/exec".sub("https://", "wss://"), + headers: { Authorization: authorization.presence }.compact, + ca_pem: certificate.presence + } + end + end +end |