Content-addressed version deploy system for Diffuse elements.diffuse.sh

feat: initial commit

+4
.gitmodules
··· 1 + [submodule "diffuse"] 2 + path = diffuse 3 + url = git@tangled.org:tokono.ma/diffuse 4 + branch = v4
+41
.zed/settings.json
··· 1 + { 2 + "lsp": { 3 + "deno": { 4 + "settings": { 5 + "deno": { 6 + "enable": true 7 + } 8 + } 9 + }, 10 + "json-language-server": { 11 + "settings": { 12 + "json": { 13 + "schemas": [ 14 + { 15 + "fileMatch": ["deno.json"], 16 + "url": "https://raw.githubusercontent.com/denoland/deno/refs/heads/main/cli/schemas/config-file.v1.json" 17 + }, 18 + { 19 + "fileMatch": ["package.json"], 20 + "url": "http://json.schemastore.org/package" 21 + } 22 + ] 23 + } 24 + } 25 + } 26 + }, 27 + "languages": { 28 + "JavaScript": { 29 + "language_servers": ["deno", "!typescript-language-server", "!vtsls", "!eslint"], 30 + "formatter": "language_server" 31 + }, 32 + "TypeScript": { 33 + "language_servers": ["deno", "!typescript-language-server", "!vtsls", "!eslint"], 34 + "formatter": "language_server" 35 + }, 36 + "TSX": { 37 + "language_servers": ["deno", "!typescript-language-server", "!vtsls", "!eslint"], 38 + "formatter": "language_server" 39 + } 40 + } 41 + }
+6
README.md
··· 1 + **Content-addressed version deploy system for Diffuse**. Allows the user to pick a deployed version of Diffuse. 2 + 3 + ## How to use 4 + 5 + 1. Install `deno` and `fclones` 6 + 2. `deno run build`
+1
artifacts/artifacts.json
··· 1 + {}
+1
artifacts/versions.json
··· 1 + {}
+15
deno.jsonc
··· 1 + { 2 + "imports": { 3 + "@atikayda/kjson": "jsr:@atikayda/kjson@^1.2.2", 4 + "@std/fs": "jsr:@std/fs@^1.0.19", 5 + "@std/path": "jsr:@std/path@^1.1.2", 6 + "ipfs-car": "npm:ipfs-car@^3.1.0", 7 + }, 8 + "tasks": { 9 + "add-artifact": "deno run -A tasks/add-artifact.ts", 10 + "build": "deno run add-artifact", 11 + }, 12 + "compilerOptions": { 13 + "checkJs": true, 14 + }, 15 + }
+408
deno.lock
··· 1 + { 2 + "version": "5", 3 + "specifiers": { 4 + "jsr:@atikayda/kjson@^1.2.2": "1.2.2", 5 + "jsr:@std/fs@^1.0.19": "1.0.19", 6 + "jsr:@std/internal@^1.0.10": "1.0.12", 7 + "jsr:@std/internal@^1.0.9": "1.0.12", 8 + "jsr:@std/path@^1.1.1": "1.1.2", 9 + "jsr:@std/path@^1.1.2": "1.1.2", 10 + "npm:ipfs-car@^3.1.0": "3.1.0", 11 + "npm:proposal-decimal@20250613.0.0": "20250613.0.0" 12 + }, 13 + "jsr": { 14 + "@atikayda/kjson@1.2.2": { 15 + "integrity": "d291dd37f3359be9d743d9f30560a94e8266b4d87183c46274df36e072a75ed2", 16 + "dependencies": [ 17 + "npm:proposal-decimal" 18 + ] 19 + }, 20 + "@std/fs@1.0.19": { 21 + "integrity": "051968c2b1eae4d2ea9f79a08a3845740ef6af10356aff43d3e2ef11ed09fb06", 22 + "dependencies": [ 23 + "jsr:@std/internal@^1.0.9", 24 + "jsr:@std/path@^1.1.1" 25 + ] 26 + }, 27 + "@std/internal@1.0.12": { 28 + "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" 29 + }, 30 + "@std/path@1.1.2": { 31 + "integrity": "c0b13b97dfe06546d5e16bf3966b1cadf92e1cc83e56ba5476ad8b498d9e3038", 32 + "dependencies": [ 33 + "jsr:@std/internal@^1.0.10" 34 + ] 35 + } 36 + }, 37 + "npm": { 38 + "@ipld/car@5.4.2": { 39 + "integrity": "sha512-gfyrJvePyXnh2Fbj8mPg4JYvEZ3izhk8C9WgAle7xIYbrJNSXmNQ6BxAls8Gof97vvGbCROdxbTWRmHJtTCbcg==", 40 + "dependencies": [ 41 + "@ipld/dag-cbor", 42 + "cborg", 43 + "multiformats", 44 + "varint" 45 + ] 46 + }, 47 + "@ipld/dag-cbor@9.2.5": { 48 + "integrity": "sha512-84wSr4jv30biui7endhobYhXBQzQE4c/wdoWlFrKcfiwH+ofaPg8fwsM8okX9cOzkkrsAsNdDyH3ou+kiLquwQ==", 49 + "dependencies": [ 50 + "cborg", 51 + "multiformats" 52 + ] 53 + }, 54 + "@ipld/dag-json@10.2.5": { 55 + "integrity": "sha512-Q4Fr3IBDEN8gkpgNefynJ4U/ZO5Kwr7WSUMBDbZx0c37t0+IwQCTM9yJh8l5L4SRFjm31MuHwniZ/kM+P7GQ3Q==", 56 + "dependencies": [ 57 + "cborg", 58 + "multiformats" 59 + ] 60 + }, 61 + "@ipld/dag-pb@4.1.5": { 62 + "integrity": "sha512-w4PZ2yPqvNmlAir7/2hsCRMqny1EY5jj26iZcSgxREJexmbAc2FI21jp26MqiNdfgAxvkCnf2N/TJI18GaDNwA==", 63 + "dependencies": [ 64 + "multiformats" 65 + ] 66 + }, 67 + "@ipld/unixfs@3.0.0": { 68 + "integrity": "sha512-Tj3/BPOlnemcZQ2ETIZAO8hqAs9KNzWyX5J9+JCL9jDwvYwjxeYjqJ3v+9DusNvTBmJhZnGVP6ijUHrsuOLp+g==", 69 + "dependencies": [ 70 + "@ipld/dag-pb", 71 + "@multiformats/murmur3", 72 + "@perma/map", 73 + "actor", 74 + "multiformats", 75 + "protobufjs", 76 + "rabin-rs" 77 + ] 78 + }, 79 + "@multiformats/blake2@2.0.2": { 80 + "integrity": "sha512-AOWu6Tyuk5UoT5m4faB6ntVnPB8EmuD6rn18s4cCgHNEGgsamT8GdvjP9DYjzFHQVaP/0L3CaKqWQqJlXx9ecw==", 81 + "dependencies": [ 82 + "blakejs", 83 + "multiformats" 84 + ] 85 + }, 86 + "@multiformats/murmur3@2.1.8": { 87 + "integrity": "sha512-6vId1C46ra3R1sbJUOFCZnsUIveR9oF20yhPmAFxPm0JfrX3/ZRCgP3YDrBzlGoEppOXnA9czHeYc0T9mB6hbA==", 88 + "dependencies": [ 89 + "multiformats", 90 + "murmurhash3js-revisited" 91 + ] 92 + }, 93 + "@multiformats/sha3@3.0.2": { 94 + "integrity": "sha512-fBxODTXa1sOWYB9q6GSFe2HYSVwMEdnPa7c7FgNhr/rMFQ2HGtwmRppTm317HSpGSTUkoTvyKQDNcteJEGU+bg==", 95 + "dependencies": [ 96 + "js-sha3", 97 + "multiformats" 98 + ] 99 + }, 100 + "@perma/map@1.0.3": { 101 + "integrity": "sha512-Bf5njk0fnJGTFE2ETntq0N1oJ6YdCPIpTDn3R3KYZJQdeYSOCNL7mBrFlGnbqav8YQhJA/p81pvHINX9vAtHkQ==", 102 + "dependencies": [ 103 + "@multiformats/murmur3", 104 + "murmurhash3js-revisited" 105 + ] 106 + }, 107 + "@protobufjs/aspromise@1.1.2": { 108 + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" 109 + }, 110 + "@protobufjs/base64@1.1.2": { 111 + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 112 + }, 113 + "@protobufjs/codegen@2.0.4": { 114 + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 115 + }, 116 + "@protobufjs/eventemitter@1.1.0": { 117 + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" 118 + }, 119 + "@protobufjs/fetch@1.1.0": { 120 + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", 121 + "dependencies": [ 122 + "@protobufjs/aspromise", 123 + "@protobufjs/inquire" 124 + ] 125 + }, 126 + "@protobufjs/float@1.0.2": { 127 + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" 128 + }, 129 + "@protobufjs/inquire@1.1.0": { 130 + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" 131 + }, 132 + "@protobufjs/path@1.1.2": { 133 + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" 134 + }, 135 + "@protobufjs/pool@1.1.0": { 136 + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" 137 + }, 138 + "@protobufjs/utf8@1.1.0": { 139 + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" 140 + }, 141 + "@types/node@24.10.1": { 142 + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", 143 + "dependencies": [ 144 + "undici-types" 145 + ] 146 + }, 147 + "@web3-storage/car-block-validator@1.2.2": { 148 + "integrity": "sha512-lR9l+ZszhTid5HfZE8ohnGf2RJp2kaBOnoejmsACs3iTNiy+3K09dnPm8MhgBE9RCIgPBKM0CCWXO9l+I6jrKA==", 149 + "dependencies": [ 150 + "@multiformats/blake2", 151 + "@multiformats/murmur3", 152 + "@multiformats/sha3", 153 + "multiformats", 154 + "uint8arrays" 155 + ] 156 + }, 157 + "abort-error@1.0.1": { 158 + "integrity": "sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg==" 159 + }, 160 + "actor@2.3.1": { 161 + "integrity": "sha512-ST/3wnvcP2tKDXnum7nLCLXm+/rsf8vPocXH2Fre6D8FQwNkGDd4JEitBlXj007VQJfiGYRQvXqwOBZVi+JtRg==" 162 + }, 163 + "blakejs@1.2.1": { 164 + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" 165 + }, 166 + "cborg@4.3.0": { 167 + "integrity": "sha512-vOXo1pB4mdeBw3LbpoynQlZNw/H3kZVHLtPYlp8kFMreL/2YfT54F70BM1s3iDoCtQ+3C9QmiRF4rfCSSTlhBw==", 168 + "bin": true 169 + }, 170 + "eventemitter3@5.0.1": { 171 + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" 172 + }, 173 + "files-from-path@1.1.4": { 174 + "integrity": "sha512-huzBO8vS15VrEC0ej62GtYCtPUNEsTdHIN3aFBjCUZyFQTr+bW4cpwvPMZssM/r+9/hOh4ikUiJ3L+9kZKBMag==", 175 + "dependencies": [ 176 + "graceful-fs" 177 + ] 178 + }, 179 + "graceful-fs@4.2.11": { 180 + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 181 + }, 182 + "hamt-sharding@3.0.6": { 183 + "integrity": "sha512-nZeamxfymIWLpVcAN0CRrb7uVq3hCOGj9IcL6NMA6VVCVWqj+h9Jo/SmaWuS92AEDf1thmHsM5D5c70hM3j2Tg==", 184 + "dependencies": [ 185 + "sparse-array", 186 + "uint8arrays" 187 + ] 188 + }, 189 + "interface-blockstore@5.3.2": { 190 + "integrity": "sha512-oA9Pjkxun/JHAsZrYEyKX+EoPjLciTzidE7wipLc/3YoHDjzsnXRJzAzFJXNUvogtY4g7hIwxArx8+WKJs2RIg==", 191 + "dependencies": [ 192 + "interface-store", 193 + "multiformats" 194 + ] 195 + }, 196 + "interface-store@6.0.3": { 197 + "integrity": "sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA==" 198 + }, 199 + "ipfs-car@3.1.0": { 200 + "integrity": "sha512-0131+UNxk3+2baxK7qmlwJcl/SEI51v/Avx91LdP9WfSfh9s+/qkGS3ukwtmeG7YIyMLvTruRXPvHiYkz/ejVQ==", 201 + "dependencies": [ 202 + "@ipld/car", 203 + "@ipld/dag-cbor", 204 + "@ipld/dag-json", 205 + "@ipld/dag-pb", 206 + "@ipld/unixfs", 207 + "@web3-storage/car-block-validator", 208 + "files-from-path", 209 + "ipfs-unixfs-exporter", 210 + "multiformats", 211 + "sade", 212 + "varint" 213 + ], 214 + "bin": true 215 + }, 216 + "ipfs-unixfs-exporter@13.7.3": { 217 + "integrity": "sha512-sTFjAEnsPu5irh9rvT1j5mNf7nXnW78x5SJrCIrNZb1UqkXQtNX81RjAnTBShUtZ5ujSOc/yrC9Az8il8NVkKQ==", 218 + "dependencies": [ 219 + "@ipld/dag-cbor", 220 + "@ipld/dag-json", 221 + "@ipld/dag-pb", 222 + "@multiformats/murmur3", 223 + "hamt-sharding", 224 + "interface-blockstore", 225 + "ipfs-unixfs", 226 + "it-filter", 227 + "it-last", 228 + "it-map", 229 + "it-parallel", 230 + "it-pipe", 231 + "it-pushable", 232 + "multiformats", 233 + "p-queue", 234 + "progress-events" 235 + ] 236 + }, 237 + "ipfs-unixfs@11.2.5": { 238 + "integrity": "sha512-uasYJ0GLPbViaTFsOLnL9YPjX5VmhnqtWRriogAHOe4ApmIi9VAOFBzgDHsUW2ub4pEa/EysbtWk126g2vkU/g==", 239 + "dependencies": [ 240 + "protons-runtime", 241 + "uint8arraylist" 242 + ] 243 + }, 244 + "it-filter@3.1.4": { 245 + "integrity": "sha512-80kWEKgiFEa4fEYD3mwf2uygo1dTQ5Y5midKtL89iXyjinruA/sNXl6iFkTcdNedydjvIsFhWLiqRPQP4fAwWQ==", 246 + "dependencies": [ 247 + "it-peekable" 248 + ] 249 + }, 250 + "it-last@3.0.9": { 251 + "integrity": "sha512-AtfUEnGDBHBEwa1LjrpGHsJMzJAWDipD6zilvhakzJcm+BCvNX8zlX2BsHClHJLLTrsY4lY9JUjc+TQV4W7m1w==" 252 + }, 253 + "it-map@3.1.4": { 254 + "integrity": "sha512-QB9PYQdE9fUfpVFYfSxBIyvKynUCgblb143c+ktTK6ZuKSKkp7iH58uYFzagqcJ5HcqIfn1xbfaralHWam+3fg==", 255 + "dependencies": [ 256 + "it-peekable" 257 + ] 258 + }, 259 + "it-merge@3.0.12": { 260 + "integrity": "sha512-nnnFSUxKlkZVZD7c0jYw6rDxCcAQYcMsFj27thf7KkDhpj0EA0g9KHPxbFzHuDoc6US2EPS/MtplkNj8sbCx4Q==", 261 + "dependencies": [ 262 + "it-queueless-pushable" 263 + ] 264 + }, 265 + "it-parallel@3.0.13": { 266 + "integrity": "sha512-85PPJ/O8q97Vj9wmDTSBBXEkattwfQGruXitIzrh0RLPso6RHfiVqkuTqBNufYYtB1x6PSkh0cwvjmMIkFEPHA==", 267 + "dependencies": [ 268 + "p-defer" 269 + ] 270 + }, 271 + "it-peekable@3.0.8": { 272 + "integrity": "sha512-7IDBQKSp/dtBxXV3Fj0v3qM1jftJ9y9XrWLRIuU1X6RdKqWiN60syNwP0fiDxZD97b8SYM58dD3uklIk1TTQAw==" 273 + }, 274 + "it-pipe@3.0.1": { 275 + "integrity": "sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA==", 276 + "dependencies": [ 277 + "it-merge", 278 + "it-pushable", 279 + "it-stream-types" 280 + ] 281 + }, 282 + "it-pushable@3.2.3": { 283 + "integrity": "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==", 284 + "dependencies": [ 285 + "p-defer" 286 + ] 287 + }, 288 + "it-queueless-pushable@2.0.2": { 289 + "integrity": "sha512-2BqIt7XvDdgEgudLAdJkdseAwbVSBc0yAd8yPVHrll4eBuJPWIj9+8C3OIxzEKwhswLtd3bi+yLrzgw9gCyxMA==", 290 + "dependencies": [ 291 + "abort-error", 292 + "p-defer", 293 + "race-signal" 294 + ] 295 + }, 296 + "it-stream-types@2.0.2": { 297 + "integrity": "sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww==" 298 + }, 299 + "js-sha3@0.9.3": { 300 + "integrity": "sha512-BcJPCQeLg6WjEx3FE591wVAevlli8lxsxm9/FzV4HXkV49TmBH38Yvrpce6fjbADGMKFrBMGTqrVz3qPIZ88Gg==" 301 + }, 302 + "long@5.3.2": { 303 + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==" 304 + }, 305 + "mri@1.2.0": { 306 + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" 307 + }, 308 + "multiformats@13.4.1": { 309 + "integrity": "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==" 310 + }, 311 + "murmurhash3js-revisited@3.0.0": { 312 + "integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==" 313 + }, 314 + "p-defer@4.0.1": { 315 + "integrity": "sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A==" 316 + }, 317 + "p-queue@8.1.1": { 318 + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", 319 + "dependencies": [ 320 + "eventemitter3", 321 + "p-timeout" 322 + ] 323 + }, 324 + "p-timeout@6.1.4": { 325 + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==" 326 + }, 327 + "progress-events@1.0.1": { 328 + "integrity": "sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw==" 329 + }, 330 + "proposal-decimal@20250613.0.0": { 331 + "integrity": "sha512-cLO4I9fFHl4khF7x8F3/MUJzO/2eXvRVALzcHzNzc2pJKdNFcpk4EWW+W29V0qBQulZ6IkO58oMPU8BrsZIjag==" 332 + }, 333 + "protobufjs@7.5.4": { 334 + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", 335 + "dependencies": [ 336 + "@protobufjs/aspromise", 337 + "@protobufjs/base64", 338 + "@protobufjs/codegen", 339 + "@protobufjs/eventemitter", 340 + "@protobufjs/fetch", 341 + "@protobufjs/float", 342 + "@protobufjs/inquire", 343 + "@protobufjs/path", 344 + "@protobufjs/pool", 345 + "@protobufjs/utf8", 346 + "@types/node", 347 + "long" 348 + ], 349 + "scripts": true 350 + }, 351 + "protons-runtime@5.6.0": { 352 + "integrity": "sha512-/Kde+sB9DsMFrddJT/UZWe6XqvL7SL5dbag/DBCElFKhkwDj7XKt53S+mzLyaDP5OqS0wXjV5SA572uWDaT0Hg==", 353 + "dependencies": [ 354 + "uint8-varint", 355 + "uint8arraylist", 356 + "uint8arrays" 357 + ] 358 + }, 359 + "rabin-rs@2.1.0": { 360 + "integrity": "sha512-5y72gAXPzIBsAMHcpxZP8eMDuDT98qMP1BqSDHRbHkJJXEgWIN1lA47LxUqzsK6jknOJtgfkQr9v+7qMlFDm6g==" 361 + }, 362 + "race-signal@1.1.3": { 363 + "integrity": "sha512-Mt2NznMgepLfORijhQMncE26IhkmjEphig+/1fKC0OtaKwys/gpvpmswSjoN01SS+VO951mj0L4VIDXdXsjnfA==" 364 + }, 365 + "sade@1.8.1": { 366 + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 367 + "dependencies": [ 368 + "mri" 369 + ] 370 + }, 371 + "sparse-array@1.3.2": { 372 + "integrity": "sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==" 373 + }, 374 + "uint8-varint@2.0.4": { 375 + "integrity": "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==", 376 + "dependencies": [ 377 + "uint8arraylist", 378 + "uint8arrays" 379 + ] 380 + }, 381 + "uint8arraylist@2.4.8": { 382 + "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", 383 + "dependencies": [ 384 + "uint8arrays" 385 + ] 386 + }, 387 + "uint8arrays@5.1.0": { 388 + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", 389 + "dependencies": [ 390 + "multiformats" 391 + ] 392 + }, 393 + "undici-types@7.16.0": { 394 + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==" 395 + }, 396 + "varint@6.0.0": { 397 + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" 398 + } 399 + }, 400 + "workspace": { 401 + "dependencies": [ 402 + "jsr:@atikayda/kjson@^1.2.2", 403 + "jsr:@std/fs@^1.0.19", 404 + "jsr:@std/path@^1.1.2", 405 + "npm:ipfs-car@^3.1.0" 406 + ] 407 + } 408 + }
+156
tasks/add-artifact.ts
··· 1 + import * as Fs from "@std/fs"; 2 + import * as Path from "@std/path"; 3 + import { kJSON } from "@atikayda/kjson"; 4 + 5 + import artifactsJson from "../artifacts/artifacts.json" with { type: "json" }; 6 + import versionsJson from "../artifacts/versions.json" with { type: "json" }; 7 + 8 + export type Artifact = { cid: string; version: string }; 9 + 10 + const artifacts: Record<string, Artifact> = artifactsJson as any; 11 + const versions: Record<string, Artifact> = versionsJson as any; 12 + 13 + //////////////////////////////////////////// 14 + // ESTABLISH VERSION 15 + //////////////////////////////////////////// 16 + 17 + const version = kJSON.parse( 18 + Deno.readTextFileSync( 19 + Path.join("diffuse", "deno.jsonc"), 20 + ), 21 + ).version; 22 + 23 + console.log("🎵 Diffuse version:", version); 24 + 25 + //////////////////////////////////////////// 26 + // CHECK IF VERSION ALREADY EXISTS 27 + //////////////////////////////////////////// 28 + 29 + if (versions[version]) { 30 + console.log( 31 + "✅️ Version already present as artifact:", 32 + versions[version].cid, 33 + ); 34 + Deno.exit(); 35 + } 36 + 37 + //////////////////////////////////////////// 38 + // BUILD DIFFUSE 39 + //////////////////////////////////////////// 40 + 41 + Deno.chdir("diffuse"); 42 + 43 + execSync("deno", "run", "build"); 44 + 45 + Deno.chdir(".."); 46 + 47 + const BUILD = Path.join("diffuse", "_site"); 48 + 49 + //////////////////////////////////////////// 50 + // TEMP DIR 51 + //////////////////////////////////////////// 52 + 53 + const TMP_DIR = Deno.makeTempDirSync(); 54 + const TMP_CAR = Path.join(TMP_DIR, "diffuse.car"); 55 + 56 + //////////////////////////////////////////// 57 + // MAKE CAR 58 + //////////////////////////////////////////// 59 + 60 + const carCmd = execSync( 61 + "deno", 62 + "run", 63 + "-A", 64 + "ipfs-car", 65 + "pack", 66 + BUILD, 67 + "--no-wrap", 68 + "--output", 69 + TMP_CAR, 70 + ); 71 + 72 + const cid = utf8String(carCmd.stdout); 73 + 74 + Deno.removeSync(TMP_DIR, { recursive: true }); 75 + 76 + if (!cid) throw new Error("CID result missing"); 77 + console.log("💎 Artifact CID:", cid); 78 + 79 + //////////////////////////////////////////// 80 + // CHECK IF ARTIFACT ALREADY EXISTS 81 + //////////////////////////////////////////// 82 + 83 + if (artifacts[cid]) { 84 + console.log( 85 + "✅️ Artifact already present as version:", 86 + artifacts[cid].version, 87 + ); 88 + Deno.exit(); 89 + } 90 + 91 + //////////////////////////////////////////// 92 + // ADD ARTIFACT 93 + //////////////////////////////////////////// 94 + 95 + Fs.copySync(BUILD, Path.join("artifacts", cid), { overwrite: true }); 96 + 97 + //////////////////////////////////////////// 98 + // ADD TO INDEXES 99 + //////////////////////////////////////////// 100 + 101 + const artifact: Artifact = { 102 + cid, 103 + version, 104 + }; 105 + 106 + artifacts[cid] = artifact; 107 + versions[version] = artifact; 108 + 109 + Deno.writeTextFileSync( 110 + "artifacts/artifacts.json", 111 + JSON.stringify(artifacts, null, 2), 112 + ); 113 + 114 + Deno.writeTextFileSync( 115 + "artifacts/versions.json", 116 + JSON.stringify(versions, null, 2), 117 + ); 118 + 119 + //////////////////////////////////////////// 120 + // DE-DUPLICATE 121 + //////////////////////////////////////////// 122 + 123 + const dedupGroupCmd = new Deno.Command("fclones", { 124 + args: ["group", "artifacts"], 125 + stderr: "piped", 126 + stdout: "piped", 127 + }); 128 + 129 + const dedupLinkCmd = new Deno.Command("fclones", { 130 + args: ["link", "--dry-run", "--soft"], 131 + stderr: "piped", 132 + stdin: "piped", 133 + stdout: "piped", 134 + }); 135 + 136 + const linkProcess = dedupLinkCmd.spawn(); 137 + 138 + dedupGroupCmd.spawn().stdout.pipeTo( 139 + linkProcess.stdin, 140 + ); 141 + 142 + //////////////////////////////////////////// 143 + // 🛠️ 144 + //////////////////////////////////////////// 145 + 146 + function execSync(...args: string[]) { 147 + const cmd = new Deno.Command(args[0], { 148 + args: args.slice(1), 149 + }); 150 + 151 + return cmd.outputSync(); 152 + } 153 + 154 + function utf8String(bytes: Uint8Array) { 155 + return new TextDecoder().decode(bytes); 156 + }