{"id":47284843,"url":"https://github.com/deploymenttheory/go-jamf-guid-sharder","last_synced_at":"2026-03-16T05:43:47.396Z","repository":{"id":340280224,"uuid":"1160139847","full_name":"deploymenttheory/go-jamf-guid-sharder","owner":"deploymenttheory","description":"A cli tool for taking various Jamf Pro guid lists and sharding the results with rules, ready for populating deployment groups","archived":false,"fork":false,"pushed_at":"2026-03-10T05:22:13.000Z","size":120,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-10T13:43:20.335Z","etag":null,"topics":["cli","go","jamf-pro","terraform"],"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/deploymenttheory.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","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":"2026-02-17T15:36:40.000Z","updated_at":"2026-03-10T05:22:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/deploymenttheory/go-jamf-guid-sharder","commit_stats":null,"previous_names":["deploymenttheory/go-jamf-guid-sharder"],"tags_count":0,"template":false,"template_full_name":"deploymenttheory/Template","purl":"pkg:github/deploymenttheory/go-jamf-guid-sharder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deploymenttheory%2Fgo-jamf-guid-sharder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deploymenttheory%2Fgo-jamf-guid-sharder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deploymenttheory%2Fgo-jamf-guid-sharder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deploymenttheory%2Fgo-jamf-guid-sharder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deploymenttheory","download_url":"https://codeload.github.com/deploymenttheory/go-jamf-guid-sharder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deploymenttheory%2Fgo-jamf-guid-sharder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30568784,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-16T04:42:47.996Z","status":"ssl_error","status_checked_at":"2026-03-16T04:42:44.668Z","response_time":96,"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":["cli","go","jamf-pro","terraform"],"created_at":"2026-03-16T05:43:46.798Z","updated_at":"2026-03-16T05:43:47.383Z","avatar_url":"https://github.com/deploymenttheory.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-jamf-guid-sharder\n\nA CLI tool that retrieves managed device and user IDs from Jamf Pro and distributes them into configurable shards for progressive rollouts and phased deployments.\n\n[![Go Test](https://github.com/deploymenttheory/go-jamf-guid-sharder/actions/workflows/go-test.yml/badge.svg)](https://github.com/deploymenttheory/go-jamf-guid-sharder/actions/workflows/go-test.yml)\n[![Go Lint](https://github.com/deploymenttheory/go-jamf-guid-sharder/actions/workflows/go-lint.yml/badge.svg)](https://github.com/deploymenttheory/go-jamf-guid-sharder/actions/workflows/go-lint.yml)\n[![codecov](https://codecov.io/gh/deploymenttheory/go-jamf-guid-sharder/graph/badge.svg)](https://codecov.io/gh/deploymenttheory/go-jamf-guid-sharder)\n[![Release](https://github.com/deploymenttheory/go-jamf-guid-sharder/actions/workflows/release.yml/badge.svg)](https://github.com/deploymenttheory/go-jamf-guid-sharder/actions/workflows/release.yml)\n[![License](https://img.shields.io/github/license/deploymenttheory/go-jamf-guid-sharder)](LICENSE)\n\n## What it does\n\n`go-jamf-guid-sharder` connects to Jamf Pro, fetches a set of managed device or user IDs, and splits them into named shards using one of four algorithms. The output is JSON or YAML — ready to pipe into a deployment tool, Terraform data source, or further automation.\n\n```\nJamf Pro API  →  fetch IDs  →  exclude / reserve  →  shard  →  JSON / YAML\n```\n\n**Supported sources**\n\n| `source_type` | API used | Notes |\n|---|---|---|\n| `computer_inventory` | Pro API | Managed computers only |\n| `mobile_device_inventory` | Pro API | Managed mobile devices only |\n| `computer_group_membership` | Classic API | Requires `--group-id` |\n| `mobile_device_group_membership` | Classic API | Requires `--group-id` |\n| `user_accounts` | Classic API | All Jamf Pro user accounts |\n\n**Supported strategies**\n\n| Strategy | Description |\n|---|---|\n| `round-robin` | Equal distribution ±1, optionally seeded |\n| `percentage` | Proportional split by explicit percentages summing to 100 |\n| `size` | Absolute shard sizes; use `-1` as final element for remainder |\n| `rendezvous` | Highest Random Weight (HRW) consistent hashing — minimal movement when shard count changes |\n\n## Quick start\n\n```bash\n# Download the latest release binary (macOS arm64 example)\ncurl -L https://github.com/deploymenttheory/go-jamf-guid-sharder/releases/latest/download/go-jamf-guid-sharder_latest_darwin_arm64.tar.gz | tar xz\n\n# Run a round-robin split of all managed computers into 3 shards\n./go-jamf-guid-sharder shard \\\n  --instance-domain company.jamfcloud.com \\\n  --auth-method oauth2 \\\n  --client-id \u003cid\u003e --client-secret \u003csecret\u003e \\\n  --source-type computer_inventory \\\n  --strategy round-robin --shard-count 3\n```\n\nOutput:\n\n```json\n{\n  \"metadata\": {\n    \"generated_at\": \"2024-11-01T09:15:42Z\",\n    \"source_type\": \"computer_inventory\",\n    \"strategy\": \"round-robin\",\n    \"seed\": \"\",\n    \"total_ids_fetched\": 1200,\n    \"excluded_id_count\": 0,\n    \"reserved_id_count\": 0,\n    \"unreserved_ids_distributed\": 1200,\n    \"shard_count\": 3\n  },\n  \"shards\": {\n    \"shard_0\": [\"1\", \"4\", \"7\"],\n    \"shard_1\": [\"2\", \"5\", \"8\"],\n    \"shard_2\": [\"3\", \"6\", \"9\"]\n  }\n}\n```\n\n## Documentation\n\n| Topic | Description |\n|---|---|\n| [Getting started](docs/getting-started.md) | Installation, first run, config file setup |\n| [Configuration reference](docs/configuration.md) | Every field and flag explained |\n| [Sharding strategies](docs/strategies.md) | How each algorithm works, when to use it |\n| [Examples](docs/examples.md) | Real-world patterns for common rollout scenarios |\n\n## Configuration\n\nConfiguration is resolved in priority order: **flags \u003e config file \u003e environment variables**.\n\nCopy `workload/example-config.yaml` as a starting point:\n\n```yaml\ninstance_domain: \"https://company.jamfcloud.com\"\nauth_method: \"oauth2\"\nclient_id: \"\"\nclient_secret: \"\"\n\nsource_type: \"computer_inventory\"\nstrategy: \"round-robin\"\nshard_count: 3\n\noutput_format: \"json\"\n```\n\nEnvironment variables use the prefix `JAMF_`, e.g. `JAMF_CLIENT_SECRET`.\n\nSee the full [configuration reference](docs/configuration.md) for every available field.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md). Issues and pull requests are welcome.\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeploymenttheory%2Fgo-jamf-guid-sharder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeploymenttheory%2Fgo-jamf-guid-sharder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeploymenttheory%2Fgo-jamf-guid-sharder/lists"}