{"id":42561962,"url":"https://github.com/subshell/o-neko-catnip","last_synced_at":"2026-01-28T20:32:02.072Z","repository":{"id":46054524,"uuid":"405065155","full_name":"subshell/o-neko-catnip","owner":"subshell","description":"This is an optional extension application for O-Neko. Its purpose is to be used as a default backend / default ingress for stopped O-Neko deployments to start them when opened with their hostname.","archived":false,"fork":false,"pushed_at":"2024-06-03T15:26:03.000Z","size":4139,"stargazers_count":3,"open_issues_count":10,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-12-28T18:47:55.344Z","etag":null,"topics":["deployment-automation","docker","kubernetes","o-neko"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/subshell.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2021-09-10T12:00:23.000Z","updated_at":"2024-11-19T17:13:20.000Z","dependencies_parsed_at":"2024-04-22T16:41:02.500Z","dependency_job_id":null,"html_url":"https://github.com/subshell/o-neko-catnip","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/subshell/o-neko-catnip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subshell%2Fo-neko-catnip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subshell%2Fo-neko-catnip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subshell%2Fo-neko-catnip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subshell%2Fo-neko-catnip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/subshell","download_url":"https://codeload.github.com/subshell/o-neko-catnip/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subshell%2Fo-neko-catnip/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28850938,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T15:15:36.453Z","status":"ssl_error","status_checked_at":"2026-01-28T15:15:13.020Z","response_time":57,"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":["deployment-automation","docker","kubernetes","o-neko"],"created_at":"2026-01-28T20:32:01.252Z","updated_at":"2026-01-28T20:32:02.064Z","avatar_url":"https://github.com/subshell.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# O-Neko Catnip\n\n[![CircleCI](https://circleci.com/gh/subshell/o-neko-catnip/tree/master.svg?style=svg)](https://circleci.com/gh/subshell/o-neko-catnip/tree/master)\n[![Docker Image Version (latest semver)](https://img.shields.io/docker/v/subshellgmbh/o-neko-catnip?color=2496ED\u0026label=subshellgmbh%2Fo-neko-catnip\u0026logo=docker\u0026logoColor=white\u0026sort=semver)](https://hub.docker.com/r/subshellgmbh/o-neko-catnip/tags)\n\nThis is an optional extension application for [O-Neko](https://github.com/subshell/o-neko/). Its purpose is to be used as a default backend / default ingress\nfor stopped O-Neko deployments. It will then try to start the deployment with the URL it has been loaded with and will then redirect the user to the deployment\nonce it started.\n\n\u003ctd\u003e\u003cimg src=\"./docs/screenshot_light.png\" alt=\"O-Neko Catnip light theme\" width=\"500px\"\u003e\u003c/td\u003e\n\n## Why\n\nAssuming you have multiple projects in O-Neko with many engineers working on these projects. A lot of O-Neko controlled deployments may be created in a short\ntime. To save on infrastructure costs you might configure O-Neko to stop deployments in the evening or when a week ends. Yet, the features or bugfixes these\ndeployments are associated with may still be in development. Assuming further that you link to those deployments from your ticketing system like Jira or Trello,\nGitLab, GitHub (etc.), you will quickly have \"dead links\" as a result of the automatic stopping of those deployments.\n\nNow let's imagine that the testing for a feature begins on a monday morning. The deployment was stopped on friday night and now the engineer doing the tests\nclicks on the link in their ticket, unaware it might be a \"dead\" link. This is where this tool kicks in. If it is configured to be the default backend in your\nKubernetes cluster (e.g. for a specific subset of URLs), it will instruct O-Neko to start the deployment and host a simple website (see the screenshot above)\ninforming the visitor that the corresponding deployment is about to start. When the actual deployment is ready to receive requests, the user will automatically\nbe redirected to the desired frontend.\n\n## Configuration\n\nThe application requires little configuration - only the O-Neko base-URL, the default URL of O-Neko Catnip as well a username and password need to be configured. It can be configured by placing\nan `application.yaml` file next to the executable or in a `config` directory next to the executable. The structure of the configuration file is:\n\n```yaml\noneko:\n  api:\n    baseUrl:\n    auth:\n      username:\n      password:\n  catnipUrl:\n  server:\n    port: 8080\n    metricsPort: 8080\n  logging:\n    level:\n```\n\n**All properties can be set using environment variables** without a configuration file. This should be preferred, especially when it comes to the user's\ncredentials!\nThe environment variables have the same names as the properties in the YAML file but capitalized with underscores as a separator, e.g. `ONEKO_API_AUTH_PASSWORD`\nor `ONEKO_API_BASEURL`.\n\n## Limits\n\nThis tool will only trigger wake-ups of deployments when receiving GET requests. Other request types will not result in a wake-up.\n\n## Metrics\n\nApplication metrics are available at the `/metrics` endpoint in the Prometheus format.\n\n## Development Setup\n\nIdeally you're able to deploy this application to Kubernetes and have a running O-Neko test instance at hand to connect this tool to.\n\n### Tools\n\nTo build this tool some tooling is required. Other tools might be interesting but are optional and mainly used in CI.\n\n#### Required\n\n* Go \u003e=1.21\n* Docker\n* Make\n* [UPX](https://upx.github.io)\n\n#### Optional\n\n* [gotestsum](https://github.com/gotestyourself/gotestsum): We use it to run our tests in CI\n* [golangci-lint](https://github.com/golangci/golangci-lint): Used for linting\n\n\n* * *\n\nTake a look at this project from the [subshell](https://subshell.com) team. We make [Sophora](https://subshell.com/sophora/): a content management software for content creation, curation, and distribution. [Join our team!](https://subshell.com/jobs/) | [Imprint](https://subshell.com/about/imprint/)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsubshell%2Fo-neko-catnip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsubshell%2Fo-neko-catnip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsubshell%2Fo-neko-catnip/lists"}