1- # specsnl/labelsync
1+ <!-- markdownlint-disable MD033 -->
2+ <p align =" center " >
3+ <img src =" docs/static/logo.svg " width =" 200 " alt =" labelsync " >
4+ <h1 align =" center " >labelsync</h1 >
5+ <p align =" center " ><strong >Documentation:</strong > <a href =" https://labelsync.specs.dev " >labelsync.specs.dev</a ></p >
6+ </p >
7+ <!-- markdownlint-enable MD033 -->
28
39Synchronise GitHub issue/PR labels across a set of repositories from a local YAML file.
410
@@ -57,6 +63,8 @@ What it does, in one list:
5763 committed config and the live labels disagree — test the bit, because a run that also skipped a
5864 repository exits ` 6 ` . ` --output=json ` emits NDJSON with a stable ` error_kind ` .
5965
66+ ---
67+
6068## Install
6169
6270``` sh
@@ -73,6 +81,8 @@ Building from a checkout needs nothing but Docker and [Task](https://taskfile.de
7381task build
7482```
7583
84+ ---
85+
7686## Getting started
7787
7888** Export before you write a config.** Descriptions in the config file are authoritative, so a
@@ -87,6 +97,8 @@ The rest — describing the repositories, the dry run, the first apply — is in
8797the configuration file, every command and flag, running in CI, and how it is built — is on the same
8898site: ** [ labelsync.specs.dev] ( https://labelsync.specs.dev/ ) ** .
8999
100+ ---
101+
90102## Contributing
91103
92104Every command runs through [ Task] ( https://taskfile.dev ) , which wraps the Docker Compose services
@@ -98,3 +110,9 @@ task checkall # tidy:check, lint, test, md:check — run this before opening a
98110```
99111
100112Conventions, workflow, and the house rules that reviews are held to: [ AGENTS.md] ( ./AGENTS.md ) .
113+
114+ ---
115+
116+ ## License
117+
118+ MIT — see [ LICENSE] ( ./LICENSE ) .
0 commit comments