Sha256: b3ff5fdda9749d636891b0ed9aa49f22b28e0deec1973290ae54576896e4340f

Contents?: true

Size: 1.73 KB

Versions: 1

Compression:

Stored size: 1.73 KB

Contents

# frozen_string_literal: true

require 'tempfile'

module Buildkite
  module Builder
    module Commands
      class Run < Abstract
        private
        include LoggingUtils
        using Rainbow

        self.description = 'Builds and uploads the generated pipeline.'

        def run
          relative_pipeline_path = pipeline_path.relative_path_from(Builder.root)

          # This entrypoint is for running on CI. It expects certain environment
          # variables to be set. It also uploads the pipeline to Buildkite.
          log.info "#{'+++ ' if Buildkite.env}🧰 " + 'Buildkite Builder'.color(:springgreen) + " ─ #{relative_pipeline_path.to_s.yellow}"
          context = Context.new(pipeline_path, logger: log)
  
          results = benchmark("\nDone (%s)".color(:springgreen)) do
            context.build
          end
          log.info(results)
  
          upload(context.pipeline)
        end
  
        private

        def pipeline_path
          pipeline_path_override || super
        end
  
        def pipeline_path_override
          if ENV['BUILDKITE_BUILDER_PIPELINE_PATH']
            path = Pathname.new(ENV['BUILDKITE_BUILDER_PIPELINE_PATH'])
            path.absolute? ? path : Builder.root.join(path)
          end
        end

        def upload(pipeline)
          # Upload the pipeline.
          Tempfile.create(['pipeline', '.yml']) do |file|
            file.sync = true
            file.write(pipeline.to_yaml)
  
            log.info '+++ :paperclip: Uploading artifact'
            Buildkite::Pipelines::Command.artifact!(:upload, file.path)
            log.info '+++ :pipeline: Uploading pipeline'
            Buildkite::Pipelines::Command.pipeline!(:upload, file.path)
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
buildkite-builder-1.2.0 lib/buildkite/builder/commands/run.rb