{"id":18308112,"url":"https://github.com/tariel-x/anzer","last_synced_at":"2025-04-09T11:26:14.815Z","repository":{"id":81192562,"uuid":"134189880","full_name":"tariel-x/anzer","owner":"tariel-x","description":"Explicit and type-safe composition of cloud functions","archived":false,"fork":false,"pushed_at":"2020-07-05T16:44:32.000Z","size":1718,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-12-14T14:10:31.596Z","etag":null,"topics":["composition","faas","golang","language","openwhisk","serverless","service-orchestration-language"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tariel-x.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-20T21:52:42.000Z","updated_at":"2024-06-19T11:07:48.345Z","dependencies_parsed_at":null,"dependency_job_id":"18d9811b-5dd5-4d93-ad28-e02ad9175d29","html_url":"https://github.com/tariel-x/anzer","commit_stats":null,"previous_names":[],"tags_count":2,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tariel-x%2Fanzer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tariel-x%2Fanzer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tariel-x%2Fanzer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tariel-x%2Fanzer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tariel-x","download_url":"https://codeload.github.com/tariel-x/anzer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248029648,"owners_count":21036028,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["composition","faas","golang","language","openwhisk","serverless","service-orchestration-language"],"created_at":"2024-11-05T16:06:36.205Z","updated_at":"2025-04-09T11:26:14.791Z","avatar_url":"https://github.com/tariel-x.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Anzer platform and language\n\n[![Build Status](https://travis-ci.org/tariel-x/anzer.svg?branch=master)](https://travis-ci.org/tariel-x/anzer)\n\nBoth the provided platform and described language implement \nconvenient way for explicit and type-safe composition of cloud functions.\n\nFor example the following scheme describes two services and \ntheir communication.\n\n```haskell\npackage test\n\ntype Source = {\n    name  :: String\n    price :: Float\n}\ntype Prepared = {\n    name        :: String\n    description :: String\n    category    :: Integer\n    price       :: Float\n}\ntype Product = {\n    id          :: Integer\n    name        :: String\n    description :: String\n    category    :: Integer\n    price       :: Float\n}\ntype Error = {\n    error :: String\n}\ngithub.com/project/prepare[go] :: Source -\u003e Either Prepared Error\ngithub.com/project/save[go] :: Prepared -\u003e Either Product Error\ncreate = prepare \u003e\u003e= save\ninvoke(create,)\n```\n\nAnzer utility currently supports only [Apache OpenWhisk](http://openwhisk.apache.org/) and [Golang](https://golang.org/).\n\nSee the [documentation](./doc/README.md) for details.\n\n## As quick as possible start\n\n### Setup\n\n1. Install docker for your system.\n2. Download and install wsk utility from [github page](https://github.com/apache/incubator-openwhisk-cli/releases).\n3. Find working Apache OpenWhisk instance.\n\n#### With IBM CloudFunctions\n\n1. Register at [cloud.ibm.com](https://cloud.ibm.com).\n2. Follow the instruction at [cloud.ibm.com/openwhisk/learn/cli](https://cloud.ibm.com/openwhisk/learn/cli).\n3. Check the settings with `wsk action list`. Also `~/.wskprops` must contain something like the following.\n```\nAPIHOST=eu-gb.functions.cloud.ibm.com\nNAMESPACE=_\nAUTH=short_token\nAPIGW_ACCESS_TOKEN=big_token\n```\n\n### Download Anzer\n\n#### Binaries\n\nDownload suitable binary from [realizes page](https://github.com/tariel-x/anzer/releases).\nFor example for linux:\n\n```bash\nsudo curl -L \"https://github.com/tariel-x/anzer/releases/download/latest/linux_amd64_anzer\" -o /usr/local/bin/anzer\nsudo chmod +x /usr/local/bin/anzer\nanzer help\n```\n\nFor OS X:\n\n```bash\nsudo curl -L \"https://github.com/tariel-x/anzer/releases/download/latest/darwin_amd64_anzer\" -o /usr/local/bin/anzer\nsudo chmod +x /usr/local/bin/anzer\nanzer help\n```\n\n#### Install from sources\n\n```bash\ngit clone https://github.com/tariel-x/anzer.git\ncd anzer\ngo install\nanzer help\n```\n\n### Download example project\n\n```bash\ngit clone https://github.com/tariel-x/anzer-example.git\ncd anzer-example\n```\n\nMake copy of the `envs.yaml.dist` and edit according to your CouchDB settings.\n\n```bash\ncp envs.yaml.dist envs.yaml\nnano envs.yaml\nanzer build -p wsk -i etl.anz --envs envs.yaml\n```\n\nThe output of utility would be name of functions sequence in OpenWhisk.\n\n### Create POST API\n\n```bash\nwsk -i api create /etl post /guest/etl_sequence --response-type json\n```\n\nMake request like the following:\n\n```bash\ncurl -X POST \\\n  http://your.whisk.com:9001/api/23bc46b1-71f6-4ed5-8c54-816aa4f8c502/etl \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"name\": \"Opel\",\n    \"model\": \"Astra;J\",\n    \"phone\": \"79095544445\",\n    \"price\": 500.50,\n    \"photos\": [\n    \t\"http://origin.org/path/image.jpeg\"\t\n    ],\n    \"year\": 2014\n}'\n```\n\nThe expected result is:\n\n```json\n{\n    \"car\": {\n        \"brand\": \"Opel\",\n        \"model\": \"Astra\"\n    },\n    \"err\": null,\n    \"id\": 38081\n}\n```\n\n## Detailed quick start\n\n[Detailed quick start.](./doc/en/Quickstart.md)\n\n## Roadmap\n\n1. Full support of OR-types and pattern-matching in the scheme.\n2. Remake subsystem for building functions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftariel-x%2Fanzer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftariel-x%2Fanzer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftariel-x%2Fanzer/lists"}