{"id":15151634,"url":"https://github.com/aceberg/gans","last_synced_at":"2025-10-24T07:31:17.101Z","repository":{"id":65177311,"uuid":"585265937","full_name":"aceberg/gans","owner":"aceberg","description":"Git+Ansible: watch git repo for changes and run only changed playbooks","archived":false,"fork":false,"pushed_at":"2023-01-23T15:30:46.000Z","size":844,"stargazers_count":15,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-31T00:32:26.791Z","etag":null,"topics":["ansible","git","golang","self-hosted","selfhosted"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/aceberg/gans","language":"Go","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/aceberg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"custom":"https://aceberg.github.io/MyDocs/sponsor"}},"created_at":"2023-01-04T18:29:24.000Z","updated_at":"2024-04-02T17:41:29.000Z","dependencies_parsed_at":"2023-02-13T00:31:21.927Z","dependency_job_id":null,"html_url":"https://github.com/aceberg/gans","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aceberg%2Fgans","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aceberg%2Fgans/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aceberg%2Fgans/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aceberg%2Fgans/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aceberg","download_url":"https://codeload.github.com/aceberg/gans/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237932070,"owners_count":19389560,"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":["ansible","git","golang","self-hosted","selfhosted"],"created_at":"2024-09-26T15:04:36.749Z","updated_at":"2025-10-24T07:31:11.724Z","avatar_url":"https://github.com/aceberg.png","language":"Go","funding_links":["https://aceberg.github.io/MyDocs/sponsor"],"categories":[],"sub_categories":[],"readme":"[![Main-Docker](https://github.com/aceberg/gans/actions/workflows/main-docker.yml/badge.svg)](https://github.com/aceberg/gans/actions/workflows/main-docker.yml)\n[![Binary-release](https://github.com/aceberg/gans/actions/workflows/binary-release.yml/badge.svg)](https://github.com/aceberg/gans/actions/workflows/binary-release.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/aceberg/gans)](https://goreportcard.com/report/github.com/aceberg/gans)\n[![Maintainability](https://api.codeclimate.com/v1/badges/c76dbc1d7d64349af6c2/maintainability)](https://codeclimate.com/github/aceberg/gans/maintainability)\n\n\u003ch1\u003e\u003ca href=\"https://github.com/aceberg/gans\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/aceberg/gans/main/assets/logo.png\" width=\"25\" /\u003e\n\u003c/a\u003egans\u003c/h1\u003e\n\nGit+Ansible: watch git repo for changes and run only changed playbooks   \n(Also, `gans` means goose in German)\n\n- [Quick start](https://github.com/aceberg/gans#quick-start)\n- [Usage](https://github.com/aceberg/gans#usage)\n- [Config](https://github.com/aceberg/gans#config)\n- [Options](https://github.com/aceberg/gans#options)\n- [Thanks](https://github.com/aceberg/gans#thanks)\n\n\n![Screenshot](https://raw.githubusercontent.com/aceberg/gans/main/assets/Screenshot%202023-01-23%20at%2019-34-01%20gans.png)\n\n## Quick start\nMake sure `/path/to/git/repo` leads to your Ansible git repo.\n\n```sh\ndocker run --name gans \\\n-e \"TZ=Asia/Novosibirsk\" \\\n-v ~/.dockerdata/gans:/data/gans \\\n-v /path/to/git/repo:/gitrepo \\\n-p 8845:8845 \\\naceberg/gans\n```\nOr use [docker-compose.yml](docker-compose.yml)\n\n## Usage\n\nWeb interface is pretty self-explanatory. If you know Ansible, you shouldn't have any problems.    \nImportant things about `gans`:\n- It supports only local git repos for now. If you need to work with remote repo, you can pull it regularly with [git-syr](https://github.com/aceberg/git-syr) or your own cron script. \n- I decided not to parse Ansible Inventory to reduce errors, so you need to enter hosts and groups manually on `Repo` page. `Gans` will work only with those hosts.\n- SSH Keys are handled by Ansible Inventory or `ansible.cfg`. `Keys` page is only there to help you upload them and check their presence.   \n\nExample [ansible.cfg](examples/ansible.cfg) and [hosts.ini](examples/hosts.ini) can also help. To work correctly `ansible.cfg` shoul be at the `/` of git repo.\n\n## Config\n\n\nConfiguration can be done through config file or environment variables\n\n| Variable  | Description | Default |\n| --------  | ----------- | ------- |\n| DB        | Path to Database | /data/gans/sqlite.db |\n| HOST | Listen address | 0.0.0.0 |\n| PORT   | Port for web GUI | 8845 |\n| THEME | Any theme name from https://bootswatch.com in lowcase | cerulean |\n| SHOW | How many lines to show on index page | 25 |\n| YAMLPATH | Path to file where git repo is described | /data/gans/repo.yaml |\n| KEYPATH | Path to ssh keys directory | /data/gans/ssh |\n| LOGPATH | Path to log file | /data/gans/gans.log |\n| INTERVAL | Interval between repo scans (s, m, h) | 5s |\n| TZ | Set your timezone for correct time | \"\" |\n\n## Options\n\n| Key  | Description | Default | \n| --------  | ----------- | ------- | \n| -d | Path to SQLite DB file | /data/gans/sqlite.db | \n| -c | Path to config file | /data/gans/config.yaml | \n| -l | Path to log file | /data/gans/gans.log | \n| -r | Path to repo yaml file | /data/gans/repo.yaml | \n\n## Thanks\n- All go packages listed in [dependencies](https://github.com/aceberg/gans/network/dependencies)\n- [Bootstrap](https://getbootstrap.com/)\n- Themes: [Free themes for Bootstrap](https://bootswatch.com)\n- Favicon and logo: [Goose icons created by Freepik - Flaticon](https://www.flaticon.com/free-icons/goose)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faceberg%2Fgans","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faceberg%2Fgans","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faceberg%2Fgans/lists"}