{"id":13815598,"url":"https://github.com/yukihirop/ultraman","last_synced_at":"2025-04-02T19:04:28.526Z","repository":{"id":42504877,"uuid":"310780350","full_name":"yukihirop/ultraman","owner":"yukihirop","description":"Manage Procfile-based applications. (Rust Foreman)⚙︎🔨","archived":false,"fork":false,"pushed_at":"2024-10-04T00:13:54.000Z","size":332,"stargazers_count":26,"open_issues_count":2,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-24T02:55:42.682Z","etag":null,"topics":["foreman","multiprocess","multithread","pipe","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yukihirop.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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":"2020-11-07T06:11:54.000Z","updated_at":"2024-10-04T00:13:58.000Z","dependencies_parsed_at":"2024-01-18T02:37:10.134Z","dependency_job_id":"c2a8376e-d584-465a-8d83-adbdcc9a0b3c","html_url":"https://github.com/yukihirop/ultraman","commit_stats":{"total_commits":163,"total_committers":2,"mean_commits":81.5,"dds":0.006134969325153339,"last_synced_commit":"87a6438986d0f1ecfe370f14fa5a16bcd0ab8bdf"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukihirop%2Fultraman","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukihirop%2Fultraman/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukihirop%2Fultraman/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukihirop%2Fultraman/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yukihirop","download_url":"https://codeload.github.com/yukihirop/ultraman/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246834928,"owners_count":20841638,"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":["foreman","multiprocess","multithread","pipe","rust"],"created_at":"2024-08-04T04:03:39.062Z","updated_at":"2025-04-02T19:04:28.481Z","avatar_url":"https://github.com/yukihirop.png","language":"Rust","funding_links":[],"categories":["Process Manager","Rust"],"sub_categories":["Procfile"],"readme":"# Ultraman (Rust Foreman)\n\n![Release](https://github.com/yukihirop/ultraman/workflows/Release/badge.svg)\n![Periodic](https://github.com/yukihirop/ultraman/workflows/Periodic/badge.svg)\n![Regression](https://github.com/yukihirop/ultraman/workflows/Regression/badge.svg)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/yukihirop/ultraman/main/LICENSE)\n\nManage Procfile-based applications.\n\nThis is a [foreman](https://github.com/ddollar/foreman) rust implementation made with ruby.  \nSo the specifications are exactly the same as ruby ​​`foreman`.\n\n## 🚉 Platform\n\n- Linux\n- macOS\n- windows (Do not Support)\n\n## 🦀 Installation\n\n### Download binary\n\nDownload from [release page](https://github.com/yukihirop/ultraman/releases), and extract to the directory in PATH.\n\nIf you want to install the `man`,\n\nSuppose you unzip the archive in the `./tmp` directory\n\n```bash\ninstall -Dm644 ./tmp/ultraman.1 /usr/local/share/man/man1/ultraman.1\n```\n\nor\n\n```bash\ngit clone git@github.com:yukihirop/ultraman.git \u0026\u0026 cd ultraman\nmake install_man\n```\n\n### Homebrew\n\n```bash\nbrew tap yukihirop/homebrew-tap\nbrew install ultraman\n```\n\n## 💻 Command\n\n```\n$ ultraman --help\nultraman 0.3.0\nUltraman is a manager for Procfile-based applications. Its aim is to abstract away the details of the Procfile format,\nand allow you to either run your application directly or export it to some other process management format.\n\nUSAGE:\n    ultraman [SUBCOMMAND]\n\nFLAGS:\n    -h, --help       Prints help information\n    -V, --version    Prints version information\n\nSUBCOMMANDS:\n    check     Validate your application's Procfile\n    export    Export the application to another process management format\n    help      Prints this message or the help of the given subcommand(s)\n    run       Run a command using your application's environment\n    start     Start the application\n```\n\n## 🚀 Tutorial\n\nCreate a `Procfile` like the one below\n\n```\nexit_0: sleep 5 \u0026\u0026 echo 'success' \u0026\u0026 exit 0;\nexit_1: sleep 5 \u0026\u0026 echo 'failed' \u0026\u0026 exit 1;\nloop: while :; do sleep 1 \u0026\u0026 echo 'Hello World'; done;\n```\n\nThen execute the following command\n\n```bash\nultraman start\n```\n\n![image](https://user-images.githubusercontent.com/11146767/101663968-a3a1f780-3a8e-11eb-9446-108d4eaa7652.png)\n\n\u003cdetails\u003e\n\n```bash\n$ ultraman start\n02:22:34 system    | exit_1.1  start at pid: 23374\n02:22:34 system    | loop.1    start at pid: 23375\n02:22:34 system    | exit_0.1  start at pid: 23376\n02:22:35 loop.1    | Hello World\n02:22:36 loop.1    | Hello World\n02:22:37 loop.1    | Hello World\n02:22:38 loop.1    | Hello World\n02:22:39 exit_1.1  | failed\n02:22:39 exit_0.1  | success\n02:22:39 exit_0.1  | exited with code 0\n02:22:39 system    | sending SIGTERM for exit_1.1  at pid 23374\n02:22:39 system    | sending SIGTERM for loop.1    at pid 23375\n02:22:39 exit_1.1  | exited with code 1\n02:22:39 system    | sending SIGTERM for loop.1    at pid 23375\n02:22:39 loop.1    | terminated by SIGTERM\n```\n\n\u003c/details\u003e\n\nIf \u003ckbd\u003ectrl-c\u003c/kbd\u003e is detected within 5 seconds, `SIGTERM` will be sent to all child processes and the process will be killed.\n\n![image](https://user-images.githubusercontent.com/11146767/101664175-dc41d100-3a8e-11eb-8b99-12862d9c91b1.png)\n\n\u003cdetails\u003e\n\n```\n$ ultraman start\n02:23:58 system    | loop.1    start at pid: 23588\n02:23:58 system    | exit_0.1  start at pid: 23589\n02:23:58 system    | exit_1.1  start at pid: 23590\n02:23:59 loop.1    | Hello World\n02:24:00 loop.1    | Hello World\n02:24:01 loop.1    | Hello World\n^C02:24:01 system  | SIGINT received, starting shutdown\n02:24:01 system    | sending SIGTERM to all processes\n02:24:01 system    | sending SIGTERM for loop.1    at pid 23588\n02:24:01 system    | sending SIGTERM for exit_0.1  at pid 23589\n02:24:01 system    | sending SIGTERM for exit_1.1  at pid 23590\n02:24:01 exit_1.1  | terminated by SIGTERM\n02:24:01 exit_0.1  | terminated by SIGTERM\n02:24:01 loop.1    | terminated by SIGTERM\n```\n\n\u003c/details\u003e\n\n![](./docs/ctrl_c.drawio.png)\n\n## 🌎 Environment\n\n- rustc 1.74.0 (79e9716c9 2023-11-13) (Homebrew)\n- cargo 1.74.0\n\n## ⚾️ Example\n\n|command|link|\n|-------|----|\n|`ultraman start`|[README.md](./example/start/README.md)|\n|`ultraman run`|[README.md](./example/run/README.md)|\n|`ultraman export`|[README.md](./example/export/README.md)|\n|`ultraman check`|[README.md](./example/check/README.md)|\n\n## 💪 Development\n\n```bash\ncargo run start\ncargo run run \u003capp\u003e\ncargo run export \u003cformat\u003e \u003clocation\u003e\n```\n\nIf you want to see help\nIn that case, you can check with the following command\n\n```bash\ncargo run -- --help\ncargo run start --help\ncargo run run --help\ncargo run export --help\n```\n\n## ✍️ Test\n\n`src/signal.rs` usually ignores tests that need to send a SIGINT to kill the process as it can interrupt other tests\n\n```bash\ncargo test\ncargo test -- --ignored # unit test about src/signal.rs\n# or\ncargo test -- --nocapture\n```\n\n## 👽 Development in Docker\n\nIt is useful when a person developing on mac wants to check the operation on ubuntu.\n\n```bash\n{\n    docker-compose build\n    docker-compose up -d\n    docker exec -it ultraman_test_ubuntu_1 /bin/bash\n}\n\n# in docker\nroot@65241fa12c67:/home/app# make test\n```\n\n## 🧔 Man\n\n### view man\n\n```bash\nmake man\n```\n\n### install man\n\n```bash\nmake install_man\n```\n\n## 📚 Reference\n\nI really referred to the implementation of the following repository.\n\n- [ddollar/foreman](https://github.com/ddollar/foreman)\n- [yukihirop/eg_foreman](https://github.com/yukihirop/eg_foreman)\n- [jtdowney/fors](https://github.com/jtdowney/fors)\n- [jaredgorski/arpx](https://github.com/jaredgorski/arpx)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyukihirop%2Fultraman","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyukihirop%2Fultraman","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyukihirop%2Fultraman/lists"}