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