From 388c0ef3d09623dd10a4f44f8f610244c3337e4c Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Mon, 26 Aug 2024 14:25:27 +0200 Subject: [PATCH] website: add history page of the GNU Boot git repositories. While this doesn't show the complete history of GNU Boot, it is at least useful for fixing missing copyrights inside copyright headers. Also I tried adding the first tarball releases of Libreboot, before it was in git, inside the same git-history.dot and it turned out to be way too messy as some arrows ended up mostly in the same place making it impossible to distinguish which arrow went where without using color or other ways of distinguishing them. However the textual version of the tarball history turned out to be easier to read/understand so we used that. Signed-off-by: Denis 'GNUtoo' Carikli neox: minor fix in the commit message Acked-by: Adrien 'neox' Bourmault --- website/Makefile.am | 14 ++- website/history/git-history.dot | 133 ++++++++++++++++++++++++++++ website/history/git-history.jpg | Bin 0 -> 565741 bytes website/lighttpd.conf.tmpl | 1 + website/pages/docs/history/index.md | 103 +++++++++++++++++++++ website/pages/docs/index.md | 1 + 6 files changed, 248 insertions(+), 4 deletions(-) create mode 100644 website/history/git-history.dot create mode 100644 website/history/git-history.jpg create mode 100644 website/pages/docs/history/index.md diff --git a/website/Makefile.am b/website/Makefile.am index d69ab9e..37384d5 100644 --- a/website/Makefile.am +++ b/website/Makefile.am @@ -27,6 +27,9 @@ endif index.html: index.html.tmpl sed -e "s#WEBSITE_PREFIX#$(WEBSITE_PREFIX)#g" "$^" > "$@" +history/git-history.jpg: history/git-history.dot + dot -T jpg history/git-history.dot > "$@" + site.cfg: site.cfg.tmpl sed -e "s#WEBSITE_PREFIX#$(WEBSITE_PREFIX)#g" "$^" > "$@" @@ -55,7 +58,7 @@ build: site.cfg endif if WANT_GUIX -check: build website.tar.gz index.html +check: build website.tar.gz index.html history/git-history.jpg rm -rf site/ mkdir -p site/$(WEBSITE_PREFIX) tar xf website.tar.gz -C site/$(WEBSITE_PREFIX) @@ -77,7 +80,7 @@ check: build website.tar.gz index.html ./check.sh --website-prefix $(WEBSITE_PREFIX) \ --tarball website.tar.gz else -check: build website.tar.gz index.html +check: build website.tar.gz index.html history/git-history.jpg rm -rf site/ mkdir -p site/$(WEBSITE_PREFIX) tar xf website.tar.gz -C site/$(WEBSITE_PREFIX) @@ -137,7 +140,7 @@ publish: website.tar.gz deploy/ \ $(RSYNC_DESTINATION)/ -website.tar.gz: build index.html +website.tar.gz: build index.html history/git-history.jpg tar \ --exclude-vcs \ --format=gnu \ @@ -147,4 +150,7 @@ website.tar.gz: build index.html website.tar.gz \ untitled/www/lbwww/site \ index.html \ - --transform="s#untitled/www/lbwww/site#web#" + history/git-history.dot \ + history/git-history.jpg \ + --transform="s#untitled/www/lbwww/site#web#" \ + --transform="s#^history/#web/history/#" diff --git a/website/history/git-history.dot b/website/history/git-history.dot new file mode 100644 index 0000000..3f8db08 --- /dev/null +++ b/website/history/git-history.dot @@ -0,0 +1,133 @@ +# Copyright (C) 2024 Denis 'GNUtoo' Carikli +# +# Permission is granted to copy, distribute and/or modify this document +# under the terms of the GNU Free Documentation License, Version 1.3 +# or any later version published by the Free Software Foundation; +# with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. +# A copy of the license is included in the website/COPYING directory. + +digraph { + subgraph cluster_osboot { + label="project current name: osboot + freedom status: includes nonfree sofware + status: abandonned + website: https://osboot.org"; + subgraph cluster_osbmk { + label="https://notabug.org/osboot/osbmk git repository"; + shape="box"; + "osbmk: first commit" [label="first commit: df76c3e Fork Libreboot 20160907 build system. Large parts have been re-written."]; + "osbmk: libre branch" [label="libre branch"]; + "osbmk: master branch" [label="master"]; + + "osbmk: first commit" -> "osbmk: libre branch"; + "osbmk: first commit" -> "osbmk: master branch"; + } + } + subgraph cluster_librebootorg { + label="project current name: libreboot + freedom status: includes nonfree sofware since 20220710 + status: ongoing + website: https://libreboot.org"; + + subgraph cluster_old_libreboot { + label="https://notabug.org/libreboot/obsolete-repository-preserved-for-historical-purposes git repository"; + "old_libreboot: last commit" [label="7242f030 add README.md talking about how this repository is obsolete"]; + "149273c6" [label="149273c6 www/downloads: remove cyberbits http:// mirror. they already have https://"]; + "112003a5" [label="112003a5 Paper build system initial import into Libreboot"]; + "old_libreboot: tag r20160907" [label="tag r20160907"]; + "old_libreboot: first commit" [label="first commit: cee90ae0 Libreboot release 6 beta 1."]; + + "old_libreboot: first commit" -> "old_libreboot: tag r20160907"; + "old_libreboot: tag r20160907" -> "112003a5"; + "112003a5" -> "149273c6"; + "149273c6" -> "old_libreboot: last commit"; + + "old_libreboot: tag r20160907" -> "osbmk: first commit" [label="removed history"]; + + } + + subgraph cluster_lbmk { + label="https://codeberg.org/libreboot/lbmk git repository"; + "osbmk: libre branch" -> "lbmk: first commit" [label="removed history"]; + "lbmk: first commit" [label="first commit: 89517ed6 libreboot!"]; + "lbmk: master" [label="master"]; + "lbmk: tag 20220710" [label="tag 20220710"]; + + "lbmk: first commit" -> "lbmk: tag 20220710" -> "lbmk: master"; + } + subgraph cluster_lbwww { + label="https://codeberg.org/libreboot/lbwww git repository"; + # I don't know if the first commit was made from scratch or if + # its content comes from somewhere else as the provenance of the + # work is not mentionned in the initial commit message and that + # often Leah reuses previous code to create the first commit. + "lbwww: before first commit" [label="?"]; + "lbwww: first commit" [label="first commit: 501e77d libreboot site"]; + "lbwww: master" [label="master"]; + "lbwww: tag 20211122" [label="tag 20211122"]; + + "lbwww: before first commit" -> "lbwww: first commit"; + "lbwww: first commit" -> "lbwww: tag 20211122" -> "lbwww: master"; + } + + + subgraph cluster_lbwww_img { + label="https://codeberg.org/libreboot/lbwww-img git repository"; + "lbwww-img: first commit" [label="first commit: 55760a6 images from old Libreboot git repo: 149273c6742aeed14ec1aaca019f552cfb109457"]; + "283ce03" [label="283ce03 wrong bad image"]; + "lbwww-img: master" [label="master"]; + + "149273c6" -> "lbwww-img: first commit" [label="removed history"]; + "lbwww-img: first commit" -> "283ce03" -> "lbwww-img: master"; + } + } + subgraph cluster_librebootat { + label="project current name: Genuine libreboot + freedom status: 100% free software + status: replaced by GNU Boot + website: https://libreboot.at"; + + subgraph cluster_libreboot_at_lbwww { + label="https://git.sr.ht/~libreboot/lbwww git repository (doesn't exit anymore)."; + "libreboot.at lbwww: first commit" [label="73c505b Add project announcement"]; + "libreboot.at lbwww: last commit" [label="efdfbca Order maintainers names alphabetically"]; + "lbwww: tag 20211122" -> "libreboot.at lbwww: first commit" [label="kept history"]; + "libreboot.at lbwww: first commit" -> "libreboot.at lbwww: last commit"; + } + } + subgraph cluster_gnuboot { + label="project current name: GNU Boot + freedom status: 100% free software + status: ongoing + website: https://gnu.org/software/gnuboot"; + subgraph cluster_acpica_mirror { + label="https://git.savannah.gnu.org/cgit/gnuboot/acpica.org-mirror.git git repository"; + "acpica.org-mirror: first commit" [label="first commit"]; + "acpica.org-mirror: main" [label="main"]; + + "acpica.org-mirror: first commit" -> "acpica.org-mirror: main"; + } + subgraph cluster_presentations { + label="https://git.savannah.gnu.org/cgit/gnuboot/presentations.git git repository"; + "presentations: first commit" [label="first commit"]; + "presentations: main" [label="main"]; + + "presentations: first commit" -> "presentations: main"; + } + subgraph cluster_gnuboot { + label="https://git.savannah.gnu.org/cgit/gnuboot.git git repository"; + "first-commit" [label="bf17993 Continue Libreboot under the GNU project"]; + "gnuboot: main" [label="main"]; + "b42fd22" [label="b42fd22 Merge the website into GNU Boot"]; + "2e12909" [label="2e12909 Add GNU Boot project announcement"]; + "54c6ae4" [label="54c6ae4 Merge the documentation/website pictures into GNU Boot"]; + + + "lbmk: tag 20220710" -> "first-commit" [label="kept history"]; + "first-commit" -> "b42fd22" -> "54c6ae4" -> "gnuboot: main"; + "libreboot.at lbwww: last commit" -> "2e12909" [label="kept history"]; + "2e12909" -> "b42fd22" [label="kept history"]; + "283ce03" -> "54c6ae4" [label="kept history"]; + } + } +} diff --git a/website/history/git-history.jpg b/website/history/git-history.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53ea9a57b3b57ebe913b25ec760262cec2b34a57 GIT binary patch literal 565741 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