{"id":36583308,"url":"https://github.com/sunggun-yu/hello-app","last_synced_at":"2026-04-02T11:44:46.996Z","repository":{"id":229269059,"uuid":"776062798","full_name":"sunggun-yu/hello-app","owner":"sunggun-yu","description":"hello app with go-gin for testing application. also testing CICD workflows like release-please, auto manifest bump with kustomization","archived":false,"fork":false,"pushed_at":"2026-03-24T04:29:49.000Z","size":101,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-25T02:55:12.965Z","etag":null,"topics":["automation","docker","go-gin","go-releaser","golang","hello-world","kubernetes","kustomize","release-please"],"latest_commit_sha":null,"homepage":"","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/sunggun-yu.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-03-22T15:52:41.000Z","updated_at":"2026-03-24T04:29:52.000Z","dependencies_parsed_at":"2024-04-30T20:27:27.649Z","dependency_job_id":"d1e7692b-1697-4f79-91f9-469c04949d76","html_url":"https://github.com/sunggun-yu/hello-app","commit_stats":null,"previous_names":["sunggun-yu/release-please-kustomization-bump-demo"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/sunggun-yu/hello-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunggun-yu%2Fhello-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunggun-yu%2Fhello-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunggun-yu%2Fhello-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunggun-yu%2Fhello-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sunggun-yu","download_url":"https://codeload.github.com/sunggun-yu/hello-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunggun-yu%2Fhello-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31305784,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T09:48:21.550Z","status":"ssl_error","status_checked_at":"2026-04-02T09:48:19.196Z","response_time":89,"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":["automation","docker","go-gin","go-releaser","golang","hello-world","kubernetes","kustomize","release-please"],"created_at":"2026-01-12T07:57:56.421Z","updated_at":"2026-04-02T11:44:46.991Z","avatar_url":"https://github.com/sunggun-yu.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hello App\n\nThis repository demonstrates an automated workflow for updating Docker image tags in k8s manifests. The workflow leverages the following tools:\n\n- **GitHub Actions**\n- [**Release Please**](https://github.com/googleapis/release-please): `release-please` creates a new version, and GitHub release with change log.\n- [**GoReleaser**](https://goreleaser.com/): A release automation tool for Go projects, used here for building the application and its Docker image.\n- [**Kustomization**](https://kustomize.io/): build the k8s manifests and update the Docker image tag using the `kustomize edit` feature.\n\nThis repository also provides a simple HTTP and GRPC service to test various scenarios in the k8s. such as Istio, Service Mesh, etc.\n\n## Usage\n\n### Web Endpoints\n\nThe application exposes the following HTTP endpoints:\n\n- `/`: Root endpoint that returns an HTML page with service information including:\n  - Service name\n  - Version\n  - Instance hostname\n  - Host\n  - Color\n  - Current timestamp\n\n- `/ping`: Health check endpoint that returns a JSON response with:\n  - \"pong\" message\n  - Service name\n  - Version\n  - Instance hostname\n  - Current timestamp\n\n- `/hello`: Greeting endpoint that returns a text response\n  - Returns a personalized greeting if `NAME` environment variable is set\n  - Supports an optional `wait` query parameter (e.g., `/hello?wait=5s` or `/hello?wait=5`) to simulate delay\n  - Includes instance hostname in the response\n  - Example responses:\n    - Basic: `Hello, Instance: hostname`\n    - With name: `Hello, John!, Instance: hostname`\n    - With wait: `Hello, John!, waited 5s, Instance: hostname`\n\n- `/health`: Simple health check endpoint that returns \"HEALTHY\" when the service is running\n\n### Environment Variables\n\nThe application uses the following environment variables:\n\n- `PORT`: Specifies the port on which the server will listen. Defaults to `8080` if not set. The port is prefixed with `0.0.0.0:` to ensure it listens on all network interfaces.\n\n- `PORT_2`: Port number for the secondary web server\n  - default is `3000`\n  - Must be different from PORT (primary server). Application will not start if `PORT` and `PORT_2` have same port\n  - Contains identical endpoints to the primary server\n  - Used to simulate multiple servers in a single Kubernetes Pod\n\n- `GRPC_PORT`: Port number for the GRPC server\n  - default is `9090`\n\n- `SERVICE`: The name of the service. This is used in the response data for the root (`/`) and `/ping` endpoints.\n\n- `VERSION`: The version of the service. This is also included in the response data for the root (`/`) and `/ping` endpoints.\n\n- `NAME`: The name used in the `/hello` endpoint to personalize the greeting message. If not set, the message defaults to \"Hello!\".\n\n- `COLOR`: Used in the response data for the root (`/`) endpoint to specify a color, which can be used for theming or display purposes.\n\nThese environment variables allow you to configure the behavior and responses of the application without modifying the code.\n\n### GRPC Endpoints\n\n#### Describe the HelloService\n\n```bash\ngrpcurl -plaintext localhost:9090 describe api.HelloService\n```\n\n```protobuf\nservice HelloService {\n  rpc Ping ( .api.PingRequest ) returns ( .api.PingResponse );\n  rpc SayHello ( .api.HelloRequest ) returns ( .api.HelloReply );\n}\n```\n\n#### Ping\n\n```bash\ngrpcurl -plaintext localhost:9090 api.HelloService.Ping\n```\n\nresult:\n\n```json\n{\n  \"message\": \"pong\",\n  \"instance\": \"your-host-name\",\n  \"timestamp\": \"2024-12-23T14:22:38-05:00\"\n}\n```\n\n#### SayHello\n\n```bash\ngrpcurl -plaintext -d '{\"name\": \"Darth Vader\"}' \\\n  localhost:9090 api.HelloService.SayHello\n```\n\nresult:\n\n```json\n{\n  \"message\": \"Hello Darth Vader\"\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunggun-yu%2Fhello-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunggun-yu%2Fhello-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunggun-yu%2Fhello-app/lists"}