From 11f1066619ce3add4c2fb43c74ab00504986f972 Mon Sep 17 00:00:00 2001 From: Roberto Alsina Date: Fri, 28 Jun 2024 12:41:21 -0300 Subject: [PATCH] initial commit --- .editorconfig | 9 +++++++++ .gitignore | 5 +++++ DESIGN.md | 41 +++++++++++++++++++++++++++++++++++++++++ LICENSE | 21 +++++++++++++++++++++ README.md | 27 +++++++++++++++++++++++++++ shard.yml | 13 +++++++++++++ spec/faaso_spec.cr | 9 +++++++++ spec/spec_helper.cr | 2 ++ src/faaso.cr | 6 ++++++ 9 files changed, 133 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 DESIGN.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 shard.yml create mode 100644 spec/faaso_spec.cr create mode 100644 spec/spec_helper.cr create mode 100644 src/faaso.cr diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..163eb75 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*.cr] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0bb75ea --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/docs/ +/lib/ +/bin/ +/.shards/ +*.dwarf diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 0000000..2c355c6 --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,41 @@ +# Design for FaaSO + +## Introduction + +This should explain the high-level plan. Of course once I start +writing the thing it will change, because I am *agile* like that. + +So, here it is: + +## Function Builder + +Take the function code, some ancillary files, and build a docker +image using a template so that it can be executed. + +Additionally: + +* The image should be runnable with a standard `docker run` command +* A test can be defined to check if the function is working + +## Function Runner + +Given a description of what functions should be made available at +which endpoints, like + +/sum -> sum +/mul -> multiply + +It should: + +* Start those functions via docker, running in specific ports +* Create a reverse proxy that routes the paths to the correct function +* Start/reload/configure the proxy as needed +* Periodically check the functions are still running + +Intentionally: No HA yet, no multiple instances of functions, no +up/downscaling, no multiple versions routed by header. + +# Implementation Ideas + +* caddy for proxy? It's simple, fast, API-configurable. +* Local docker registry for images? See https://www.docker.com/blog/how-to-use-your-own-registry-2/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..930c197 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Roberto Alsina + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..7fde795 --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# faaso + +TODO: Write a description here + +## Installation + +TODO: Write installation instructions here + +## Usage + +TODO: Write usage instructions here + +## Development + +TODO: Write development instructions here + +## Contributing + +1. Fork it () +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Commit your changes (`git commit -am 'Add some feature'`) +4. Push to the branch (`git push origin my-new-feature`) +5. Create a new Pull Request + +## Contributors + +- [Roberto Alsina](https://github.com/your-github-user) - creator and maintainer diff --git a/shard.yml b/shard.yml new file mode 100644 index 0000000..f1510bf --- /dev/null +++ b/shard.yml @@ -0,0 +1,13 @@ +name: faaso +version: 0.1.0 + +authors: + - Roberto Alsina + +targets: + faaso: + main: src/faaso.cr + +crystal: '>= 1.12.2' + +license: MIT diff --git a/spec/faaso_spec.cr b/spec/faaso_spec.cr new file mode 100644 index 0000000..2252f6d --- /dev/null +++ b/spec/faaso_spec.cr @@ -0,0 +1,9 @@ +require "./spec_helper" + +describe Faaso do + # TODO: Write tests + + it "works" do + false.should eq(true) + end +end diff --git a/spec/spec_helper.cr b/spec/spec_helper.cr new file mode 100644 index 0000000..f983776 --- /dev/null +++ b/spec/spec_helper.cr @@ -0,0 +1,2 @@ +require "spec" +require "../src/faaso" diff --git a/src/faaso.cr b/src/faaso.cr new file mode 100644 index 0000000..14a4e31 --- /dev/null +++ b/src/faaso.cr @@ -0,0 +1,6 @@ +# TODO: Write documentation for `Faaso` +module Faaso + VERSION = "0.1.0" + + # TODO: Put your code here +end