Initial template and merge code
This commit is contained in:
parent
25da2b2e5b
commit
9fb4d7cd04
3
examples/hello_cr/function.cr
Normal file
3
examples/hello_cr/function.cr
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
get "/" do
|
||||||
|
"Hello World!"
|
||||||
|
end
|
10
src/faaso.cr
10
src/faaso.cr
@ -1,4 +1,6 @@
|
|||||||
require "commander"
|
require "commander"
|
||||||
|
require "file_utils"
|
||||||
|
require "uuid"
|
||||||
|
|
||||||
# TODO: Write documentation for `Faaso`
|
# TODO: Write documentation for `Faaso`
|
||||||
module Faaso
|
module Faaso
|
||||||
@ -19,7 +21,15 @@ module Faaso
|
|||||||
puts "Building function... #{arg}"
|
puts "Building function... #{arg}"
|
||||||
# A function is a folder with stuff in it
|
# A function is a folder with stuff in it
|
||||||
# TODO: decide template based on file extensions or other metadata
|
# TODO: decide template based on file extensions or other metadata
|
||||||
|
template = "templates/crystal"
|
||||||
# TODO: copy template and add function files to it
|
# TODO: copy template and add function files to it
|
||||||
|
tmp_dir = "tmp/#{UUID.random}"
|
||||||
|
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
|
||||||
|
|
||||||
# TODO: build Docker image
|
# TODO: build Docker image
|
||||||
# TODO: push Docker image to registry
|
# TODO: push Docker image to registry
|
||||||
# TODO: return image name for testing
|
# TODO: return image name for testing
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
require "http/request"
|
|
||||||
require "http/headers"
|
|
||||||
|
|
||||||
class Handler
|
|
||||||
def run(request : HTTP::Request)
|
|
||||||
{
|
|
||||||
body: "Hello, Crystal. You said: #{request.body.try(&.gets_to_end)}",
|
|
||||||
status_code: 200,
|
|
||||||
headers: HTTP::Headers{"Content-Type" => "text/plain"},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,2 +0,0 @@
|
|||||||
name: crystal-http-template
|
|
||||||
version: 0.1.0
|
|
@ -1,41 +0,0 @@
|
|||||||
require "http/server"
|
|
||||||
require "./function/handler"
|
|
||||||
|
|
||||||
server = HTTP::Server.new do |context|
|
|
||||||
response_triple : NamedTuple(body: String, headers: HTTP::Headers, status_code: Int32) |
|
|
||||||
NamedTuple(body: String, headers: HTTP::Headers) |
|
|
||||||
NamedTuple(body: String, status_code: Int32) |
|
|
||||||
NamedTuple(body: String) |
|
|
||||||
NamedTuple(headers: HTTP::Headers, status_code: Int32) |
|
|
||||||
NamedTuple(headers: HTTP::Headers) |
|
|
||||||
NamedTuple(status_code: Int32)
|
|
||||||
|
|
||||||
handler = Handler.new
|
|
||||||
response_triple = handler.run(context.request)
|
|
||||||
|
|
||||||
if response_triple.is_a?(NamedTuple(body: String, headers: HTTP::Headers, status_code: Int32) |
|
|
||||||
NamedTuple(body: String, status_code: Int32) |
|
|
||||||
NamedTuple(headers: HTTP::Headers, status_code: Int32) |
|
|
||||||
NamedTuple(status_code: Int32))
|
|
||||||
context.response.status_code = response_triple[:status_code]
|
|
||||||
end
|
|
||||||
|
|
||||||
if response_triple.is_a?(NamedTuple(body: String, headers: HTTP::Headers, status_code: Int32) |
|
|
||||||
NamedTuple(body: String, headers: HTTP::Headers) |
|
|
||||||
NamedTuple(headers: HTTP::Headers, status_code: Int32) |
|
|
||||||
NamedTuple(headers: HTTP::Headers))
|
|
||||||
response_triple[:headers].each do |key, value|
|
|
||||||
context.response.headers[key] = value
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if response_triple.is_a?(NamedTuple(body: String, headers: HTTP::Headers, status_code: Int32) |
|
|
||||||
NamedTuple(body: String, headers: HTTP::Headers) |
|
|
||||||
NamedTuple(body: String, status_code: Int32) |
|
|
||||||
NamedTuple(body: String))
|
|
||||||
context.response.print(response_triple[:body])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
server.bind_tcp "0.0.0.0", 5000
|
|
||||||
server.listen
|
|
@ -1,6 +0,0 @@
|
|||||||
language: crystal
|
|
||||||
fprocess: ./handler
|
|
||||||
welcome_message: |
|
|
||||||
You have created a new function which uses crystal 1.0.0.
|
|
||||||
To include third-party dependencies, use a vendoring tool like shards:
|
|
||||||
shards documentation: https://github.com/crystal-lang/shards
|
|
@ -1,10 +1,6 @@
|
|||||||
FROM --platform=${TARGETPLATFORM:-linux/amd64} ghcr.io/openfaas/of-watchdog:0.9.10 as watchdog
|
|
||||||
FROM --platform=${TARGETPLATFORM:-linux/amd64} alpine as build
|
FROM --platform=${TARGETPLATFORM:-linux/amd64} alpine as build
|
||||||
ARG ADDITIONAL_PACKAGE
|
|
||||||
|
|
||||||
COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog
|
RUN apk update && apk upgrade && apk add crystal shards openssl-dev && apk cache clean
|
||||||
|
|
||||||
RUN apk update && apk upgrade && apk add crystal shards openssl-dev ${ADDITIONAL_PACKAGE} && apk cache clean
|
|
||||||
|
|
||||||
WORKDIR /home/app
|
WORKDIR /home/app
|
||||||
|
|
4
templates/crystal/main.cr
Normal file
4
templates/crystal/main.cr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
require "kemal"
|
||||||
|
require "./function.cr"
|
||||||
|
|
||||||
|
Kemal.run
|
15
templates/crystal/shard.yml
Normal file
15
templates/crystal/shard.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
name: function
|
||||||
|
version: 0.1.0
|
||||||
|
|
||||||
|
targets:
|
||||||
|
function:
|
||||||
|
main: main.cr
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
kemal:
|
||||||
|
github: kemalcr/kemal
|
||||||
|
|
||||||
|
# development_dependencies:
|
||||||
|
# webmock:
|
||||||
|
# github: manastech/webmock.cr
|
||||||
|
|
Loading…
Reference in New Issue
Block a user