Sync Identity
Sync description, homepage URL, and topics to a GitHub repository from nova.config.json.
Summary
The sync-identity recipe pushes repository identity fields from nova.config.json to GitHub using gh repo edit and gh api -X PUT /repos/.../topics. It acts as the authoritative source for the repository's public description, homepage, and topic tags.
If all three fields (description, homepage, and topics) are undefined in the config, the recipe no-ops and emits a warning.
Prerequisites
ghCLI ≥ 2.40.0 — The GitHub CLI must be installed and authenticated.- Repository write access — The authenticated user must have write access to the target repository.
github.ownerandgithub.repo— Both fields must be set innova.config.jsonto identify the target repository.
Behavior
description— Sourced fromproject.description.shortinnova.config.json. If undefined, the field is skipped.homepage— Sourced fromurls.homepage. If undefined, the field is skipped.topics— Sourced fromgithub.topicsif set. Ifgithub.topicsis not defined, topics are derived fromproject.keywordsusing the normalization rules below. Ifgithub.topicsis set to an empty array ([]), all topics are cleared on GitHub.
Topic normalization rules applied to project.keywords when github.topics is not set:
- Converted to lowercase.
- Spaces and underscores replaced with hyphens.
- Characters outside
[a-z0-9-]are stripped. - Duplicates are removed.
- Topics longer than 50 characters are dropped and a warning is emitted.
- Capped at 20 topics.
Settings
Settings are configured per workspace in nova.config.json under the recipes key. The sync-identity recipe is controlled by a single boolean toggle:
{
"github": {
"recipes": {
"sync-identity": true
}
}
}
Usage
Options
| Flag | Description |
|---|---|
-d, --dry-run | Run without executing any GitHub commands. |