Class: Cutlass::LocalBuildpack
- Inherits:
-
Object
- Object
- Cutlass::LocalBuildpack
- Defined in:
- lib/cutlass/local_buildpack.rb
Overview
Converts a buildpack in a local directory into an image that pack can use natively
MY_BUILDPACK = LocalBuildpack.new(directory: "/tmp/muh_buildpack").call
puts MY_BUILDPACK.name #=> "docker:://cutlass_local_buildpack_abcd123"
Cutlass.config do |config|
config.default_buildapacks = [MY_BUILDPACK]
end
Note: Make sure that any built images are torn down in in your test suite
config.after(:suite) do
MY_BUILDPACK.teardown
Cutlass::CleanTestEnv.check
end
Instance Method Summary collapse
- #built? ⇒ Boolean
- #call ⇒ Object
- #exist? ⇒ Boolean
- #file_lock ⇒ Object
-
#initialize(directory:) ⇒ LocalBuildpack
constructor
A new instance of LocalBuildpack.
- #name ⇒ Object
- #teardown ⇒ Object
Constructor Details
#initialize(directory:) ⇒ LocalBuildpack
Returns a new instance of LocalBuildpack.
28 29 30 31 32 33 34 |
# File 'lib/cutlass/local_buildpack.rb', line 28 def initialize(directory:) @built = false @directory = Pathname(directory) @image_name = "cutlass_local_buildpack_#{SecureRandom.hex(10)}" @mutex_file = Tempfile.new end |
Instance Method Details
#built? ⇒ Boolean
118 119 120 |
# File 'lib/cutlass/local_buildpack.rb', line 118 def built? @built end |
#call ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/cutlass/local_buildpack.rb', line 60 def call file_lock do return if built? raise "must be directory: #{@directory}" unless @directory.directory? @built = true call_build_sh call_pack_buildpack_package end self end |
#exist? ⇒ Boolean
44 45 46 |
# File 'lib/cutlass/local_buildpack.rb', line 44 def exist? @directory.exist? end |
#file_lock ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/cutlass/local_buildpack.rb', line 36 def file_lock file = File.open(@mutex_file.path, File::CREAT) file.flock(File::LOCK_EX) yield ensure file.close end |
#name ⇒ Object
55 56 57 58 |
# File 'lib/cutlass/local_buildpack.rb', line 55 def name call "docker://#{image_name}" end |
#teardown ⇒ Object
48 49 50 51 52 53 |
# File 'lib/cutlass/local_buildpack.rb', line 48 def teardown return unless built? image = Docker::Image.get(image_name) image.remove(force: true) end |