~repos /website
git clone https://pyrossh.dev/repos/website.git
木 Personal website of pyrossh. Built with astrojs, shiki, vite.
831f1f7f
—
pyrossh 6 months ago
fix readmes
- astro.config.mjs +1 -0
- bun.lock +20 -42
- infra/main.tf +32 -18
- package.json +9 -7
- server.js +128 -0
- src/components/Commit.astro +2 -1
- src/content.config.ts +22 -12
- src/layouts/Base.astro +1 -1
- src/pages/index.module.css +11 -5
- src/pages/repos/[...slug]/index.astro +5 -16
- src/pages/repos/[...slug]/index.module.css +1 -2
astro.config.mjs
CHANGED
|
@@ -13,6 +13,7 @@ export default defineConfig({
|
|
|
13
13
|
sitemap(),
|
|
14
14
|
],
|
|
15
15
|
experimental: {
|
|
16
|
+
// csp: true,
|
|
16
17
|
fonts: [{
|
|
17
18
|
provider: fontProviders.google(),
|
|
18
19
|
name: "Roboto",
|
bun.lock
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
"name": "my-astro-project-using-bun",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@appzic/astro-reset-css": "^1.2.0",
|
|
8
|
-
"@astrojs/mdx": "^4.
|
|
8
|
+
"@astrojs/mdx": "^4.3.0",
|
|
9
|
-
"@astrojs/rss": "^4.0.
|
|
9
|
+
"@astrojs/rss": "^4.0.12",
|
|
10
|
-
"@astrojs/sitemap": "^3.
|
|
10
|
+
"@astrojs/sitemap": "^3.4.1",
|
|
11
|
-
"astro": "^5.
|
|
11
|
+
"astro": "^5.9.0",
|
|
12
12
|
"simple-git": "^3.27.0",
|
|
13
13
|
"timeago.js": "^4.0.2",
|
|
14
14
|
},
|
|
@@ -22,21 +22,21 @@
|
|
|
22
22
|
"packages": {
|
|
23
23
|
"@appzic/astro-reset-css": ["@appzic/astro-reset-css@1.2.0", "", {}, "sha512-Q5o0gZ4tb2TfRp3bkhbdXzq/wTRHMqRmzjqo5CQcz+V7Jb7WbP5NJGl4s6Lvpef/eseJSoslM8WY6BxAITQv5A=="],
|
|
24
24
|
|
|
25
|
-
"@astrojs/compiler": ["@astrojs/compiler@2.
|
|
25
|
+
"@astrojs/compiler": ["@astrojs/compiler@2.12.0", "", {}, "sha512-7bCjW6tVDpUurQLeKBUN9tZ5kSv5qYrGmcn0sG0IwacL7isR2ZbyyA3AdZ4uxsuUFOS2SlgReTH7wkxO6zpqWA=="],
|
|
26
26
|
|
|
27
27
|
"@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.6.1", "", {}, "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A=="],
|
|
28
28
|
|
|
29
|
-
"@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.
|
|
29
|
+
"@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.2", "", { "dependencies": { "@astrojs/internal-helpers": "0.6.1", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.1.0", "js-yaml": "^4.1.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.2.1", "smol-toml": "^1.3.1", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1", "vfile": "^6.0.3" } }, "sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q=="],
|
|
30
30
|
|
|
31
|
-
"@astrojs/mdx": ["@astrojs/mdx@4.
|
|
31
|
+
"@astrojs/mdx": ["@astrojs/mdx@4.3.0", "", { "dependencies": { "@astrojs/markdown-remark": "6.3.2", "@mdx-js/mdx": "^3.1.0", "acorn": "^8.14.1", "es-module-lexer": "^1.6.0", "estree-util-visit": "^2.0.0", "hast-util-to-html": "^9.0.5", "kleur": "^4.1.5", "rehype-raw": "^7.0.0", "remark-gfm": "^4.0.1", "remark-smartypants": "^3.0.2", "source-map": "^0.7.4", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3" }, "peerDependencies": { "astro": "^5.0.0" } }, "sha512-OGX2KvPeBzjSSKhkCqrUoDMyzFcjKt5nTE5SFw3RdoLf0nrhyCXBQcCyclzWy1+P+XpOamn+p+hm1EhpCRyPxw=="],
|
|
32
32
|
|
|
33
|
-
"@astrojs/prism": ["@astrojs/prism@3.
|
|
33
|
+
"@astrojs/prism": ["@astrojs/prism@3.3.0", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ=="],
|
|
34
34
|
|
|
35
|
-
"@astrojs/rss": ["@astrojs/rss@4.0.
|
|
35
|
+
"@astrojs/rss": ["@astrojs/rss@4.0.12", "", { "dependencies": { "fast-xml-parser": "^5.2.0", "kleur": "^4.1.5" } }, "sha512-O5yyxHuDVb6DQ6VLOrbUVFSm+NpObulPxjs6XT9q3tC+RoKbN4HXMZLpv0LvXd1qdAjzVgJ1NFD+zKHJNDXikw=="],
|
|
36
36
|
|
|
37
|
-
"@astrojs/sitemap": ["@astrojs/sitemap@3.
|
|
37
|
+
"@astrojs/sitemap": ["@astrojs/sitemap@3.4.1", "", { "dependencies": { "sitemap": "^8.0.0", "stream-replace-string": "^2.0.0", "zod": "^3.24.2" } }, "sha512-VjZvr1e4FH6NHyyHXOiQgLiw94LnCVY4v06wN/D0gZKchTMkg71GrAHJz81/huafcmavtLkIv26HnpfDq6/h/Q=="],
|
|
38
38
|
|
|
39
|
-
"@astrojs/telemetry": ["@astrojs/telemetry@3.
|
|
39
|
+
"@astrojs/telemetry": ["@astrojs/telemetry@3.3.0", "", { "dependencies": { "ci-info": "^4.2.0", "debug": "^4.4.0", "dlv": "^1.1.3", "dset": "^3.1.4", "is-docker": "^3.0.0", "is-wsl": "^3.1.0", "which-pm-runs": "^1.1.0" } }, "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ=="],
|
|
40
40
|
|
|
41
41
|
"@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
|
|
42
42
|
|
|
@@ -238,6 +238,8 @@
|
|
|
238
238
|
|
|
239
239
|
"@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="],
|
|
240
240
|
|
|
241
|
+
"@types/fontkit": ["@types/fontkit@2.0.8", "", { "dependencies": { "@types/node": "*" } }, "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew=="],
|
|
242
|
+
|
|
241
243
|
"@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
|
|
242
244
|
|
|
243
245
|
"@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="],
|
|
@@ -278,7 +280,7 @@
|
|
|
278
280
|
|
|
279
281
|
"astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="],
|
|
280
282
|
|
|
281
|
-
"astro": ["astro@5.
|
|
283
|
+
"astro": ["astro@5.9.0", "", { "dependencies": { "@astrojs/compiler": "^2.12.0", "@astrojs/internal-helpers": "0.6.1", "@astrojs/markdown-remark": "6.3.2", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^2.4.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.1.4", "acorn": "^8.14.1", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.2.0", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^1.0.2", "cssesc": "^3.0.0", "debug": "^4.4.0", "deterministic-object-hash": "^2.0.2", "devalue": "^5.1.1", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.6.0", "esbuild": "^0.25.0", "estree-walker": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.3.0", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.1.1", "import-meta-resolve": "^4.1.0", "js-yaml": "^4.1.0", "kleur": "^4.1.5", "magic-string": "^0.30.17", "magicast": "^0.3.5", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.0", "package-manager-detector": "^1.1.0", "picomatch": "^4.0.2", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.1", "shiki": "^3.2.1", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.12", "tsconfck": "^3.1.5", "ultrahtml": "^1.6.0", "unifont": "~0.5.0", "unist-util-visit": "^5.0.0", "unstorage": "^1.15.0", "vfile": "^6.0.3", "vite": "^6.3.4", "vitefu": "^1.0.6", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "yocto-spinner": "^0.2.1", "zod": "^3.24.2", "zod-to-json-schema": "^3.24.5", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.33.3" }, "bin": { "astro": "astro.js" } }, "sha512-AHF7oZDBQRwggHUG0bwBhRQjrDD+vJpCtPd0/GVxDB1hGRV0SQuFWS0UHX5bYczIqFcao1z9o9o0r2rQtHrTMg=="],
|
|
282
284
|
|
|
283
285
|
"axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="],
|
|
284
286
|
|
|
@@ -404,12 +406,14 @@
|
|
|
404
406
|
|
|
405
407
|
"fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],
|
|
406
408
|
|
|
407
|
-
"fast-xml-parser": ["fast-xml-parser@
|
|
409
|
+
"fast-xml-parser": ["fast-xml-parser@5.2.4", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-6mNrAVwHip2nGyPYn6xQJK/znBbIoz6to5VMNysrka1/aoSylbB8vjYgkpaFp05EFojiflVV+3QzXe9Ap3Esng=="],
|
|
408
410
|
|
|
409
411
|
"fdir": ["fdir@6.4.4", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="],
|
|
410
412
|
|
|
411
413
|
"flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="],
|
|
412
414
|
|
|
415
|
+
"fontace": ["fontace@0.3.0", "", { "dependencies": { "@types/fontkit": "^2.0.8", "fontkit": "^2.0.4" } }, "sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg=="],
|
|
416
|
+
|
|
413
417
|
"fontkit": ["fontkit@2.0.4", "", { "dependencies": { "@swc/helpers": "^0.5.12", "brotli": "^1.3.2", "clone": "^2.1.2", "dfa": "^1.2.0", "fast-deep-equal": "^3.1.3", "restructure": "^3.0.0", "tiny-inflate": "^1.0.3", "unicode-properties": "^1.4.0", "unicode-trie": "^2.0.0" } }, "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g=="],
|
|
414
418
|
|
|
415
419
|
"fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="],
|
|
@@ -476,34 +480,10 @@
|
|
|
476
480
|
|
|
477
481
|
"is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="],
|
|
478
482
|
|
|
479
|
-
"jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="],
|
|
480
|
-
|
|
481
483
|
"js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="],
|
|
482
484
|
|
|
483
485
|
"kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="],
|
|
484
486
|
|
|
485
|
-
"lightningcss": ["lightningcss@1.29.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.29.2", "lightningcss-darwin-x64": "1.29.2", "lightningcss-freebsd-x64": "1.29.2", "lightningcss-linux-arm-gnueabihf": "1.29.2", "lightningcss-linux-arm64-gnu": "1.29.2", "lightningcss-linux-arm64-musl": "1.29.2", "lightningcss-linux-x64-gnu": "1.29.2", "lightningcss-linux-x64-musl": "1.29.2", "lightningcss-win32-arm64-msvc": "1.29.2", "lightningcss-win32-x64-msvc": "1.29.2" } }, "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA=="],
|
|
486
|
-
|
|
487
|
-
"lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.29.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA=="],
|
|
488
|
-
|
|
489
|
-
"lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.29.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w=="],
|
|
490
|
-
|
|
491
|
-
"lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.29.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg=="],
|
|
492
|
-
|
|
493
|
-
"lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.29.2", "", { "os": "linux", "cpu": "arm" }, "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg=="],
|
|
494
|
-
|
|
495
|
-
"lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.29.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ=="],
|
|
496
|
-
|
|
497
|
-
"lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.29.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ=="],
|
|
498
|
-
|
|
499
|
-
"lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.29.2", "", { "os": "linux", "cpu": "x64" }, "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg=="],
|
|
500
|
-
|
|
501
|
-
"lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.29.2", "", { "os": "linux", "cpu": "x64" }, "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w=="],
|
|
502
|
-
|
|
503
|
-
"lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.29.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw=="],
|
|
504
|
-
|
|
505
|
-
"lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.29.2", "", { "os": "win32", "cpu": "x64" }, "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA=="],
|
|
506
|
-
|
|
507
487
|
"longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="],
|
|
508
488
|
|
|
509
489
|
"lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
|
|
@@ -764,7 +744,7 @@
|
|
|
764
744
|
|
|
765
745
|
"strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="],
|
|
766
746
|
|
|
767
|
-
"strnum": ["strnum@
|
|
747
|
+
"strnum": ["strnum@2.1.1", "", {}, "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw=="],
|
|
768
748
|
|
|
769
749
|
"style-to-js": ["style-to-js@1.1.16", "", { "dependencies": { "style-to-object": "1.0.8" } }, "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw=="],
|
|
770
750
|
|
|
@@ -806,7 +786,7 @@
|
|
|
806
786
|
|
|
807
787
|
"unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="],
|
|
808
788
|
|
|
809
|
-
"unifont": ["unifont@0.
|
|
789
|
+
"unifont": ["unifont@0.5.0", "", { "dependencies": { "css-tree": "^3.0.0", "ohash": "^2.0.0" } }, "sha512-4DueXMP5Hy4n607sh+vJ+rajoLu778aU3GzqeTCqsD/EaUcvqZT9wPC8kgK6Vjh22ZskrxyRCR71FwNOaYn6jA=="],
|
|
810
790
|
|
|
811
791
|
"unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="],
|
|
812
792
|
|
|
@@ -836,7 +816,7 @@
|
|
|
836
816
|
|
|
837
817
|
"vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="],
|
|
838
818
|
|
|
839
|
-
"vite": ["vite@6.3.
|
|
819
|
+
"vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="],
|
|
840
820
|
|
|
841
821
|
"vitefu": ["vitefu@1.0.6", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" }, "optionalPeers": ["vite"] }, "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA=="],
|
|
842
822
|
|
|
@@ -854,8 +834,6 @@
|
|
|
854
834
|
|
|
855
835
|
"xxhash-wasm": ["xxhash-wasm@1.1.0", "", {}, "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="],
|
|
856
836
|
|
|
857
|
-
"yaml": ["yaml@1.10.2", "", {}, "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="],
|
|
858
|
-
|
|
859
837
|
"yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="],
|
|
860
838
|
|
|
861
839
|
"yocto-queue": ["yocto-queue@1.2.1", "", {}, "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg=="],
|
infra/main.tf
CHANGED
|
@@ -36,23 +36,9 @@ resource "aws_s3_bucket" "website" {
|
|
|
36
36
|
bucket = "pyrossh-website"
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
resource "aws_s3_bucket" "repos_bucket" {
|
|
40
|
-
# bucket = aws_s3_bucket.website.id
|
|
41
|
-
# acl = "private"
|
|
42
|
-
# }
|
|
43
|
-
|
|
44
|
-
# resource "aws_s3_bucket_website_configuration" "s3_bucket" {
|
|
45
|
-
# bucket = aws_s3_bucket.website.id
|
|
46
|
-
|
|
47
|
-
# index_document {
|
|
48
|
-
# suffix = "index.html"
|
|
49
|
-
# }
|
|
50
|
-
|
|
51
|
-
# error_document {
|
|
52
|
-
|
|
40
|
+
bucket = "pyrossh-repos"
|
|
53
|
-
# }
|
|
54
|
-
|
|
55
|
-
|
|
41
|
+
}
|
|
56
42
|
|
|
57
43
|
resource "aws_s3_bucket_public_access_block" "website_public_access" {
|
|
58
44
|
bucket = aws_s3_bucket.website.id
|
|
@@ -83,7 +69,9 @@ data "aws_iam_policy_document" "cloudfront_oac_access" {
|
|
|
83
69
|
|
|
84
70
|
resources = [
|
|
85
71
|
aws_s3_bucket.website.arn,
|
|
86
|
-
"${aws_s3_bucket.website.arn}/*"
|
|
72
|
+
"${aws_s3_bucket.website.arn}/*",
|
|
73
|
+
aws_s3_bucket.repos_bucket,
|
|
74
|
+
"${aws_s3_bucket.repos_bucket.arn}/*"
|
|
87
75
|
]
|
|
88
76
|
|
|
89
77
|
condition {
|
|
@@ -131,6 +119,11 @@ resource "aws_cloudfront_distribution" "s3_distribution" {
|
|
|
131
119
|
origin_id = aws_s3_bucket.website.bucket_regional_domain_name
|
|
132
120
|
origin_access_control_id = aws_cloudfront_origin_access_control.website.id
|
|
133
121
|
}
|
|
122
|
+
origin {
|
|
123
|
+
domain_name = aws_s3_bucket.repos_bucket.bucket_regional_domain_name
|
|
124
|
+
origin_id = aws_s3_bucket.repos_bucket.bucket_regional_domain_name
|
|
125
|
+
origin_access_control_id = aws_cloudfront_origin_access_control.website.id
|
|
126
|
+
}
|
|
134
127
|
enabled = true
|
|
135
128
|
is_ipv6_enabled = true
|
|
136
129
|
aliases = ["pyrossh.dev"]
|
|
@@ -164,6 +157,27 @@ resource "aws_cloudfront_distribution" "s3_distribution" {
|
|
|
164
157
|
function_arn = aws_cloudfront_function.subdirectory_redirector.arn
|
|
165
158
|
}
|
|
166
159
|
}
|
|
160
|
+
|
|
161
|
+
ordered_cache_behavior {
|
|
162
|
+
path_pattern = "/d/*"
|
|
163
|
+
allowed_methods = ["GET", "HEAD"]
|
|
164
|
+
cached_methods = ["GET", "HEAD"]
|
|
165
|
+
target_origin_id = aws_s3_bucket.repos_bucket.bucket_regional_domain_name
|
|
166
|
+
|
|
167
|
+
forwarded_values {
|
|
168
|
+
query_string = false
|
|
169
|
+
cookies {
|
|
170
|
+
forward = "none"
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
min_ttl = 0
|
|
175
|
+
default_ttl = 86400
|
|
176
|
+
max_ttl = 31536000
|
|
177
|
+
compress = true
|
|
178
|
+
viewer_protocol_policy = "redirect-to-https"
|
|
179
|
+
}
|
|
180
|
+
|
|
167
181
|
price_class = "PriceClass_All"
|
|
168
182
|
restrictions {
|
|
169
183
|
geo_restriction {
|
package.json
CHANGED
|
@@ -5,20 +5,22 @@
|
|
|
5
5
|
"scripts": {
|
|
6
6
|
"tauri": "tauri",
|
|
7
7
|
"dev": "astro dev",
|
|
8
|
-
"build": "astro build"
|
|
8
|
+
"build": "astro build",
|
|
9
|
+
"android": "tauri android dev",
|
|
10
|
+
"ios": "tauri ios dev"
|
|
9
11
|
},
|
|
10
12
|
"dependencies": {
|
|
11
13
|
"@appzic/astro-reset-css": "^1.2.0",
|
|
12
|
-
"@astrojs/mdx": "^4.
|
|
14
|
+
"@astrojs/mdx": "^4.3.0",
|
|
13
|
-
"@astrojs/rss": "^4.0.
|
|
15
|
+
"@astrojs/rss": "^4.0.12",
|
|
14
|
-
"@astrojs/sitemap": "^3.
|
|
16
|
+
"@astrojs/sitemap": "^3.4.1",
|
|
15
|
-
"astro": "^5.
|
|
17
|
+
"astro": "^5.9.0",
|
|
16
18
|
"simple-git": "^3.27.0",
|
|
17
19
|
"timeago.js": "^4.0.2"
|
|
18
20
|
},
|
|
19
21
|
"devDependencies": {
|
|
20
|
-
"@tauri-apps/cli": "^2",
|
|
21
22
|
"@playwright/test": "^1.52.0",
|
|
23
|
+
"@tauri-apps/cli": "^2",
|
|
22
24
|
"@types/node": "^22.15.3"
|
|
23
25
|
}
|
|
24
|
-
}
|
|
26
|
+
}
|
server.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Parser } from 'node-sql-parser';
|
|
2
|
+
import { PutObjectCommand, S3Client, GetObjectCommand, paginateListObjectsV2 } from "@aws-sdk/client-s3";
|
|
3
|
+
|
|
4
|
+
const bucketName = "";
|
|
5
|
+
|
|
6
|
+
// import { S3Client } from "bun";
|
|
7
|
+
// const client = new S3Client({
|
|
8
|
+
// region: "ap-south-1",
|
|
9
|
+
// bucket: "",
|
|
10
|
+
// accessKeyId: "",
|
|
11
|
+
// secretAccessKey: "",
|
|
12
|
+
// endpoint: "https://s3express-aps1-az1.ap-south-1.amazonaws.com",
|
|
13
|
+
// });
|
|
14
|
+
// const s3file = client.file("123.json");
|
|
15
|
+
// await s3file.write(JSON.stringify({ hello: "world" }));
|
|
16
|
+
|
|
17
|
+
// const data = await s3file.json()
|
|
18
|
+
// console.log(data);
|
|
19
|
+
|
|
20
|
+
// const client = new S3Client({});
|
|
21
|
+
// const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
|
22
|
+
// for (const i of arr) {
|
|
23
|
+
// await client.send(new PutObjectCommand({
|
|
24
|
+
// Bucket: bucketName,
|
|
25
|
+
// Key: `posts/${i}.json`,
|
|
26
|
+
// ContentType: "application/json",
|
|
27
|
+
// Body: JSON.stringify({ id: `${i}`, data: `hello '${i}' world` }),
|
|
28
|
+
// }));
|
|
29
|
+
// }
|
|
30
|
+
|
|
31
|
+
// If-None-Match: * if it doesn't exist 409 - ConditionalRequestConflict 412 Precondition Failed
|
|
32
|
+
// If-Match: etag checks if etag is same CAS 409 - ConditionalRequestConflict 412 Precondition Failed
|
|
33
|
+
|
|
34
|
+
const getObjectName = (name) => name.split("::")[2];
|
|
35
|
+
|
|
36
|
+
const client = new S3Client({});
|
|
37
|
+
|
|
38
|
+
const getAllS3Files = async (bucketName, tableName) => {
|
|
39
|
+
const totalFiles = [];
|
|
40
|
+
for await (const data of paginateListObjectsV2({ client }, { Bucket: bucketName, Prefix: `${tableName}/` })) {
|
|
41
|
+
totalFiles.push(...(data.Contents ?? []));
|
|
42
|
+
}
|
|
43
|
+
return totalFiles;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const sql = async (query) => {
|
|
47
|
+
const parser = new Parser();
|
|
48
|
+
const { tableList, columnList, ast } = parser.parse(query, {
|
|
49
|
+
database: "Hive",
|
|
50
|
+
// type: 'table',
|
|
51
|
+
parseOptions: {
|
|
52
|
+
includeLocations: true
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
// console.log(ast);
|
|
56
|
+
// console.log(JSON.stringify(ast, 2, 2));
|
|
57
|
+
// console.log("tableName", tableName);
|
|
58
|
+
const tableName = getObjectName(tableList[0]);
|
|
59
|
+
// if (ast.type === "select") {
|
|
60
|
+
// }
|
|
61
|
+
const contents = await getAllS3Files(bucketName, tableName)
|
|
62
|
+
return await Promise.all(contents.map((r) => {
|
|
63
|
+
return client.send(new GetObjectCommand({ Bucket: bucketName, Key: r.Key, }))
|
|
64
|
+
.then((rr) => rr.Body.transformToString())
|
|
65
|
+
.then(JSON.parse)
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const rows = await sql('SELECT * FROM posts LIMIT 10');
|
|
70
|
+
// const rows = await sql("INSERT INTO posts(id, data) VALUES ('11', 'body');");
|
|
71
|
+
console.log(rows);
|
|
72
|
+
|
|
73
|
+
// const rows = await sql(`
|
|
74
|
+
// CREATE TABLE struct_test(
|
|
75
|
+
// property_id INT
|
|
76
|
+
// )
|
|
77
|
+
// `);
|
|
78
|
+
|
|
79
|
+
// console.log(rows);
|
|
80
|
+
// const resp = await parseQuery("SELECT * FROM POSTS");
|
|
81
|
+
// resp.stmts[0].stmt.SelectStmt.fromClause
|
|
82
|
+
// console.log("stmts", stmts);
|
|
83
|
+
|
|
84
|
+
// Data Definition Language (DDL): CREATE, ALTER, DROP
|
|
85
|
+
// Data Manipulation Language (DML): INSERT, UPDATE, DELETE, MERGE
|
|
86
|
+
// Data Query Language (DQL): SELECT
|
|
87
|
+
// Data Control Language (DCL): GRANT, REVOKE
|
|
88
|
+
|
|
89
|
+
// TABLES/VIEWS/INDEX
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
//
|
|
94
|
+
// import { gluesql } from 'gluesql';
|
|
95
|
+
|
|
96
|
+
// const db = gluesql();
|
|
97
|
+
|
|
98
|
+
// async function run() {
|
|
99
|
+
// await db.query(`
|
|
100
|
+
// CREATE TABLE User (id INTEGER, name TEXT);
|
|
101
|
+
// CREATE TABLE Device (name TEXT, userId INTEGER);
|
|
102
|
+
// INSERT INTO User VALUES
|
|
103
|
+
// (1, 'glue'), (2, 'sticky'), (3, 'watt');
|
|
104
|
+
// INSERT INTO Device VALUES
|
|
105
|
+
// ('Phone', 1), ('Mic', 1), ('Monitor', 3),
|
|
106
|
+
// ('Mouse', 2), ('Touchpad', 2);
|
|
107
|
+
// `);
|
|
108
|
+
|
|
109
|
+
// let sql;
|
|
110
|
+
|
|
111
|
+
// sql = 'SHOW TABLES;';
|
|
112
|
+
// const [{ tables }] = await db.query(sql);
|
|
113
|
+
// console.log(`\n[Query]\n${sql}`);
|
|
114
|
+
// console.table(tables);
|
|
115
|
+
|
|
116
|
+
// sql = `
|
|
117
|
+
// SELECT
|
|
118
|
+
// u.name as user,
|
|
119
|
+
// d.name as device
|
|
120
|
+
// FROM User u
|
|
121
|
+
// JOIN Device d ON u.id = d.userId
|
|
122
|
+
// `.trim().replace(/[ ]{4}/g, '');
|
|
123
|
+
// const [{ rows }] = await db.query(sql);
|
|
124
|
+
// console.log(`\n[Query]\n${sql}`);
|
|
125
|
+
// console.table(rows);
|
|
126
|
+
// }
|
|
127
|
+
|
|
128
|
+
// run();
|
src/components/Commit.astro
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
import { format } from "timeago.js";
|
|
3
3
|
|
|
4
|
-
const { title, author_name, hash, date, message } = Astro.props;
|
|
4
|
+
const { title, author_name, hash, date, message, refs } = Astro.props;
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<div class="event">
|
|
@@ -11,6 +11,7 @@ const { title, author_name, hash, date, message } = Astro.props;
|
|
|
11
11
|
</a>
|
|
12
12
|
— {author_name}
|
|
13
13
|
<small class="pull-right">
|
|
14
|
+
<h3>{refs}</h3>
|
|
14
15
|
<a href={`/repos/${title}/logs?from=??`} rel="nofollow">
|
|
15
16
|
<span title={date}>
|
|
16
17
|
{format(date)}
|
src/content.config.ts
CHANGED
|
@@ -1,24 +1,38 @@
|
|
|
1
|
-
import fs from "fs";
|
|
1
|
+
import fs from "fs/promises";
|
|
2
2
|
import { simpleGit } from "simple-git";
|
|
3
3
|
import { glob } from 'astro/loaders';
|
|
4
4
|
import { defineCollection, z } from 'astro:content';
|
|
5
5
|
import { REPOS } from './consts';
|
|
6
6
|
|
|
7
|
+
|
|
8
|
+
// https://pyrossh.dev/downloads/rp2350/refs/heads/master/repo.zip
|
|
9
|
+
// https://pyrossh-repos.s3.ap-south-1.amazonaws.com/rp2350/refs/heads/master/repo.zip
|
|
10
|
+
|
|
11
|
+
async function checkFileExists(filePath: string) {
|
|
12
|
+
try {
|
|
13
|
+
await fs.stat(filePath);
|
|
14
|
+
return true; // File exists
|
|
15
|
+
} catch (error) {
|
|
16
|
+
return false; // File does not exist or cannot be accessed
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
7
20
|
export const collections = {
|
|
8
21
|
repos: defineCollection({
|
|
9
22
|
loader: {
|
|
10
23
|
name: "loader",
|
|
11
|
-
load: async (
|
|
24
|
+
load: async ({ renderMarkdown, store }) => {
|
|
12
25
|
for (const r of REPOS) {
|
|
13
26
|
const repoPath = `/Users/pyrossh/Code/pyrossh/${r.title}`;
|
|
14
27
|
const readmePath = repoPath + "/README.md";
|
|
15
28
|
console.log("loading repo " + repoPath)
|
|
16
29
|
const git = simpleGit(repoPath)
|
|
17
|
-
const commits = await git.log();
|
|
18
|
-
const tags = await git.tag();
|
|
19
|
-
const
|
|
30
|
+
const commits = await git.log(["--branches", "--tags"]);
|
|
20
|
-
|
|
31
|
+
const readmeContent = await checkFileExists(readmePath) ? await renderMarkdown(await fs.readFile(readmePath, 'utf-8')) : {
|
|
32
|
+
html: '',
|
|
33
|
+
metadata: {},
|
|
34
|
+
}
|
|
21
|
-
|
|
35
|
+
store.set({
|
|
22
36
|
id: r.title,
|
|
23
37
|
data: {
|
|
24
38
|
title: r.title,
|
|
@@ -31,12 +45,8 @@ export const collections = {
|
|
|
31
45
|
date: item.date,
|
|
32
46
|
refs: item.refs,
|
|
33
47
|
})),
|
|
34
|
-
branches: branches.all,
|
|
35
|
-
tags: tags,
|
|
36
48
|
},
|
|
37
|
-
rendered:
|
|
49
|
+
rendered: readmeContent,
|
|
38
|
-
html: '', // fs.existsSync(readmePath) ? await (await import(readmePath)).compiledContent() : "",
|
|
39
|
-
}
|
|
40
50
|
});
|
|
41
51
|
}
|
|
42
52
|
},
|
src/layouts/Base.astro
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
+
import "./Base.css"; // Note: This has to be first always
|
|
2
3
|
import { ClientRouter } from "astro:transitions";
|
|
3
4
|
import { Font } from "astro:assets";
|
|
4
5
|
import ResetCSS from "@appzic/astro-reset-css";
|
|
5
6
|
import Header from "@/components/Header.astro";
|
|
6
7
|
import Footer from "@/components/Footer.astro";
|
|
7
8
|
import Wrapper from "@/components/Wrapper.astro";
|
|
8
|
-
import "./Base.css";
|
|
9
9
|
|
|
10
10
|
interface Props {
|
|
11
11
|
title: string;
|
src/pages/index.module.css
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
h2 {
|
|
2
|
-
font-size:
|
|
2
|
+
font-size: 16pt;
|
|
3
3
|
font-weight: 600;
|
|
4
4
|
}
|
|
5
5
|
|
|
@@ -35,13 +35,19 @@ section {
|
|
|
35
35
|
|
|
36
36
|
.title {
|
|
37
37
|
font-size: 1.875rem;
|
|
38
|
-
/* text-3xl */
|
|
39
38
|
line-height: 2.25rem;
|
|
40
|
-
/* text-3xl */
|
|
41
39
|
font-weight: 700;
|
|
42
|
-
/* font-bold */
|
|
43
40
|
margin-bottom: 1rem;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.firstSection {
|
|
44
|
+
display: flex;
|
|
44
|
-
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.firstPara {
|
|
49
|
+
display: flex;
|
|
50
|
+
flex-direction: row;
|
|
45
51
|
}
|
|
46
52
|
|
|
47
53
|
.linkUnderline {
|
src/pages/repos/[...slug]/index.astro
CHANGED
|
@@ -39,30 +39,19 @@ const { Content } = await render(Astro.props);
|
|
|
39
39
|
</h3>
|
|
40
40
|
<h3>
|
|
41
41
|
wget
|
|
42
|
-
<a
|
|
42
|
+
<a href={`https://pyrossh.dev/zips/${title}.zip`}>
|
|
43
|
+
https://pyrossh.dev/zips/{title}.zip
|
|
43
|
-
|
|
44
|
+
<!-- https://pyrossh-repos.s3.ap-south-1.amazonaws.com/rp2350/refs/heads/master/repo.zip -->
|
|
44
|
-
>
|
|
45
|
-
https://pyrossh-repos.s3.ap-south-1.amazonaws.com/{
|
|
46
|
-
title
|
|
47
|
-
}/refs/heads/master/repo.zip
|
|
48
45
|
</a>
|
|
49
46
|
</h3>
|
|
50
47
|
</div>
|
|
51
48
|
<div class={styles.nav}>
|
|
52
49
|
<div>
|
|
53
|
-
<a href={`${title}/commits`}>Commits
|
|
50
|
+
<a href={`/repos/${title}/commits`}>Commits</a>
|
|
54
51
|
</div>
|
|
55
52
|
<div>|</div>
|
|
56
53
|
<div>
|
|
57
|
-
<a class="nav-link" href={`/${title}/files`}>Files</a>
|
|
54
|
+
<a class="nav-link" href={`/repos/${title}/files`}>Files</a>
|
|
58
|
-
</div>
|
|
59
|
-
<div>|</div>
|
|
60
|
-
<div>
|
|
61
|
-
<a class="nav-link" href={`/${title}/branches`}>Branches</a>
|
|
62
|
-
</div>
|
|
63
|
-
<div>|</div>
|
|
64
|
-
<div>
|
|
65
|
-
<a class="nav-link" href={`/${title}/tags`}>Tags</a>
|
|
66
55
|
</div>
|
|
67
56
|
</div>
|
|
68
57
|
<div class={styles.summary}>
|
src/pages/repos/[...slug]/index.module.css
CHANGED
|
@@ -57,9 +57,8 @@
|
|
|
57
57
|
a {
|
|
58
58
|
font-size: 12pt;
|
|
59
59
|
padding-right: 0.5rem;
|
|
60
|
-
color: #
|
|
60
|
+
color: #3395ff;
|
|
61
61
|
cursor: pointer;
|
|
62
|
-
color: #ced4da;
|
|
63
62
|
}
|
|
64
63
|
}
|
|
65
64
|
|