{"id":15998961,"url":"https://github.com/manics/binderhub-container-registry-helper","last_synced_at":"2026-02-16T09:08:12.327Z","repository":{"id":146021945,"uuid":"589374437","full_name":"manics/binderhub-container-registry-helper","owner":"manics","description":"A microservice to help BinderHub work with Public cloud container registries","archived":false,"fork":false,"pushed_at":"2024-11-25T21:49:47.000Z","size":217,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-21T03:36:15.998Z","etag":null,"topics":["binder","binderhub","jupyter","jupyterhub"],"latest_commit_sha":null,"homepage":"https://www.manicstreetpreacher.co.uk/binderhub-container-registry-helper/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/manics.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":"2023-01-16T00:06:17.000Z","updated_at":"2024-10-02T19:35:43.000Z","dependencies_parsed_at":"2023-11-27T16:01:27.920Z","dependency_job_id":"2d62e2cb-c37f-457f-84ca-48e8876eb964","html_url":"https://github.com/manics/binderhub-container-registry-helper","commit_stats":{"total_commits":102,"total_committers":2,"mean_commits":51.0,"dds":0.0980392156862745,"last_synced_commit":"c9a12f82a607d5ceb60e8303831a9043d8f4e477"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/manics/binderhub-container-registry-helper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manics%2Fbinderhub-container-registry-helper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manics%2Fbinderhub-container-registry-helper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manics%2Fbinderhub-container-registry-helper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manics%2Fbinderhub-container-registry-helper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manics","download_url":"https://codeload.github.com/manics/binderhub-container-registry-helper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manics%2Fbinderhub-container-registry-helper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29504688,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T09:05:14.864Z","status":"ssl_error","status_checked_at":"2026-02-16T08:55:59.364Z","response_time":115,"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":["binder","binderhub","jupyter","jupyterhub"],"created_at":"2024-10-08T08:23:12.738Z","updated_at":"2026-02-16T09:08:12.297Z","avatar_url":"https://github.com/manics.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BinderHub Container Registry Helper\n\n[![Go](https://github.com/manics/binderhub-container-registry-helper/actions/workflows/build.yml/badge.svg)](https://github.com/manics/binderhub-container-registry-helper/actions/workflows/build.yml)\n\nA microservice to help BinderHub work with Public cloud container registries.\n\nSome cloud registries require a repository to be created before it can be used.\nThis micro-service provides a simple REST API to create repositories on demand, avoiding the need to integrate cloud provider libraries into BinderHub.\n\nThe following cloud provider registries are supported:\n\n- [Oracle Cloud Infrastructure container registry](https://docs.oracle.com/en-us/iaas/Content/Registry/Concepts/registryoverview.htm)\n- [Amazon Web Services Elastic Container Registry (Amazon ECR)](https://aws.amazon.com/ecr/)\n\n## Build and run locally\n\nYou must install [Go 1.18](https://tip.golang.org/doc/go1.18).\nIf you are a Python developer using [Conda](https://docs.conda.io/en/latest/) or [Mamba](https://mamba.readthedocs.io/) and just want a quick way to install Go:\n\n```\nconda create -n go -c conda-forge go=1.18 go-cgo=1.18\nconda activate go\n```\n\n```\nmake build\nmake test\n```\n\nRun with Oracle Cloud Infrastructure using a local [OCI configuration file `oci-config` and private key `oci_api_key.pem`](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/sdkconfig.htm):\n\n```\nBINDERHUB_AUTH_TOKEN=secret-token ./binderhub-oracle oci-config\n```\n\nRun with Amazon Web Services using the local [AWS credentials](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html):\n\n```\nBINDERHUB_AUTH_TOKEN=secret-token ./binderhub-amazon\n```\n\n## API endpoints\n\nList repositories\n\n```\ncurl -H'Authorization: Bearer secret-token' localhost:8080/repos/\n```\n\nCreate repository `foo/test` (ignores repositories that already exist)\n\n```\ncurl -XPOST -H'Authorization: Bearer secret-token' localhost:8080/repo/foo/test\n```\n\nGet repository `foo/test`\n\n```\ncurl -H'Authorization: Bearer secret-token' localhost:8080/repo/foo/test\n```\n\nDelete repository `foo/test` (ignores repositories that don't exist)\n\n```\ncurl -XDELETE -H'Authorization: Bearer secret-token' localhost:8080/repo/foo/test\n```\n\nGet credentials for repository `foo/test` (only for Amazon, returns 404 for Oracle)\n\n```\ncurl -XPOST -H'Authorization: Bearer secret-token' localhost:8080/token/foo/test\n```\n\n## Build and run container\n\n```\npodman build -t binderhub-container-registry-helper .\n```\n\nOracle Cloud Infrastructure:\n\n```\npodman run --rm -it \\\n  -eBINDERHUB_AUTH_TOKEN=secret-token \\\n  -eOCI_COMPARTMENT_ID=oci.compartment.id \\\n  -v ./oci-config:/oci-config:ro,z \\\n  -v ./oci_api_key.pem:/oci_api_key.pem:ro,z \\\n  -p8080:8080 \\\n  binderhub-container-registry-helper binderhub-oracle /oci-config\n```\n\nAmazon Web Services:\n\n```\npodman run --rm -it \\\n  -eBINDERHUB_AUTH_TOKEN=secret-token \\\n  -eAWS_REGION=region \\\n  -eAWS_ACCESS_KEY_ID=access-key \\\n  -eAWS_SECRET_ACCESS_KEY=seret-key \\\n  -eRETURN_ERROR_DETAILS=1 \\\n  -p8080:8080 \\\n  binderhub-container-registry-helper binderhub-amazon\n```\n\n## Running in the cloud\n\nThe recommended way to run this service is to use an IAM\n[instance principal (Oracle Cloud)](https://blogs.oracle.com/developers/post/accessing-the-oracle-cloud-infrastructure-api-using-instance-principals)\nor\n[instance profile (AWS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)\nto authenticate with the cloud provider.\n\n### Environment variables\n\nThe following environment variables are supported:\n\n- `BINDERHUB_AUTH_TOKEN`: Secret token used to authenticate callers who should set the `Authorization: Bearer {BINDERHUB_AUTH_TOKEN}` header.\n  Set `BINDERHUB_AUTH_TOKEN=\"\"` to disable authentication.\n- `RETURN_ERROR_DETAILS`: If set to `1` internal error details will be returned in the response body to clients. This may include internal configuration information, only enable this for internal use. Default `0`.\n\nAmazon only:\n\n- `AWS_REGISTRY_ID`: Registry ID to use for AWS ECR, only set this is you are not using the default registry for the AWS account.\n\nOracle cloud infrastructure only:\n\n- `OCI_COMPARTMENT_ID`: OCI compartment or tenancy OCID if not the default.\n\n## BinderHub example (Helm chart)\n\nThis repository includes an OCI Helm chart to deploy this service to a Kubernetes cluster.\nDeploy the OCI Helm chart, see [`Values.yaml`](./helm-chart/values.yaml) for configuration options.\n\n```\nhelm repo add binderhub-container-registry-helper https://www.manicstreetpreacher.co.uk/binderhub-container-registry-helper/\n\nhelm upgrade binderhub-container-registry-helper/binderhub-container-registry-helper --version \u003cVERSION\u003e\n```\n\nAppend this example [BinderHub configuration](binderhub-example/binderhub_config.py) to your BinderHub `extraConfig` section.\nFor example:\n\n```yaml\nextraConfig:\n  10-external-registry-helper: |\n    \u003cbinderhub-example/binderhub_config.py\u003e\n```\n\n## Development\n\nBuild and run\n\n```\nmake build\nmake test\n```\n\nFor more detailed testing of a single module or test:\n\n```\ngo test -v ./common/\ngo test -v ./common -run TestGetName\n```\n\nAdd a new module\n\n```\ngo mod tidy\n```\n\n### Debug logging\n\nThe Oracle Cloud SDK supports the environment variable `OCI_GO_SDK_DEBUG={info,debug,verbose}`.\nUnfortunately the AWS SDK does not have an equivalent.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanics%2Fbinderhub-container-registry-helper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanics%2Fbinderhub-container-registry-helper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanics%2Fbinderhub-container-registry-helper/lists"}