{"id":46782008,"url":"https://github.com/bsv-blockchain/teranode-operator","last_synced_at":"2026-03-10T00:31:41.942Z","repository":{"id":322587574,"uuid":"1085681591","full_name":"bsv-blockchain/teranode-operator","owner":"bsv-blockchain","description":"Kubernetes operator for orchestrating Teranode BSV blockchain infrastructure","archived":false,"fork":false,"pushed_at":"2026-03-09T16:04:47.000Z","size":8931,"stargazers_count":2,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-09T18:46:24.560Z","etag":null,"topics":["bitcoin","bitcoinsv","bsv","go","kubernetes","teranode"],"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/bsv-blockchain.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":".github/SECURITY.md","support":".github/SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":".github/AGENTS.md","dco":null,"cla":null},"funding":{"github":"bsv-blockchain"}},"created_at":"2025-10-29T11:21:48.000Z","updated_at":"2026-03-09T16:04:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bsv-blockchain/teranode-operator","commit_stats":null,"previous_names":["bsv-blockchain/teranode-operator"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/bsv-blockchain/teranode-operator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsv-blockchain%2Fteranode-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsv-blockchain%2Fteranode-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsv-blockchain%2Fteranode-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsv-blockchain%2Fteranode-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bsv-blockchain","download_url":"https://codeload.github.com/bsv-blockchain/teranode-operator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsv-blockchain%2Fteranode-operator/sbom","scorecard":{"id":1240090,"data":{"date":"2025-11-27T02:04:35Z","repo":{"name":"github.com/bsv-blockchain/teranode-operator","commit":"ab0d6e35ebf03087b5b002c9159bf86acb0e2204"},"scorecard":{"version":"v5.3.0","commit":"c22063e786c11f9dd714d777a687ff7c4599b600"},"score":6.9,"checks":[{"name":"Code-Review","score":1,"reason":"Found 3/20 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#code-review"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dependency-update-tool"}},{"name":"Maintained","score":0,"reason":"project was created within the last 90 days. Please review its contents carefully","details":["Warn: Repository was created within the last 90 days."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#maintained"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: .github/SECURITY.md:1","Info: Found linked content: .github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: .github/SECURITY.md:1","Info: Found text in security policy: .github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#security-policy"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:31","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:32","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dependabot-auto-merge.yml:87","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/fortress-coverage.yml:112","Warn: jobLevel 'statuses' permission set to 'write': .github/workflows/fortress-coverage.yml:116","Info: jobLevel 'actions' permission set to 'read': .github/workflows/fortress-coverage.yml:117","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress-coverage.yml:2344","Info: jobLevel 'actions' permission set to 'read': .github/workflows/fortress-coverage.yml:2345","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/fortress-release.yml:59","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress-test-fuzz.yml:61","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress-test-matrix.yml:109","Warn: jobLevel 'statuses' permission set to 'write': .github/workflows/fortress-test-suite.yml:186","Info: jobLevel 'actions' permission set to 'read': .github/workflows/fortress-test-suite.yml:187","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/fortress-test-suite.yml:182","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress-test-validation.yml:49","Info: jobLevel 'actions' permission set to 'read': .github/workflows/fortress-test-validation.yml:50","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress.yml:148","Warn: jobLevel 'statuses' permission set to 'write': .github/workflows/fortress.yml:251","Info: jobLevel 'actions' permission set to 'read': .github/workflows/fortress.yml:252","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/fortress.yml:247","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress.yml:318","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress.yml:445","Info: jobLevel 'actions' permission set to 'read': .github/workflows/fortress.yml:446","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress.yml:81","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress.yml:135","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress.yml:173","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress.yml:200","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress.yml:225","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress.yml:290","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/fortress.yml:436","Info: jobLevel 'contents' permission set to 'read': .github/workflows/fortress.yml:116","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management-fork.yml:123","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management-fork.yml:181","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management-fork.yml:225","Warn: jobLevel 'actions' permission set to 'write': .github/workflows/pull-request-management-fork.yml:380","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management-fork.yml:381","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:92","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:131","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:302","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:481","Warn: jobLevel 'actions' permission set to 'write': .github/workflows/pull-request-management.yml:587","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:588","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/pull-request-management.yml:690","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:388","Info: jobLevel 'contents' permission set to 'read': .github/workflows/sync-labels.yml:111","Info: jobLevel 'contents' permission set to 'read': .github/workflows/teranode_main_build.yaml:37","Warn: jobLevel 'packages' permission set to 'write': .github/workflows/teranode_main_build.yaml:38","Info: topLevel 'contents' permission set to 'read': .github/workflows/auto-merge-on-approval.yml:39","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/auto-merge-on-approval.yml:40","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:23","Info: topLevel 'contents' permission set to 'read': .github/workflows/dependabot-auto-merge.yml:35","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-benchmarks.yml:92","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-code-quality.yml:58","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-completion-finalize.yml:45","Info: topLevel 'actions' permission set to 'read': .github/workflows/fortress-completion-finalize.yml:46","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-completion-report.yml:101","Info: topLevel 'actions' permission set to 'read': .github/workflows/fortress-completion-report.yml:102","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-completion-statistics.yml:46","Info: topLevel 'actions' permission set to 'read': .github/workflows/fortress-completion-statistics.yml:47","Info: topLevel 'actions' permission set to 'read': .github/workflows/fortress-completion-tests.yml:44","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-completion-tests.yml:43","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-coverage.yml:57","Info: topLevel 'actions' permission set to 'read': .github/workflows/fortress-coverage.yml:58","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-pre-commit.yml:46","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-release.yml:49","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-security-scans.yml:63","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-setup-config.yml:181","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-test-fuzz.yml:50","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-test-magex.yml:27","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-test-matrix.yml:99","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-test-suite.yml:117","Info: topLevel 'actions' permission set to 'read': .github/workflows/fortress-test-suite.yml:118","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-test-validation.yml:38","Info: topLevel 'actions' permission set to 'read': .github/workflows/fortress-test-validation.yml:39","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-warm-cache.yml:54","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress.yml:64","Info: topLevel 'contents' permission set to 'read': .github/workflows/pull-request-management-fork.yml:100","Info: topLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:43","Info: topLevel 'contents' permission set to 'read': .github/workflows/scorecard.yml:23","Info: topLevel 'contents' permission set to 'read': .github/workflows/stale-check.yml:32","Info: topLevel 'contents' permission set to 'read': .github/workflows/sync-labels.yml:44","Info: topLevel 'contents' permission set to 'read': .github/workflows/teranode_main_build.yaml:11","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/teranode_main_build.yaml:12"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#vulnerabilities"}},{"name":"Pinned-Dependencies","score":9,"reason":"dependency not pinned by hash detected -- score normalized to 9","details":["Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-benchmarks.yml:118","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-benchmarks.yml:182","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-benchmarks.yml:190","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-benchmarks.yml:276","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-matrix.yml:173","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-matrix.yml:183","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-matrix.yml:251","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-matrix.yml:401","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-matrix.yml:444","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-matrix.yml:474","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-matrix.yml:618","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-matrix.yml:683","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-matrix.yml:750","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-warm-cache.yml:70","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-warm-cache.yml:82","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-warm-cache.yml:96","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-warm-cache.yml:133","Warn: containerImage not pinned by hash: Dockerfile:5: pin your Docker image by updating golang:1.25.4 to golang:1.25.4@sha256:698183780de28062f4ef46f82a79ec0ae69d2d22f7b160cf69f71ea8d98bf25d","Info:  76 out of  76 GitHub-owned GitHubAction dependencies pinned","Info:   6 out of   6 third-party GitHubAction dependencies pinned","Info:   1 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (15) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#sast"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":4,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'master'","Info: 'force pushes' disabled on branch 'master'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'master'","Warn: 'stale review dismissal' is disabled on branch 'master'","Warn: required approving review count is 1 on branch 'master'","Warn: codeowners review is not required on branch 'master'","Warn: 'last push approval' is disabled on branch 'master'","Warn: 'up-to-date branches' is disabled on branch 'master'","Info: status check found to merge onto on branch 'master'","Info: PRs are required in order to make changes on branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#branch-protection"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#fuzzing"}},{"name":"Contributors","score":3,"reason":"project has 1 contributing companies or organizations -- score normalized to 3","details":["Info: found contributions from: skyetel @bsv-blockchain @buxorg @bitcoinschema @tonicpow @bitcoin-sv"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#contributors"}},{"name":"CI-Tests","score":10,"reason":"15 out of 15 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#ci-tests"}}]},"last_synced_at":"2025-12-01T06:40:56.862Z","repository_id":322587574,"created_at":"2025-12-01T06:40:56.862Z","updated_at":"2025-12-01T06:40:56.862Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30318397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T20:05:46.299Z","status":"ssl_error","status_checked_at":"2026-03-09T19:57:04.425Z","response_time":61,"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":["bitcoin","bitcoinsv","bsv","go","kubernetes","teranode"],"created_at":"2026-03-10T00:31:40.764Z","updated_at":"2026-03-10T00:31:41.927Z","avatar_url":"https://github.com/bsv-blockchain.png","language":"Go","funding_links":["https://github.com/sponsors/bsv-blockchain"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# ☸️\u0026nbsp;\u0026nbsp;teranode-operator\n\n**Kubernetes operator for orchestrating Teranode blockchain infrastructure.**\n\n\u003cbr/\u003e\n\n\u003ca href=\"https://github.com/bsv-blockchain/teranode-operator/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-pre/bsv-blockchain/teranode-operator?include_prereleases\u0026style=flat-square\u0026logo=github\u0026color=black\" alt=\"Release\"\u003e\u003c/a\u003e\n\u003ca href=\"https://golang.org/\"\u003e\u003cimg src=\"https://img.shields.io/github/go-mod/go-version/bsv-blockchain/teranode-operator?style=flat-square\u0026logo=go\u0026color=00ADD8\" alt=\"Go Version\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/bsv-blockchain/teranode-operator/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/bsv-blockchain/teranode-operator?style=flat-square\u0026color=blue\" alt=\"License\"\u003e\u003c/a\u003e\n\n\u003cbr/\u003e\n\n\u003ctable align=\"center\" border=\"0\"\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"right\"\u003e\n       \u003ccode\u003eCI / CD\u003c/code\u003e \u0026nbsp;\u0026nbsp;\n    \u003c/td\u003e\n    \u003ctd align=\"left\"\u003e\n       \u003ca href=\"https://github.com/bsv-blockchain/teranode-operator/actions\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/bsv-blockchain/teranode-operator/fortress.yml?branch=master\u0026label=build\u0026logo=github\u0026style=flat-square\" alt=\"Build\"\u003e\u003c/a\u003e\n       \u003ca href=\"https://github.com/bsv-blockchain/teranode-operator/actions\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/bsv-blockchain/teranode-operator?style=flat-square\u0026logo=git\u0026logoColor=white\u0026label=last%20update\" alt=\"Last Commit\"\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"right\"\u003e\n       \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003ccode\u003eQuality\u003c/code\u003e \u0026nbsp;\u0026nbsp;\n    \u003c/td\u003e\n    \u003ctd align=\"left\"\u003e\n       \u003ca href=\"https://goreportcard.com/report/github.com/bsv-blockchain/teranode-operator\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/bsv-blockchain/teranode-operator?style=flat-square\" alt=\"Go Report\"\u003e\u003c/a\u003e\n       \u003c!-- \u003ca href=\"https://codecov.io/gh/bsv-blockchain/teranode-operator\"\u003e\u003cimg src=\"https://codecov.io/gh/bsv-blockchain/teranode-operator/branch/master/graph/badge.svg?style=flat-square\" alt=\"Coverage\"\u003e\u003c/a\u003e --\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n    \u003ctd align=\"right\"\u003e\n       \u003ccode\u003eSecurity\u003c/code\u003e \u0026nbsp;\u0026nbsp;\n    \u003c/td\u003e\n    \u003ctd align=\"left\"\u003e\n       \u003ca href=\"https://scorecard.dev/viewer/?uri=github.com/bsv-blockchain/teranode-operator\"\u003e\u003cimg src=\"https://api.scorecard.dev/projects/github.com/bsv-blockchain/teranode-operator/badge?style=flat-square\" alt=\"Scorecard\"\u003e\u003c/a\u003e\n       \u003ca href=\".github/SECURITY.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/policy-active-success?style=flat-square\u0026logo=security\u0026logoColor=white\" alt=\"Security\"\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"right\"\u003e\n       \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003ccode\u003eCommunity\u003c/code\u003e \u0026nbsp;\u0026nbsp;\n    \u003c/td\u003e\n    \u003ctd align=\"left\"\u003e\n       \u003ca href=\"https://github.com/bsv-blockchain/teranode-operator/graphs/contributors\"\u003e\u003cimg src=\"https://img.shields.io/github/contributors/bsv-blockchain/teranode-operator?style=flat-square\u0026color=orange\" alt=\"Contributors\"\u003e\u003c/a\u003e\n       \u003ca href=\"https://github.com/sponsors/bsv-blockchain\"\u003e\u003cimg src=\"https://img.shields.io/badge/sponsor-BSV-181717.svg?logo=github\u0026style=flat-square\" alt=\"Sponsor\"\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\u003cbr/\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n### \u003ccode\u003eProject Navigation\u003c/code\u003e\n\n\u003c/div\u003e\n\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n       📦\u0026nbsp;\u003ca href=\"#-installation\"\u003e\u003ccode\u003eInstallation\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n       📚\u0026nbsp;\u003ca href=\"#-documentation\"\u003e\u003ccode\u003eDocumentation\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n       🧪\u0026nbsp;\u003ca href=\"#-examples--tests\"\u003e\u003ccode\u003eExamples\u0026nbsp;\u0026\u0026nbsp;Tests\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n       🤝\u0026nbsp;\u003ca href=\"#-contributing\"\u003e\u003ccode\u003eContributing\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n       🛠️\u0026nbsp;\u003ca href=\"#-code-standards\"\u003e\u003ccode\u003eCode\u0026nbsp;Standards\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n       ⚡\u0026nbsp;\u003ca href=\"#-benchmarks\"\u003e\u003ccode\u003eBenchmarks\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n       🤖\u0026nbsp;\u003ca href=\"#-ai-usage--assistant-guidelines\"\u003e\u003ccode\u003eAI\u0026nbsp;Usage\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n       ⚖️\u0026nbsp;\u003ca href=\"#-license\"\u003e\u003ccode\u003eLicense\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n       👥\u0026nbsp;\u003ca href=\"#-maintainers\"\u003e\u003ccode\u003eMaintainers\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003cbr/\u003e\n\n## 📦 Installation\n\nSee [teranode-operator-helm](https://github.com/bsv-blockchain/teranode-operator-helm) guide for Helm install details.\n\n\u003cbr/\u003e\n\n### Running a node\nOnce you have the operator installed, modify `config/samples/teranode_v1alpha1_node.yaml` with your needed configuration values, then create the instance in the cluster:\n```bash\n$ kubectl create config/samples/teranode_v1alpha1_cluster.yaml\n```\nThis step assumes you have created a prerequisite `configmap` and specified it on the above CR.\n\nThis will create the associated services, and you should see something like:\n```bash\n$ kubectl get pods\nNAME                                                              READY   STATUS      RESTARTS   AGE\nasset-5cc5745c75-6m5gf                                            1/1     Running     0          3d11h\nasset-5cc5745c75-84p58                                            1/1     Running     0          3d11h\nblock-assembly-649dfd8596-k8q29                                   1/1     Running     0          3d11h\nblock-assembly-649dfd8596-njdgn                                   1/1     Running     0          3d11h\nblock-persister-57784567d6-tdln7                                  1/1     Running     0          3d11h\nblock-persister-57784567d6-wdx84                                  1/1     Running     0          3d11h\nblock-validator-6c4bf46f8b-bvxmm                                  1/1     Running     0          3d11h\nblockchain-ccbbd894c-k95z9                                        1/1     Running     0          3d11h\nminer-6b454ff67c-jsrgv                                            1/1     Running     0          3d11h\npeer-6845bc4749-24ms4                                             1/1     Running     0          3d11h\npropagation-648cd4cc56-cw5bp                                      1/1     Running     0          3d11h\npropagation-648cd4cc56-sllxb                                      1/1     Running     0          3d11h\nsubtree-validator-7879f559d5-9gg9c                                1/1     Running     0          3d11h\nsubtree-validator-7879f559d5-x2dd4                                1/1     Running     0          3d11h\nteranode-operator-controller-manager-768f498c4d-mk49k             2/2     Running     0          3d11h\n```\n\n\u003cbr/\u003e\n\n## 📚 Documentation\nThis operator controls the management of each microservice associated with a Teranode cluster. It currently supports deployment via bundle.\n\n\u003cbr\u003e\n\n### Getting Started with Development\n\n#### Prerequisites\n- go version v1.20.0+\n- docker version 17.03+.\n- kubectl version v1.11.3+.\n- Access to a Kubernetes v1.11.3+ cluster.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\u003ccode\u003eDeploy on the cluster\u003c/code\u003e\u003c/strong\u003e\u003c/summary\u003e\n\n**Runs controller manager locally on your machine**\n```shell\nmake run\n```\n\n**Build and push your image to the location specified by `IMG`:**\n\n```sh\nmake docker-build docker-push IMG=\u003csome-registry\u003e/teranode-operator:tag\n```\n\n**NOTE:** This image ought to be published in the personal registry you specified.\nAnd it is required to have access to pull the image from the working environment.\nMake sure you have the proper permission to the registry if the above commands don’t work.\n\n**Install the CRDs into the cluster:**\n\n```sh\nmake install\n```\n\n**Deploy the Manager to the cluster with the image specified by `IMG`:**\n\n```sh\nmake deploy IMG=\u003csome-registry\u003e/teranode-operator:tag\n```\n\n\u003e **NOTE**: If you encounter RBAC errors, you may need to grant yourself cluster-admin\nprivileges or be logged in as admin.\n\n**Create instances of your solution**\nYou can apply the samples (examples) from the config/sample:\n\n```sh\nkubectl apply -k config/samples/\n```\n\n\u003e**NOTE**: Ensure that the samples has default values to test it out.\n\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\u003ccode\u003eUninstall\u003c/code\u003e\u003c/strong\u003e\u003c/summary\u003e\n\n**Delete the instances (CRs) from the cluster:**\n\n```sh\nkubectl delete -k config/samples/\n```\n\n**Delete the APIs(CRDs) from the cluster:**\n\n```sh\nmake uninstall\n```\n\n**UnDeploy the controller from the cluster:**\n\n```sh\nmake undeploy\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\u003ccode\u003eLibrary Deployment\u003c/code\u003e\u003c/strong\u003e\u003c/summary\u003e\n\u003cbr/\u003e\n\nThis project uses [goreleaser](https://github.com/goreleaser/goreleaser) for streamlined binary and library deployment to GitHub. To get started, install it via:\n\n```bash\nbrew install goreleaser\n```\n\nThe release process is defined in the [.goreleaser.yml](.goreleaser.yml) configuration file.\n\n\nThen create and push a new Git tag using:\n\n```bash\nmagex version:bump push=true bump=patch branch=master\n```\n\nThis process ensures consistent, repeatable releases with properly versioned artifacts and citation metadata.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\u003ccode\u003ePre-commit Hooks\u003c/code\u003e\u003c/strong\u003e\u003c/summary\u003e\n\u003cbr/\u003e\n\nSet up the Go-Pre-commit System to run the same formatting, linting, and tests defined in [AGENTS.md](.github/AGENTS.md) before every commit:\n\n```bash\ngo install github.com/mrz1836/go-pre-commit/cmd/go-pre-commit@latest\ngo-pre-commit install\n```\n\nThe system is configured via modular env files in [`.github/env/`](.github/env/README.md) and provides 17x faster execution than traditional Python-based pre-commit hooks. See the [complete documentation](http://github.com/mrz1836/go-pre-commit) for details.\n\n\u003c/details\u003e\n\n\u003cbr\u003e\n\n## 🧪 Examples \u0026 Tests\n\nAll unit tests and examples run via [GitHub Actions](https://github.com/bsv-blockchain/teranode-operator/actions) and use [Go version 1.25.x](https://go.dev/doc/go1.25).\n\nRun all tests (fast):\n\n```bash script\nmake test\n```\n\n\u003cbr/\u003e\n\n## ⚡ Benchmarks\n\n(Coming Soon!)\n\n\u003cbr/\u003e\n\n## 🛠️ Code Standards\nRead more about this Go project's [code standards](.github/CODE_STANDARDS.md).\n\n\u003cbr/\u003e\n\n## 🤖 AI Usage \u0026 Assistant Guidelines\nRead the [AI Usage \u0026 Assistant Guidelines](.github/tech-conventions/ai-compliance.md) for details on how AI is used in this project and how to interact with AI assistants.\n\n\u003cbr/\u003e\n\n## 👥 Maintainers\n| [\u003cimg src=\"https://github.com/icellan.png\" height=\"50\" alt=\"Siggi\" /\u003e](https://github.com/icellan) | [\u003cimg src=\"https://github.com/galt-tr.png\" height=\"50\" alt=\"Dylan\" /\u003e](https://github.com/galt-tr) | [\u003cimg src=\"https://github.com/oskarszoon.png\" height=\"50\" alt=\"Oli\" /\u003e](https://github.com/oskarszoon) | [\u003cimg src=\"https://github.com/mrz1836.png\" height=\"50\" width=\"50\" alt=\"MrZ\" /\u003e](https://github.com/mrz1836) |\n|:--------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------:|\n|                                [Siggi](https://github.com/icellan)                                 |                                [Dylan](https://github.com/galt-tr)                                 |                                  [Oli](https://github.com/oskarszoon)                                  |                                      [MrZ](https://github.com/mrz1836)                                      |\n\n\u003cbr/\u003e\n\n## 🤝 Contributing\nView the [contributing guidelines](.github/CONTRIBUTING.md) and please follow the [code of conduct](.github/CODE_OF_CONDUCT.md).\n\n### How can I help?\nAll kinds of contributions are welcome :raised_hands:!\nThe most basic way to show your support is to star :star2: the project, or to raise issues :speech_balloon:.\n\n[![Stars](https://img.shields.io/github/stars/bsv-blockchain/teranode-operator?label=Please%20like%20us\u0026style=social\u0026v=1)](https://github.com/bsv-blockchain/teranode-operator/stargazers)\n\n\u003cbr/\u003e\n\n## 📝 License\n\n[![License](https://img.shields.io/github/license/bsv-blockchain/teranode-operator.svg?style=flat\u0026v=1)](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbsv-blockchain%2Fteranode-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbsv-blockchain%2Fteranode-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbsv-blockchain%2Fteranode-operator/lists"}