From 37ef37be2861eefffe95c83f831da70cf8131967 Mon Sep 17 00:00:00 2001 From: AKP Date: Tue, 18 Jun 2024 19:42:57 +0100 Subject: [PATCH] Initial commit --- .gitignore | 1 + README.md | 3 ++ dist.zip | Bin 0 -> 1283 bytes generate.py | 96 +++++++++++++++++++++++++++++++++++++++++++++++++ index.html | 44 +++++++++++++++++++++++ poetry.lock | 76 +++++++++++++++++++++++++++++++++++++++ pyproject.toml | 16 +++++++++ run.sh | 11 ++++++ styles.css | 52 +++++++++++++++++++++++++++ vanity.yml | 11 ++++++ 10 files changed, 310 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 dist.zip create mode 100644 generate.py create mode 100644 index.html create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 run.sh create mode 100644 styles.css create mode 100644 vanity.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f44b5ee --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +_dist diff --git a/README.md b/README.md new file mode 100644 index 0000000..d30428e --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# go-import-paths + +Small, static site generator for Go vanity imports. diff --git a/dist.zip b/dist.zip new file mode 100644 index 0000000000000000000000000000000000000000..719e3597398f8b5e37f34d990bdc7a2332d678c3 GIT binary patch literal 1283 zcmWIWW@h1H0D;qUE=7PDP=bv?h9NmEJ+(+bG=!6ZS@ud{nj8?9R&X;gvbZ>>9UNf&MK49mjstmRj0_9{aQ&HiDXA5D86~+naFal$p_$YgV9Vd+z;pMnsQS5p zblZq4XIQwww&d+hI@yJU3x38<$KYji9X~FJz|20Z$CyCDIO5Wo% zk^g}6q$LKLxhis7C#V^DOb}JI;=7!&C{yL2Q8owf(SuBLr%u|#fAuWifyW)6^cU7m z5!Os_%aHlzyfXW>M#Pl=>dcBuPAyyTcS&>1F1cM!T5rss`*}A1?e|ZPp8jyt`Lg>~ zqSf>77n>DdQFQG%AGYt&fy9R!R=P>@eg0jM^||~|qK@```G3C|Q3GT(FW>VtCI*IT zRt5$xV1N)86ulvV`L`7W>dvp61#M z!o=om_t3Mhe8%sCJrgf=mFVS*TEHC z2boueSyUWIOE(sso|wN@s$6f=ZB=u}r6GaG%BxKDAGYlgDEQab@P1k4X`2HN4lX(K zY}JZ~m%5af9C%uJZ1%Mx9d*Nn$JtDoLOFPE*(*Cr-((hL-cmBbnwe{LnBBqPW+thf z+cntUB^&bO6fLkkT==kCly6aEcaY*$<(03y3eI((N(-F3VSUZy)QvH5*K2xYx}UoC z@Z^`?ku;gGuYHe4_P3~@vd=pe{t4|`?fvMkZcKEW^{F3nr>14?^>SMM^2qEsQ?&y( zwG>lB7h65Lvw6Z?v3JkDhq#oUJ-|D>9_IhXMoM6$vzgFiepY^^iu;|g(bLCuH zCheNWYMap<>-fu9UP}3QlFEe}%OX^J4fmeoe7XJW6}3YJ{&7!)`M)Z7#|r%V-(qSW ze7MhKntjmUN!Fo{BqJTyEOGp4q1&O~Zo9KOaN=7pGrs~~`w1uPR7el$A3%|gx##F>hkn~+Tn1R73^d8}+e>lv7V@Dq^!4J^eN F7yy;A_ly7l literal 0 HcmV?d00001 diff --git a/generate.py b/generate.py new file mode 100644 index 0000000..86467a4 --- /dev/null +++ b/generate.py @@ -0,0 +1,96 @@ +import yaml +import dominate +from dominate.tags import * +import os +import copy +from pathlib import Path + + +def load_yaml(data: str) -> any: + return yaml.load(data, Loader=yaml.CFullLoader) + + +def main(): + with open("vanity.yml") as f: + conf = load_yaml(f.read()) + + assert "host" in conf + assert "paths" in conf + + conf["paths"] = { + sanitise_path(p): preprocess_path_object(conf["paths"][p]) + for p in conf["paths"] + } + + print(conf["paths"]) + + output_path = Path("_dist") + + if not os.path.exists(output_path): + os.makedirs(output_path) + + with open(output_path / "index.html", "w") as f: + f.write(generate_index(conf)) + + for path in conf["paths"]: + fs_path = output_path / path.removeprefix("/") + os.makedirs(fs_path) + with open(fs_path / "index.html", "w") as f: + f.write(generate_page(conf, path, conf["paths"][path])) + + +def generate_index(conf): + doc = dominate.document(title=conf["host"]) + + with doc.head: + style(open("styles.css").read()) + + with doc.add(div(cls="projects")): + for path in conf.get("paths", {}): + path_details = conf["paths"][path] + + with div(cls="project", id=path): + h2( + span(conf["host"], cls="secondary"), path + ) # path always leads with a / + if "byline" in path_details: + p(path_details["byline"]) + a("Docs", cls="button", href=f"https://pkg.go.dev/{conf['host']}{path}") + a("Source", cls="button", href=path_details["repo"]) + + return str(doc) + + +def generate_page(conf, path, obj): + doc = dominate.document(title=conf["host"] + path) + + # https://pkg.go.dev/cmd/go#hdr-Remote_import_paths + # https://github.com/golang/gddo/wiki/Source-Code-Links + + with doc.head: + meta( + name="go-import", content=f"{conf['host']}{path} {obj['vcs']} {obj['repo']}" + ) + if "display" in obj: + meta(name="go-source", content=obj["display"]) + meta(http_equiv="refresh", content=f"0;url=//{conf['host']}#{path}") + + return str(doc) + + +def sanitise_path(path): + if not path.startswith("/"): + path = "/" + path + return path + + +def preprocess_path_object(obj): + obj = copy.copy(obj) + assert "repo" in obj + if "vcs" not in obj: + obj["vcs"] = "git" + return obj + + +if __name__ == "__main__": + main() diff --git a/index.html b/index.html new file mode 100644 index 0000000..5090a36 --- /dev/null +++ b/index.html @@ -0,0 +1,44 @@ + + + + go.akpain.net + + + +
+
+

go.akpain.net/cfger

+

A basic configuration loading system

+ Docs + Source +
+
+

go.akpain.net/cfger

+

A basic configuration loading system

+ Docs + Source +
+
+

go.akpain.net/cfger

+

A basic configuration loading system

+ Docs + Source +
+
+

go.akpain.net/cfger

+

A basic configuration loading system

+ Docs + Source +
+
+

go.akpain.net/cfger

+

A basic configuration loading system

+ Docs + Source +
+
+ + + diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..4d23d7f --- /dev/null +++ b/poetry.lock @@ -0,0 +1,76 @@ +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "dominate" +version = "2.9.1" +description = "Dominate is a Python library for creating and manipulating HTML documents using an elegant DOM API." +optional = false +python-versions = ">=3.4" +files = [ + {file = "dominate-2.9.1-py2.py3-none-any.whl", hash = "sha256:cb7b6b79d33b15ae0a6e87856b984879927c7c2ebb29522df4c75b28ffd9b989"}, + {file = "dominate-2.9.1.tar.gz", hash = "sha256:558284687d9b8aae1904e3d6051ad132dd4a8c0cf551b37ea4e7e42a31d19dc4"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10" +content-hash = "27a780fb0e8417940bb9b1bc39dd05f7ef12268ef43c04ad23f56a3200e91ab6" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..1e4fd17 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,16 @@ +[tool.poetry] +name = "go-import-paths" +version = "0.1.0" +description = "" +authors = ["Your Name "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.10" +dominate = "^2.9.1" +pyyaml = "^6.0.1" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..8fec9af --- /dev/null +++ b/run.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +set -ex + +rm -r _dist || true +poetry run python3 generate.py +( + rm dist.zip || true + cd _dist + zip -r ../dist.zip . +) \ No newline at end of file diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..38c7512 --- /dev/null +++ b/styles.css @@ -0,0 +1,52 @@ +:root { + --theme: #df3062; + --background: #e8e8e8; +} + +html { + margin: 0; + font-family: sans-serif; + min-height: calc(100% - 6px); + border: 3px solid var(--theme); +} + +h1, h2, h3, h4, h5, h6 { + margin: 0; + margin-bottom: 1rem; +} + +body { + margin: 5em 12em; +} + +.project { + padding: 20px; +} + +.project:target { + background-color: #df30623d; +} + +.secondary { + color: grey; +} + +.button { + padding: 4px 5px; + /* border-radius: 4px; */ + border: 1px solid var(--theme); + background-color: #df30624d; + text-decoration: none; + color: black; + + /* These are here to stop any layout reflow when hovered over and the side and bottom borders increase to 3px */ + margin-bottom: 2px; + margin-right: 2px; +} + +.button:hover { + border-bottom: 3px solid var(--theme); + border-right: 3px solid var(--theme); + margin-bottom: 0; + margin-right: 0; +} \ No newline at end of file diff --git a/vanity.yml b/vanity.yml new file mode 100644 index 0000000..2ad6073 --- /dev/null +++ b/vanity.yml @@ -0,0 +1,11 @@ +# This file follows the format of this tool with the addition of the "byline" field of the path object +# https://github.com/GoogleCloudPlatform/govanityurls + +host: go.akpain.net + +paths: + /cfger: + repo: https://git.tdpain.net/pkg/cfger + byline: "A basic configuration loading system" + vcs: git + display: "https://git.tdpain.net/pkg/cfger/-/blob/main{/dir}/{file}#L{line}"