{"id":29222333,"url":"https://github.com/lifeisfoo/github-ci","last_synced_at":"2026-05-03T12:33:35.594Z","repository":{"id":55532718,"uuid":"124876101","full_name":"lifeisfoo/github-ci","owner":"lifeisfoo","description":"A Docker-based continuous integration and continuous delivery application for Github organizations","archived":false,"fork":false,"pushed_at":"2019-05-14T14:18:24.000Z","size":87,"stargazers_count":1,"open_issues_count":8,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-17T20:26:20.708Z","etag":null,"topics":["cd","ci","continuous-delivery","continuous-deployment","continuous-integration","continuous-testing","docker","github","self-hosted","test"],"latest_commit_sha":null,"homepage":"https://miliucci.org/p/introducting-github-ci.html","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lifeisfoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-12T11:03:20.000Z","updated_at":"2018-09-07T20:35:56.000Z","dependencies_parsed_at":"2022-08-15T02:40:41.393Z","dependency_job_id":null,"html_url":"https://github.com/lifeisfoo/github-ci","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lifeisfoo/github-ci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lifeisfoo%2Fgithub-ci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lifeisfoo%2Fgithub-ci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lifeisfoo%2Fgithub-ci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lifeisfoo%2Fgithub-ci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lifeisfoo","download_url":"https://codeload.github.com/lifeisfoo/github-ci/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lifeisfoo%2Fgithub-ci/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32569712,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: 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":["cd","ci","continuous-delivery","continuous-deployment","continuous-integration","continuous-testing","docker","github","self-hosted","test"],"created_at":"2025-07-03T03:30:17.163Z","updated_at":"2026-05-03T12:33:35.566Z","avatar_url":"https://github.com/lifeisfoo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# github-ci\n\n`github-ci` is a Docker-based continuous integration and continuous delivery application for Github organizations.\n\nIt tries to follow the [KISS principle](https://en.wikipedia.org/wiki/KISS_principle) and the [convention over configuration](https://en.wikipedia.org/wiki/Convention_over_configuration) paradigm.\n\nRead more about it in [this introductory post](https://miliucci.org/p/introducting-github-ci.html).\n\n## Installation\n\nClone this repository on your server, then create a `docker-compose.yml` file inside the directory:\n\n```\nversion: \"3\"\n\nservices:\n  github-ci:\n    build: .\n    ports:\n      - \"3000:80\"\n    volumes:\n      - ./logs:/logs\n      - ./builds:/builds\n      - /var/run/docker.sock:/var/run/docker.sock\n    environment:\n      - GITHUB_ACCESS_TOKEN=\u003cyour-github-org-access-token\u003e\n      - DOCKER_REGISTRY=\u003cregistry.hub.docker.com or your-registry.example\u003e\n      - DOCKER_USER=\u003cyour docker registry user\u003e\n      - DOCKER_PASS=\u003cyour docker registry user\u003e\n      - DEFAULT_GITHUB_ORG=\u003cyour github org name\u003e\n      - DEFAULT_DOCKER_REGISTRY_ORG=\u003cyour docker registry org/scope name\u003e\n      - ACTIVE_REPOS=\u003ccomma separated list of github repository names\u003e\n      - BUILD_LOGS_BASE_URL=\u003chttp://the-host-that-will-serve-your-logs\u003e\n      - REDIS_URL=redis://redis:6379\n    depends_on:\n      - redis\n  redis:\n    image: redis:4\n    volumes:\n      - ./redis-data:/data\n```\n\nNow follow the below checklist to setup the environment and then run the app with `docker-compose up --detach`.\n\n### Setup checklist\n\n- [ ] create a Github [personal access token](https://github.com/settings/tokens) with access limited to the `repo` scope.\n- [ ] creare a Github org webhook at `https://github.com/organizations/\u003cyour-org\u003e/settings/hooks` that sends events to `http://your-host:3000/events-handler` with content-type `application/json` and selected events: branch or tag creation, pull requests, pushes, releases, statuses\n- [ ] run `ufw allow 3000` to open the port on the host firewall\n- [ ] setup NGINX to serve build logs, see `examples/logs-web-server-nginx.conf`\n- [ ] add a firewall (e.g. Digital Ocean Firewall) to allow webhook requests only from [Github IPs](https://help.github.com/articles/about-github-s-ip-addresses/)\n\n\n## Env vars\n\n### Required\n\n- GITHUB_ACCESS_TOKEN\n- DOCKER_REGISTRY\n- DOCKER_USER\n- DOCKER_PASS\n- DEFAULT_GITHUB_ORG\n- DEFAULT_DOCKER_REGISTRY_ORG\n- ACTIVE_REPOS\n- BUILD_LOGS_BASE_URL\n- REDIS_URL\n\n### Optional\n\n- PORT (default to `80`)\n- BUILDS_DIR (default to `/builds`)\n- LOGS_DIR (default to `/logs`)\n- REPOS_SKIP_TEST_AND_SKIP_PUSH\n- REPOS_IMAGES_MAP\n- DOCKER_BUILD_ARGS\n\n---\n\n## Contributing\n\nYou can open issues for bugs you've found or features you think are missing. You can also submit pull requests to this repository.\n\n## License\n\nCopyright (C) 2018 Alessandro Miliucci \u0026 other github-ci contributors (see AUTHORS.md)\n\nThis program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License along with this program. If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n\n---","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flifeisfoo%2Fgithub-ci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flifeisfoo%2Fgithub-ci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flifeisfoo%2Fgithub-ci/lists"}