Sincronizza elementi tra board diverse: GitHub Projects (v2), Jira, Azure DevOps e file CSV.
- Frontend: Angular 20 (componenti standalone, signals)
- Backend: .NET 10 Web API
- GitHub Projects è integrato tramite GitHub CLI (
gh); Jira e Azure DevOps tramite REST API; CSV su file locale.
# Backend (porta 5093)
dotnet run --project backend/BoardSync.Api
# Frontend (porta 4200, proxy /api -> 5093)
cd frontend && npx ng servePoi apri http://localhost:4200.
- .NET 10 SDK, Node.js ≥ 22
- Per GitHub Projects: GitHub CLI installata e autenticata con lo scope
project:gh auth login gh auth refresh -s project
Una connessione è una board concreta. Impostazioni per provider:
| Provider | Impostazioni |
|---|---|
| GitHub Project | owner, projectNumber |
| Jira | baseUrl, email, apiToken, projectKey, issueType (opz.) |
| Azure DevOps | organizationUrl, project, pat, workItemType (opz.) |
| CSV | filePath, delimiter (opz., default ,) |
Un template definisce il mapping tra i campi nativi del provider e i campi canonici di BoardSync
(title, description, status, assignee, priority, dueDate, labels), più il mapping degli
stati e i default in scrittura (es. issueType: Bug). La direzione (Input / Output / Entrambi)
stabilisce dove il template è selezionabile. Per ogni provider esiste un template predefinito,
duplicabile e personalizzabile.
Nella pagina Sincronizzazione si selezionano: connessione di origine + template di input, connessione di destinazione + template di output. È disponibile l'anteprima degli elementi letti, la simulazione (dry run) e l'opzione per saltare gli elementi già presenti nella destinazione (confronto per titolo, che rende la sincronizzazione rieseguibile senza duplicati).
| Endpoint | Descrizione |
|---|---|
GET/POST/PUT/DELETE /api/connections |
CRUD connessioni |
GET/POST/PUT/DELETE /api/templates |
CRUD template (?provider=, ?direction=) |
GET /api/providers |
Metadati provider (guida il form dinamico) |
GET /api/sync/preview?connectionId=&templateId= |
Anteprima elementi dall'origine |
POST /api/sync/run |
Esegue la sincronizzazione (supporta dryRun) |
I dati (connessioni e template) sono persistiti come JSON in backend/BoardSync.Api/data/.
Nota: i token (Jira
apiToken, Azure DevOpspat) sono salvati in chiaro nei file JSON locali. L'app è pensata per uso locale/single-user; non esporla così com'è su una rete condivisa.