{"id":13307276,"url":"https://github.com/jonasmalacofilho/robrt","last_synced_at":"2026-03-07T00:33:19.843Z","repository":{"id":69705437,"uuid":"46103284","full_name":"jonasmalacofilho/robrt","owner":"jonasmalacofilho","description":"I'm Robrt, a robot that listens to GitHub events and deploys stuff","archived":false,"fork":false,"pushed_at":"2019-04-02T20:00:13.000Z","size":119,"stargazers_count":2,"open_issues_count":19,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-02-06T02:47:03.424Z","etag":null,"topics":["continuous-integration","docker","haxe","nodejs","robot"],"latest_commit_sha":null,"homepage":"http://robrt.io","language":"Haxe","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jonasmalacofilho.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2015-11-13T06:04:45.000Z","updated_at":"2020-04-30T17:46:18.000Z","dependencies_parsed_at":"2023-06-12T19:30:42.213Z","dependency_job_id":null,"html_url":"https://github.com/jonasmalacofilho/robrt","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jonasmalacofilho/robrt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonasmalacofilho%2Frobrt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonasmalacofilho%2Frobrt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonasmalacofilho%2Frobrt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonasmalacofilho%2Frobrt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jonasmalacofilho","download_url":"https://codeload.github.com/jonasmalacofilho/robrt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonasmalacofilho%2Frobrt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30204154,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T19:07:06.838Z","status":"ssl_error","status_checked_at":"2026-03-06T18:57:34.882Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["continuous-integration","docker","haxe","nodejs","robot"],"created_at":"2024-07-29T18:00:15.841Z","updated_at":"2026-03-07T00:33:19.794Z","avatar_url":"https://github.com/jonasmalacofilho.png","language":"Haxe","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Robrt\n\n[![Build Status](https://travis-ci.org/jonasmalacofilho/robrt.svg?branch=master)](https://travis-ci.org/jonasmalacofilho/robrt)\n\nRobrt is a simple, automated and configurable build system for projects hosted\non GitHub.\n\n\u003e Hi, I'm Robrt!  I'm a robot that listens to GitHub events and deploys stuff.\n\nIt's main purpose is to provide flexible automated builds – and even\ndeployments – for projects where using Travis is either too expensive, or\nsomewhat unpractical.\n\nRobrt runs each build – either a pushed commit or updated pull request – in a\nDocker container; the thing is, each build can choose, or even create, the\nDocker image it will run in.\n\nThere's no UI.  Yeah, Robrt is (_still?_) geeky like that.  On the other hand,\nit can post customizable messages on Slack and add customizable commit statuses\non GitHub (commit statuses are shown in the branch list and in each pull\nrequest).\n\n\n# Usage\n\n## Security considerations\n\n_Security has not been solved yet._\n\nMainly, we want Robrt to allow arbitrary Docker images – actually, arbitrary\nDockerfiles – and, at the same time, support GitHub pull requests; we are still\nworking on isolating each build request from the repository, the host, and\nother builds, while maintaining this much flexibility.  We welcome any\ncontributions.\n\nFor the time being, we strongly advise anyone trying out Robrt to do so without\nexposing sensitive data to it.  Or, at the very least, untrusted users should\nnot be allowed push access, and pull requests should thus be disabled in public\nrepositories.\n\n## On the repository\n\nSimilarly to Travis – and other CI systems out there – Robrt expects each tree\nto have a settings file called `.robrt.json`.  This file will give it\ninstructions on which Docker image to use (or, more specifically, on how to\nbuild it) and which commands should be executed in that image.\n\nA very simple example:\n\n```\n{\n\t\"prepare\" : {\n\t\t\"dockerfile\" : { \"type\" : \"path\", \"data\" : \".robrt.Dockerfile\" }\n\t}, \"build\" : {\n\t\t\"cmds\" : [\n\t\t\t\"cd $ROBRT_REPOSITORY_DIR\",\n\t\t\t\"echo 'I'm a build, test or export command' \u003e .out\",\n\t\t\t\"cp -r .out $ROBRT_OUTPUT_DIR/echo\"\n\t\t]\n\t}\n}\n```\n\nFirst, in the preparation stage, `.robrt.Dockerfile` will be used to build a\ncorresponding Docker image.  For now, let's assume that it is a simple clone of\na recent Linux image:\n\n```\nFROM ubuntu:latest\n```\n\nThen, in the build phase, the following will be executed:\n\n - _cd_ into the repository directory; `ROBRT_REPOSITORY_DIR` is a standard\n   environment variable that will always point to where in that container has\n   the repository been mounted to.\n - _echo_ a constant string to file `.out`\n - export the `.out` file to the world, by placing it where, if so configured,\n   Robrt will let the host see it (and the host can then serve it via HTTP, for\n   instance); `ROBRT_OUTPUT_DIR` is another standard environment variable\n   pointing to where in the container has Robrt reserved some space for\n   exported data\n\nThe undocumented (_we're sorry about that!_) structure of `.robrt.json` can be\nseen in [`robrt.repository.RepoConfig`](src/robrt/repository/RepoConfig.hx).\n\n## On the server\n\nTODO: server stuff (`/etc/robrt` and environment variables)\n\nA running Robrt instance will read from `/etc/robrt` (or from the path\nspecified in the `ROBRT_CONFIG_PATH` environment variable) to know which\nrepositories to listen to and to proceed on each `push` or `pull_request`\nevent.\n\n## Notifications\n\nTODO: GitHub commit statuses, Slack posts.\n\n## The log viewer\n\nRobrt logs need to carry lots of instrumental information and are thus not the\nof the friendliest kind.\n\nTo improve that we've created a [log viewer](https://github.com/protocubo/robrt-log-viewer).\nIt's a web app than parses the raw log and generates a user-friendly view for\nit, with fences, timing and exit code information and, with ANSI escape\nsequences, support for colors.\n\n\n# Build and run\n\n## Building\n\nRobrt is written in Haxe and uses [hmm](https://github.com/andywhite37/hmm) to\nmanage the required Haxe libraries.  To install the dependencies, run `hmm install`\non the project root.\n\nSince we're targeting Node.js, the easiest way to have a runnable Robrt is to\nexecute `npm pack`.  This will compile the Haxe project into a JS file and\ngenerate a local NPM package with a pseudo-executable `robrt`.\n\nAlternatively, you can simply run the Haxe compiler with `haxe build.hxml`.\n\n## Dependencies\n\nBesides the Haxe dependencies, Robrt requires Node.js (4+) and some NPM\npackages: `dockerode`, `docopt` `remove`, `mkdir-p`, `ncp` and `source-map-support`.\n\nBuilds execute in Docker containers, so that is another dependency; it's minimum\nrequired version is yet to be determinated.\n\nFinally, some common executables are also required at runtime: `git` and `tar`.\n\n## Testing locally during developing\n\nTODO: checkout the docs/testing folder; also, ngrok might be very convenient\nfor inspecting and replaying requests.\n\n## Running in production\n\nTODO: ssl, proxy, run as service\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonasmalacofilho%2Frobrt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjonasmalacofilho%2Frobrt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonasmalacofilho%2Frobrt/lists"}