{"id":21894171,"url":"https://github.com/hackgt/beekeeper","last_synced_at":"2026-04-13T22:32:02.084Z","repository":{"id":36782922,"uuid":"176880571","full_name":"HackGT/beekeeper","owner":"HackGT","description":":bee: HackGT's application deployment service ","archived":false,"fork":false,"pushed_at":"2023-03-08T20:10:29.000Z","size":103,"stargazers_count":1,"open_issues_count":13,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-06-04T16:05:24.672Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HackGT.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null}},"created_at":"2019-03-21T06:07:26.000Z","updated_at":"2021-09-15T05:22:18.000Z","dependencies_parsed_at":"2025-06-04T09:50:21.517Z","dependency_job_id":null,"html_url":"https://github.com/HackGT/beekeeper","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/HackGT/beekeeper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HackGT%2Fbeekeeper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HackGT%2Fbeekeeper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HackGT%2Fbeekeeper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HackGT%2Fbeekeeper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HackGT","download_url":"https://codeload.github.com/HackGT/beekeeper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HackGT%2Fbeekeeper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31774025,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T20:17:16.280Z","status":"ssl_error","status_checked_at":"2026-04-13T20:17:08.216Z","response_time":93,"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":[],"created_at":"2024-11-28T13:19:42.242Z","updated_at":"2026-04-13T22:32:02.059Z","avatar_url":"https://github.com/HackGT.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Beekeeper\nHackGT's application deployment service.\n\n## Introduction and Motivation\nHackGT stores all deployment configuration in [Beehive](https://github.com/HackGT/beehive), a special repository inside our GitHub organization. Each deployment file in Beehive corrseponds to a single deployment of an application running in our Kubernetes cluster. Beekeeper serves as an intermediary between Beehive and Kubernetes. The service is responsible for reading in new application configurations from Beehive and generating appropriate Kubernetes objects that can be fed to the cluster orchestrator.\n\n## Jobs\n### UpdateDeploymentJob\nThis job is responsible for creating or updating a single deployment. This involves templating out Kubernetes configurations, wiring DNS via Cloudflare's API, and reporting status via the GitHub deployment API.\n\n### DeleteDeploymentJob\nThis job is responsible for cleaning up a deployment that is removed. The job removes the corresponding Kubernetes `Deployment` and `Service` objects and removes the DNS entry for the deployment.\n\n## Endpoints\n### `/api/github_webhooks`\nThis endpoint recieves webhooks when GitHub pushes are made to `HackGT/beehive`. The push is diffed with the previous repository head, and jobs are spanwed for  added/modified (UpdateDeploymentJob) and deleted (DeleteDeploymentJob) application configurations.\n\n### `/api/version_updates`\nThis endpoints recieves hooks from Google Cloud Build when a commit is finished building for any HackGT application. The commit a list of running deployments, and, if any are from the same repository, an UpdateDeploymentJob is initiated for the deployments matching. For example, if a new commit was pushed to `master` of `HackGT/registration`, any currently deployed instances of `HackGT/registration` that track the `master` branch would be updated to the new commit.\n\n## Development\nTo develop locally, your computer must be acessible to the internet so you can recieve GitHub webhooks. Setup webhooks [here](https://github.com/HackGT/beehive/settings/hooks) to `https://\u003cyour_host\u003e/api/github_webhooks/`. I recommend [ngrok](https://ngrok.com). You'll need to set all the environment secrets referenced in `kubernetes/deployment.yaml`.\n\nKeep in mind that the production instance may be running already. To stop the production instance run `kubectl --namespace=beekeeper delete deployment beekeeper-default`\n### Deployment\nTo deploy, push to master and wait for the GitHub actions job to complete\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackgt%2Fbeekeeper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhackgt%2Fbeekeeper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackgt%2Fbeekeeper/lists"}