{"id":28177845,"url":"https://github.com/jaketbouma/shopkeeper","last_synced_at":"2026-04-29T01:31:29.744Z","repository":{"id":289874092,"uuid":"972673189","full_name":"jaketbouma/shopkeeper","owner":"jaketbouma","description":"Shopkeeper is a python package that implements Data Platform Resources -- data producers, data consumers and datasets -- as custom infrastructure components","archived":false,"fork":false,"pushed_at":"2025-06-15T15:29:53.000Z","size":219,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-15T16:38:30.864Z","etag":null,"topics":["dataplatform","iac","pulumi"],"latest_commit_sha":null,"homepage":"https://honestgrowth.no","language":"Python","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/jaketbouma.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,"zenodo":null}},"created_at":"2025-04-25T13:16:53.000Z","updated_at":"2025-05-20T13:39:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"79b10927-0ad9-4f54-89be-432ebcf89d09","html_url":"https://github.com/jaketbouma/shopkeeper","commit_stats":null,"previous_names":["jaketbouma/shopkeeper"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jaketbouma/shopkeeper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaketbouma%2Fshopkeeper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaketbouma%2Fshopkeeper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaketbouma%2Fshopkeeper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaketbouma%2Fshopkeeper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jaketbouma","download_url":"https://codeload.github.com/jaketbouma/shopkeeper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaketbouma%2Fshopkeeper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32407164,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T19:38:08.556Z","status":"ssl_error","status_checked_at":"2026-04-28T19:37:55.688Z","response_time":56,"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":["dataplatform","iac","pulumi"],"created_at":"2025-05-16T01:11:00.104Z","updated_at":"2026-04-29T01:31:29.735Z","avatar_url":"https://github.com/jaketbouma.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🛍️ Shopkeeper\nShopkeeper is a python package that implements Data Platform Resources -- data producers, data consumers and datasets -- as custom infrastructure components.\nThis project is in its early phases, exploring whether Pulumi can provide a rich self service interface to a data platform.\n\nSee [honestgrowth.no](https://honestgrowth.super.site/essays/building-the-marketplace) for strategy and design.\n\n![The marketplace data model: data platform resources, their important attributes, and the simple relationships between them.](docs/10kft.png)\n\n## Trying out the marketplace\nComing soon! For now, you can peek at the test cases in [pulumi-shopkeeper/tests](./pulumi-shopkeeper/tests).\n\n## Contributor setup\n\nPrerequisites:\n* Docker\n* (recommended) Visual Studio Code, with the [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension\n* A test AWS subscription (`aws sso login`)\n\nThis project can be tested and developed in a (rather opinionated) devcontainer based on the (rather large) Pulumi/Pulumi image. This image gives us Java, Go, dotnet and python, which we need to build and test pulumi packages across all supported languages.\n\nTo get started, build the container yourself, providing your own github handle as an arg. This will be used to create a non-root container user, and is later by the devcontainer configuration.\n```sh\nexport GITHUB_USERNAME=\"jaketbouma\"\ncd .devcontainer\ndocker build -f dev.Dockerfile --build-arg GITHUB_USERNAME=$GITHUB_USERNAME$ -t shopkeeper-dev:latest ./\n```\n\nReview the `.devcontainer/devcontainer.json` file. I use [chezmoi](https://www.chezmoi.io/) to sync dotfile configuration and secrets into the development container using a postStartCommand script. This is mostly for terminal cosmetics and to persist terminal history. You can create your own `.devcontainer/${GITHUB_USERNAME}.postStartCommand.sh` and adjust as needed.\n\nPoetry Poe is used as the task runner, and has tasks for tests, cleanups, etc.\n```sh\ncd pulumi-shopkeeper\npoetry install\npoetry run poe\n```\n\nHappy hacking!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaketbouma%2Fshopkeeper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaketbouma%2Fshopkeeper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaketbouma%2Fshopkeeper/lists"}