feat(commands): nixpkgs

+4 -2
.env.example
··· 1 - DISCORD_TOKEN=a 2 - GUILD_ID=b 1 + DISCORD_TOKEN=discord token 2 + GUILD_ID=guild id 3 + NIXPKGS=path to nixpkgs 4 + GITHUB_TOKEN=github token
+181 -295
Cargo.lock
··· 122 122 dependencies = [ 123 123 "proc-macro2", 124 124 "quote", 125 - "syn 2.0.66", 125 + "syn 2.0.67", 126 126 ] 127 127 128 128 [[package]] ··· 194 194 "bottomify", 195 195 "color-eyre", 196 196 "dotenv", 197 + "git-tracker", 197 198 "humantime", 198 199 "kittysay", 199 200 "poise", 200 201 "rand 0.8.5", 201 202 "regex", 202 - "reqwest 0.12.4", 203 + "reqwest 0.12.5", 204 + "serde", 203 205 "serenity", 204 206 "tokio", 205 207 ] ··· 285 287 version = "1.0.99" 286 288 source = "registry+https://github.com/rust-lang/crates.io-index" 287 289 checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" 290 + dependencies = [ 291 + "jobserver", 292 + "libc", 293 + "once_cell", 294 + ] 288 295 289 296 [[package]] 290 297 name = "cfg-if" ··· 360 367 "heck", 361 368 "proc-macro2", 362 369 "quote", 363 - "syn 2.0.66", 370 + "syn 2.0.67", 364 371 ] 365 372 366 373 [[package]] ··· 531 538 "proc-macro2", 532 539 "quote", 533 540 "strsim 0.11.1", 534 - "syn 2.0.66", 541 + "syn 2.0.67", 535 542 ] 536 543 537 544 [[package]] ··· 542 549 dependencies = [ 543 550 "darling_core", 544 551 "quote", 545 - "syn 2.0.66", 552 + "syn 2.0.67", 546 553 ] 547 554 548 555 [[package]] ··· 594 601 dependencies = [ 595 602 "block-buffer", 596 603 "crypto-common", 597 - ] 598 - 599 - [[package]] 600 - name = "displaydoc" 601 - version = "0.2.4" 602 - source = "registry+https://github.com/rust-lang/crates.io-index" 603 - checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" 604 - dependencies = [ 605 - "proc-macro2", 606 - "quote", 607 - "syn 2.0.66", 608 604 ] 609 605 610 606 [[package]] ··· 753 749 dependencies = [ 754 750 "proc-macro2", 755 751 "quote", 756 - "syn 2.0.66", 752 + "syn 2.0.67", 757 753 ] 758 754 759 755 [[package]] ··· 834 830 checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" 835 831 836 832 [[package]] 833 + name = "git-tracker" 834 + version = "0.2.0" 835 + source = "git+https://github.com/getchoo/nixpkgs-tracker-bot#b602b445cc4accbbc28c054c900cca85aa17b119" 836 + dependencies = [ 837 + "git2", 838 + "log", 839 + "thiserror", 840 + ] 841 + 842 + [[package]] 843 + name = "git2" 844 + version = "0.18.3" 845 + source = "registry+https://github.com/rust-lang/crates.io-index" 846 + checksum = "232e6a7bfe35766bf715e55a88b39a700596c0ccfd88cd3680b4cdb40d66ef70" 847 + dependencies = [ 848 + "bitflags 2.5.0", 849 + "libc", 850 + "libgit2-sys", 851 + "log", 852 + "url", 853 + ] 854 + 855 + [[package]] 837 856 name = "glob" 838 857 version = "0.3.1" 839 858 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 962 981 963 982 [[package]] 964 983 name = "httparse" 965 - version = "1.9.2" 984 + version = "1.9.4" 966 985 source = "registry+https://github.com/rust-lang/crates.io-index" 967 - checksum = "9f3935c160d00ac752e09787e6e6bfc26494c2183cc922f1bc678a60d4733bc2" 986 + checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" 968 987 969 988 [[package]] 970 989 name = "httpdate" ··· 1037 1056 ] 1038 1057 1039 1058 [[package]] 1059 + name = "hyper-rustls" 1060 + version = "0.27.2" 1061 + source = "registry+https://github.com/rust-lang/crates.io-index" 1062 + checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" 1063 + dependencies = [ 1064 + "futures-util", 1065 + "http 1.1.0", 1066 + "hyper 1.3.1", 1067 + "hyper-util", 1068 + "rustls 0.23.10", 1069 + "rustls-pki-types", 1070 + "tokio", 1071 + "tokio-rustls 0.26.0", 1072 + "tower-service", 1073 + ] 1074 + 1075 + [[package]] 1040 1076 name = "hyper-tls" 1041 1077 version = "0.6.0" 1042 1078 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1096 1132 ] 1097 1133 1098 1134 [[package]] 1099 - name = "icu_collections" 1100 - version = "1.5.0" 1101 - source = "registry+https://github.com/rust-lang/crates.io-index" 1102 - checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 1103 - dependencies = [ 1104 - "displaydoc", 1105 - "yoke", 1106 - "zerofrom", 1107 - "zerovec", 1108 - ] 1109 - 1110 - [[package]] 1111 - name = "icu_locid" 1112 - version = "1.5.0" 1113 - source = "registry+https://github.com/rust-lang/crates.io-index" 1114 - checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 1115 - dependencies = [ 1116 - "displaydoc", 1117 - "litemap", 1118 - "tinystr", 1119 - "writeable", 1120 - "zerovec", 1121 - ] 1122 - 1123 - [[package]] 1124 - name = "icu_locid_transform" 1125 - version = "1.5.0" 1126 - source = "registry+https://github.com/rust-lang/crates.io-index" 1127 - checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 1128 - dependencies = [ 1129 - "displaydoc", 1130 - "icu_locid", 1131 - "icu_locid_transform_data", 1132 - "icu_provider", 1133 - "tinystr", 1134 - "zerovec", 1135 - ] 1136 - 1137 - [[package]] 1138 - name = "icu_locid_transform_data" 1139 - version = "1.5.0" 1140 - source = "registry+https://github.com/rust-lang/crates.io-index" 1141 - checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 1142 - 1143 - [[package]] 1144 - name = "icu_normalizer" 1145 - version = "1.5.0" 1146 - source = "registry+https://github.com/rust-lang/crates.io-index" 1147 - checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 1148 - dependencies = [ 1149 - "displaydoc", 1150 - "icu_collections", 1151 - "icu_normalizer_data", 1152 - "icu_properties", 1153 - "icu_provider", 1154 - "smallvec", 1155 - "utf16_iter", 1156 - "utf8_iter", 1157 - "write16", 1158 - "zerovec", 1159 - ] 1160 - 1161 - [[package]] 1162 - name = "icu_normalizer_data" 1163 - version = "1.5.0" 1164 - source = "registry+https://github.com/rust-lang/crates.io-index" 1165 - checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 1166 - 1167 - [[package]] 1168 - name = "icu_properties" 1169 - version = "1.5.0" 1170 - source = "registry+https://github.com/rust-lang/crates.io-index" 1171 - checksum = "1f8ac670d7422d7f76b32e17a5db556510825b29ec9154f235977c9caba61036" 1172 - dependencies = [ 1173 - "displaydoc", 1174 - "icu_collections", 1175 - "icu_locid_transform", 1176 - "icu_properties_data", 1177 - "icu_provider", 1178 - "tinystr", 1179 - "zerovec", 1180 - ] 1181 - 1182 - [[package]] 1183 - name = "icu_properties_data" 1184 - version = "1.5.0" 1185 - source = "registry+https://github.com/rust-lang/crates.io-index" 1186 - checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 1187 - 1188 - [[package]] 1189 - name = "icu_provider" 1190 - version = "1.5.0" 1191 - source = "registry+https://github.com/rust-lang/crates.io-index" 1192 - checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 1193 - dependencies = [ 1194 - "displaydoc", 1195 - "icu_locid", 1196 - "icu_provider_macros", 1197 - "stable_deref_trait", 1198 - "tinystr", 1199 - "writeable", 1200 - "yoke", 1201 - "zerofrom", 1202 - "zerovec", 1203 - ] 1204 - 1205 - [[package]] 1206 - name = "icu_provider_macros" 1207 - version = "1.5.0" 1208 - source = "registry+https://github.com/rust-lang/crates.io-index" 1209 - checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 1210 - dependencies = [ 1211 - "proc-macro2", 1212 - "quote", 1213 - "syn 2.0.66", 1214 - ] 1215 - 1216 - [[package]] 1217 1135 name = "ident_case" 1218 1136 version = "1.0.1" 1219 1137 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1221 1139 1222 1140 [[package]] 1223 1141 name = "idna" 1224 - version = "1.0.0" 1142 + version = "0.5.0" 1225 1143 source = "registry+https://github.com/rust-lang/crates.io-index" 1226 - checksum = "4716a3a0933a1d01c2f72450e89596eb51dd34ef3c211ccd875acdf1f8fe47ed" 1144 + checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 1227 1145 dependencies = [ 1228 - "icu_normalizer", 1229 - "icu_properties", 1230 - "smallvec", 1231 - "utf8_iter", 1146 + "unicode-bidi", 1147 + "unicode-normalization", 1232 1148 ] 1233 1149 1234 1150 [[package]] ··· 1266 1182 checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 1267 1183 1268 1184 [[package]] 1185 + name = "jobserver" 1186 + version = "0.1.31" 1187 + source = "registry+https://github.com/rust-lang/crates.io-index" 1188 + checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" 1189 + dependencies = [ 1190 + "libc", 1191 + ] 1192 + 1193 + [[package]] 1269 1194 name = "js-sys" 1270 1195 version = "0.3.69" 1271 1196 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1291 1216 1292 1217 [[package]] 1293 1218 name = "lazy_static" 1294 - version = "1.4.0" 1219 + version = "1.5.0" 1295 1220 source = "registry+https://github.com/rust-lang/crates.io-index" 1296 - checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1221 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1297 1222 1298 1223 [[package]] 1299 1224 name = "levenshtein" ··· 1308 1233 checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" 1309 1234 1310 1235 [[package]] 1311 - name = "linux-raw-sys" 1312 - version = "0.4.14" 1236 + name = "libgit2-sys" 1237 + version = "0.16.2+1.7.2" 1313 1238 source = "registry+https://github.com/rust-lang/crates.io-index" 1314 - checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 1239 + checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8" 1240 + dependencies = [ 1241 + "cc", 1242 + "libc", 1243 + "libz-sys", 1244 + "pkg-config", 1245 + ] 1315 1246 1316 1247 [[package]] 1317 - name = "litemap" 1318 - version = "0.7.3" 1248 + name = "libz-sys" 1249 + version = "1.1.18" 1319 1250 source = "registry+https://github.com/rust-lang/crates.io-index" 1320 - checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" 1251 + checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" 1252 + dependencies = [ 1253 + "cc", 1254 + "libc", 1255 + "pkg-config", 1256 + "vcpkg", 1257 + ] 1258 + 1259 + [[package]] 1260 + name = "linux-raw-sys" 1261 + version = "0.4.14" 1262 + source = "registry+https://github.com/rust-lang/crates.io-index" 1263 + checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 1321 1264 1322 1265 [[package]] 1323 1266 name = "lock_api" ··· 1337 1280 1338 1281 [[package]] 1339 1282 name = "memchr" 1340 - version = "2.7.2" 1283 + version = "2.7.4" 1341 1284 source = "registry+https://github.com/rust-lang/crates.io-index" 1342 - checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" 1285 + checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1343 1286 1344 1287 [[package]] 1345 1288 name = "mime" ··· 1374 1317 1375 1318 [[package]] 1376 1319 name = "miniz_oxide" 1377 - version = "0.7.3" 1320 + version = "0.7.4" 1378 1321 source = "registry+https://github.com/rust-lang/crates.io-index" 1379 - checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" 1322 + checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" 1380 1323 dependencies = [ 1381 1324 "adler", 1382 1325 ] ··· 1473 1416 dependencies = [ 1474 1417 "proc-macro2", 1475 1418 "quote", 1476 - "syn 2.0.66", 1419 + "syn 2.0.67", 1477 1420 ] 1478 1421 1479 1422 [[package]] ··· 1584 1527 dependencies = [ 1585 1528 "proc-macro2", 1586 1529 "quote", 1587 - "syn 2.0.66", 1530 + "syn 2.0.67", 1588 1531 ] 1589 1532 1590 1533 [[package]] ··· 1631 1574 "darling", 1632 1575 "proc-macro2", 1633 1576 "quote", 1634 - "syn 2.0.66", 1577 + "syn 2.0.67", 1635 1578 ] 1636 1579 1637 1580 [[package]] ··· 1648 1591 1649 1592 [[package]] 1650 1593 name = "proc-macro2" 1651 - version = "1.0.85" 1594 + version = "1.0.86" 1652 1595 source = "registry+https://github.com/rust-lang/crates.io-index" 1653 - checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" 1596 + checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" 1654 1597 dependencies = [ 1655 1598 "unicode-ident", 1656 1599 ] ··· 1758 1701 1759 1702 [[package]] 1760 1703 name = "redox_syscall" 1761 - version = "0.5.1" 1704 + version = "0.5.2" 1762 1705 source = "registry+https://github.com/rust-lang/crates.io-index" 1763 - checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" 1706 + checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" 1764 1707 dependencies = [ 1765 1708 "bitflags 2.5.0", 1766 1709 ] ··· 1809 1752 "http 0.2.12", 1810 1753 "http-body 0.4.6", 1811 1754 "hyper 0.14.29", 1812 - "hyper-rustls", 1755 + "hyper-rustls 0.24.2", 1813 1756 "ipnet", 1814 1757 "js-sys", 1815 1758 "log", ··· 1823 1766 "serde", 1824 1767 "serde_json", 1825 1768 "serde_urlencoded", 1826 - "sync_wrapper", 1769 + "sync_wrapper 0.1.2", 1827 1770 "system-configuration", 1828 1771 "tokio", 1829 1772 "tokio-rustls 0.24.1", ··· 1840 1783 1841 1784 [[package]] 1842 1785 name = "reqwest" 1843 - version = "0.12.4" 1786 + version = "0.12.5" 1844 1787 source = "registry+https://github.com/rust-lang/crates.io-index" 1845 - checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" 1788 + checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" 1846 1789 dependencies = [ 1847 1790 "base64 0.22.1", 1848 1791 "bytes", ··· 1854 1797 "http-body 1.0.0", 1855 1798 "http-body-util", 1856 1799 "hyper 1.3.1", 1800 + "hyper-rustls 0.27.2", 1857 1801 "hyper-tls", 1858 1802 "hyper-util", 1859 1803 "ipnet", ··· 1868 1812 "serde", 1869 1813 "serde_json", 1870 1814 "serde_urlencoded", 1871 - "sync_wrapper", 1815 + "sync_wrapper 1.0.1", 1872 1816 "system-configuration", 1873 1817 "tokio", 1874 1818 "tokio-native-tls", ··· 1941 1885 ] 1942 1886 1943 1887 [[package]] 1888 + name = "rustls" 1889 + version = "0.23.10" 1890 + source = "registry+https://github.com/rust-lang/crates.io-index" 1891 + checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" 1892 + dependencies = [ 1893 + "once_cell", 1894 + "rustls-pki-types", 1895 + "rustls-webpki 0.102.4", 1896 + "subtle", 1897 + "zeroize", 1898 + ] 1899 + 1900 + [[package]] 1944 1901 name = "rustls-pemfile" 1945 1902 version = "1.0.4" 1946 1903 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2094 2051 dependencies = [ 2095 2052 "proc-macro2", 2096 2053 "quote", 2097 - "syn 2.0.66", 2054 + "syn 2.0.67", 2098 2055 ] 2099 2056 2100 2057 [[package]] ··· 2266 2223 checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 2267 2224 2268 2225 [[package]] 2269 - name = "stable_deref_trait" 2270 - version = "1.2.0" 2271 - source = "registry+https://github.com/rust-lang/crates.io-index" 2272 - checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2273 - 2274 - [[package]] 2275 2226 name = "static_assertions" 2276 2227 version = "1.1.0" 2277 2228 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2291 2242 2292 2243 [[package]] 2293 2244 name = "subtle" 2294 - version = "2.5.0" 2245 + version = "2.6.0" 2295 2246 source = "registry+https://github.com/rust-lang/crates.io-index" 2296 - checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" 2247 + checksum = "0d0208408ba0c3df17ed26eb06992cb1a1268d41b2c0e12e65203fbe3972cee5" 2297 2248 2298 2249 [[package]] 2299 2250 name = "syn" ··· 2308 2259 2309 2260 [[package]] 2310 2261 name = "syn" 2311 - version = "2.0.66" 2262 + version = "2.0.67" 2312 2263 source = "registry+https://github.com/rust-lang/crates.io-index" 2313 - checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" 2264 + checksum = "ff8655ed1d86f3af4ee3fd3263786bc14245ad17c4c7e85ba7187fb3ae028c90" 2314 2265 dependencies = [ 2315 2266 "proc-macro2", 2316 2267 "quote", ··· 2324 2275 checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 2325 2276 2326 2277 [[package]] 2327 - name = "synstructure" 2328 - version = "0.13.1" 2278 + name = "sync_wrapper" 2279 + version = "1.0.1" 2329 2280 source = "registry+https://github.com/rust-lang/crates.io-index" 2330 - checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 2331 - dependencies = [ 2332 - "proc-macro2", 2333 - "quote", 2334 - "syn 2.0.66", 2335 - ] 2281 + checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" 2336 2282 2337 2283 [[package]] 2338 2284 name = "system-configuration" ··· 2410 2356 dependencies = [ 2411 2357 "proc-macro2", 2412 2358 "quote", 2413 - "syn 2.0.66", 2359 + "syn 2.0.67", 2414 2360 ] 2415 2361 2416 2362 [[package]] ··· 2455 2401 ] 2456 2402 2457 2403 [[package]] 2458 - name = "tinystr" 2459 - version = "0.7.6" 2404 + name = "tinyvec" 2405 + version = "1.6.0" 2460 2406 source = "registry+https://github.com/rust-lang/crates.io-index" 2461 - checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 2407 + checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 2462 2408 dependencies = [ 2463 - "displaydoc", 2464 - "zerovec", 2409 + "tinyvec_macros", 2465 2410 ] 2411 + 2412 + [[package]] 2413 + name = "tinyvec_macros" 2414 + version = "0.1.1" 2415 + source = "registry+https://github.com/rust-lang/crates.io-index" 2416 + checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2466 2417 2467 2418 [[package]] 2468 2419 name = "tokio" ··· 2489 2440 dependencies = [ 2490 2441 "proc-macro2", 2491 2442 "quote", 2492 - "syn 2.0.66", 2443 + "syn 2.0.67", 2493 2444 ] 2494 2445 2495 2446 [[package]] ··· 2524 2475 ] 2525 2476 2526 2477 [[package]] 2478 + name = "tokio-rustls" 2479 + version = "0.26.0" 2480 + source = "registry+https://github.com/rust-lang/crates.io-index" 2481 + checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" 2482 + dependencies = [ 2483 + "rustls 0.23.10", 2484 + "rustls-pki-types", 2485 + "tokio", 2486 + ] 2487 + 2488 + [[package]] 2527 2489 name = "tokio-tungstenite" 2528 2490 version = "0.21.0" 2529 2491 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2536 2498 "tokio", 2537 2499 "tokio-rustls 0.25.0", 2538 2500 "tungstenite", 2539 - "webpki-roots 0.26.2", 2501 + "webpki-roots 0.26.3", 2540 2502 ] 2541 2503 2542 2504 [[package]] ··· 2599 2561 dependencies = [ 2600 2562 "proc-macro2", 2601 2563 "quote", 2602 - "syn 2.0.66", 2564 + "syn 2.0.67", 2603 2565 ] 2604 2566 2605 2567 [[package]] ··· 2635 2597 2636 2598 [[package]] 2637 2599 name = "triomphe" 2638 - version = "0.1.12" 2600 + version = "0.1.13" 2639 2601 source = "registry+https://github.com/rust-lang/crates.io-index" 2640 - checksum = "1b2cb4fbb9995eeb36ac86fadf24031ccd58f99d6b4b2d7b911db70bddb80d90" 2602 + checksum = "e6631e42e10b40c0690bf92f404ebcfe6e1fdb480391d15f17cc8e96eeed5369" 2641 2603 2642 2604 [[package]] 2643 2605 name = "try-lock" ··· 2704 2666 dependencies = [ 2705 2667 "proc-macro2", 2706 2668 "quote", 2707 - "syn 2.0.66", 2669 + "syn 2.0.67", 2708 2670 ] 2709 2671 2710 2672 [[package]] ··· 2717 2679 ] 2718 2680 2719 2681 [[package]] 2682 + name = "unicode-bidi" 2683 + version = "0.3.15" 2684 + source = "registry+https://github.com/rust-lang/crates.io-index" 2685 + checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 2686 + 2687 + [[package]] 2720 2688 name = "unicode-ident" 2721 2689 version = "1.0.12" 2722 2690 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2729 2697 checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" 2730 2698 2731 2699 [[package]] 2700 + name = "unicode-normalization" 2701 + version = "0.1.23" 2702 + source = "registry+https://github.com/rust-lang/crates.io-index" 2703 + checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 2704 + dependencies = [ 2705 + "tinyvec", 2706 + ] 2707 + 2708 + [[package]] 2732 2709 name = "unicode-width" 2733 2710 version = "0.1.13" 2734 2711 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2742 2719 2743 2720 [[package]] 2744 2721 name = "url" 2745 - version = "2.5.1" 2722 + version = "2.5.2" 2746 2723 source = "registry+https://github.com/rust-lang/crates.io-index" 2747 - checksum = "f7c25da092f0a868cdf09e8674cd3b7ef3a7d92a24253e663a2fb85e2496de56" 2724 + checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" 2748 2725 dependencies = [ 2749 2726 "form_urlencoded", 2750 2727 "idna", ··· 2759 2736 checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 2760 2737 2761 2738 [[package]] 2762 - name = "utf16_iter" 2763 - version = "1.0.5" 2764 - source = "registry+https://github.com/rust-lang/crates.io-index" 2765 - checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 2766 - 2767 - [[package]] 2768 - name = "utf8_iter" 2769 - version = "1.0.4" 2770 - source = "registry+https://github.com/rust-lang/crates.io-index" 2771 - checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2772 - 2773 - [[package]] 2774 2739 name = "utf8parse" 2775 2740 version = "0.2.2" 2776 2741 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2858 2823 "once_cell", 2859 2824 "proc-macro2", 2860 2825 "quote", 2861 - "syn 2.0.66", 2826 + "syn 2.0.67", 2862 2827 "wasm-bindgen-shared", 2863 2828 ] 2864 2829 ··· 2892 2857 dependencies = [ 2893 2858 "proc-macro2", 2894 2859 "quote", 2895 - "syn 2.0.66", 2860 + "syn 2.0.67", 2896 2861 "wasm-bindgen-backend", 2897 2862 "wasm-bindgen-shared", 2898 2863 ] ··· 2934 2899 2935 2900 [[package]] 2936 2901 name = "webpki-roots" 2937 - version = "0.26.2" 2902 + version = "0.26.3" 2938 2903 source = "registry+https://github.com/rust-lang/crates.io-index" 2939 - checksum = "3c452ad30530b54a4d8e71952716a212b08efd0f3562baa66c29a618b07da7c3" 2904 + checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" 2940 2905 dependencies = [ 2941 2906 "rustls-pki-types", 2942 2907 ] ··· 3141 3106 ] 3142 3107 3143 3108 [[package]] 3144 - name = "write16" 3145 - version = "1.0.0" 3146 - source = "registry+https://github.com/rust-lang/crates.io-index" 3147 - checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 3148 - 3149 - [[package]] 3150 - name = "writeable" 3151 - version = "0.5.5" 3152 - source = "registry+https://github.com/rust-lang/crates.io-index" 3153 - checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 3154 - 3155 - [[package]] 3156 - name = "yoke" 3157 - version = "0.7.4" 3158 - source = "registry+https://github.com/rust-lang/crates.io-index" 3159 - checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" 3160 - dependencies = [ 3161 - "serde", 3162 - "stable_deref_trait", 3163 - "yoke-derive", 3164 - "zerofrom", 3165 - ] 3166 - 3167 - [[package]] 3168 - name = "yoke-derive" 3169 - version = "0.7.4" 3170 - source = "registry+https://github.com/rust-lang/crates.io-index" 3171 - checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" 3172 - dependencies = [ 3173 - "proc-macro2", 3174 - "quote", 3175 - "syn 2.0.66", 3176 - "synstructure", 3177 - ] 3178 - 3179 - [[package]] 3180 - name = "zerofrom" 3181 - version = "0.1.4" 3182 - source = "registry+https://github.com/rust-lang/crates.io-index" 3183 - checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" 3184 - dependencies = [ 3185 - "zerofrom-derive", 3186 - ] 3187 - 3188 - [[package]] 3189 - name = "zerofrom-derive" 3190 - version = "0.1.4" 3191 - source = "registry+https://github.com/rust-lang/crates.io-index" 3192 - checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" 3193 - dependencies = [ 3194 - "proc-macro2", 3195 - "quote", 3196 - "syn 2.0.66", 3197 - "synstructure", 3198 - ] 3199 - 3200 - [[package]] 3201 3109 name = "zeroize" 3202 3110 version = "1.8.1" 3203 3111 source = "registry+https://github.com/rust-lang/crates.io-index" 3204 3112 checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 3205 - 3206 - [[package]] 3207 - name = "zerovec" 3208 - version = "0.10.2" 3209 - source = "registry+https://github.com/rust-lang/crates.io-index" 3210 - checksum = "bb2cc8827d6c0994478a15c53f374f46fbd41bea663d809b14744bc42e6b109c" 3211 - dependencies = [ 3212 - "yoke", 3213 - "zerofrom", 3214 - "zerovec-derive", 3215 - ] 3216 - 3217 - [[package]] 3218 - name = "zerovec-derive" 3219 - version = "0.10.2" 3220 - source = "registry+https://github.com/rust-lang/crates.io-index" 3221 - checksum = "97cf56601ee5052b4417d90c8755c6683473c926039908196cf35d99f893ebe7" 3222 - dependencies = [ 3223 - "proc-macro2", 3224 - "quote", 3225 - "syn 2.0.66", 3226 - ]
+15 -2
Cargo.toml
··· 19 19 poise = "0.6.1" 20 20 rand = "0.8.5" 21 21 regex = "1.10.5" 22 - reqwest = "0.12.4" 23 22 serenity = "0.12.2" 24 - tokio = { version = "1.38.0", features = ["macros", "rt-multi-thread"] } 23 + 24 + [dependencies.serde] 25 + version = "1.0.203" 26 + features = ["derive"] 27 + 28 + [dependencies.reqwest ] 29 + version = "0.12.4" 30 + features = ["json"] 31 + 32 + [dependencies.tokio] 33 + version = "1.38.0" 34 + features = ["macros", "rt-multi-thread"] 35 + 36 + [dependencies.git-tracker] 37 + git = "https://github.com/getchoo/nixpkgs-tracker-bot" 25 38 26 39 [lints.clippy] 27 40 all = "warn"
+6 -1
default.nix
··· 25 25 ); 26 26 }; 27 27 28 - cargoLock.lockFile = ./Cargo.lock; 28 + cargoLock = { 29 + lockFile = ./Cargo.lock; 30 + outputHashes = { 31 + "git-tracker-0.2.0" = "sha256-ekji25NfXsMrAQE8uz24DkFcGfba1U2SLTEZE/atpss="; 32 + }; 33 + }; 29 34 30 35 buildInputs = 31 36 [ openssl ]
+1
src/commands/misc/mod.rs
··· 1 + pub mod nixpkgs;
+87
src/commands/misc/nixpkgs.rs
··· 1 + use color_eyre::eyre::Result; 2 + use git_tracker::Tracker; 3 + use poise::{serenity_prelude as serenity, CreateReply}; 4 + use reqwest; 5 + use serde::Deserialize; 6 + use std::env; 7 + 8 + use crate::Context; 9 + 10 + const NIXPKGS_URL: &str = "https://github.com/NixOS/nixpkgs"; 11 + 12 + /// Track nixpkgs PRs 13 + #[poise::command(slash_command)] 14 + pub async fn nixpkgs( 15 + ctx: Context<'_>, 16 + #[description = "pr"] 17 + #[min = 0] 18 + pr: i32, 19 + ) -> Result<()> { 20 + ctx.defer().await?; 21 + 22 + let nixpkgs_path = env::var("NIXPKGS").expect("NIXPKGS not set"); 23 + let github_token = env::var("GITHUB_TOKEN").expect("GITHUB_TOKEN not set"); 24 + let tracker = Tracker::from_path(&nixpkgs_path)?; 25 + 26 + // find out what commit our PR was merged in 27 + let Some(commit_sha) = ({ 28 + let url = format!("https://api.github.com/repos/nixos/nixpkgs/pulls/{pr}"); 29 + let resp = reqwest::Client::new() 30 + .get(&url) 31 + .header("User-Agent", "blahaj") 32 + .header("Authorization", format!("Bearer {github_token}")) 33 + .send() 34 + .await 35 + .expect("error fetching") 36 + .json::<PullRequest>() 37 + .await?; 38 + 39 + resp.merge_commit_sha 40 + }) else { 41 + ctx.say("It seems this pull request is very old. I can't track it") 42 + .await?; 43 + return Ok(()); 44 + }; 45 + 46 + let mut status_results = vec![]; 47 + for branch_name in &[ 48 + "master", 49 + "staging", 50 + "nixpkgs-unstable", 51 + "nixos-unstable-small", 52 + "nixos-unstable", 53 + ] { 54 + let full_branch_name = format!("origin/{branch_name}"); 55 + let has_pr = tracker.branch_contains_sha(&full_branch_name, &commit_sha)?; 56 + 57 + if has_pr { 58 + status_results.push(format!("`{branch_name}` ✅")); 59 + } else { 60 + status_results.push(format!("`{branch_name}` ❌")); 61 + } 62 + } 63 + 64 + // if we don't find the commit in any branches from above, we can pretty safely assume 65 + // it's an unmerged PR 66 + let embed_description: String = if status_results.is_empty() { 67 + "It doesn't look like this PR has been merged yet! (or maybe I just haven't updated)" 68 + .to_string() 69 + } else { 70 + status_results.join("\n") 71 + }; 72 + 73 + let embed = CreateReply::default().embed( 74 + serenity::CreateEmbed::new() 75 + .title(format!("Nixpkgs PR #{pr} Status")) 76 + .url(format!("{NIXPKGS_URL}/pull/{pr}")) 77 + .description(embed_description), 78 + ); 79 + 80 + ctx.send(embed).await?; 81 + Ok(()) 82 + } 83 + 84 + #[derive(Clone, Debug, Deserialize)] 85 + struct PullRequest { 86 + merge_commit_sha: Option<String>, 87 + }
+1
src/commands/mod.rs
··· 1 1 pub mod bot; 2 2 pub mod fun; 3 + pub mod misc; 3 4 pub mod user;
+2
src/main.rs
··· 35 35 // bot commands 36 36 commands::bot::ping::ping(), 37 37 commands::bot::bot::botinfo(), 38 + // misc commands 39 + commands::misc::nixpkgs::nixpkgs(), 38 40 // fun commands 39 41 commands::fun::nix::nix(), 40 42 commands::fun::chance::roll(),