GitHub Org Cataloger
Sync repositories from GitHub organizations into your Lunar catalog. Automatically track visibility, topics, and metadata across all repos with configurable filtering.
github-org to your lunar-config.yml:uses: github://earthly/lunar-lib/catalogers/github-org@v1.0.0
What This Integration Syncs
This integration includes 1 cataloger that sync data from your systems.
repos
Syncs all repositories from a GitHub organization as components.
- Maps GitHub topics to Lunar tags with configurable prefix
- Supports filtering by visibility (public, private, internal)
- Supports include/exclude patterns for repository names
- Optionally includes archived repositories
0 2 * * *
How Catalogers Fit into Lunar
Lunar catalogers sync component metadata into your Lunar catalog from external systems or source code. They can run on a schedule or be triggered by code changes to keep your service registry up-to-date.
By automatically discovering components from GitHub organizations, service registries, or by detecting technology usage in source code, catalogers ensure your guardrails apply to all relevant services without manual configuration.
Learn How Lunar Works →Example Catalog Entry
This cataloger syncs component metadata into your Lunar catalog. Here's an example of a catalog entry it creates:
{
"components": {
"github.com/acme/payment-api": {
"owner": "platform-team@acme.com",
"tags": ["gh-backend", "gh-go", "gh-production", "github-visibility-private"],
"meta": {
"description": "Payment processing API service",
"visibility": "private",
"archived": "false"
}
},
"github.com/acme/frontend-app": {
"owner": "platform-team@acme.com",
"tags": ["gh-react", "gh-typescript", "github-visibility-public"],
"meta": {
"description": "Customer-facing web application",
"visibility": "public",
"archived": "false"
}
}
}
}
Configuration
Configure this cataloger in your lunar-config.yml.
Inputs
| Input | Required | Default | Description |
|---|---|---|---|
org_name
|
Required | — | GitHub organization name to sync (required) |
include_public
|
Optional |
true
|
Include public repositories |
include_private
|
Optional |
true
|
Include private repositories |
include_internal
|
Optional |
true
|
Include internal repositories (GitHub Enterprise) |
include_archived
|
Optional |
false
|
Include archived repositories |
include_repos
|
Required | — | Comma-separated list of glob patterns for repos to include. Empty means include all. Examples: "api-*,backend-*" |
exclude_repos
|
Required | — | Comma-separated list of glob patterns for repos to exclude. Examples: "sandbox-*,deprecated-*,test-*" |
tag_prefix
|
Optional |
gh-
|
Prefix for GitHub topics when converting to Lunar tags |
default_owner
|
Required | — | Default owner email for all components. Leave empty to not set owner. |
Documentation
View on GitHubGitHub Org Cataloger
Catalogs all repositories from a GitHub organization as Lunar components.
Overview
This cataloger syncs repositories from a GitHub organization into the Lunar catalog. It maps GitHub topics to Lunar tags (with a configurable prefix), supports filtering by visibility and repository name patterns, and can optionally set a default owner for all components.
Synced Data
This cataloger writes to the following Catalog JSON paths:
| Path | Type | Description |
|---|---|---|
.components[*].owner |
string | Default owner (if configured) |
.components[*].tags[] |
array | GitHub topics with prefix (e.g., gh-backend) |
.components[*].meta.description |
string | Repository description |
.components[*].meta.visibility |
string | Repository visibility (public, private, internal) |
.components[*].meta.archived |
string | Whether the repository is archived ("true"/"false") |
Example Catalog JSON output
{
"components": {
"github.com/acme/api": {
"owner": "platform-team@acme.com",
"tags": ["gh-backend", "gh-go", "gh-production"],
"meta": {
"description": "Main API service",
"visibility": "private",
"archived": "false"
}
},
"github.com/acme/frontend": {
"owner": "platform-team@acme.com",
"tags": ["gh-frontend", "gh-typescript"],
"meta": {
"description": "Web application",
"visibility": "private",
"archived": "false"
}
},
"github.com/acme/docs": {
"tags": ["gh-documentation"],
"meta": {
"description": "Public documentation site",
"visibility": "public",
"archived": "false"
}
}
}
}
Catalogers
This plugin provides the following catalogers:
| Cataloger | Description |
|---|---|
repos |
Syncs all repositories from the GitHub organization |
Hook Type
| Hook | Schedule | Description |
|---|---|---|
cron |
0 2 * * * |
Runs daily at 2am UTC |
Installation
Add to your lunar-config.yml:
catalogers:
- uses: github.com/earthly/lunar-lib/catalogers/github-org@v1.0.0
with:
org_name: "acme-corp"
Advanced Configuration
catalogers:
- uses: github.com/earthly/lunar-lib/catalogers/github-org@v1.0.0
with:
org_name: "acme-corp"
include_public: "true"
include_private: "true"
include_internal: "false"
include_archived: "false"
exclude_repos: "sandbox-*,deprecated-*,*-archive"
tag_prefix: "gh-"
default_owner: "platform-team@acme.com"
Include Only Specific Repos
catalogers:
- uses: github.com/earthly/lunar-lib/catalogers/github-org@v1.0.0
with:
org_name: "acme-corp"
include_repos: "api-*,backend-*,frontend-*"
Source System
This cataloger uses the GitHub CLI (gh) to query the GitHub API. It requires:
- GitHub CLI installed and available in the container (included in custom image)
- Authentication via
LUNAR_SECRET_GH_TOKEN(same as other GitHub collectors) with appropriate scopes:reposcope for private/internal repositoriesread:orgscope for public repositories only
The cataloger makes API calls to list repositories and their topics. For large organizations, it fetches up to 10,000 repositories per visibility level.
Open Source
This cataloger is open source and available on GitHub. Contribute improvements, report issues, or fork it for your own use.
Ready to Automate Your Standards?
See how Lunar can turn your engineering wiki, compliance docs, or postmortem action items into automated guardrails with our 100+ built-in guardrails.