Sprint B.5: add-LICENSE action (MIT/Apache-2.0) in [m] menu + vulp repo license

- src/license/: embedded templates, holder resolution (config > git user.name
  > account username), write path shared by TUI and CLI
- TUI: bulk-aware [m] entry over action_targets(), kind select + confirm,
  point-updates has_license/is_dirty, logs to activity (new License kind)
- CLI: vulp repo license <repo>...|--all [--kind] [--holder] [--json],
  skips already-licensed repos, exit 2/4 contract kept
- config: license_holder + default_license fields (TUI-editable)
- never overwrites an existing license, never auto-commits
This commit is contained in:
dualfroz committed 2026-07-06 15:37:25 +02:00
1 parent 0468c032c6
commit f1432d1cd3
15 files changed
+506 -7

No files matched your search

+3 -2
View File
@@ -8,7 +8,7 @@ use std::path::PathBuf;
/// The kind of action recorded in one activity log entry.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ActivityKind { Commit, Push, Pull, Release, NewRepo, Todo, Pr, Issue }
pub enum ActivityKind { Commit, Push, Pull, Release, NewRepo, Todo, Pr, Issue, License }
impl ActivityKind {
/// Display label shown in the Activity tab's table.
@@ -22,6 +22,7 @@ impl ActivityKind {
Self::Todo => "todo",
Self::Pr => "pr",
Self::Issue => "issue",
Self::License => "license",
}
}
@@ -30,7 +31,7 @@ impl ActivityKind {
pub fn cycle() -> &'static [ActivityKind] {
&[
Self::Commit, Self::Push, Self::Pull, Self::Release,
Self::NewRepo, Self::Todo, Self::Pr, Self::Issue,
Self::NewRepo, Self::Todo, Self::Pr, Self::Issue, Self::License,
]
}
}