class Pipedawg::Pipeline
pipeline class
Attributes
name[RW]
opts[RW]
Public Class Methods
new(name = 'pipeline', opts = {})
click to toggle source
# File lib/pipedawg/pipeline.rb, line 8 def initialize(name = 'pipeline', opts = {}) @name = name @opts = { jobs: [Pipedawg::Job.new], stages: ['build'], workflow: nil }.merge(opts) update end
Public Instance Methods
to_yaml()
click to toggle source
# File lib/pipedawg/pipeline.rb, line 18 def to_yaml require 'json' require 'yaml' pipeline = opts.compact.reject { |k, _| %i[jobs].include? k } opts[:jobs].each do |job| pipeline.merge!(job.to_hash) end JSON.parse(pipeline.to_json).to_yaml end
to_yaml_file(file = 'pipeline.yml')
click to toggle source
# File lib/pipedawg/pipeline.rb, line 28 def to_yaml_file(file = 'pipeline.yml') File.write(file, to_yaml) end
update()
click to toggle source
# File lib/pipedawg/pipeline.rb, line 32 def update stages = [] opts[:jobs].each do |job| stage = stage_from_needs(opts[:jobs], job.name) stages << stage job.opts[:stage] = stage.to_s end opts[:stages] = stages.uniq.sort.map(&:to_s) end
Private Instance Methods
stage_from_needs(jobs, job_name)
click to toggle source
# File lib/pipedawg/pipeline.rb, line 44 def stage_from_needs(jobs, job_name) if jobs.select { |job| job.name == job_name }[0].opts.fetch(:needs, []) == [] 1 else jobs.select { |job| job.name == job_name }[0].opts[:needs].map { |need| stage_from_needs(jobs, need) }.max + 1 end end