Commit
Author: Kevin Schoon [me@kevinschoon.com]
Hash: 3bd0bd3f85cb386d2c8220f148811cb8dd6d33ec
Timestamp: Thu, 07 Mar 2024 16:50:34 +0000 (10 months ago)

+18 -452 +/-26 browse
rm gitbug entirely from the project
rm gitbug entirely from the project

Gitbug is an awesome project that has a lot of promise however it doesn't fit
well with Ayllu since it has no Rust library and it uses a Go based key value
store on the file system which cannot be interoperated with.
1diff --git a/README.md b/README.md
2index 62f1ea4..fbd911c 100644
3--- a/README.md
4+++ b/README.md
5 @@ -57,7 +57,6 @@ A general development channel `#ayllu` is available on [libera](ircs://irc.liber
6 | markdown rendering | ✅ | |
7 | diff generation | ✅ | |
8 | syntax highlighting | ✅ | via [tree-sitter](https://tree-sitter.github.io/tree-sitter/) |
9- | bug / issues tracking | ✅ | via [gitbug](https://github.com/MichaelMure/git-bug) |
10 | source code analysis | ✅ | |
11 | full featured rss support | ✅ | |
12 | customizable themes | ✅ | |
13 @@ -65,12 +64,12 @@ A general development channel `#ayllu` is available on [libera](ircs://irc.liber
14 | activity tracking | ✅ | |
15 | extensible plugin system | ✅ | |
16 | WebFinger | ✅ | |
17- | mailing list support | WIP | see [31fe498](https://ayllu-forge.org/projects/ayllu/bugs/31fe498) |
18+ | mailing list support | WIP | |
19 | xmpp integration | WIP | |
20- | activity pub based federation | TBD | see [6f74244](https://ayllu-forge.org/projects/ayllu/bugs/6f74244) |
21- | continuous integration | TODO | see [ba0865](https://ayllu-forge.org/projects/ayllu/bugs/ba0865c) |
22- | graphql api | TODO | see [eff5c44](https://ayllu-forge.org/projects/ayllu/bugs/eff5c44) |
23- | centralized "hub" | TODO | see [3c3cb24](https://ayllu-forge.org/projects/ayllu/bugs/3c3cb24) |
24+ | activity pub based federation | TBD | |
25+ | continuous integration | TODO | |
26+ | graphql api | TODO | |
27+ | centralized "hub" | TODO | |
28
29 ## Installation
30
31 diff --git a/src/gitbug/mod.rs b/src/gitbug/mod.rs
32deleted file mode 100644
33index 638fcbf..0000000
34--- a/src/gitbug/mod.rs
35+++ /dev/null
36 @@ -1,141 +0,0 @@
37- use std::fs;
38- use std::io::Error;
39- use std::path::Path;
40- use std::process::Command;
41-
42- use serde::{Deserialize, Serialize};
43-
44- #[derive(Clone, Serialize, Deserialize)]
45- pub struct User {
46- pub id: String,
47- pub human_id: String,
48- pub name: String,
49- }
50-
51- #[derive(Clone, Serialize, Deserialize)]
52- pub struct Comment {
53- pub id: String,
54- pub human_id: String,
55- pub author: User,
56- pub message: String,
57- }
58-
59- #[derive(Clone, Serialize, Deserialize)]
60- pub struct Time {
61- pub timestamp: u64,
62- }
63-
64- #[derive(Clone, Serialize, Deserialize)]
65- pub struct Bug {
66- pub id: String,
67- pub human_id: String,
68- pub title: String,
69- pub create_time: Time,
70- pub edit_time: Time,
71- pub status: String,
72- pub labels: Option<Vec<String>>,
73- pub actors: Vec<User>,
74- pub participants: Vec<User>,
75- pub author: User,
76- pub comments: i32,
77- }
78-
79- #[derive(Clone, Serialize, Deserialize)]
80- pub struct Details {
81- pub id: String,
82- pub human_id: String,
83- pub title: String,
84- pub create_time: Time,
85- pub edit_time: Time,
86- pub status: String,
87- pub labels: Option<Vec<String>>,
88- pub actors: Vec<User>,
89- pub participants: Vec<User>,
90- pub author: User,
91- pub comments: Vec<Comment>,
92- }
93-
94- pub struct Wrapper<'a> {
95- path: &'a Path,
96- }
97-
98- impl<'a> Wrapper<'a> {
99- pub fn new(path: &'a Path) -> Self {
100- Wrapper { path }
101- }
102-
103- pub fn enabled(&self) -> Result<bool, Error> {
104- let mut path = self.path.to_path_buf();
105- path.push("git-bug");
106- match fs::metadata(path.as_path()) {
107- Ok(_) => Ok(true),
108- Err(_) => {
109- // for non-bare repositories
110- let mut path = self.path.to_path_buf();
111- path.push(".git/git-bug");
112- match fs::metadata(path.as_path()) {
113- Ok(_) => Ok(true),
114- Err(_) => Ok(false),
115- }
116- }
117- }
118- }
119-
120- pub fn list(self) -> Result<Vec<Bug>, Error> {
121- let output = Command::new("git-bug")
122- .arg("ls")
123- .arg("--format=json")
124- .arg("--direction=desc")
125- .current_dir(self.path)
126- .output()?;
127- let stdout = output.stdout.to_vec();
128- let list_output: Vec<Bug> = serde_json::from_slice(&stdout)?;
129- Ok(list_output)
130- }
131-
132- pub fn list_range(&self, timeframe: Option<(i64, i64)>) -> Result<Vec<Details>, Error> {
133- let output = Command::new("git-bug")
134- .arg("ls")
135- .arg("--format=json")
136- .arg("--direction=desc")
137- .current_dir(self.path)
138- .output()?;
139- let stdout = output.stdout.to_vec();
140- let list_output: Vec<Bug> = serde_json::from_slice(&stdout)?;
141- let list_output = match timeframe {
142- Some((start, end)) => {
143- let list_output: Vec<Bug> = list_output
144- .iter()
145- .cloned()
146- .filter_map(|bug| {
147- let created_at = bug.edit_time.timestamp as i64;
148- if created_at < start && created_at > end {
149- Some(bug)
150- } else {
151- None
152- }
153- })
154- .collect();
155- list_output
156- }
157- None => list_output,
158- };
159- let details: Result<Vec<Details>, Error> = list_output
160- .iter()
161- .map(|item| self.details(item.id.as_str()))
162- .collect();
163- details
164- }
165-
166- pub fn details(&self, id: &str) -> Result<Details, Error> {
167- let output = Command::new("git-bug")
168- .arg("show")
169- .arg("--format=json")
170- .arg(id)
171- .current_dir(self.path)
172- .output()?;
173- let stdout = output.stdout.to_vec();
174- let bug: Details = serde_json::from_slice(&stdout)?;
175- Ok(bug)
176- }
177- }
178 diff --git a/src/main.rs b/src/main.rs
179index 26a4292..0131ad1 100644
180--- a/src/main.rs
181+++ b/src/main.rs
182 @@ -9,8 +9,6 @@ use tokio::runtime::Builder;
183 use ayllu_config::Reader;
184 use ayllu_database::migrate;
185
186-
187- mod gitbug;
188 mod job_server;
189 mod web2;
190
191 diff --git a/src/web2/middleware/repository.rs b/src/web2/middleware/repository.rs
192index d451684..3c1c94a 100644
193--- a/src/web2/middleware/repository.rs
194+++ b/src/web2/middleware/repository.rs
195 @@ -10,7 +10,6 @@ use axum::{
196 use serde::Deserialize;
197
198 use crate::config::Config;
199- use crate::gitbug::Wrapper as Gitbug;
200 use crate::web2::error::Error;
201 use ayllu_git::{Commit, Config as GitConfig, Wrapper as Repository};
202
203 @@ -33,7 +32,6 @@ pub struct Preamble {
204 pub collection_name: String,
205 pub refname: String,
206 pub config: GitConfig,
207- pub gitbug_enabled: bool,
208 pub file_path: Option<PathBuf>,
209 pub latest_commit: Option<Commit>,
210 pub latest_commit_id: Option<String>,
211 @@ -58,9 +56,6 @@ impl Preamble {
212 return Err(Error::NotFound(String::from("collection not found")));
213 }
214 };
215- let gitbug_enabled = Gitbug::new(&repo_path)
216- .enabled()
217- .is_ok_and(|enabled| enabled);
218 let repository = Repository::new(&repo_path)?;
219 let is_empty = repository.is_empty()?;
220 let config = repository.config()?;
221 @@ -88,7 +83,6 @@ impl Preamble {
222 collection_name,
223 refname,
224 config,
225- gitbug_enabled,
226 file_path: file_path.map(PathBuf::from),
227 latest_commit: latest_commit.clone(),
228 latest_commit_id: latest_commit.map(|commit| commit.id),
229 diff --git a/src/web2/navigation.rs b/src/web2/navigation.rs
230index 7be0f1c..ff3e58e 100644
231--- a/src/web2/navigation.rs
232+++ b/src/web2/navigation.rs
233 @@ -23,8 +23,8 @@ pub fn global(current_page: &str, mail_visible: bool) -> Items {
234 nav
235 }
236
237- pub fn primary(current_page: &str, collection: &str, name: &str, bugs_enabled: bool) -> Items {
238- let mut nav = vec![
239+ pub fn primary(current_page: &str, collection: &str, name: &str) -> Items {
240+ vec![
241 (
242 String::from("authors"),
243 format!("/{}/{}/authors", collection, name,),
244 @@ -50,19 +50,7 @@ pub fn primary(current_page: &str, collection: &str, name: &str, bugs_enabled: b
245 format!("/{}/{}/refs", collection, name),
246 current_page == "refs",
247 ),
248- ];
249-
250- if bugs_enabled {
251- nav.insert(
252- 1,
253- (
254- String::from("bugs"),
255- format!("/{}/{}/bugs", collection, name),
256- current_page == "bugs",
257- ),
258- )
259- };
260- nav
261+ ]
262 }
263
264 pub fn subnav(
265 @@ -135,4 +123,3 @@ pub fn revnav(current_page: &str, collection: &str, name: &str) -> Items {
266 ),
267 ]
268 }
269-
270 diff --git a/src/web2/routes/authors.rs b/src/web2/routes/authors.rs
271index 5cd219b..2c3a5a4 100644
272--- a/src/web2/routes/authors.rs
273+++ b/src/web2/routes/authors.rs
274 @@ -24,12 +24,7 @@ pub async fn serve(
275 ctx.insert("title", &format!("{} Authors", preamble.repo_name.clone()));
276 ctx.insert(
277 "nav_elements",
278- &navigation::primary(
279- "authors",
280- &preamble.collection_name,
281- &preamble.repo_name,
282- preamble.gitbug_enabled,
283- ),
284+ &navigation::primary("authors", &preamble.collection_name, &preamble.repo_name),
285 );
286 ctx.insert("authors", &authors);
287 let body = templates.render("authors.html", &ctx)?;
288 diff --git a/src/web2/routes/blame.rs b/src/web2/routes/blame.rs
289index 595e936..4ff451b 100644
290--- a/src/web2/routes/blame.rs
291+++ b/src/web2/routes/blame.rs
292 @@ -32,12 +32,7 @@ pub async fn serve(
293 ctx.insert("title", &title);
294 ctx.insert(
295 "nav_elements",
296- &navigation::primary(
297- "",
298- &preamble.collection_name,
299- &preamble.repo_name,
300- preamble.gitbug_enabled,
301- ),
302+ &navigation::primary("", &preamble.collection_name, &preamble.repo_name),
303 );
304 ctx.insert("file_name", &preamble.file_name());
305 ctx.insert(
306 diff --git a/src/web2/routes/blob.rs b/src/web2/routes/blob.rs
307index 9cb8fff..0f7d68b 100644
308--- a/src/web2/routes/blob.rs
309+++ b/src/web2/routes/blob.rs
310 @@ -84,12 +84,7 @@ pub async fn serve(
311 }
312 ctx.insert(
313 "nav_elements",
314- &navigation::primary(
315- "blob",
316- &preamble.collection_name,
317- &preamble.repo_name,
318- preamble.gitbug_enabled,
319- ),
320+ &navigation::primary("blob", &preamble.collection_name, &preamble.repo_name),
321 );
322 let subnav = navigation::subnav(
323 "blob",
324 diff --git a/src/web2/routes/bugs.rs b/src/web2/routes/bugs.rs
325deleted file mode 100644
326index ed7c2f5..0000000
327--- a/src/web2/routes/bugs.rs
328+++ /dev/null
329 @@ -1,83 +0,0 @@
330- use axum::{
331- extract::{Extension, Path},
332- response::Html,
333- };
334-
335- use comrak::{markdown_to_html_with_plugins, ComrakOptions, ComrakPlugins};
336-
337- use crate::gitbug;
338- use crate::time as timeutil;
339- use crate::web2::highlight::TreeSitterAdapter;
340-
341- use crate::web2::error::Error;
342- use crate::web2::middleware::repository::Preamble;
343- use crate::web2::middleware::template::Template;
344- use crate::web2::navigation;
345-
346- pub async fn bugs(
347- Extension(preamble): Extension<Preamble>,
348- Extension((templates, mut ctx)): Extension<Template>,
349- ) -> Result<Html<String>, Error> {
350- let bug = gitbug::Wrapper::new(preamble.repo_path.as_path());
351- match bug.enabled()? {
352- true => {
353- let bugs = bug.list()?;
354- let bugs: Vec<(String, String, &gitbug::Bug, bool)> =
355- bugs.iter().fold(Vec::new(), |mut accm, bug| {
356- let created_at = timeutil::friendly(bug.create_time.timestamp);
357- let modified_at = timeutil::friendly(bug.edit_time.timestamp);
358- accm.push((created_at, modified_at, bug, bug.status == "closed"));
359- accm
360- });
361- ctx.insert("bugs", &Some(&bugs));
362- }
363- false => ctx.insert("bugs", &None::<()>),
364- }
365- ctx.insert("title", "Bugs");
366- ctx.insert(
367- "nav_elements",
368- &navigation::primary("bugs", &preamble.collection_name, &preamble.repo_name, true),
369- );
370- let body = templates.render("bugs.html", &ctx)?;
371- Ok(Html(body))
372- }
373-
374- pub async fn bug(
375- Path((_, _, bug_id)): Path<(String, String, String)>,
376- Extension(preamble): Extension<Preamble>,
377- Extension(adapter): Extension<TreeSitterAdapter>,
378- Extension((templates, mut ctx)): Extension<Template>,
379- ) -> Result<Html<String>, Error> {
380- let bug = gitbug::Wrapper::new(preamble.repo_path.as_path());
381- let details = bug.details(&bug_id)?;
382- ctx.insert("bug", &details);
383- ctx.insert(
384- "created_at",
385- &timeutil::friendly(details.create_time.timestamp),
386- );
387- ctx.insert(
388- "modified_at",
389- &timeutil::friendly(details.create_time.timestamp),
390- );
391- let options = ComrakOptions::default();
392- let mut plugins = ComrakPlugins::default();
393- plugins.render.codefence_syntax_highlighter = Some(&adapter);
394- let comments: Vec<(String, String)> =
395- details
396- .comments
397- .iter()
398- .fold(Vec::new(), |mut accm, content| {
399- let text =
400- markdown_to_html_with_plugins(content.message.as_str(), &options, &plugins);
401- accm.push((content.author.name.clone(), text));
402- accm
403- });
404- ctx.insert("comments", &comments);
405- ctx.insert("title", &details.title);
406- ctx.insert(
407- "nav_elements",
408- &navigation::primary("bugs", &preamble.collection_name, &preamble.repo_name, true),
409- );
410- let body = templates.render("bug.html", &ctx)?;
411- Ok(Html(body))
412- }
413 diff --git a/src/web2/routes/chart.rs b/src/web2/routes/chart.rs
414index d7204a6..3a60b2b 100644
415--- a/src/web2/routes/chart.rs
416+++ b/src/web2/routes/chart.rs
417 @@ -63,12 +63,7 @@ pub async fn serve(
418
419 ctx.insert(
420 "nav_elements",
421- &navigation::primary(
422- "charts",
423- &preamble.collection_name,
424- &preamble.repo_name,
425- preamble.gitbug_enabled,
426- ),
427+ &navigation::primary("charts", &preamble.collection_name, &preamble.repo_name),
428 );
429 ctx.insert(
430 "chartnav",
431 diff --git a/src/web2/routes/commit.rs b/src/web2/routes/commit.rs
432index ac09c69..95f730a 100644
433--- a/src/web2/routes/commit.rs
434+++ b/src/web2/routes/commit.rs
435 @@ -21,12 +21,7 @@ pub async fn serve(
436 ctx.insert("title", &title);
437 ctx.insert(
438 "nav_elements",
439- &navigation::primary(
440- "",
441- &preamble.collection_name,
442- &preamble.repo_name,
443- preamble.gitbug_enabled,
444- ),
445+ &navigation::primary("", &preamble.collection_name, &preamble.repo_name),
446 );
447 ctx.insert("commit_hash", &commit_id);
448 let commit = repository.commit(Some(commit_id.to_string()))?.unwrap();
449 diff --git a/src/web2/routes/log.rs b/src/web2/routes/log.rs
450index faa8e17..3cdf57d 100644
451--- a/src/web2/routes/log.rs
452+++ b/src/web2/routes/log.rs
453 @@ -23,12 +23,7 @@ pub async fn serve(
454 let repository = Wrapper::new(preamble.repo_path.as_path())?;
455 ctx.insert(
456 "nav_elements",
457- &navigation::primary(
458- "log",
459- &preamble.collection_name,
460- &preamble.repo_name,
461- preamble.gitbug_enabled,
462- ),
463+ &navigation::primary("log", &preamble.collection_name, &preamble.repo_name),
464 );
465 ctx.insert("file_view", &false);
466 match preamble.file_path.clone() {
467 diff --git a/src/web2/routes/mod.rs b/src/web2/routes/mod.rs
468index ebb476d..98e70a1 100644
469--- a/src/web2/routes/mod.rs
470+++ b/src/web2/routes/mod.rs
471 @@ -3,7 +3,6 @@ pub mod assets;
472 pub mod authors;
473 pub mod blame;
474 pub mod blob;
475- pub mod bugs;
476 pub mod builds;
477 pub mod chart;
478 pub mod commit;
479 diff --git a/src/web2/routes/refs.rs b/src/web2/routes/refs.rs
480index 390aa9e..3483ce2 100644
481--- a/src/web2/routes/refs.rs
482+++ b/src/web2/routes/refs.rs
483 @@ -43,7 +43,6 @@ pub async fn branches(
484 "refs",
485 &preamble.collection_name,
486 &preamble.repo_name,
487- preamble.gitbug_enabled,
488 ),
489 );
490 ctx.insert(
491 @@ -74,7 +73,6 @@ pub async fn tags(
492 "refs",
493 &preamble.collection_name,
494 &preamble.repo_name,
495- preamble.gitbug_enabled,
496 ),
497 );
498 ctx.insert(
499 diff --git a/src/web2/routes/repo.rs b/src/web2/routes/repo.rs
500index 4482e9b..31b8779 100644
501--- a/src/web2/routes/repo.rs
502+++ b/src/web2/routes/repo.rs
503 @@ -320,7 +320,6 @@ pub async fn serve(
504 "project",
505 &preamble.collection_name,
506 &preamble.repo_name,
507- preamble.gitbug_enabled,
508 ),
509 );
510 ctx.insert("commit_count", &materialized.commit_count);
511 diff --git a/src/web2/routes/rss.rs b/src/web2/routes/rss.rs
512index 2597a6d..ee16af4 100644
513--- a/src/web2/routes/rss.rs
514+++ b/src/web2/routes/rss.rs
515 @@ -13,7 +13,6 @@ use tera::{Context, Tera};
516 use time::{format_description::well_known::Rfc2822, macros::time, Duration, OffsetDateTime};
517
518 use crate::config::{Collection, Config};
519- use crate::gitbug;
520 use crate::web2::error::Error;
521 use crate::web2::middleware::repository::Preamble;
522 use crate::web2::middleware::template::Template;
523 @@ -88,7 +87,6 @@ impl Timeframe {
524 struct Data {
525 name: String,
526 tags: Vec<Tag>,
527- bugs: Vec<gitbug::Details>,
528 commits: Vec<Commit>,
529 }
530
531 @@ -148,33 +146,6 @@ impl Builder {
532 if config.hidden.is_some_and(|hidden| hidden) {
533 continue;
534 };
535- let bugs = gitbug::Wrapper::new(entry.0.as_path()).list_range(Some((
536- start.unix_timestamp(),
537- self.current_time.unix_timestamp(),
538- )))?;
539- for bug in bugs {
540- let mut item = rss::Item::default();
541- let link = format!("{}/bugs/{}", entry.1, bug.human_id);
542- item.set_title(format!("Bug: {}", bug.title));
543- item.set_description(
544- bug.comments
545- .first()
546- .map_or(String::new(), |comment| comment.message.to_string()),
547- );
548- item.set_link(Some(link.clone()));
549- item.set_author(bug.author.name);
550- item.set_pub_date(
551- time::OffsetDateTime::from_unix_timestamp(bug.edit_time.timestamp as i64)
552- .unwrap()
553- .format(&Rfc2822)
554- .unwrap(),
555- );
556- item.set_guid(Some(Guid {
557- permalink: true,
558- value: link,
559- }));
560- items.push((item, bug.create_time.timestamp as i64))
561- }
562 for tag in repository.tags_range(Some((
563 start.unix_timestamp(),
564 self.current_time.unix_timestamp(),
565 @@ -227,15 +198,12 @@ impl Builder {
566 };
567 let tags =
568 repository.tags_range(Some((start.unix_timestamp(), end.unix_timestamp())))?;
569- let bugs = gitbug::Wrapper::new(entry.0.as_path())
570- .list_range(Some((start.unix_timestamp(), end.unix_timestamp())))?;
571 let commits = repository
572 .commits_range(None, Some((start.unix_timestamp(), end.unix_timestamp())))?;
573- if !tags.is_empty() || !bugs.is_empty() || !commits.is_empty() {
574+ if !tags.is_empty() || !commits.is_empty() {
575 all_data.push(Data {
576 name: repository.name(),
577 tags,
578- bugs,
579 commits,
580 });
581 }
582 @@ -256,10 +224,6 @@ impl Builder {
583 .iter()
584 .fold(0, |accm, entries| accm + entries.tags.len());
585 ctx.insert("n_tags", &n_tags);
586- let n_bugs = all_data
587- .iter()
588- .fold(0, |accm, entries| accm + entries.bugs.len());
589- ctx.insert("n_bugs", &n_bugs);
590 let n_commits = all_data
591 .iter()
592 .fold(0, |accm, entries| accm + entries.commits.len());
593 diff --git a/src/web2/server.rs b/src/web2/server.rs
594index 60dff65..1738afe 100644
595--- a/src/web2/server.rs
596+++ b/src/web2/server.rs
597 @@ -31,7 +31,6 @@ use crate::web2::routes::assets;
598 use crate::web2::routes::authors;
599 use crate::web2::routes::blame;
600 use crate::web2::routes::blob;
601- use crate::web2::routes::bugs;
602 use crate::web2::routes::builds;
603 use crate::web2::routes::chart;
604 use crate::web2::routes::commit;
605 @@ -248,8 +247,6 @@ pub async fn serve(cfg: &Config) -> Result<(), Box<dyn Error>> {
606 "/builds/:commit_id/:build_id",
607 routing::get(builds::details),
608 )
609- .route("/bugs", routing::get(bugs::bugs))
610- .route("/bugs/:bug_id", routing::get(bugs::bug))
611 .route("/refs", routing::get(refs::tags))
612 .route("/refs/branches", routing::get(refs::branches))
613 .route("/refs/tags", routing::get(refs::tags))
614 diff --git a/themes/adwaita/theme.scss b/themes/adwaita/theme.scss
615index 536f2c1..4716ec0 100644
616--- a/themes/adwaita/theme.scss
617+++ b/themes/adwaita/theme.scss
618 @@ -156,14 +156,6 @@ span.ts_variable.parameter {color: $light4};
619 }
620 }
621
622- // bugs
623- $bug-feature: $blue1;
624- $bug-bug: $red1;
625- $bug-regression: $yellow1;
626- $bug-refactor: $purple1;
627- $bug-complex: $purple2;
628- $bug-performance: $green1;
629-
630 $positive: $green1;
631 $negative: $red1;
632
633 diff --git a/themes/default/base.scss b/themes/default/base.scss
634index f66f084..633a10c 100644
635--- a/themes/default/base.scss
636+++ b/themes/default/base.scss
637 @@ -412,14 +412,6 @@ div.user-box > .details {
638 text-align: right;
639 }
640
641- header.bug-closed {
642- text-decoration: line-through;
643- }
644-
645- tr.bug-closed {
646- text-decoration: line-through;
647- }
648-
649 .expand-xl {display: none}
650
651 div.tree > table {
652 @@ -523,16 +515,6 @@ div.chart {
653 }
654 }
655
656- // bugs
657- span.labels {
658- span.feature {background-color: $bug-feature};
659- span.bug {background-color: $bug-bug};
660- span.regression {background-color: $bug-regression};
661- span.refactor {background-color: $bug-refactor};
662- span.complex {background-color: $bug-complex};
663- span.performance {background-color: $bug-performance};
664- }
665-
666 // code highlighting
667
668 article.blame-right {
669 diff --git a/themes/default/templates/bug.html b/themes/default/templates/bug.html
670deleted file mode 100644
671index 2a7efc6..0000000
672--- a/themes/default/templates/bug.html
673+++ /dev/null
674 @@ -1,24 +0,0 @@
675- {% extends "base.html" %}
676- {% block content %}
677- <section>
678- <article>
679- <header class="wide">
680- <div><h1>{{bug.title}}</h1></div>
681- {% if bug.labels %}
682- <div>
683- <span class="labels">
684- {% for label in bug.labels %}
685- <span class="{{label}}">{{label}}</span>
686- {% endfor %}
687- </div>
688- {% endif %}
689- </header>
690- {% for comment in comments %}
691- <article class="inner">
692- <header>{{ comment.0 }}</header>
693- <div class="readme">{{ comment.1 | safe }}</div>
694- </article>
695- {% endfor %}
696- </article>
697- </section>
698- {% endblock %}
699 diff --git a/themes/default/templates/bugs.html b/themes/default/templates/bugs.html
700deleted file mode 100644
701index 05693ee..0000000
702--- a/themes/default/templates/bugs.html
703+++ /dev/null
704 @@ -1,37 +0,0 @@
705- {% extends "base.html" %}
706- {% block content %}
707- <section>
708- <article>
709- <header>
710- <h1>Bugs</h1>
711- </header>
712- {% if bugs %}
713- {% for bug in bugs %}
714- <article>
715- <header {% if bug.3 %}class="bug-closed wide"{% else %} class="wide"{% endif %}>
716- <div>
717- <h6><a href="/{{collection}}/{{name}}/bugs/{{bug.2.human_id}}">{{ bug.2.title }}</a><h6>
718- <code>{{bug.2.human_id}}</code>
719- </div>
720- <div>
721- {% if bug.2.labels %}
722- <span class="labels">
723- {% for label in bug.2.labels %}
724- <span class="{{label}} label">{{ label }}</span>
725- {% endfor %}
726- </span>
727- {% endif %}
728- </div>
729- </header>
730- <footer>
731- <span>{{bug.2.author.name}}</span>
732- <span class="right">{{bug.0}}</span>
733- </footer>
734- </article>
735- {% endfor %}
736- {% else %}
737- <p> git-bug integration is not enabled for this repository </p>
738- {% endif %}
739- </article>
740- </section>
741- {% endblock %}
742 diff --git a/themes/default/templates/rss_summary.html b/themes/default/templates/rss_summary.html
743index 7417a5c..ca85e9a 100644
744--- a/themes/default/templates/rss_summary.html
745+++ b/themes/default/templates/rss_summary.html
746 @@ -1,6 +1,6 @@
747 <center>
748 <h1> Summary from {{start_date}} to {{end_date}} </h1>
749- <h2>{{n_tags}} tags, {{n_bugs}} bugs, and {{n_commits}} commits added {% if entries | length > 1 %} across {{n_projects}} projects{%- endif -%} </h2>
750+ <h2>{{n_tags}} tags and {{n_commits}} commits added {% if entries | length > 1 %} across {{n_projects}} projects{%- endif -%} </h2>
751 </center>
752
753 {% for entry in entries %}
754 @@ -10,17 +10,6 @@
755 </br><h3> <u>New Tags</u> </h3>
756 {% endif %}
757
758- {% if entry.bugs | length > 0 %}
759- </br><h3> <u>New Bugs</u> </h3>
760- {% for bug in entry.bugs %}
761- <article>
762- <header>
763- <h4><a href="{{origin}}/{{entry.name}}/bugs/{{bug.human_id}}">{{bug.title}} {{bug.author.name}}</a></h4>
764- </header>
765- </article>
766- {% endfor %}
767- {% endif %}
768-
769 {% if entry.commits | length > 0 %}
770 </br><h3> <u>New Commits</u> </h3>
771 {% for commit in entry.commits %}
772 diff --git a/themes/default/theme.scss b/themes/default/theme.scss
773index e1bcab5..3c4052d 100644
774--- a/themes/default/theme.scss
775+++ b/themes/default/theme.scss
776 @@ -66,14 +66,6 @@ $red-700: hsl($grey-hue, 20%, 32%);
777 $red-800: hsl($grey-hue, 25%, 23%);
778 $red-900: hsl($grey-hue, 30%, 15%);
779
780- // bugs
781- $bug-feature: $black;
782- $bug-bug: $black;
783- $bug-regression: $black;
784- $bug-refactor: $black;
785- $bug-complex: $black;
786- $bug-performance: $black;
787-
788 $positive: $black;
789 $negative: $black;
790
791 diff --git a/themes/tokyonight/theme.scss b/themes/tokyonight/theme.scss
792index 716ad47..97551d3 100644
793--- a/themes/tokyonight/theme.scss
794+++ b/themes/tokyonight/theme.scss
795 @@ -82,14 +82,6 @@ span.ts_variable.parameter {color: $yellow}
796 }
797 }
798
799- // bugs
800- $bug-feature: $blue;
801- $bug-bug: $red;
802- $bug-regression: $yellow;
803- $bug-refactor: $purple;
804- $bug-complex: $purple;
805- $bug-performance: $green;
806-
807 $positive: $green;
808 $negative: $red;
809
810 diff --git a/www/content/_index.md b/www/content/_index.md
811index b0015d9..ea236ea 100644
812--- a/www/content/_index.md
813+++ b/www/content/_index.md
814 @@ -101,8 +101,7 @@ management based on [Mailpot 🍯](https://git.meli-email.org/meli/mailpot).
815
816 #### Much More
817 New features planned such as continuous integration, mailing list support,
818- external API, federation, and more. See the **features** tag in the
819- [bugs section](https://ayllu-forge.org/projects/ayllu/bugs).
820+ external API, federation, and more.
821
822 </article>
823
824 diff --git a/www/public/index.html b/www/public/index.html
825index d41657a..1ab90ef 100644
826--- a/www/public/index.html
827+++ b/www/public/index.html
828 @@ -1 +1 @@
829- <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><section class=home-header><div class=blurb><h1 id=hyper-performant-hackable-code-forge-built-on-open-standards>Hyper Performant & Hackable Code Forge Built on Open Standards</h1><p>Ayllu is a lightweight code forge designed to enable individuals and community projects develop software in collaboration across open internet standards.</p><a href=https://ayllu-forge.org/projects/ayllu> <button>source</button> </a></div><div class=screenshot><a href=https://ayllu-forge.org/projects/ayllu> <img class="screenshot night" src=/assets/images/ui.png></a><img class="screenshot day" src=/assets/images/ui-day.png></div></section><div class=home-wrapper><article><h4 id=general-purpose-git-ui>General Purpose Git UI</h4><p>General purpose web based UI for git. Browse hosted projects, view contributors, source code, blame, releases, etc.</article><article><h4 id=source-code-analysis>Source Code Analysis</h4><p>Super accurate syntax highlighting and code composition insight across project history.</article><article><h4 id=incremental-jobs>Incremental Jobs</h4><p>A built-in configurable incremental jobs system controlled via Git hooks and/or cron to extend forge functionality.</article><article><h4 id=extensible-plugin-system>Extensible Plugin System</h4><p>An extensible CapnProto based plugin system allows adding large external integrations via RPC calls.</article><article><h4 id=completely-themable>Completely Themable</h4><p>The web interface is fully customizable, a few themes <a href=https://ayllu-forge.org/config>already</a> exist and more are on the way.</article><article><h4 id=web-1-5>Web 1.5</h4><p>Super fast web frontend with first class support for RSS based project subscriptions. Ayllu loads faster than any other code forge in existence. <em>If it doesn't, it's a bug!</em></article><article><h4 id=static-hosting>Static Hosting</h4><p>Serve static websites directly from a git repository making project sites, documentation, or other assets simple to self-host.</article><article><h4 id=mailing-list-management>Mailing List Management</h4><p>Full featured email based software development workflows and mailing list management based on <a href=https://git.meli-email.org/meli/mailpot>Mailpot 🍯</a>.</article><article><h4 id=much-more>Much More</h4><p>New features planned such as continuous integration, mailing list support, external API, federation, and more. See the <strong>features</strong> tag in the <a href=https://ayllu-forge.org/projects/ayllu/bugs>bugs section</a>.</article></div></main><footer class=page-footer>2024, <a href=/projects/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
830\ No newline at end of file
831+ <!doctype html><html lang=en><head><meta charset=utf-8><link href=/main.css rel=stylesheet><link href=/assets/ayllu_logo.svg rel=icon type=image/svg+xml><link href=/assets/ayllu_logo.png rel=icon sizes=any type=image/png><title>Ayllu</title></head><nav><ul><li><a href=/> <img class=logo src=/assets/ayllu_logo.png> </a></ul><ul><li><a href=https://ayllu-forge.org/browse>browse</a><li><a href=/docs>docs</a></ul></nav><body class=container><div class=wrapper><main class=page-body><section class=home-header><div class=blurb><h1 id=hyper-performant-hackable-code-forge-built-on-open-standards>Hyper Performant & Hackable Code Forge Built on Open Standards</h1><p>Ayllu is a lightweight code forge designed to enable individuals and community projects develop software in collaboration across open internet standards.</p><a href=https://ayllu-forge.org/projects/ayllu> <button>source</button> </a></div><div class=screenshot><a href=https://ayllu-forge.org/projects/ayllu> <img class="screenshot night" src=/assets/images/ui.png></a><img class="screenshot day" src=/assets/images/ui-day.png></div></section><div class=home-wrapper><article><h4 id=general-purpose-git-ui>General Purpose Git UI</h4><p>General purpose web based UI for git. Browse hosted projects, view contributors, source code, blame, releases, etc.</article><article><h4 id=source-code-analysis>Source Code Analysis</h4><p>Super accurate syntax highlighting and code composition insight across project history.</article><article><h4 id=incremental-jobs>Incremental Jobs</h4><p>A built-in configurable incremental jobs system controlled via Git hooks and/or cron to extend forge functionality.</article><article><h4 id=extensible-plugin-system>Extensible Plugin System</h4><p>An extensible CapnProto based plugin system allows adding large external integrations via RPC calls.</article><article><h4 id=completely-themable>Completely Themable</h4><p>The web interface is fully customizable, a few themes <a href=https://ayllu-forge.org/config>already</a> exist and more are on the way.</article><article><h4 id=web-1-5>Web 1.5</h4><p>Super fast web frontend with first class support for RSS based project subscriptions. Ayllu loads faster than any other code forge in existence. <em>If it doesn't, it's a bug!</em></article><article><h4 id=static-hosting>Static Hosting</h4><p>Serve static websites directly from a git repository making project sites, documentation, or other assets simple to self-host.</article><article><h4 id=mailing-list-management>Mailing List Management</h4><p>Full featured email based software development workflows and mailing list management based on <a href=https://git.meli-email.org/meli/mailpot>Mailpot 🍯</a>.</article><article><h4 id=much-more>Much More</h4><p>New features planned such as continuous integration, mailing list support, external API, federation, and more.</article></div></main><footer class=page-footer>2024, <a href=/projects/ayllu/blob/main/ATTRIBUTIONS.md>attributions</a></footer></div>
832\ No newline at end of file