{"id":21333837,"url":"https://github.com/evryn/breakfast","last_synced_at":"2026-03-06T18:03:43.216Z","repository":{"id":195834095,"uuid":"691598988","full_name":"evryn/breakfast","owner":"evryn","description":"🍯 Test GitOps workflows \u0026 learn Kubernetes/Docker Swarm deployments through evolving Persian breakfast visuals.","archived":false,"fork":false,"pushed_at":"2023-12-08T13:54:13.000Z","size":1916,"stargazers_count":81,"open_issues_count":2,"forks_count":8,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-12T10:34:37.173Z","etag":null,"topics":["devops","docker","gitops","golang","kubernetes"],"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/evryn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-09-14T13:59:10.000Z","updated_at":"2024-10-14T19:11:28.000Z","dependencies_parsed_at":"2023-09-21T08:00:40.776Z","dependency_job_id":"d7a0ebb3-066f-4440-be72-4f8020cdf7e0","html_url":"https://github.com/evryn/breakfast","commit_stats":null,"previous_names":["evryn/version-forge","evryn/breakfast"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/evryn/breakfast","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evryn%2Fbreakfast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evryn%2Fbreakfast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evryn%2Fbreakfast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evryn%2Fbreakfast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/evryn","download_url":"https://codeload.github.com/evryn/breakfast/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evryn%2Fbreakfast/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30189483,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T17:33:53.563Z","status":"ssl_error","status_checked_at":"2026-03-06T17:33:51.678Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["devops","docker","gitops","golang","kubernetes"],"created_at":"2024-11-21T23:16:24.235Z","updated_at":"2026-03-06T18:03:43.172Z","avatar_url":"https://github.com/evryn.png","language":"Go","readme":"[![Test and Build Images](https://github.com/evryn/breakfast/actions/workflows/build.yaml/badge.svg)](https://github.com/evryn/breakfast/actions/workflows/build.yaml) [![Docker Hub](https://img.shields.io/badge/Total%20Versions-18-blue?logo=docker)](https://hub.docker.com/r/evryn/breakfast) [![Docker Hub](https://img.shields.io/docker/pulls/evryn/breakfast?logo=docker\u0026label=Docker%20Pulls)](https://hub.docker.com/r/evryn/breakfast)\n\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"docs/banner.png\" alt=\"Watch the video\" width=\"600\"/\u003e\n\u003c/p\u003e\n\n## Introduction\n\nWelcome to **🍯 Breakfast**! Ever wanted to explore the intricacies of GitOps workflows, or understand the nuances of deploying applications on platforms like Kubernetes and Docker Swarm? Dive into Breakfast and discover these tech realms through a delightful representation of an evolving Persian breakfast table.\n\nWhether you're a DevOps enthusiast or someone simply intrigued by the vibrant world of deployments, the project offers a flavorful journey for all. You don't need to deploy `nginx:blah.blah.blah` anymore!\n\n\n\n\n## Features\n\nAt the heart of 🍯 **Breakfast**, are two primary offerings, each designed to provide a unique user experience and cater to different preferences. Below are the standout features:\n\n#### Browser-friendly Page\nSend a request to `/` to get:\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"docs/browser-version.jpg\" alt=\"Watch the video\" width=\"600\"/\u003e\n\u003c/p\u003e\n\n- 🍽️ **Visual Breakfast Progress**: Experience the evolution of a Persian breakfast table, represented through dynamic visual stages. This is not just eye-catching, but it aligns closely with the varied deployment phases you'd encounter in real-world applications - either a major update, a feature addition or a bugfix.\n- 🌐 **Ingress Host Display**: You can use different ingress options to direct the request to Breakfast. We'll show you how the final request got into the container.\n- 📦 **Container Name Display**: Want to see which container handles the request during a deployment update? We'll show you the container name.\n\n\n#### CLI-friendly Page:\nSend a request to `/?short=true` to get:\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"docs/short-version.jpg\" alt=\"Watch the video\" width=\"600\"/\u003e\n\u003c/p\u003e\n\n- 😋 **Emoji Representation**: Instead of the full-fledged visual representation, this shorter CLI variant uses delightful emojis to depict the breakfast stages. Good to visually distinct the versions during an update.\n- 📦 **Container Name Display**: Just like the HTTP version, the shorter CLI response showcases the name of the container serving the request, offering an extra layer of information for the curious minds.\n\n\n## Available Images\nYou can grab the images from our [Docker Hub](https://hub.docker.com/r/evryn/breakfast/tags), [Github Registry](https://github.com/evryn/breakfast/pkgs/container/breakfast), and [Quay.io](https://quay.io/repository/evryn/breakfast?tab=tags), for example: `evryn/breakfast:1.0.0`.\n\nHere are the available image tags:\n\n- `0.1.0`\n- `0.1.1` or `0.1`\n- `0.2.0`\n- `0.2.1` or `0.2`\n- `0.3.0`\n- `0.3.1` or `0.3` or `0`\n- `1.0.0`\n- `1.0.1` or `1.0`\n- `1.1.0`\n- `1.1.1` or `1.1`\n- `1.2.0`\n- `1.2.1` or `1.2` or `1`\n- `2.0.0`\n- `2.0.1` or `2.0`\n- `2.1.0`\n- `2.1.1` or `2.1`\n- `2.2.0`\n- `2.2.1` or `2.2` or `2`\n\n\n## Usage\n\nDeploying and using Breakfast can be achieved in different environments. Here are step-by-step guides for Kubernetes and Docker Swarm.\n\n### Deploying on Kubernetes\n\nDeploying the Breakfast application on Kubernetes is straightforward. Follow the steps below to get it up and running in your cluster.\n\n**Video Tutorial**: [Deploying Breakfast on Kubernetes\n](https://www.youtube.com/watch?v=m9YgH5M5D-g)\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://www.youtube.com/watch?v=m9YgH5M5D-g\" target=\"_blank\"\u003e\n \u003cimg src=\"docs/video-kubernetes.jpg\" alt=\"Watch the video\" width=\"600\"/\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n**Commands Used in the Video**:\n\n```bash\n# Create a Deployment object with 10 replicas\nkubectl create deploy breakfast --image=evryn/breakfast:1.2.1 --port=8080 --replicas=10\n\n# Expose it as a NodePort service\nkubectl expose deploy breakfast --name=breakfast-svc --type=NodePort --target-port=8080\n```\n\nTo get the service URL to view the Breakfast app in your browser or through the command line, use the following:\n\n```bash\nURL=$(minikube service breakfast-svc --url) \u0026\u0026 echo $URL \u0026\u0026 sleep 2 \u0026\u0026 \\\nwhile true; do curl --connect-timeout 1 -sS \"$URL?short=true\"; sleep 0.5; done\n```\n\nTo observe changes in the deployed application, you can update the image version or other deployment settings:\n\n```bash\nkubectl set image deploy/breakfast breakfast=evryn/breakfast:2.0.0\n```\n\n### Deploying on Docker Swarm\n\nIf you're using Docker Swarm, the deployment process has its own set of commands. Here's how to deploy and access the Breakfast app:\n\n**Video Tutorial**: [Deploying Breakfast on Docker Swarm\n](https://www.youtube.com/watch?v=t8cyUOx7O5k)\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://www.youtube.com/watch?v=t8cyUOx7O5k\" target=\"_blank\"\u003e\n \u003cimg src=\"docs/video-docker-swarm.jpg\" alt=\"Watch the video\" width=\"600\"/\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n**Commands Used in the Video**:\n\n```bash\n# Deploy the service with 10 replicas\ndocker service create --name breakfast --replicas 10 --publish 8080:8080 evryn/breakfast:0.3.1\n```\n\nTo access the Breakfast app, navigate to your node IP followed by the port `8080`. If you're on localhost, it's as simple as visiting `127.0.0.1:8080`. For a CLI version:\n\n```bash\nwhile true; do curl --connect-timeout 1 -sS \"127.0.0.1:8080?short=true\"; sleep 0.5; done\n```\n\nTo make modifications to the currently deployed service, you can update the image or other service settings:\n\n```bash\ndocker service update breakfast --image evryn/breakfast:1.0.0\n```\n\n## Customization\n\nIf you wish to tailor the Breakfast project according to your needs or simply want to play around with its content, the process is straightforward. Here's a step-by-step guide:\n\n1. **Fork the Project**:\n   Begin by forking the repository. This gives you your own copy to work with.\n\n2. **Modify the Templates**:\n   Navigate to the `templates` directory. The files in this directory use Go Template syntax. You can modify the content as per your requirements.\n\n3. **Add Static Content**:\n   If you have assets like images, CSS, or JavaScript that need to be served statically, place them in the `static` directory.\n\n4. **Update Configuration**:\n   Make changes to the `config.yaml` as needed.\n\n   _Important: Ensure that you list versions in ascending order for proper registry tagging._\n\n5. **Deployment Workflow**:\n   A workflow is provided to build and upload the versioned images to [Docker Hub](https://hub.docker.com/), [Github Registry](https://ghcr.io), and [Quay.io](https://quay.io).\n   For authentication and to ensure the correct credentials are used, check the `.github/workflows/build.yaml`. This workflow is triggered manually from your repository's Actions tab.\n\nBy following the steps above, everything should work seamlessly out-of-the-box. Enjoy customizing and deploying your own versions of Breakfast!\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevryn%2Fbreakfast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevryn%2Fbreakfast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevryn%2Fbreakfast/lists"}