{"id":21068922,"url":"https://github.com/kamchatka-volcano/stone_skipper","last_synced_at":"2025-07-27T01:03:18.710Z","repository":{"id":179628939,"uuid":"589217687","full_name":"kamchatka-volcano/stone_skipper","owner":"kamchatka-volcano","description":"A process-launching server","archived":false,"fork":false,"pushed_at":"2024-06-11T18:37:59.000Z","size":252,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-14T02:23:31.522Z","etag":null,"topics":["cpp20","fastcgi","process-launcher"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"ms-pl","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kamchatka-volcano.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2023-01-15T13:23:24.000Z","updated_at":"2024-06-11T18:37:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"0150ec71-9421-43b0-9547-60d98462bd6b","html_url":"https://github.com/kamchatka-volcano/stone_skipper","commit_stats":null,"previous_names":["kamchatka-volcano/stone_skipper"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/kamchatka-volcano/stone_skipper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kamchatka-volcano%2Fstone_skipper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kamchatka-volcano%2Fstone_skipper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kamchatka-volcano%2Fstone_skipper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kamchatka-volcano%2Fstone_skipper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kamchatka-volcano","download_url":"https://codeload.github.com/kamchatka-volcano/stone_skipper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kamchatka-volcano%2Fstone_skipper/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267278631,"owners_count":24063252,"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","status":"online","status_checked_at":"2025-07-26T02:00:08.937Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cpp20","fastcgi","process-launcher"],"created_at":"2024-11-19T18:29:29.916Z","updated_at":"2025-07-27T01:03:18.665Z","avatar_url":"https://github.com/kamchatka-volcano.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003cp align=\"center\"\u003e\n  \u003cimg height=\"192\" src=\"doc/logo.jpg\"/\u003e\n\u003c/p\u003e\n\n[![build \u0026 test (clang, gcc, MSVC)](https://github.com/kamchatka-volcano/stone_skipper/actions/workflows/build_and_test.yml/badge.svg?branch=master)](https://github.com/kamchatka-volcano/stone_skipper/actions/workflows/build_and_test.yml)\n\n**stone_skipper** is a process-launching server that runs the commands registered in the configuration file for the corresponding incoming HTTP requests. It works asynchronously and can initiate multiple processes without blocking while waiting for their completion, even when running with a single thread.\n\n### Usage\n**stone_skipper** is implemented as a FastCGI service, so you'll require a compatible HTTP server to use it. NGINX can be used with a following configuration:\n```\nserver {\n\tlisten 8088;\n\tserver_name localhost;\n\tindex /~;\t\n\tlocation / {\n\t\ttry_files $uri $uri/ @fcgi;\n\t}\n\t\n\tlocation @fcgi {\t\n\t\tfastcgi_pass  unix:/tmp/stone_skipper.sock;\t\t\n\t\t#or using a TCP socket\n\t\t#fastcgi_pass localhost:9000;\n\t\tinclude fastcgi_params;\t\t\n\t\tfastcgi_keep_conn off;\t    \n\t}\n}\n```\n\nAfter enabling this configuration, **stone_skipper** can be launched using the following command:\n\n```\nstone_skipper -fcgiAddress=/tmp/stone_skipper.sock\n```\n\n#### Configuration\n`stone_skipper` creates an empty default configuration file `stone_skipper/stone_skipper.cfg` in your system config directory. The path to another config file can be set in the command line using the following format:\n```\nstone_skipper -fcgiAddress=stone_skipper.sock -config=/home/user/stone_skipper.cfg\n```\n\nThe configuration file is written in [shoal](shoal.eelnet.org) format:\n\n```\n#tasks:\n###\n  route = /greet/{{name}}\n  command = echo \"Hello {{name}}\"\n###\n  route = /farewell/\n  process = farewell.sh --name {{name}}\n```\n\n`tasks` is a list of process launching tasks, where each task consists of a `route` parameter that specifies the incoming request's path triggering the action, and either a `command` or `process` parameter that specifies the command to launch. When using `command`, the command is executed in the shell, while `process` launches it directly. \n\nThe `route` parameter can define a wildcard parameter that matches one or more characters. The result of a match can be used in the `command` or `process` parameters. For example, with the earlier provided configuration, a request to `/greet/world` would launch the `echo \"Hello world\"` command.\n\nQuery parameters from the request can also be used in the `command` and `process` parameters. In the example configuration, the second task enables the usage of the request `/farewell/?name=moon` to start the `farewell.sh --name moon` process.\n\n\n#### Command line options\n\n|                           |                                                                               |\n|---------------------------|-------------------------------------------------------------------------------| \n| **Parameters:**           |                                                                               |    \n| `-fcgiAddress=\u003cfcgiHost\u003e` | socket for FastCGI connection (either a file path, or 'ipAddress:port' string) |\n| `-log=\u003cpath\u003e`             | log file path (optional)                                                      |\n| `-config=\u003cpath\u003e`          | config file path (optional)                                                   |\n| `-shell=\u003cstring\u003e `        | shell command (optional)                                                      |\n| `-threads=\u003cint\u003e `         | number of threads (optional)                                                  |\n| **Flags:**                |                                                                               | \n| `--help`                  | show usage info and exit                                                      |\n| `--version`               | show version info and exit                                                    |\n\n\n### Build instructions\n\nTo build `stone_skipper`, you will need a C++20-compliant compiler, CMake, and the Boost.Process library installed on your\nsystem.\n\n```\ngit clone https://github.com/kamchatka-volcano/stone_skipper.git\ncd stone_skipper\ncmake -S . -B build\ncmake --build build\n```\n\nBoost dependencies can be resolved using [`vcpkg`](https://vcpkg.io/en/getting-started.html) by running the build with\nthis command:\n\n```\ncmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=\u003cvcpkg path\u003e/scripts/buildsystems/vcpkg.cmake\n```\n\n### Running unit tests\n\n```\ncd stone_skipper\ncmake -S . -B build -DENABLE_TESTS=ON\ncmake --build build \ncd build/tests \u0026\u0026 ctest\n```\n\n## Running functional tests\n\nDownload [`lunchtoast`](https://github.com/kamchatka-volcano/lunchtoast/releases) executable, build `stone_skipper` and start NGINX with `functional_tests/nginx_*.conf` config file.\nLaunch tests with the following command:\n\n* Linux command:\n\n```\nlunchtoast functional_tests\n```\n\n* Windows command:\n\n```\nlunchtoast.exe functional_tests -shell=\"msys2 -c\"\n```\n\nTo run functional tests on Windows, it's recommended to use the bash shell from the `msys2` project. After installing\nit, add the following script `msys2.cmd` to your system `PATH`:\n\n```bat\n@echo off\nsetlocal\nIF NOT DEFINED MSYS2_PATH_TYPE set MSYS2_PATH_TYPE=inherit\nset CHERE_INVOKING=1\nC:\\\\msys64\\\\usr\\\\bin\\\\bash.exe -leo pipefail %*\n```\n\n### License\n\n**stone_skipper** is licensed under the [MS-PL license](/LICENSE.md)  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkamchatka-volcano%2Fstone_skipper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkamchatka-volcano%2Fstone_skipper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkamchatka-volcano%2Fstone_skipper/lists"}