{"id":37191748,"url":"https://github.com/containeroo/taco","last_synced_at":"2026-01-14T22:13:07.051Z","repository":{"id":246642340,"uuid":"821732065","full_name":"containeroo/taco","owner":"containeroo","description":"Simple Go application that checks if a specified TCP target is available","archived":false,"fork":false,"pushed_at":"2024-08-26T13:40:58.000Z","size":133,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-08-26T16:05:01.389Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","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/containeroo.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}},"created_at":"2024-06-29T09:23:40.000Z","updated_at":"2024-08-26T13:41:01.000Z","dependencies_parsed_at":"2024-06-29T10:38:54.598Z","dependency_job_id":"02862a36-19a4-4a1e-98db-b49a921b0d2d","html_url":"https://github.com/containeroo/taco","commit_stats":null,"previous_names":["containeroo/wait-for-tcp","containeroo/taco"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/containeroo/taco","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/containeroo%2Ftaco","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/containeroo%2Ftaco/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/containeroo%2Ftaco/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/containeroo%2Ftaco/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/containeroo","download_url":"https://codeload.github.com/containeroo/taco/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/containeroo%2Ftaco/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28436268,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T21:32:52.117Z","status":"ssl_error","status_checked_at":"2026-01-14T21:32:33.442Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":[],"created_at":"2026-01-14T22:13:06.229Z","updated_at":"2026-01-14T22:13:07.034Z","avatar_url":"https://github.com/containeroo.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/assets/taco.svg\" /\u003e\n\u003c/p\u003e\n\n# DEPRECATION WARNING\n\n`TACO` is deprecated and will be removed in the future.\nPlease use the fully compatible [containeroo/portpatrol](https://github.com/containeroo/portpatrol) instead.\n\n\n# TACO (TCP Availability Connection Observer)\n\nThis is a simple Go application with zero external dependencies that checks if a specified TCP target is available. It continuously attempts to connect to the specified target at regular intervals until the target becomes available or the program is terminated.\n\n## Environment Variables\n\nTACO accepts the following environment variables:\n\n- `TARGET_ADDRESS`: The address of the target in the format `host:port` (required).\n- `TARGET_NAME`: The name of the target to check (optional, default: inferred from `TARGET_ADDRESS`)\\*.\n- `INTERVAL`: The interval between connection attempts (optional, default: `2s`).\n- `DIAL_TIMEOUT`: The timeout for each connection attempt (optional, default: `1s`).\n- `LOG_EXTRA_FIELDS`: Log additional fields (optional, default: `false`).\n\n**\\*** If `TARGET_NAME` is not set, the name will be inferred from the host part of the target address as follows: `postgres.default.svc.cluster.local:5432` will be inferred as `postgres`.\n\n## Behavior Flowchart\n\n```mermaid\ngraph TD;\n    A[Start] --\u003e B[Attempt to connect to TARGET_ADDRESS];\n    B --\u003e|Connection successful| C[Target is ready];\n    B --\u003e|Connection failed| D[Wait for retry INTERVAL];\n    D --\u003e B;\n    C --\u003e E[End];\n    F[Program terminated or canceled] --\u003e E;\n```\n\n## Logging\n\nWith the `LOG_EXTRA_FIELDS` environment variable set to `true` additional fields will be logged.\n\n### With additional fields\n\n```text\nts=2024-07-05T13:08:20+02:00 level=INFO msg=\"Waiting for PostgreSQL to become ready...\" dial_timeout=\"1s\" interval=\"2s\" target_address=\"postgres.default.svc.cluster.local:5432\" target_name=\"PostgreSQL\" version=\"0.0.22\"\nts=2024-07-05T13:08:21+02:00 level=WARN msg=\"PostgreSQL is not ready ✗\" dial_timeout=\"1s\" error=\"dial tcp: lookup postgres.default.svc.cluster.local: i/o timeout\" interval=\"2s\" target_address=\"postgres.default.svc.cluster.local:5432\" target_name=\"PostgreSQL\" version=\"0.0.22\"\nts=2024-07-05T13:08:24+02:00 level=WARN msg=\"PostgreSQL is not ready ✗\" dial_timeout=\"1s\" error=\"dial tcp: lookup postgres.default.svc.cluster.local: i/o timeout\" interval=\"2s\" target_address=\"postgres.default.svc.cluster.local:5432\" target_name=\"PostgreSQL\" version=\"0.0.22\"\nts=2024-07-05T13:08:27+02:00 level=WARN msg=\"PostgreSQL is not ready ✗\" dial_timeout=\"1s\" error=\"dial tcp: lookup postgres.default.svc.cluster.local: i/o timeout\" interval=\"2s\" target_address=\"postgres.default.svc.cluster.local:5432\" target_name=\"PostgreSQL\" version=\"0.0.22\"\nts=2024-07-05T13:08:27+02:00 level=INFO msg=\"PostgreSQL is ready ✓\" dial_timeout=\"1s\" error=\"dial tcp: lookup postgres.default.svc.cluster.local: i/o timeout\" interval=\"2s\" target_address=\"postgres.default.svc.cluster.local:5432\" target_name=\"PostgreSQL\" version=\"0.0.22\"\n```\n\n### Without additional fields\n\n```text\ntime=2024-07-12T12:44:41.494Z level=INFO msg=\"Waiting for PostgreSQL to become ready...\"\ntime=2024-07-12T12:44:41.512Z level=WARN msg=\"PostgreSQL is not ready ✗\"\ntime=2024-07-12T12:44:43.532Z level=WARN msg=\"PostgreSQL is not ready ✗\"\ntime=2024-07-12T12:44:45.552Z level=INFO msg=\"PostgreSQL is ready ✓\"\n```\n\n## Kubernetes initContainer Configuration\n\nConfigure your Kubernetes deployment to use this init container:\n\n```yaml\ninitContainers:\n  - name: wait-for-valkey\n    image: ghcr.io/containeroo/taco:latest\n    env:\n      - name: TARGET_ADDRESS\n        value: valkey.default.svc.cluster.local:6379\n      # TARGET_NAME inferred from the target address \"valkey.default.svc.cluster.local\" which is okay for this use case\n      # INTERVAL defaults to 2 seconds which is okay for this use case\n      # DIAL_TIMEOUT defaults to 1 seconds which is okay for this use case\n      - name: LOG_EXTRA_FIELDS\n        value: \"true\"\n  - name: wait-for-postgres\n    image: ghcr.io/containeroo/taco:latest\n    env:\n      - name: TARGET_NAME\n        value: PostgreSQL # Use a better name for the target\n      - name: TARGET_ADDRESS\n        value: postgres.default.svc.cluster.local:5432\n      - name: INTERVAL\n        value: \"4s\" # Increase the interval duration, e.g., 4 seconds\n      - name: DIAL_TIMEOUT\n        value: \"2s\" # Increase the dial timeout duration, e.g., 2 seconds\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcontaineroo%2Ftaco","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcontaineroo%2Ftaco","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcontaineroo%2Ftaco/lists"}