summaryrefslogtreecommitdiff
path: root/qa/qa/factory/resource/runner.rb
diff options
context:
space:
mode:
Diffstat (limited to 'qa/qa/factory/resource/runner.rb')
-rw-r--r--qa/qa/factory/resource/runner.rb52
1 files changed, 52 insertions, 0 deletions
diff --git a/qa/qa/factory/resource/runner.rb b/qa/qa/factory/resource/runner.rb
new file mode 100644
index 00000000000..037136dd113
--- /dev/null
+++ b/qa/qa/factory/resource/runner.rb
@@ -0,0 +1,52 @@
+require 'securerandom'
+
+module QA
+ module Factory
+ module Resource
+ class Runner < Factory::Base
+ attr_writer :name
+
+ dependency Factory::Resource::Project, as: :project do |project|
+ project.name = 'project-with-ci-cd'
+ project.description = 'Project with CI/CD Pipelines'
+ end
+
+ def name
+ @name || "qa-runner-#{SecureRandom.hex(4)}"
+ end
+
+ def perform(&block)
+ @block ||= block
+ end
+
+ def fabricate!
+ project.visit!
+
+ Page::Menu::Side.act { click_ci_cd_settings }
+
+ Service::Runner.perform do |runner|
+ Page::Project::Settings::CICD.perform do |settings|
+ settings.expand_runners_settings do |runners|
+ runner.pull
+ runner.name = name
+ runner.token = runners.registration_token
+ runner.address = runners.coordinator_address
+ runner.tags = %w[qa test]
+ runner.register!
+ end
+
+ sleep 5 # TODO, non-blocking waiting for Runner to register.
+
+ settings.refresh
+
+ settings.expand_runners_settings do |runners|
+ perform&.call(runners)
+ runner.remove!
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end