faaso/src/faaso.cr

86 lines
2.4 KiB
Crystal
Raw Normal View History

require "commander"
2024-06-28 20:42:10 +00:00
require "docr"
require "docr/utils.cr"
2024-06-28 19:24:52 +00:00
require "file_utils"
require "uuid"
2024-06-28 15:41:21 +00:00
# TODO: Write documentation for `Faaso`
module Faaso
VERSION = "0.1.0"
module Commands
class Build
@arguments : Array(String) = [] of String
@options : Commander::Options
def initialize(options, arguments)
@options = options
@arguments = arguments
end
def run
@arguments.each do |arg|
# A function is a folder with stuff in it
# TODO: decide template based on file extensions or other metadata
2024-06-28 19:24:52 +00:00
template = "templates/crystal"
tmp_dir = "tmp/#{UUID.random}"
2024-06-28 22:15:42 +00:00
slug = arg.gsub("/","_").strip("_")
repo = "localhost:5000"
tag = "#{repo}/#{slug}:latest"
puts "Building function... #{arg} in #{tmp_dir}"
2024-06-28 19:24:52 +00:00
Dir.mkdir_p("tmp") unless File.exists? "tmp"
FileUtils.cp_r(template, tmp_dir)
Dir.glob(arg + "/**/*").each do |file|
FileUtils.cp(file, tmp_dir)
end
2024-06-28 20:42:10 +00:00
docker_api = Docr::API.new(Docr::Client.new)
2024-06-28 22:15:42 +00:00
docker_api.images.build(context: tmp_dir, tags: [tag, "#{slug}:latest"]) { }
puts "Pushing to repo as #{tag}"
docker_api.images.tag(repo: repo, name: slug, tag: "latest")
end
end
end
class Up
@arguments : Array(String) = [] of String
@options : Commander::Options
def initialize(options, arguments)
@options = options
@arguments = arguments
end
def run
@arguments.each do |arg|
puts "Starting function... #{arg}"
# TODO: Check that we have an image for the function
# TODO: Start a container with the image
# TODO: Run test for healthcheck
# TODO: Map route in reverse proxy to function
# TODO: Return function URL for testing
end
end
end
class Down
@arguments : Array(String) = [] of String
@options : Commander::Options
def initialize(options, arguments)
@options = options
@arguments = arguments
end
def run
@arguments.each do |arg|
puts "Stopping function... #{arg}"
# TODO: check if function is running
# TODO: stop function container
# TODO: delete function container
# TODO: remove route from reverse proxy
end
end
end
end
2024-06-28 15:41:21 +00:00
end