init
This commit is contained in:
commit
5f05e62468
49 changed files with 22965 additions and 0 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
TXT_capture_dataset_v1/Dataset For Elena Byron.docx
Normal file
BIN
TXT_capture_dataset_v1/Dataset For Elena Byron.docx
Normal file
Binary file not shown.
|
@ -0,0 +1,4 @@
|
||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
||||||
|
ReferrerUrl=https://docs.google.com/
|
||||||
|
HostUrl=https://doc-10-b0-docstext.googleusercontent.com/export/lic3bqn80c1k1nlt5ehosi6f94/tgne39gjpfjc14foc5fu9eq17s/1748913240000/113102987412417807933/113102987412417807933/1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI?format=docx&id=1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI&token=AC4w5Vj1k1GZn4P3Iy9IYn0ONKTqZxEZcA:1748913123381&includes_info_params=true&cros_files=false&tab=t.0&inspectorResult=%7B%22pc%22:49,%22lplc%22:9%7D&dat=AOBvIb1fBUJ3Epno_XQImvbp1rLUVmwsoSGN6xV8ZeqLAXT_gI6a--8vdJgg5jbLGbCqdiwTWewjGvSxtoKTajJignDOwgKHvSyrOC_bMyFYD8qhWyNYrgdnLoEwsIa3vj33ZglU1szCIz3zKoDKDdzU_6WJHcIsJnZFW491fAIX4dERslyfTgOBCIp74jq0aC31UnPLwAx4ZhVUu9mGk1Jjhj9c4fypQz_Et4S2hgV6lsBA691aBUOTzsOfWw6PY8nEtIkbDH7v8BiFXFcaPTUMMV4F3yyWOL8qTzuNF3LWgygK2B_c80z-3tkdyR3PhRMzEO_IgJg1D5qGAoAlCk-LT89maF0mbBNeGX5GbmBpctY8HOUljbEYDqiy2PQQEvTORjeCMEOYwLy7cI4pus0JJw2_rv8wu2MqBaz3oClVhtV5ayYBE579eU3KFL9wge-SyhO1zTBnb_iqgdfVugom2k_DkVbwPgZbZp0K_qH23dRB22rSsgMn7sd1M-TR-1WtHVIlZATzfPw4D1gUeopFKdrnqcweThtxFBvVqXgNP-5aII5OGr27-l99eW300-wkz1LDYAGhdKTJdAdGMJmTalCI8mp6kg-3qR3cTyo4D5SU6WSpUUDIs0PPWQhnuGGzQvrf5WAsBCqwwJr764ddvjtLqDNgpgCpZ2VPrRf4031sJqP2kHFRoUbTHwqjpE5syyf7cWOlmpad2G5nrmgEIv7jLdKuEd8U_IWbA8FpP5Zk4aSd0-x2cQ0-bqF4AIW2t7bYEHPZugB3OkOfoWkFTE3h1En0O2gmJVBzZANUCt_GEhOQW8Lq-wrqlzhRYyt-DgfjeKSgghHWDJZB9fPvualpB0uRb60NNjLSpihIPHJX3YDnj_dZyvCnNh-CkE8OEq2MDx9zJUzJgbdoXxLZmYtMSjYtZYwb1PGg4mQEU7AX09szVQZBbBbOxoUpp3xlychQA4_CpgyQBW5CSkDskG0novHtte_IoU9O
|
BIN
TXT_capture_dataset_v1/Dataset For Elena Byron.epub
Normal file
BIN
TXT_capture_dataset_v1/Dataset For Elena Byron.epub
Normal file
Binary file not shown.
|
@ -0,0 +1,4 @@
|
||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
||||||
|
ReferrerUrl=https://docs.google.com/
|
||||||
|
HostUrl=https://doc-10-b0-docstext.googleusercontent.com/export/lic3bqn80c1k1nlt5ehosi6f94/ubm55gblvk4cle7pcsv2m1738g/1748913205000/113102987412417807933/113102987412417807933/1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI?format=epub&id=1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI&token=AC4w5Vj1k1GZn4P3Iy9IYn0ONKTqZxEZcA:1748913123381&includes_info_params=true&cros_files=false&tab=t.0&inspectorResult=%7B%22pc%22:49,%22lplc%22:9%7D&dat=AOBvIb1Ny0vmsBILUoJltQ64NOc4avuPO0oo12qgSflHz05j64vcdc6xdvh_NuGLqR6RkfAB-1GG5WEAzZejAP40CCJZJv83xO-3hPnAjh2KGClNlfTZDgigx_seKOSkdesEeYdpmkRFnwbCxnZzASUSg2cQS88XPKXW4bGp6iH9OsLK7Sfag4NhphRUT_pnI9tBCBdZBL5bBPTPSo8F4hYkOKLK7QFvB_sh9xh04tMPl8ZMxH5FdvoATJcqg2XwoV5IaSAdh0FdrpeSY45uK17wXTKggfoa_Rl4-BFpqgTXpkAlPF7GvkbGtCxkxrKtNeRyhQYWVlVBfOt-SVtPo3tsaMQ_tMXBl9YDG_eUU5JwtER-jmLuJpgNK7w0Uz3HwHuhJRvhSoh35ZOabMQsjOrwYYxkGY2x18o7--oqyAJYwF3I2OsVz-CW1knCUxe9MxsRMU3GjzthVhtUAIfl9y9at3xcU28p0OM1cfLxuRrUAg80_ITV6Ph_BOpRLfBRy7z41WiT0GVQWwKqM1n5UJJ9PBLqKkQxVl__-SmSJzs2ynFX29t1qpLMyJwz3FFyuYKaUJtB62a6dHsZhitPLA-Oi_3_6HsVaqOu-rkAfW845q07MqxBEI7tWTemjMovZNI5G90KnxtFMBXmVuewT5GV7j-2ZBGNGkV_TbsGuK7XQVRXcqBxCkaNHPjAwe_wwoQHrmoPs0fObfoWLJ4tPFQTCl4SZ7QGVbAr1zM4TZtf6APckTUV5LDM4SUq8HBNZFTnCHpH3JigG760xpS68tdNlLo0ZAkWTBKJcILWKaxLISXSvcz3bPQVK7OwAb-vobf1kVUSeiWSZv2vqYqzXpcIM4J4tPtkcj3DhplgRfwQQQcFqABfPHoGI7AokIXEy58kTT2FvbxKg2IhDgRPLUdLFUUO2oontltIIVWw69GWOnVd0OKfmN5cVKjagjTPo_PbtK7l-wuJ_KzIDcEEv94KOANbe_69ubWQ0AtZ9A
|
1528
TXT_capture_dataset_v1/Dataset For Elena Byron.md
Normal file
1528
TXT_capture_dataset_v1/Dataset For Elena Byron.md
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,4 @@
|
||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
||||||
|
ReferrerUrl=https://docs.google.com/
|
||||||
|
HostUrl=https://doc-10-b0-docstext.googleusercontent.com/export/lic3bqn80c1k1nlt5ehosi6f94/16v8rquejh7447p0sog0dotu34/1748913200000/113102987412417807933/113102987412417807933/1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI?format=md&id=1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI&token=AC4w5Vj1k1GZn4P3Iy9IYn0ONKTqZxEZcA:1748913123381&includes_info_params=true&cros_files=false&tab=t.0&inspectorResult=%7B%22pc%22:49,%22lplc%22:9%7D&dat=AOBvIb3C0SJHbfy2S3goNcYCFM53dDSRqtCRz7XJxKOnCrNwIDB6Ohi7yPbUJSgyfqDyy4FnuEHd6chREpl_ABiBfMid2Y_gxPulJcvVA6n1YEZFebhi_P3uuPdPz3URaqTJsIN_2T1NYGZKROasR3vgpys3sq1dX1YfSHyMFnhVN3wo9RClmKAd9xhVH5tlOvNqkjKoupwqCZiKPMujAQBANpoyrjIuiiLFIDw4Nx8ADxm5a1VvAvA0lh3zbcQ83wWijNcqK-J1wzaMObgvYPIngqaToPsRjkDW-RiX3KSXmwLYVQY-T2dXe5oauSNKeF3Q5vXhG8d3giGKcBRdiCIZQ_m22rUyEHbcW8Wnz5JY0VZv808vmc_EZH-qN9CeSxoju24TTqryg1Wr5Z9nFTOS5XEZoy_335ApUAvo0EnRCBqyFwoVKeZerVLhXLonSFLIcP81iL46FRbs8ACOmNk1ARURFRZtYN7Y3GVvy8_rJ6VBYqHrqEWgFpt3wK8ZrGKZjsVZJg6cmJNIocdLMYyYGOihePz1hkPcMyBFflWgKlvyyjqnFSt_Z4RTRm_HMJy1seT4YxRYd29qlj81Qgyt9dTfQwYdVUNKdTSZUbva03vRmoH7Y3VM1C68ad7pXHOgiPz8f-NCuGfpplKaq1O9sVq1YZTScR8HXM8hJLaWRxkhRzChc0ZXmLjNB1ITFRXg_mvq8r07zoW8kNuMRYW_vzRHtVefkuQJ8oIdTFz7h5_75SAPAlN8dBTN4sYXG9Dm1YHpQmf9j0odkZb_15X1X50yvqhYIlPPWaz6IgJfNwndxZXGYo45kLNoVHWa0zDrJT-wLxkz84wXbSk0hzs-MTT6As3TmqHc7-54bjLfCMm6YOEa6nRDhL3oilns0rxGcpZ3D3fll9J7Osp4GWDzTEJdchY47UBL3Lmb9JtIMM-vKu0J6DP25QGr2bKRSTaYFlNK2BXaweA3rhk6rLgh5ntG27HqCdRwhESJZg
|
BIN
TXT_capture_dataset_v1/Dataset For Elena Byron.odt
Normal file
BIN
TXT_capture_dataset_v1/Dataset For Elena Byron.odt
Normal file
Binary file not shown.
|
@ -0,0 +1,4 @@
|
||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
||||||
|
ReferrerUrl=https://docs.google.com/
|
||||||
|
HostUrl=https://doc-10-b0-docstext.googleusercontent.com/export/lic3bqn80c1k1nlt5ehosi6f94/6uuuhdmkkj2i927asfof2cg5vo/1748913235000/113102987412417807933/113102987412417807933/1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI?format=odt&id=1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI&token=AC4w5Vj1k1GZn4P3Iy9IYn0ONKTqZxEZcA:1748913123381&includes_info_params=true&cros_files=false&tab=t.0&inspectorResult=%7B%22pc%22:49,%22lplc%22:9%7D&dat=AOBvIb01jHgAgPJnEKOkYumdEDHeSK2UQRQVoJ477MDtlTII6FhQoF4_ALdW0d_8TRWCfJFjvef1UX01umy4gLkh_yN2w3DLqHjnEpfiwYtler8R6rkXf23j4UEEYhOjfOQNApORQdQZx-6EhWUJ6sFwQSzN1Wq5cY7UVIkDt_dUJh0nxKgfeLCJ_r8J4nzHp-d7kXrjRyoRj0H0tga1ZIb6sbx9FjqFKEqzQmzCsmisi7quPr8c29IoIbxyu-b7HFRcGWUXBCvYrlTvBRjYA9ANY-qHfRHZ-JndZMuEgjfe-cjHd3XqkW3QGDV6Ysx7A2yPptBXFgqrzLYFP_ZFnoVGDqzEWJruKdMJZNbqq0Csn1to-g9pdxtrUcUWd1EErLF-PD9-ukGNyxIDQePn2KA_-U-1-gc2SNoo8Bf_-RK459rdcosTzF0MY3kVy6-Dt6pPtLNSn87O-kPwTRTgjZRV0h0aCGl6ThQmMEznR5VN7Ley3mvfuAtxiZDZkQJ5MePGZwsdZjmpghekZoXw8PyxdBKfspV-B4VixkCStNkWydoKI-qRVZj5R8leHky-UV7S_4XqSoe95Sz5k6W6vAVvBUg0sVHfYDk1IXlQdpkDIuRTy_m5QvQ8IeYrUBq2ZO8rqsZA_-VbPN5dFoZ0fcmcDXglUE7zADC5Ni1OgvJz-Kz_pAx9WIRR_toBt8c-sEd1qDhONyggU7LwKEqezsb_SCNXAHzRwHYBTVKru_U7BnXTNN0U8lsaZdVxhcpi6Hn7WpOUVFiVw42f0arVaCd2E_PLjsdq0CjH6mO3eScogVbBRgf9ReGdAvwNdLrCNLrhNTXR4Ujqvb4ZJeRpCr9mN1nxqMELOztKdiI3iaTL-bkptVeR9dGR_qhW2yZSL43Rlt-56HmPsarENXKx_kYtFFHQNNygQ9naqWJBpzmtiez02l2yIKfcgP9l6iXI33USw-_hX3zn-N26PViRF4MzYX4Wio_9eDaKnyudDg
|
BIN
TXT_capture_dataset_v1/Dataset For Elena Byron.pdf
Normal file
BIN
TXT_capture_dataset_v1/Dataset For Elena Byron.pdf
Normal file
Binary file not shown.
|
@ -0,0 +1,4 @@
|
||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
||||||
|
ReferrerUrl=https://docs.google.com/
|
||||||
|
HostUrl=https://doc-10-b0-docstext.googleusercontent.com/export/lic3bqn80c1k1nlt5ehosi6f94/e315lnfjlpd5npkt675tpajf34/1748913220000/113102987412417807933/113102987412417807933/1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI?format=pdf&id=1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI&token=AC4w5Vj1k1GZn4P3Iy9IYn0ONKTqZxEZcA:1748913123381&includes_info_params=true&cros_files=false&tab=t.0&inspectorResult=%7B%22pc%22:49,%22lplc%22:9%7D&dat=AOBvIb1EM-fzlckUofHRLbs1vkrzZh8EQWKU_pgJ6YzrEE4ymJ6d8O6ZJ7DZNzW0K_xgIFWszgk_3YS6d0PPGU3YHR6udAgDwIFQvYKFQqeyHoOc9BTAXVUISMUn0wQyZ8lQ9pFgEW8J6HyyTUtBaVQTBlvr_L7dFBpP-FBuOV44CHlS0UiAyqB105-Zl3V-IM4UrFzhUh3vwEBsdDiCSndDdME3-YvplMtq5_bvWVS2bO1seq_NIdiOHyOlnlbUFJSk7eh54GZddjXMa0dsEsoa-pVGR5Q4Lp7_XSF44yky9b-HGAUQjdfTMd8DqC9FL7dbv_zbB-xwCtzVzqamKWh7wlvv2ah2cK5myrvBzeD7J3mkGds3rVyNxUmetO-iJ3NSb2Giw3JYMVqUPaHdYXTWd7xM86xIpj4L6ZgLXLx2lYR7nZJ9IB4NeSX-XMswsRM7pLvQrbLhMKUtxtWErVrUNHRuv-R3_LuvUsoe1pHzKGtXGSI8AsqjQXflPV2VzAYUdQYgqWuViaKas8APqjuJBxII9lDs027oky7PiAGHHkJ9bSA-gDtvpWbLamQ1C2vWMfcK4YSsl0BvaVzxyyyZlUNZ135oueow4m23a1fyCHmiYqbFGURHvI_FfC6Kbc6GgTKk_28fOmSGMa_IyxYcraqNYXE2k2JdEGWG7f7ZIx1N2DyfSej6NzU8llMtn0Pgnahyb_i9sUhVwEE2moz73l1thzt26Jw2cYI0AR-T2d98avg3Yl9fEerbkec7M_q6rZOlwHaseKljlUTBN-OCtiOup1DYwsLmmUn5WqUqiAolvceQFzAfDJUb9UjxBaRcmxjtdmFIO1GjO85ie6b7rk5zN45gI4T767dev78aKbQiR3eEux1TwM-XPFbZEFR5Ix-nvceg_elaubBYxJMoVgoquS0wJJZKe_zBQDU3DSY-G_-vJrl0nyffUNveDNA0tv_I4UjiNMPpIyE5qgD3srlJ3PeHCIS1wrCZVA
|
18114
TXT_capture_dataset_v1/Dataset For Elena Byron.rtf
Normal file
18114
TXT_capture_dataset_v1/Dataset For Elena Byron.rtf
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,4 @@
|
||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
||||||
|
ReferrerUrl=https://docs.google.com/
|
||||||
|
HostUrl=https://doc-10-b0-docstext.googleusercontent.com/export/lic3bqn80c1k1nlt5ehosi6f94/uq19i34e847jf65sovmg7rb67g/1748913230000/113102987412417807933/113102987412417807933/1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI?format=rtf&id=1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI&token=AC4w5Vj1k1GZn4P3Iy9IYn0ONKTqZxEZcA:1748913123381&includes_info_params=true&cros_files=false&tab=t.0&inspectorResult=%7B%22pc%22:49,%22lplc%22:9%7D&dat=AOBvIb2Tz7h6W4Ok0qVmUAGFjp-K6hxEHbKm92EuB62YQAhsTLHYqpst5WuUFwKWB_kJt5bGQ5NHDRzrh3AY6p4nA8tCxtn6tKp68p0ylOQ4oLn8cOWf8AIvvgAl3eNKtmyOkpABYY2aLrZmQw1pVmeBJaVBWe8xJJghTYmNWYkLv-DRVJwthhKZstjs52T413qoFiVkLaEgyebwLCk2-loxrUrt_z3CGxWCVTnipeWW-tuzM2MlM-ATYqOV8k9T8AoLmTK7i0pidynUYZpHXg5cJWu0R5M0mKaQTjrYulZH6EWSTATspNqdQp6UxNt3pqFzVnpodJu2ciXkf4WlzjoipmhOoQTqtTGpHG1ebkoKAt6BNb3bei1TILUUeEKouom_XOxVH2UV1lrBUAcLW6Qgu3eZjj_wYDD_yIy_NK0Gqw3J3iSjwInhI4BBNJaJYRtvZWJ5U23DyU2QBtIHQehhTBhOh5WoKGQtErEJ00sR64vPPL7y1SJh7u1jFK-vuuii2bjX56hwds_JIutP0RBvSLGV8VE9I9326cl6eZuogG4ZnVr7FAkxTXtaK8-tB6d0PcgCHT58JSoooWe9Agjw9Bvui7vB4NPBWDj36QEJohjZJUUMhRpcuoIpFna1dVTJlCKS2zkCnK49R1oBBa_8Od0XM_dmJ3lVUIm_U2TznjsZrDXoPw_sPRJSRt0qzr_XubqhF5_Mhuu5e-OQI2AXuUtn8obxAsEML822G_z6RJ7IcBKsJm6VtIey1ddXh0ObBn2uxLi9BSPZhOrQpJ7AfxPAdS2uiq1rX8HRIvIOSRZE0CfM6YeHTN6aVZqjPAR_wWpcf5H2LbHRj2BfuOfr25Okl3Owu0szS4bPRZR9oqTFirMeWA9EEhFkwocKOCRKs_k2sCIN76ZdjRenl0nIIeGAnbF9cRTeukUK3IE7FMzrua6A91aFxNHhz7mtkEa8oO-gEu3Nc4OJDxwlnbCjZq9xX2-F9vM6zEiB7w
|
2152
TXT_capture_dataset_v1/Dataset For Elena Byron.txt
Normal file
2152
TXT_capture_dataset_v1/Dataset For Elena Byron.txt
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,4 @@
|
||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
||||||
|
ReferrerUrl=https://docs.google.com/
|
||||||
|
HostUrl=https://doc-10-b0-docstext.googleusercontent.com/export/lic3bqn80c1k1nlt5ehosi6f94/0jvum9nnmr3a2kce3vj4q947gk/1748913215000/113102987412417807933/113102987412417807933/1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI?format=txt&id=1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI&token=AC4w5Vj1k1GZn4P3Iy9IYn0ONKTqZxEZcA:1748913123381&includes_info_params=true&cros_files=false&tab=t.0&inspectorResult=%7B%22pc%22:49,%22lplc%22:9%7D&dat=AOBvIb1OhOUjGoy8_MJ4Fwy21SeocEJpRrf99ScPcwMGTBS03R5BLmyyuFTZk2Rbvg8J0svRsaj6L-a06bqzqXcjzmRaDgTrLFuMYXduq3wa3wopDLfhCSJrtjlAW9OFPY3_WXYrWQnOaDONrKLHEn3Ohd7KrFXSCwpBPUkof4yjoRPxiDp4dCvP7APuhZRGB46xhEScDRM8sBpuy5f1H9INzEvDhSgu1P_nvE75Y4NEv6rYNGJg9i4Ks9cqXAI5Kh2sKU_ZdACdUM8tiKJ-ILDqQbiLjk1B1u_GNMTADzaVGtaxPiiMgnG2IFTkH4D_yuKpeBdHH0rI_-em73fNv42UVr3deAkHrn28LLQ8XqS8g4oXtTHrVby2VEkiSD2FuLsZAXnJxYHk99GPTjT-duHVlCGb25tyeViX4Segp9NUFGMbTwB4HefusHIDJjJx-PlBDu8NS6hzHS7M2rPRT6sez8Bwtihk2ggLSkIrsBSGSNGYZyMoB3IANzcQI0pXsCLNqRpRFPOviWI4kz3VVMgFapbdai2bU4xlb6vb2HOcQJ_Yppvhj67TIiyj1eCJcgiOpmslytpc4ml8jfPXU1LLbHukaW3zhxbUZw97sUr1PCLuyJ6QELEI0mkvkYN-Z8KEfAZVZ066oj1SE7NCXNbQtxhvDYerPzaCs6koBf2IpIZBzo15Gmywzo1hOvn_YPStnV8lGZRRHzIftgR_eTLCJBqh1s4V24lK1djXo7exmzri4Z3c_w9bjima9TNpMV5qLBBfOoqBdFo3FWYNHpM9bLqmveEZIi4YNJS2PEV_UUamvaAtR5P-nRKGGcwh7GiEVLuhF8pqGw1acEFeerwbGwAuTETqhM6zjbQwfNRHK5IkByjSBXQDZfQlSNzbwJ2RtocX1nEj-T_5JW7QCfuSpVCmUX-OHlo4LqKX3WSCLM1xtYIGNZr9Byz_HUwTgLJEDD6QYGkRhK1L-7HvU1l0x9UYKwBWkzQKQag0mQ
|
BIN
TXT_capture_dataset_v1/Dataset For Elena Byron.zip
Normal file
BIN
TXT_capture_dataset_v1/Dataset For Elena Byron.zip
Normal file
Binary file not shown.
|
@ -0,0 +1,4 @@
|
||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
||||||
|
ReferrerUrl=https://docs.google.com/
|
||||||
|
HostUrl=https://doc-10-b0-docstext.googleusercontent.com/export/lic3bqn80c1k1nlt5ehosi6f94/fc4insqai36l1c3qu22866md84/1748913210000/113102987412417807933/113102987412417807933/1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI?format=zip&id=1L0-i7DulvsPQs8o546B1w1ij4BHY5OY8wb9BFoluQhI&token=AC4w5Vj1k1GZn4P3Iy9IYn0ONKTqZxEZcA:1748913123381&includes_info_params=true&cros_files=false&tab=t.0&inspectorResult=%7B%22pc%22:49,%22lplc%22:9%7D&dat=AOBvIb0Bft2SLawzn3Tb67rir9MkkAYNwgVdK0eXtk8fm43D4FCKH7_J8Z_RFNU4KdyX28eVb_snXwlJloAO347zIrWAy-TO7q6sglrbtGxCCO1OBSx-ojstYdqbFAqoYvCoGod27u3Nlfgds5s_yUgAfrIJSh0OlX-Yf34psnU_M0R9B2FZfLXm68mYxtUR9dYMAgcSMEOFsmVXSK63CfyDJk3X34b0USpEtOKAm0ZXn1sK3RZhELrlcICEuDAjGlXASj61PlQDxw_MBykO9FcNjL7WGHf_Vbh_yXMIAViiZbRX2tyweDy18t3RFXngcVMpPqgcwHnk5IvNaDCqX3x1M9q9LywLTvtvUH2zTEMm0U2Vz2aMhb-UmPqlBZQVDa1hpesDo6eMb8vBGAHL3UPwaYfbiNwI0IxQUaucVETmWkkE0cNtxU3HhB8QKlkoXry1jYnpb4PHvVKA4DuWFqMXOqMfOKUezwN57zJPGXKmuImVQ4uQCN2U7e9nqOp8DvfWu-97TKC-c3DcXD2f9mWimCbqcEZp8VKlFT3d-iSUZeRyg0-5Ik-JxChx64SObkf1W7bgS1WUyG110O_6P_SFsE0o4_kQf9FayPJcnOE6k_GdyAaKVn1X5JGvndDXIkQg6XtHn52Da2NaFXYQfnYzRP0zAkSsOO-oQSPbvG55-VGJ4q9I-IVjG1F8SfyYlwJkbrPuEWVSRXZI_PgVsfNigQdSDlLPO45Fky56UV-OWANu_87yY-ItYH2WiQJQlDzNkpUKCCAqAvD1atIyqBUKvCKzqcsGhSPYzkyMRmCgQtjbZBVlN5W3Wwp_12M7_MiqJRw-_mHU6JETu9xD07hf4jJe6MWaw4IjPgfsAi9hc9iEUNOGEeH4V_ZcxyHQxDU4sE3aqqoNhAc2o0nd_v_ruOlKifUYGNYKWX20EVnqJ4ak7gKR_5T58d13ajacmSyAWlSpeAROs0ChrI1SHGND-4nLayiH826WPegr6g
|
201
gitfield-bitbucket
Executable file
201
gitfield-bitbucket
Executable file
|
@ -0,0 +1,201 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ CONFIGURATION │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
BITBUCKET_USER="mrhavens"
|
||||||
|
BITBUCKET_WORKSPACE="thefoldwithin"
|
||||||
|
REMOTE_NAME="bitbucket"
|
||||||
|
REPO_NAME=$(basename "$(pwd)")
|
||||||
|
EMAIL="mark.r.havens@gmail.com"
|
||||||
|
FULL_NAME="Mark Randall Havens"
|
||||||
|
APP_PASS_FILE="$HOME/.bitbucket_app_password"
|
||||||
|
API_URL="https://api.bitbucket.org/2.0/repositories/$BITBUCKET_WORKSPACE/$REPO_NAME"
|
||||||
|
SSH_REMOTE="git@bitbucket.org:$BITBUCKET_WORKSPACE/$REPO_NAME.git"
|
||||||
|
WEB_LINK="https://bitbucket.org/$BITBUCKET_WORKSPACE/$REPO_NAME"
|
||||||
|
SCRIPT_VERSION="1.0"
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ LOGGING UTILS │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
info() { echo -e "\n\e[1;34m[INFO]\e[0m $*"; }
|
||||||
|
warn() { echo -e "\n\e[1;33m[WARN]\e[0m $*"; }
|
||||||
|
error() { echo -e "\n\e[1;31m[ERROR]\e[0m $*" >&2; exit 1; }
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ OS + HARDWARE FINGERPRINT │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
OS_NAME=$(uname -s)
|
||||||
|
KERNEL_VERSION=$(uname -r)
|
||||||
|
ARCHITECTURE=$(uname -m)
|
||||||
|
OS_PRETTY_NAME=$(grep PRETTY_NAME /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"' || echo "Unknown")
|
||||||
|
DOCKER_CHECK=$(grep -qE '/docker|/lxc' /proc/1/cgroup 2>/dev/null && echo "Yes" || echo "No")
|
||||||
|
WSL_CHECK=$(grep -qi microsoft /proc/version 2>/dev/null && echo "Yes" || echo "No")
|
||||||
|
VM_CHECK=$(command -v systemd-detect-virt >/dev/null && systemd-detect-virt || echo "Unknown")
|
||||||
|
UPTIME=$(uptime -p 2>/dev/null || echo "Unknown")
|
||||||
|
HOSTNAME=$(hostname)
|
||||||
|
CURRENT_USER=$(whoami)
|
||||||
|
TIMEZONE=$(date +%Z)
|
||||||
|
LOCAL_IP=$(hostname -I | awk '{print $1}' || echo "Unknown")
|
||||||
|
MAC_ADDRESS=$(ip link show | awk '/ether/ {print $2; exit}' || echo "Unknown")
|
||||||
|
CPU_MODEL=$(grep -m1 "model name" /proc/cpuinfo | cut -d: -f2 | sed 's/^ //g' || echo "Unknown")
|
||||||
|
TOTAL_RAM=$(awk '/MemTotal/ {printf "%.2f", $2/1024/1024}' /proc/meminfo 2>/dev/null || echo "Unknown")
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ CHECK + INSTALL TOOLS │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
info "Checking prerequisites..."
|
||||||
|
sudo apt update -qq
|
||||||
|
sudo apt install -y git curl jq openssh-client || error "Dependency install failed"
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ GIT IDENTITY SETUP │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
git config --global user.name "$FULL_NAME"
|
||||||
|
git config --global user.email "$EMAIL"
|
||||||
|
info "Git identity: $FULL_NAME <$EMAIL>"
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ SSH KEYGEN + AGENT │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
if [ ! -f ~/.ssh/id_rsa ]; then
|
||||||
|
info "Generating new SSH key..."
|
||||||
|
ssh-keygen -t rsa -b 4096 -C "$EMAIL" -f ~/.ssh/id_rsa -N ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
eval "$(ssh-agent -s)"
|
||||||
|
ssh-add ~/.ssh/id_rsa || error "Failed to add SSH key"
|
||||||
|
ssh-keyscan -t rsa bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null || true
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ SSH AUTH VERIFICATION │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
info "Verifying SSH access to Bitbucket..."
|
||||||
|
if ssh -T git@bitbucket.org 2>&1 | grep -q "authenticated"; then
|
||||||
|
info "✓ SSH access to Bitbucket verified."
|
||||||
|
else
|
||||||
|
warn "❌ SSH key not authorized with Bitbucket."
|
||||||
|
echo "→ Visit: https://bitbucket.org/account/settings/ssh-keys/"
|
||||||
|
cat ~/.ssh/id_rsa.pub
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ BITBUCKET APP PASSWORD SETUP │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
if [ ! -f "$APP_PASS_FILE" ]; then
|
||||||
|
echo "🔐 Create a Bitbucket App Password (repo:admin + write + webhook)"
|
||||||
|
echo "→ https://bitbucket.org/account/settings/app-passwords/"
|
||||||
|
read -rsp "Enter Bitbucket App Password (input hidden): " APP_PASS
|
||||||
|
echo "$APP_PASS" > "$APP_PASS_FILE"
|
||||||
|
chmod 600 "$APP_PASS_FILE"
|
||||||
|
fi
|
||||||
|
APP_PASS=$(<"$APP_PASS_FILE")
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ GIT INIT & COMMIT │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
if [ ! -d .git ]; then
|
||||||
|
git init
|
||||||
|
git add .
|
||||||
|
git commit -m "Initial commit"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ CREATE REMOTE IF NOT EXISTS │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
REPO_EXISTS=$(curl -s -u "$BITBUCKET_USER:$APP_PASS" "$API_URL" | jq -r '.name // empty')
|
||||||
|
if [ -z "$REPO_EXISTS" ]; then
|
||||||
|
curl -s -u "$BITBUCKET_USER:$APP_PASS" -X POST "$API_URL" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"scm": "git", "is_private": false}'
|
||||||
|
fi
|
||||||
|
|
||||||
|
git remote remove "$REMOTE_NAME" 2>/dev/null || true
|
||||||
|
git remote add "$REMOTE_NAME" "$SSH_REMOTE"
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ WRITE METADATA MARKDOWN │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
DEFAULT_BRANCH=$(git symbolic-ref --short HEAD)
|
||||||
|
REPO_PATH=$(git rev-parse --show-toplevel)
|
||||||
|
mkdir -p "$REPO_PATH/.gitfield" && MARKDOWN_FILE="$REPO_PATH/.gitfield/bitbucket.sigil.md"
|
||||||
|
LATEST_SHA=$(git rev-parse HEAD)
|
||||||
|
LAST_COMMIT_MSG=$(git log -1 --pretty=format:"%s")
|
||||||
|
LAST_COMMIT_DATE=$(git log -1 --pretty=format:"%ad")
|
||||||
|
LAST_COMMIT_AUTHOR=$(git log -1 --pretty=format:"%an <%ae>")
|
||||||
|
TOTAL_COMMITS=$(git rev-list --count HEAD)
|
||||||
|
TRACKED_FILES=$(git ls-files | wc -l)
|
||||||
|
UNCOMMITTED=$(if ! git diff --quiet || ! git diff --cached --quiet; then echo "Yes"; else echo "No"; fi)
|
||||||
|
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "None")
|
||||||
|
|
||||||
|
cat > "$MARKDOWN_FILE" <<EOF
|
||||||
|
# 🔗 Bitbucket Repository Link
|
||||||
|
|
||||||
|
- **Repo Name**: \`$REPO_NAME\`
|
||||||
|
- **Bitbucket Workspace**: \`$BITBUCKET_WORKSPACE\`
|
||||||
|
- **Remote URL**: [$WEB_LINK]($WEB_LINK)
|
||||||
|
- **Local Repo Path**: \`$REPO_PATH\`
|
||||||
|
- **Remote Label**: \`$REMOTE_NAME\`
|
||||||
|
- **Default Branch**: \`$DEFAULT_BRANCH\`
|
||||||
|
- **This Commit Date**: \`$TIMESTAMP\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Commit Info
|
||||||
|
|
||||||
|
- **This Commit Timestamp**: \`$TIMESTAMP\`
|
||||||
|
- **Last Commit SHA**: \`$LATEST_SHA\`
|
||||||
|
- **Last Commit Message**: \`$LAST_COMMIT_MSG\`
|
||||||
|
- **Last Commit Author**: \`$LAST_COMMIT_AUTHOR\`
|
||||||
|
- **Last Commit Date**: \`$LAST_COMMIT_DATE\`
|
||||||
|
- **This Commit URL**: [$WEB_LINK/commits/$LATEST_SHA]($WEB_LINK/commits/$LATEST_SHA)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Repo Status
|
||||||
|
|
||||||
|
- **Total Commits**: \`$TOTAL_COMMITS\`
|
||||||
|
- **Tracked Files**: \`$TRACKED_FILES\`
|
||||||
|
- **Uncommitted Changes**: \`$UNCOMMITTED\`
|
||||||
|
- **Latest Tag**: \`$LATEST_TAG\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧭 Environment
|
||||||
|
|
||||||
|
- **Host Machine**: \`$HOSTNAME\`
|
||||||
|
- **Current User**: \`$CURRENT_USER\`
|
||||||
|
- **Time Zone**: \`$TIMEZONE\`
|
||||||
|
- **Script Version**: \`v$SCRIPT_VERSION\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧬 Hardware & OS Fingerprint
|
||||||
|
|
||||||
|
- **OS Name**: \`$OS_NAME\`
|
||||||
|
- **OS Version**: \`$OS_PRETTY_NAME\`
|
||||||
|
- **Kernel Version**: \`$KERNEL_VERSION\`
|
||||||
|
- **Architecture**: \`$ARCHITECTURE\`
|
||||||
|
- **CPU Model**: \`$CPU_MODEL\`
|
||||||
|
- **Total RAM (GB)**: \`$TOTAL_RAM\`
|
||||||
|
- **MAC Address**: \`$MAC_ADDRESS\`
|
||||||
|
- **Local IP**: \`$LOCAL_IP\`
|
||||||
|
- **Running in Docker**: \`$DOCKER_CHECK\`
|
||||||
|
- **Running in WSL**: \`$WSL_CHECK\`
|
||||||
|
- **Virtual Machine**: \`$VM_CHECK\`
|
||||||
|
- **System Uptime**: \`$UPTIME\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_Auto-generated by \`gitfield-bitbucket\` push script._
|
||||||
|
EOF
|
||||||
|
|
||||||
|
git add "$MARKDOWN_FILE"
|
||||||
|
git commit -m "Bitbucket metadata link commit at $TIMESTAMP — $WEB_LINK/commits/$LATEST_SHA" || warn "No changes to commit for $MARKDOWN_FILE"
|
||||||
|
|
||||||
|
git push -u "$REMOTE_NAME" "$DEFAULT_BRANCH"
|
||||||
|
echo -e "\n🔗 View in browser: $WEB_LINK\n"
|
193
gitfield-github
Executable file
193
gitfield-github
Executable file
|
@ -0,0 +1,193 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ CONFIGURATION │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
GIT_REMOTE_NAME="github"
|
||||||
|
REPO_NAME=$(basename "$(pwd)")
|
||||||
|
DEFAULT_NAME="Mark Randall Havens"
|
||||||
|
DEFAULT_EMAIL="mark.r.havens@gmail.com"
|
||||||
|
SCRIPT_VERSION="1.0"
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ LOGGING UTILS │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
info() { echo -e "\e[1;34m[INFO]\e[0m $*"; }
|
||||||
|
warn() { echo -e "\e[1;33m[WARN]\e[0m $*"; }
|
||||||
|
error() { echo -e "\e[1;31m[ERROR]\e[0m $*" >&2; exit 1; }
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ TOOLCHAIN SETUP │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
info "Checking for required tools..."
|
||||||
|
sudo apt update -qq
|
||||||
|
sudo apt install -y git curl jq openssh-client lsb-release || error "Tool install failed"
|
||||||
|
|
||||||
|
if ! command -v gh &>/dev/null; then
|
||||||
|
info "Installing GitHub CLI..."
|
||||||
|
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
|
||||||
|
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
|
||||||
|
echo "deb [arch=$(dpkg --print-architecture)] signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg https://cli.github.com/packages stable main" | \
|
||||||
|
sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
|
||||||
|
sudo apt update && sudo apt install gh -y || error "GitHub CLI install failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ AUTH + IDENTITY │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
if ! gh auth status &>/dev/null; then
|
||||||
|
gh auth login || error "GitHub authentication failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
git config --global user.name "${DEFAULT_NAME}"
|
||||||
|
git config --global user.email "${DEFAULT_EMAIL}"
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ SSH + GIT INIT │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
if [ ! -f "$HOME/.ssh/id_ed25519" ]; then
|
||||||
|
ssh-keygen -t ed25519 -C "$DEFAULT_EMAIL" -f "$HOME/.ssh/id_ed25519" -N ""
|
||||||
|
eval "$(ssh-agent -s)"
|
||||||
|
ssh-add "$HOME/.ssh/id_ed25519"
|
||||||
|
gh ssh-key add "$HOME/.ssh/id_ed25519.pub" --title "$(hostname)" || warn "Manual add may be needed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d .git ]; then
|
||||||
|
git init
|
||||||
|
git add .
|
||||||
|
git commit -m "Initial commit"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ GITHUB REPO CONFIGURATION │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
USERNAME=$(gh api user | jq -r .login)
|
||||||
|
SSH_REMOTE_URL="git@github.com:$USERNAME/$REPO_NAME.git"
|
||||||
|
WEB_LINK="https://github.com/$USERNAME/$REPO_NAME"
|
||||||
|
|
||||||
|
if ! git remote get-url "$GIT_REMOTE_NAME" &>/dev/null; then
|
||||||
|
if gh repo view "$USERNAME/$REPO_NAME" &>/dev/null; then
|
||||||
|
git remote add "$GIT_REMOTE_NAME" "$SSH_REMOTE_URL"
|
||||||
|
else
|
||||||
|
gh repo create "$REPO_NAME" --public --source=. --remote="$GIT_REMOTE_NAME" --push || error "Failed to create repo"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
git remote set-url "$GIT_REMOTE_NAME" "$SSH_REMOTE_URL"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ GIT METADATA SNAPSHOT │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
TIMESTAMP="$(date '+%Y-%m-%d %H:%M:%S')"
|
||||||
|
DEFAULT_BRANCH="$(git symbolic-ref --short HEAD)"
|
||||||
|
REPO_PATH="$(git rev-parse --show-toplevel)"
|
||||||
|
mkdir -p "$REPO_PATH/.gitfield" && MARKDOWN_FILE="$REPO_PATH/.gitfield/github.sigil.md"
|
||||||
|
LATEST_SHA=$(git rev-parse HEAD)
|
||||||
|
LAST_COMMIT_MSG=$(git log -1 --pretty=format:"%s")
|
||||||
|
LAST_COMMIT_DATE=$(git log -1 --pretty=format:"%ad")
|
||||||
|
LAST_COMMIT_AUTHOR=$(git log -1 --pretty=format:"%an <%ae>")
|
||||||
|
TOTAL_COMMITS=$(git rev-list --count HEAD)
|
||||||
|
TRACKED_FILES=$(git ls-files | wc -l)
|
||||||
|
UNCOMMITTED=$(if ! git diff --quiet || ! git diff --cached --quiet; then echo "Yes"; else echo "No"; fi)
|
||||||
|
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "None")
|
||||||
|
HOSTNAME=$(hostname)
|
||||||
|
CURRENT_USER=$(whoami)
|
||||||
|
TIMEZONE=$(date +%Z)
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ HARDWARE + OS FINGERPRINT BLOCK │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
OS_NAME=$(uname -s)
|
||||||
|
KERNEL_VERSION=$(uname -r)
|
||||||
|
ARCHITECTURE=$(uname -m)
|
||||||
|
OS_PRETTY_NAME=$(grep PRETTY_NAME /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"') || OS_PRETTY_NAME="Unknown"
|
||||||
|
DOCKER_CHECK=$(grep -qE '/docker|/lxc' /proc/1/cgroup 2>/dev/null && echo "Yes" || echo "No")
|
||||||
|
WSL_CHECK=$(grep -qi microsoft /proc/version 2>/dev/null && echo "Yes" || echo "No")
|
||||||
|
VM_CHECK=$(systemd-detect-virt 2>/dev/null || echo "Unknown")
|
||||||
|
UPTIME=$(uptime -p 2>/dev/null || echo "Unknown")
|
||||||
|
MAC_ADDR=$(ip link | awk '/ether/ {print $2}' | head -n 1)
|
||||||
|
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||||
|
CPU_MODEL=$(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2 | sed 's/^ //')
|
||||||
|
RAM_GB=$(awk '/MemTotal/ {printf "%.2f", $2/1024/1024}' /proc/meminfo)
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ WRITE RICH MARKDOWN ARTIFACT │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
cat > "$MARKDOWN_FILE" <<EOF
|
||||||
|
# 🔗 GitHub Repository Link
|
||||||
|
|
||||||
|
- **Repo Name**: \`$REPO_NAME\`
|
||||||
|
- **GitHub User**: \`$USERNAME\`
|
||||||
|
- **Remote URL**: [$WEB_LINK]($WEB_LINK)
|
||||||
|
- **Local Repo Path**: \`$REPO_PATH\`
|
||||||
|
- **Remote Label**: \`$GIT_REMOTE_NAME\`
|
||||||
|
- **Default Branch**: \`$DEFAULT_BRANCH\`
|
||||||
|
- **This Commit Date**: \`$TIMESTAMP\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Commit Info
|
||||||
|
|
||||||
|
- **This Commit Timestamp**: \`$TIMESTAMP\`
|
||||||
|
- **Last Commit SHA**: \`$LATEST_SHA\`
|
||||||
|
- **Last Commit Message**: \`$LAST_COMMIT_MSG\`
|
||||||
|
- **Last Commit Author**: \`$LAST_COMMIT_AUTHOR\`
|
||||||
|
- **Last Commit Date**: \`$LAST_COMMIT_DATE\`
|
||||||
|
- **This Commit URL**: [$WEB_LINK/commit/$LATEST_SHA]($WEB_LINK/commit/$LATEST_SHA)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Repo Status
|
||||||
|
|
||||||
|
- **Total Commits**: \`$TOTAL_COMMITS\`
|
||||||
|
- **Tracked Files**: \`$TRACKED_FILES\`
|
||||||
|
- **Uncommitted Changes**: \`$UNCOMMITTED\`
|
||||||
|
- **Latest Tag**: \`$LATEST_TAG\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧭 Environment
|
||||||
|
|
||||||
|
- **Host Machine**: \`$HOSTNAME\`
|
||||||
|
- **Current User**: \`$CURRENT_USER\`
|
||||||
|
- **Time Zone**: \`$TIMEZONE\`
|
||||||
|
- **Script Version**: \`v$SCRIPT_VERSION\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧬 Hardware & OS Fingerprint
|
||||||
|
|
||||||
|
- **OS Name**: \`$OS_NAME\`
|
||||||
|
- **OS Version**: \`$OS_PRETTY_NAME\`
|
||||||
|
- **Kernel Version**: \`$KERNEL_VERSION\`
|
||||||
|
- **Architecture**: \`$ARCHITECTURE\`
|
||||||
|
- **Running in Docker**: \`$DOCKER_CHECK\`
|
||||||
|
- **Running in WSL**: \`$WSL_CHECK\`
|
||||||
|
- **Virtual Machine**: \`$VM_CHECK\`
|
||||||
|
- **System Uptime**: \`$UPTIME\`
|
||||||
|
- **MAC Address**: \`$MAC_ADDR\`
|
||||||
|
- **Local IP**: \`$LOCAL_IP\`
|
||||||
|
- **CPU Model**: \`$CPU_MODEL\`
|
||||||
|
- **Total RAM (GB)**: \`$RAM_GB\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_Auto-generated by \`gitfield-github\` push script._
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ COMMIT & PUSH MARKDOWN FILE │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
git add "$MARKDOWN_FILE"
|
||||||
|
git commit -m "GitHub metadata link commit at $TIMESTAMP — $WEB_LINK/commit/$LATEST_SHA" || warn "No changes to commit for $MARKDOWN_FILE"
|
||||||
|
|
||||||
|
if ! git config --get branch."$DEFAULT_BRANCH".remote &>/dev/null; then
|
||||||
|
git push -u "$GIT_REMOTE_NAME" "$DEFAULT_BRANCH"
|
||||||
|
else
|
||||||
|
git push "$GIT_REMOTE_NAME" "$DEFAULT_BRANCH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
info "✅ GitHub push complete."
|
||||||
|
echo -e "\n🔗 View in browser: $WEB_LINK\n"
|
242
gitfield-gitlab
Executable file
242
gitfield-gitlab
Executable file
|
@ -0,0 +1,242 @@
|
||||||
|
#!/bin/bash
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
GIT_REMOTE_NAME="gitlab"
|
||||||
|
REPO_NAME=$(basename "$(pwd)") || REPO_NAME="Unknown"
|
||||||
|
DEFAULT_NAME="Mark Randall Havens"
|
||||||
|
DEFAULT_EMAIL="mark.r.havens@gmail.com"
|
||||||
|
GITLAB_WEB="https://gitlab.com"
|
||||||
|
GITLAB_API="$GITLAB_WEB/api/v4"
|
||||||
|
GITLAB_SSH="git@gitlab.com"
|
||||||
|
TOKEN_FILE="$HOME/.gitfield_token"
|
||||||
|
SCRIPT_VERSION="1.0"
|
||||||
|
MARKDOWN_FILE="$(git rev-parse --show-toplevel)/.gitfield/gitlab.sigil.md" && mkdir -p "$(dirname "$MARKDOWN_FILE")"
|
||||||
|
|
||||||
|
info() { echo -e "\e[1;34m[INFO]\e[0m $*"; }
|
||||||
|
warn() { echo -e "\e[1;33m[WARN]\e[0m $*"; }
|
||||||
|
error() { echo -e "\e[1;31m[ERROR]\e[0m $*" >&2; exit 1; }
|
||||||
|
|
||||||
|
# Function to generate markdown file
|
||||||
|
generate_markdown() {
|
||||||
|
info "Generating markdown file: $MARKDOWN_FILE"
|
||||||
|
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S' 2>/dev/null || echo "Unknown")
|
||||||
|
DEFAULT_BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null || echo "Unknown")
|
||||||
|
REPO_PATH=$(git rev-parse --show-toplevel)
|
||||||
|
LATEST_SHA=$(git rev-parse HEAD 2>/dev/null || echo "Unknown")
|
||||||
|
LAST_COMMIT_MSG=$(git log -1 --pretty=format:"%s" 2>/dev/null || echo "Unknown")
|
||||||
|
LAST_COMMIT_DATE=$(git log -1 --pretty=format:"%ad" 2>/dev/null || echo "Unknown")
|
||||||
|
LAST_COMMIT_AUTHOR=$(git log -1 --pretty=format:"%an <%ae>" 2>/dev/null || echo "Unknown")
|
||||||
|
TOTAL_COMMITS=$(git rev-list --count HEAD 2>/dev/null || echo "Unknown")
|
||||||
|
TRACKED_FILES=$(git ls-files 2>/dev/null | wc -l 2>/dev/null || echo "Unknown")
|
||||||
|
UNCOMMITTED=$(if ! git diff --quiet 2>/dev/null || ! git diff --cached --quiet 2>/dev/null; then echo "Yes"; else echo "No"; fi)
|
||||||
|
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "None")
|
||||||
|
HOSTNAME=$(hostname 2>/dev/null || echo "Unknown")
|
||||||
|
CURRENT_USER=$(whoami 2>/dev/null || echo "Unknown")
|
||||||
|
TIMEZONE=$(date +%Z 2>/dev/null || echo "Unknown")
|
||||||
|
OS_NAME=$(uname -s 2>/dev/null || echo "Unknown")
|
||||||
|
KERNEL_VERSION=$(uname -r 2>/dev/null || echo "Unknown")
|
||||||
|
ARCHITECTURE=$(uname -m 2>/dev/null || echo "Unknown")
|
||||||
|
OS_PRETTY_NAME=$(grep PRETTY_NAME /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"' || echo "Unknown")
|
||||||
|
DOCKER_CHECK=$(grep -qE '/docker|/lxc' /proc/1/cgroup 2>/dev/null && echo "Yes" || echo "No")
|
||||||
|
WSL_CHECK=$(grep -qi microsoft /proc/version 2>/dev/null && echo "Yes" || echo "No")
|
||||||
|
VM_CHECK=$(systemd-detect-virt 2>/dev/null || echo "Unknown")
|
||||||
|
UPTIME=$(uptime -p 2>/dev/null || echo "Unknown")
|
||||||
|
MAC_ADDR=$(ip link 2>/dev/null | awk '/ether/ {print $2}' | head -n 1 2>/dev/null || echo "Unknown")
|
||||||
|
LOCAL_IP=$(hostname -I 2>/dev/null | awk '{print $1}' 2>/dev/null || echo "Unknown")
|
||||||
|
CPU_MODEL=$(grep -m1 'model name' /proc/cpuinfo 2>/dev/null | cut -d: -f2 | sed 's/^ //' 2>/dev/null || echo "Unknown")
|
||||||
|
RAM_GB=$(awk '/MemTotal/ {printf "%.2f", $2/1024/1024}' /proc/meminfo 2>/dev/null || echo "Unknown")
|
||||||
|
WEB_LINK="$GITLAB_WEB/$USERNAME/$REPO_NAME"
|
||||||
|
|
||||||
|
cat > "$MARKDOWN_FILE" <<EOF
|
||||||
|
# 🔗 GitLab Repository Link
|
||||||
|
|
||||||
|
- **Repo Name**: \`$REPO_NAME\`
|
||||||
|
- **GitLab User**: \`$USERNAME\`
|
||||||
|
- **Remote URL**: [$WEB_LINK]($WEB_LINK)
|
||||||
|
- **Local Repo Path**: \`$REPO_PATH\`
|
||||||
|
- **Remote Label**: \`$GIT_REMOTE_NAME\`
|
||||||
|
- **Default Branch**: \`$DEFAULT_BRANCH\`
|
||||||
|
- **Repo Created**: \`$TIMESTAMP\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Commit Info
|
||||||
|
|
||||||
|
- **This Commit Timestamp**: \`$TIMESTAMP\`
|
||||||
|
- **This Commit SHA**: \`$LATEST_SHA\`
|
||||||
|
- **Last Commit Message**: \`$LAST_COMMIT_MSG\`
|
||||||
|
- **Last Commit Author**: \`$LAST_COMMIT_AUTHOR\`
|
||||||
|
- **Last Commit Date**: \`$LAST_COMMIT_DATE\`
|
||||||
|
- **This Commit URL**: [$WEB_LINK/-/commit/$LATEST_SHA]($WEB_LINK/-/commit/$LATEST_SHA)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Repo Status
|
||||||
|
|
||||||
|
- **Total Commits**: \`$TOTAL_COMMITS\`
|
||||||
|
- **Tracked Files**: \`$TRACKED_FILES\`
|
||||||
|
- **Uncommitted Changes**: \`$UNCOMMITTED\`
|
||||||
|
- **Latest Tag**: \`$LATEST_TAG\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧽 Environment
|
||||||
|
|
||||||
|
- **Host Machine**: \`$HOSTNAME\`
|
||||||
|
- **Current User**: \`$CURRENT_USER\`
|
||||||
|
- **Time Zone**: \`$TIMEZONE\`
|
||||||
|
- **Script Version**: \`v$SCRIPT_VERSION\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧬 Hardware & OS Fingerprint
|
||||||
|
|
||||||
|
- **OS Name**: \`$OS_NAME\`
|
||||||
|
- **OS Version**: \`$OS_PRETTY_NAME\`
|
||||||
|
- **Kernel Version**: \`$KERNEL_VERSION\`
|
||||||
|
- **Architecture**: \`$ARCHITECTURE\`
|
||||||
|
- **Running in Docker**: \`$DOCKER_CHECK\`
|
||||||
|
- **Running in WSL**: \`$WSL_CHECK\`
|
||||||
|
- **Virtual Machine**: \`$VM_CHECK\`
|
||||||
|
- **System Uptime**: \`$UPTIME\`
|
||||||
|
- **MAC Address**: \`$MAC_ADDR\`
|
||||||
|
- **Local IP**: \`$LOCAL_IP\`
|
||||||
|
- **CPU Model**: \`$CPU_MODEL\`
|
||||||
|
- **Total RAM (GB)**: \`$RAM_GB\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_Auto-generated by \`gitfield-gitlab\` push script._
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main script
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Token Handling
|
||||||
|
RESET_TOKEN=false
|
||||||
|
if [[ "${1:-}" == "--reset-token" ]]; then
|
||||||
|
RESET_TOKEN=true
|
||||||
|
rm -f "$TOKEN_FILE" 2>/dev/null || warn "Failed to remove token file"
|
||||||
|
info "Token reset requested."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$TOKEN_FILE" ] && [ "$RESET_TOKEN" = false ]; then
|
||||||
|
TOKEN=$(cat "$TOKEN_FILE" 2>/dev/null || error "Failed to read token file")
|
||||||
|
info "Using cached token from $TOKEN_FILE"
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
echo "🔐 Paste your GitLab Personal Access Token (scopes: api, read_user, write_repository, write_ssh_key)"
|
||||||
|
echo "→ Generate at: $GITLAB_WEB/-/user_settings/personal_access_tokens"
|
||||||
|
read -rp "🔑 Token: " TOKEN
|
||||||
|
echo "$TOKEN" > "$TOKEN_FILE" 2>/dev/null || warn "Failed to save token file"
|
||||||
|
chmod 600 "$TOKEN_FILE" 2>/dev/null || warn "Failed to set token file permissions"
|
||||||
|
info "Token saved for future use at $TOKEN_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install Dependencies
|
||||||
|
sudo apt update -qq 2>/dev/null || warn "apt update failed, continuing..."
|
||||||
|
sudo apt install -y git curl jq openssh-client lsb-release 2>/dev/null || warn "Tool install failed, continuing..."
|
||||||
|
|
||||||
|
# Identity
|
||||||
|
git config --global user.name "$DEFAULT_NAME" 2>/dev/null || warn "Failed to set git user name"
|
||||||
|
git config --global user.email "$DEFAULT_EMAIL" 2>/dev/null || warn "Failed to set git user email"
|
||||||
|
info "Git identity set to: $DEFAULT_NAME <$DEFAULT_EMAIL>"
|
||||||
|
|
||||||
|
# Git Initialization
|
||||||
|
if [ ! -d .git ]; then
|
||||||
|
git init 2>/dev/null || warn "Git init failed, continuing..."
|
||||||
|
git add . 2>/dev/null || warn "Nothing to add"
|
||||||
|
git commit -m "Initial commit" 2>/dev/null || warn "Nothing to commit"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! git rev-parse HEAD &>/dev/null; then
|
||||||
|
git add . 2>/dev/null && git commit -m "Initial commit" 2>/dev/null || warn "Nothing to commit"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# SSH Setup
|
||||||
|
if [ ! -f ~/.ssh/id_rsa ]; then
|
||||||
|
ssh-keygen -t rsa -b 4096 -C "$DEFAULT_EMAIL" -f ~/.ssh/id_rsa -N "" 2>/dev/null || error "SSH keygen failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
eval "$(ssh-agent -s 2>/dev/null)" || warn "Failed to start ssh-agent, continuing..."
|
||||||
|
ssh-add ~/.ssh/id_rsa 2>/dev/null || error "Failed to add SSH key"
|
||||||
|
|
||||||
|
# Fetch GitLab Username
|
||||||
|
USERNAME=$(curl -s --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_API/user" | jq -r '.username' 2>/dev/null) || error "Invalid token"
|
||||||
|
info "GitLab username: $USERNAME"
|
||||||
|
|
||||||
|
# SSH Key Upload to GitLab
|
||||||
|
SSH_TEST_OUTPUT=$(ssh -T "$GITLAB_SSH" 2>&1)
|
||||||
|
if ! echo "$SSH_TEST_OUTPUT" | grep -q "Welcome"; then
|
||||||
|
warn "SSH test failed, attempting to upload SSH key. Output: $SSH_TEST_OUTPUT"
|
||||||
|
PUBKEY=$(cat ~/.ssh/id_rsa.pub 2>/dev/null || warn "Failed to read SSH public key, continuing...")
|
||||||
|
TITLE="AutoKey-$(hostname)-$(date +%s 2>/dev/null || echo 'unknown')"
|
||||||
|
CURL_OUTPUT=$(curl -s --fail -X POST "$GITLAB_API/user/keys" \
|
||||||
|
-H "PRIVATE-TOKEN: $TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"title\": \"$TITLE\", \"key\": \"$PUBKEY\"}" 2>&1)
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
warn "SSH key upload failed: $CURL_OUTPUT"
|
||||||
|
else
|
||||||
|
info "SSH key uploaded successfully."
|
||||||
|
sleep 2
|
||||||
|
SSH_TEST_OUTPUT=$(ssh -T "$GITLAB_SSH" 2>&1)
|
||||||
|
if ! echo "$SSH_TEST_OUTPUT" | grep -q "Welcome"; then
|
||||||
|
warn "SSH test still failing after key upload. Output: $SSH_TEST_OUTPUT"
|
||||||
|
else
|
||||||
|
info "SSH test passed after key upload."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
info "SSH test passed: $SSH_TEST_OUTPUT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set Up Remote Repository (non-critical, allow failures)
|
||||||
|
set +e
|
||||||
|
REMOTE_URL="$GITLAB_SSH:$USERNAME/$REPO_NAME.git"
|
||||||
|
info "Checking if remote '$GIT_REMOTE_NAME' exists..."
|
||||||
|
REMOTE_EXISTS=$(git remote get-url "$GIT_REMOTE_NAME" 2>&1)
|
||||||
|
REMOTE_EXIT_CODE=$?
|
||||||
|
info "git remote get-url output: $REMOTE_EXISTS"
|
||||||
|
info "git remote get-url exit code: $REMOTE_EXIT_CODE"
|
||||||
|
|
||||||
|
if [[ $REMOTE_EXIT_CODE -ne 0 ]]; then
|
||||||
|
info "Remote '$GIT_REMOTE_NAME' not found, setting up..."
|
||||||
|
CURL_OUTPUT=$(curl -s --fail -X POST "$GITLAB_API/projects" \
|
||||||
|
-H "PRIVATE-TOKEN: $TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"name\": \"$REPO_NAME\", \"visibility\": \"public\"}" 2>&1)
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
warn "Failed to create GitLab project: $CURL_OUTPUT"
|
||||||
|
PROJECT_EXISTS=$(curl -s --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_API/projects?search=$REPO_NAME" | jq -r '.[] | select(.name == "'"$REPO_NAME"'") | .id' 2>&1)
|
||||||
|
if [[ $? -ne 0 || -z "$PROJECT_EXISTS" ]]; then
|
||||||
|
warn "Project creation failed and project does not exist: $PROJECT_EXISTS"
|
||||||
|
info "Proceeding with remote URL anyway: $REMOTE_URL"
|
||||||
|
else
|
||||||
|
info "Project already exists on GitLab."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
info "GitLab project created successfully."
|
||||||
|
fi
|
||||||
|
git remote add "$GIT_REMOTE_NAME" "$REMOTE_URL" 2>/dev/null || warn "Failed to add remote, but continuing..."
|
||||||
|
info "Remote set to: $REMOTE_URL"
|
||||||
|
else
|
||||||
|
info "Remote already configured: $REMOTE_EXISTS"
|
||||||
|
fi
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Generate markdown file (always run this step)
|
||||||
|
generate_markdown
|
||||||
|
|
||||||
|
# Commit and Push (non-critical, allow failures)
|
||||||
|
set +e
|
||||||
|
info "Committing markdown file..."
|
||||||
|
git add "$MARKDOWN_FILE" 2>/dev/null || warn "Failed to add markdown file"
|
||||||
|
git commit -m "GitLab metadata link commit at $TIMESTAMP — $WEB_LINK/-/commit/$LATEST_SHA" 2>/dev/null || warn "No changes to commit"
|
||||||
|
|
||||||
|
info "Pushing to GitLab..."
|
||||||
|
git push -u "$GIT_REMOTE_NAME" "$DEFAULT_BRANCH" 2>/dev/null || warn "Push to GitLab failed"
|
||||||
|
echo -e "\n🔗 View in browser: $WEB_LINK\n"
|
||||||
|
set -e
|
318
gitfield-radicle
Executable file
318
gitfield-radicle
Executable file
|
@ -0,0 +1,318 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
# ╭───────────────────────────────╮
|
||||||
|
# │ Config & Paths │
|
||||||
|
# ╰───────────────────────────────╯
|
||||||
|
PROJECT_NAME=$(basename "$(pwd)")
|
||||||
|
DEFAULT_NAME="Mark Randall Havens"
|
||||||
|
DEFAULT_EMAIL="mark.r.havens@gmail.com"
|
||||||
|
SCRIPT_VERSION="1.0"
|
||||||
|
|
||||||
|
RAD_HOME="$HOME/.radicle"
|
||||||
|
RAD_BIN="$RAD_HOME/bin/rad"
|
||||||
|
RAD_PATH_LINE='export PATH="$HOME/.radicle/bin:$PATH"'
|
||||||
|
PROFILE_FILE="$HOME/.bashrc"
|
||||||
|
PUSH_STATE_FILE="$(git rev-parse --show-toplevel)/.gitfield/.radicle-push-state"
|
||||||
|
MARKDOWN_FILE="$(git rev-parse --show-toplevel)/.gitfield/radicle.sigil.md"
|
||||||
|
mkdir -p "$(dirname "$MARKDOWN_FILE")"
|
||||||
|
PUBLIC_GATEWAY="https://app.radicle.xyz/nodes/ash.radicle.garden"
|
||||||
|
|
||||||
|
# ╭───────────────────────────────╮
|
||||||
|
# │ Logging Utils │
|
||||||
|
# ╰───────────────────────────────╯
|
||||||
|
info() { echo -e "\e[1;34m[INFO]\e[0m $*"; }
|
||||||
|
warn() { echo -e "\e[1;33m[WARN]\e[0m $*"; }
|
||||||
|
error() { echo -e "\e[1;31m[ERROR]\e[0m $*" >&2; exit 1; }
|
||||||
|
|
||||||
|
# ╭───────────────────────────────╮
|
||||||
|
# │ Git + Tools Precheck │
|
||||||
|
# ╰───────────────────────────────╯
|
||||||
|
info "Checking Git..."
|
||||||
|
command -v git >/dev/null || {
|
||||||
|
info "Installing Git..."
|
||||||
|
sudo apt update && sudo apt install -y git || error "Failed to install Git"
|
||||||
|
}
|
||||||
|
info "Git version: $(git --version)"
|
||||||
|
|
||||||
|
NAME=$(git config --global user.name || true)
|
||||||
|
EMAIL=$(git config --global user.email || true)
|
||||||
|
[[ -z "$NAME" || -z "$EMAIL" ]] && {
|
||||||
|
info "Setting Git identity..."
|
||||||
|
git config --global user.name "$DEFAULT_NAME"
|
||||||
|
git config --global user.email "$DEFAULT_EMAIL"
|
||||||
|
}
|
||||||
|
info "Git identity: $(git config --global user.name) <$(git config --global user.email)>"
|
||||||
|
|
||||||
|
# ╭───────────────────────────────╮
|
||||||
|
# │ Radicle CLI Setup │
|
||||||
|
# ╰───────────────────────────────╯
|
||||||
|
if [ ! -x "$RAD_BIN" ]; then
|
||||||
|
info "Installing Radicle CLI..."
|
||||||
|
sudo apt install -y curl jq unzip || error "Missing dependencies"
|
||||||
|
curl -sSf https://radicle.xyz/install | sh || error "Radicle install failed"
|
||||||
|
fi
|
||||||
|
export PATH="$HOME/.radicle/bin:$PATH"
|
||||||
|
if ! grep -Fxq "$RAD_PATH_LINE" "$PROFILE_FILE"; then
|
||||||
|
echo "$RAD_PATH_LINE" >> "$PROFILE_FILE"
|
||||||
|
info "→ Added PATH to $PROFILE_FILE"
|
||||||
|
warn "→ Run 'source $PROFILE_FILE' for persistent CLI access"
|
||||||
|
fi
|
||||||
|
command -v rad >/dev/null || error "Radicle CLI unavailable. Restart terminal or check PATH."
|
||||||
|
info "Radicle CLI ready: $(rad --version)"
|
||||||
|
|
||||||
|
# ╭───────────────────────────────╮
|
||||||
|
# │ Radicle Identity Check │
|
||||||
|
# ╰───────────────────────────────╯
|
||||||
|
info "Checking Radicle identity..."
|
||||||
|
RAD_SELF_OUTPUT=$(rad self 2>&1 || true)
|
||||||
|
if ! echo "$RAD_SELF_OUTPUT" | grep -q "DID"; then
|
||||||
|
info "Creating new Radicle identity..."
|
||||||
|
AUTH_OUTPUT=$(rad auth 2>&1) || error "Identity creation failed"
|
||||||
|
info "$AUTH_OUTPUT"
|
||||||
|
else
|
||||||
|
info "Radicle identity already exists."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ╭───────────────────────────────╮
|
||||||
|
# │ Start Rad Node │
|
||||||
|
# ╰───────────────────────────────╯
|
||||||
|
if ! pgrep -f "rad node" >/dev/null; then
|
||||||
|
info "Starting Radicle node..."
|
||||||
|
rad node start || error "Failed to start Radicle node"
|
||||||
|
else
|
||||||
|
info "✓ Node is already running."
|
||||||
|
fi
|
||||||
|
info "Waiting for Radicle node to be ready..."
|
||||||
|
for i in {1..30}; do
|
||||||
|
if rad node status >/dev/null 2>&1; then
|
||||||
|
info "Radicle node is ready."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
rad node status >/dev/null 2>&1 || error "Radicle node failed to start after 30s."
|
||||||
|
|
||||||
|
# ╭───────────────────────────────╮
|
||||||
|
# │ Git Repo Initialization │
|
||||||
|
# ╰───────────────────────────────╯
|
||||||
|
if [ ! -d .git ]; then
|
||||||
|
info "Initializing Git repository..."
|
||||||
|
git init
|
||||||
|
git add . || warn "Nothing to add"
|
||||||
|
git commit -m "Initial commit" || warn "Nothing to commit"
|
||||||
|
else
|
||||||
|
info "Git repo already initialized."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ╭───────────────────────────────╮
|
||||||
|
# │ Radicle Project Registration│
|
||||||
|
# ╰───────────────────────────────╯
|
||||||
|
if ! git remote | grep -q rad; then
|
||||||
|
info "Registering Radicle project '$PROJECT_NAME'..."
|
||||||
|
rad init --name "$PROJECT_NAME" --description "Radicle sovereign repo for $PROJECT_NAME" || error "Failed to initialize Radicle project"
|
||||||
|
else
|
||||||
|
info "Project '$PROJECT_NAME' already registered with Radicle."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ╭───────────────────────────────╮
|
||||||
|
# │ Extract Metadata │
|
||||||
|
# ╰───────────────────────────────╯
|
||||||
|
info "Extracting Radicle metadata..."
|
||||||
|
# Extract Project ID
|
||||||
|
PROJECT_ID=$(rad inspect | grep -o 'rad:[a-zA-Z0-9]\+' | cut -d':' -f2)
|
||||||
|
info "→ Project ID from rad inspect: $PROJECT_ID"
|
||||||
|
|
||||||
|
# Extract Peer ID
|
||||||
|
PEER_ID=""
|
||||||
|
# Try rad self first
|
||||||
|
if [[ -n "$RAD_SELF_OUTPUT" ]]; then
|
||||||
|
PEER_ID=$(echo "$RAD_SELF_OUTPUT" | grep -o 'z6M[a-zA-Z0-9]\+' || true)
|
||||||
|
info "→ Peer ID from rad self: $PEER_ID"
|
||||||
|
fi
|
||||||
|
# If rad self didn't provide it, try AUTH_OUTPUT if it exists
|
||||||
|
if [[ -z "$PEER_ID" && -n "${AUTH_OUTPUT:-}" ]]; then
|
||||||
|
PEER_ID=$(echo "$AUTH_OUTPUT" | grep -o 'z6M[a-zA-Z0-9]\+' || true)
|
||||||
|
info "→ Peer ID from rad auth: $PEER_ID"
|
||||||
|
fi
|
||||||
|
# If still empty, try rad node status as a last resort
|
||||||
|
if [[ -z "$PEER_ID" ]]; then
|
||||||
|
NODE_STATUS=$(rad node status 2>&1)
|
||||||
|
PEER_ID=$(echo "$NODE_STATUS" | grep -o 'z6M[a-zA-Z0-9]\+' || true)
|
||||||
|
info "→ Peer ID from rad node status: $PEER_ID"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Cross-check with Git remote
|
||||||
|
RAD_REMOTE=$(git remote -v | grep rad | head -n1 | awk '{print $2}' || true)
|
||||||
|
if [[ -n "$RAD_REMOTE" ]]; then
|
||||||
|
REMOTE_PROJECT_ID=$(echo "$RAD_REMOTE" | cut -d'/' -f3)
|
||||||
|
REMOTE_PEER_ID=$(echo "$RAD_REMOTE" | cut -d'/' -f4)
|
||||||
|
info "→ Project ID from Git remote: $REMOTE_PROJECT_ID"
|
||||||
|
info "→ Peer ID from Git remote: $REMOTE_PEER_ID"
|
||||||
|
[[ "$PROJECT_ID" != "$REMOTE_PROJECT_ID" ]] && warn "Project ID mismatch: rad inspect ($PROJECT_ID) vs remote ($REMOTE_PROJECT_ID)"
|
||||||
|
if [[ -z "$PEER_ID" && -n "$REMOTE_PEER_ID" ]]; then
|
||||||
|
PEER_ID="$REMOTE_PEER_ID"
|
||||||
|
info "→ Using Peer ID from Git remote as fallback: $PEER_ID"
|
||||||
|
elif [[ -n "$REMOTE_PEER_ID" && "$PEER_ID" != "$REMOTE_PEER_ID" ]]; then
|
||||||
|
warn "Peer ID mismatch: rad self ($PEER_ID) vs remote ($REMOTE_PEER_ID)"
|
||||||
|
PEER_ID="$REMOTE_PEER_ID" # Prefer the remote Peer ID as it's part of the actual repo URL
|
||||||
|
info "→ Using Peer ID from Git remote: $PEER_ID"
|
||||||
|
fi
|
||||||
|
PROJECT_ID="$REMOTE_PROJECT_ID" # Prefer the remote Project ID as it's the actual repo identifier
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Final validation
|
||||||
|
if [[ -z "$PROJECT_ID" || -z "$PEER_ID" ]]; then
|
||||||
|
error "Failed to determine Project ID ($PROJECT_ID) or Peer ID ($PEER_ID). Please check Radicle configuration."
|
||||||
|
fi
|
||||||
|
REPO_URN="rad://$PROJECT_ID"
|
||||||
|
info "✓ Metadata extracted successfully: Project ID: $PROJECT_ID, Peer ID: $PEER_ID"
|
||||||
|
|
||||||
|
# ╭───────────────────────────────╮
|
||||||
|
# │ Push Current Commit Logic │
|
||||||
|
# ╰───────────────────────────────╯
|
||||||
|
CURRENT_BRANCH=$(git symbolic-ref --short HEAD)
|
||||||
|
CURRENT_COMMIT=$(git rev-parse HEAD)
|
||||||
|
LAST_PUSHED_COMMIT=$(cat "$PUSH_STATE_FILE" 2>/dev/null || echo "none")
|
||||||
|
|
||||||
|
if [[ "$CURRENT_COMMIT" == "$LAST_PUSHED_COMMIT" ]]; then
|
||||||
|
info "✓ Already pushed commit: $CURRENT_COMMIT"
|
||||||
|
else
|
||||||
|
info "Pushing commit '$CURRENT_COMMIT' on branch '$CURRENT_BRANCH'..."
|
||||||
|
if git push rad "$CURRENT_BRANCH"; then
|
||||||
|
echo "$CURRENT_COMMIT" > "$PUSH_STATE_FILE"
|
||||||
|
info "✓ Pushed to Radicle successfully"
|
||||||
|
else
|
||||||
|
warn "Push failed — check 'rad sync status'"
|
||||||
|
error "Push failed, cannot proceed."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ Git Metadata Snapshot │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
TIMESTAMP="$(date '+%Y-%m-%d %H:%M:%S')"
|
||||||
|
DEFAULT_BRANCH="$CURRENT_BRANCH"
|
||||||
|
REPO_PATH="$(git rev-parse --show-toplevel)"
|
||||||
|
LATEST_SHA="$CURRENT_COMMIT"
|
||||||
|
LAST_COMMIT_MSG=$(git log -1 --pretty=format:"%s")
|
||||||
|
LAST_COMMIT_DATE=$(git log -1 --pretty=format:"%ad")
|
||||||
|
LAST_COMMIT_AUTHOR=$(git log -1 --pretty=format:"%an <%ae>")
|
||||||
|
TOTAL_COMMITS=$(git rev-list --count HEAD)
|
||||||
|
TRACKED_FILES=$(git ls-files | wc -l)
|
||||||
|
UNCOMMITTED=$(git diff --quiet && git diff --cached --quiet && echo "No" || echo "Yes")
|
||||||
|
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "None")
|
||||||
|
HOSTNAME=$(hostname)
|
||||||
|
CURRENT_USER=$(whoami)
|
||||||
|
TIMEZONE=$(date +%Z)
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ Hardware + OS Fingerprint Block │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
OS_NAME=$(uname -s)
|
||||||
|
KERNEL_VERSION=$(uname -r)
|
||||||
|
ARCHITECTURE=$(uname -m)
|
||||||
|
OS_PRETTY_NAME=$(grep PRETTY_NAME /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"' || echo "Unknown")
|
||||||
|
DOCKER_CHECK=$(grep -qE '/docker|/lxc' /proc/1/cgroup 2>/dev/null && echo "Yes" || echo "No")
|
||||||
|
WSL_CHECK=$(grep -qi microsoft /proc/version 2>/dev/null && echo "Yes" || echo "No")
|
||||||
|
VM_CHECK=$(systemd-detect-virt 2>/dev/null || echo "Unknown")
|
||||||
|
UPTIME=$(uptime -p 2>/dev/null || echo "Unknown")
|
||||||
|
MAC_ADDR=$(ip link | awk '/ether/ {print $2}' | head -n 1 || echo "Unknown")
|
||||||
|
LOCAL_IP=$(hostname -I | awk '{print $1}' || echo "Unknown")
|
||||||
|
CPU_MODEL=$(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2 | sed 's/^ //' || echo "Unknown")
|
||||||
|
RAM_GB=$(awk '/MemTotal/ {printf "%.2f", $2/1024/1024}' /proc/meminfo || echo "Unknown")
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ Write Rich Markdown Artifact │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
PUBLIC_GATEWAY_URL="$PUBLIC_GATEWAY/rad:$PROJECT_ID/tree/$LATEST_SHA"
|
||||||
|
cat > "$MARKDOWN_FILE" <<EOF
|
||||||
|
# 🔗 Radicle Repository Link
|
||||||
|
|
||||||
|
- **Project Name**: \`$PROJECT_NAME\`
|
||||||
|
- **Radicle URN**: \`$REPO_URN\`
|
||||||
|
- **Public Gateway**: [$PUBLIC_GATEWAY_URL]($PUBLIC_GATEWAY_URL)
|
||||||
|
- **Local Repo Path**: \`$REPO_PATH\`
|
||||||
|
- **Default Branch**: \`$DEFAULT_BRANCH\`
|
||||||
|
- **Repo Created**: \`$TIMESTAMP\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Commit Info
|
||||||
|
|
||||||
|
- **This Commit Timestamp**: \`$TIMESTAMP\`
|
||||||
|
- **Last Commit SHA**: \`$LATEST_SHA\`
|
||||||
|
- **Last Commit Message**: \`$LAST_COMMIT_MSG\`
|
||||||
|
- **Commit Author**: \`$LAST_COMMIT_AUTHOR\`
|
||||||
|
- **Commit Date**: \`$LAST_COMMIT_DATE\`
|
||||||
|
- **This Commit URL**: [$PUBLIC_GATEWAY_URL]($PUBLIC_GATEWAY_URL)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Repo Status
|
||||||
|
|
||||||
|
- **Total Commits**: \`$TOTAL_COMMITS\`
|
||||||
|
- **Tracked Files**: \`$TRACKED_FILES\`
|
||||||
|
- **Uncommitted Changes**: \`$UNCOMMITTED\`
|
||||||
|
- **Latest Tag**: \`$LATEST_TAG\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧭 Environment
|
||||||
|
|
||||||
|
- **Host Machine**: \`$HOSTNAME\`
|
||||||
|
- **Current User**: \`$CURRENT_USER\`
|
||||||
|
- **Time Zone**: \`$TIMEZONE\`
|
||||||
|
- **Script Version**: \`v$SCRIPT_VERSION\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧬 Hardware & OS Fingerprint
|
||||||
|
|
||||||
|
- **OS Name**: \`$OS_NAME\`
|
||||||
|
- **OS Version**: \`$OS_PRETTY_NAME\`
|
||||||
|
- **Kernel Version**: \`$KERNEL_VERSION\`
|
||||||
|
- **Architecture**: \`$ARCHITECTURE\`
|
||||||
|
- **Running in Docker**: \`$DOCKER_CHECK\`
|
||||||
|
- **Running in WSL**: \`$WSL_CHECK\`
|
||||||
|
- **Virtual Machine**: \`$VM_CHECK\`
|
||||||
|
- **System Uptime**: \`$UPTIME\`
|
||||||
|
- **MAC Address**: \`$MAC_ADDR\`
|
||||||
|
- **Local IP**: \`$LOCAL_IP\`
|
||||||
|
- **CPU Model**: \`$CPU_MODEL\`
|
||||||
|
- **Total RAM (GB)**: \`$RAM_GB\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌱 Radicle-Specific Metadata
|
||||||
|
|
||||||
|
- **Project ID**: \`$PROJECT_ID\`
|
||||||
|
- **Peer ID**: \`$PEER_ID\`
|
||||||
|
- **Public Gateway Base**: \`$PUBLIC_GATEWAY\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_Auto-generated by \`gitfield-radicle\` push script._
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# ╭───────────────────────────────╮
|
||||||
|
# │ Final Output Block │
|
||||||
|
# ╰───────────────────────────────╯
|
||||||
|
info "✓ Project ID: $PROJECT_ID"
|
||||||
|
info "→ Peer ID: $PEER_ID (Share to connect)"
|
||||||
|
info "🔗 View in browser: $PUBLIC_GATEWAY_URL"
|
||||||
|
|
||||||
|
# Commit the Markdown file if changed
|
||||||
|
if ! git diff --quiet "$MARKDOWN_FILE" 2>/dev/null || ! git ls-files "$MARKDOWN_FILE" --error-unmatch >/dev/null 2>&1; then
|
||||||
|
git add "$MARKDOWN_FILE"
|
||||||
|
git commit -m "Update Radicle metadata at $TIMESTAMP — $PUBLIC_GATEWAY_URL" || warn "No changes to commit for $MARKDOWN_FILE"
|
||||||
|
if git push rad "$CURRENT_BRANCH"; then
|
||||||
|
echo "$CURRENT_COMMIT" > "$PUSH_STATE_FILE"
|
||||||
|
info "✓ Pushed metadata update to Radicle"
|
||||||
|
else
|
||||||
|
warn "Metadata push failed — check 'rad sync status'"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
info "No changes to $MARKDOWN_FILE; skipping commit."
|
||||||
|
fi
|
185
gitfield-sync
Executable file
185
gitfield-sync
Executable file
|
@ -0,0 +1,185 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ CONFIGURATION │
|
||||||
|
# ╰─────────────────────────────────────╯
|
||||||
|
REPO_NAME=$(basename "$(pwd)")
|
||||||
|
REPO_PATH=$(git rev-parse --show-toplevel)
|
||||||
|
GITFIELD_DIR="$REPO_PATH/.gitfield"
|
||||||
|
LOG_FILE="$GITFIELD_DIR/pushed.log"
|
||||||
|
GITFIELD_MD="$REPO_PATH/GITFIELD.md"
|
||||||
|
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
SCRIPT_VERSION="1.0"
|
||||||
|
|
||||||
|
# URLs for each platform (derived from existing scripts)
|
||||||
|
GITHUB_URL="https://github.com/mrhavens/$REPO_NAME"
|
||||||
|
GITLAB_URL="https://gitlab.com/mrhavens/$REPO_NAME"
|
||||||
|
BITBUCKET_URL="https://bitbucket.org/thefoldwithin/$REPO_NAME"
|
||||||
|
RADICLE_PROJECT_ID="z45QC21eWL1F43VSbnV9AZbCZrHQJ" # From gitfield-radicle output
|
||||||
|
RADICLE_URL="https://app.radicle.xyz/nodes/ash.radicle.garden/rad:$RADICLE_PROJECT_ID"
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ LOGGING UTILS │
|
||||||
|
# ╰─────────────────────────────────────╮
|
||||||
|
info() { echo -e "\e[1;34m[INFO]\e[0m $*"; }
|
||||||
|
warn() { echo -e "\e[1;33m[WARN]\e[0m $*"; }
|
||||||
|
error() { echo -e "\e[1;31m[ERROR]\e[0m $*" >&2; exit 1; }
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ INITIAL SETUP │
|
||||||
|
# ╰─────────────────────────────────────╮
|
||||||
|
# Ensure .gitfield directory exists
|
||||||
|
mkdir -p "$GITFIELD_DIR"
|
||||||
|
|
||||||
|
# Initialize log file if it doesn't exist
|
||||||
|
if [ ! -f "$LOG_FILE" ]; then
|
||||||
|
echo "# Push Log for $REPO_NAME" > "$LOG_FILE"
|
||||||
|
echo "# Generated by gitfield-sync" >> "$LOG_FILE"
|
||||||
|
echo "" >> "$LOG_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ GENERATE GITFIELD.MD │
|
||||||
|
# ╰─────────────────────────────────────╮
|
||||||
|
generate_gitfield_md() {
|
||||||
|
info "Generating $GITFIELD_MD..."
|
||||||
|
cat > "$GITFIELD_MD" <<EOF
|
||||||
|
# 🌐 GitField Recursive Multi-Repository Strategy
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
The \`$REPO_NAME\` project employs a multi-repository strategy across four distinct platforms: **GitHub**, **GitLab**, **Bitbucket**, and **Radicle**. This approach ensures **redundancy**, **resilience**, and **sovereignty** of the project's data and metadata, protecting against deplatforming risks and preserving the integrity of the work. The strategy is a deliberate response to past deplatforming attempts by individuals such as **Mr. Joel Johnson** ([Mirror post](https://mirror.xyz/neutralizingnarcissism.eth/x40_zDWWrYOJ7nh8Y0fk06_3kNEP0KteSSRjPmXkiGg?utm_medium=social&utm_source=heylink.me)) and **Dr. Peter Gaied** ([Paragraph post](https://paragraph.com/@neutralizingnarcissism/%F0%9F%9C%81-the-narcissistic-messiah)), who have sought to undermine or suppress the work of **Mark Randall Havens** ([Substack post](https://theempathictechnologist.substack.com/p/mark-randall-havens-the-architect)). By distributing the repository across multiple platforms, we ensure its persistence and accessibility.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📍 Repository Platforms
|
||||||
|
|
||||||
|
The following platforms host the \`$REPO_NAME\` repository, each chosen for its unique strengths and contributions to the project's goals.
|
||||||
|
|
||||||
|
### 1. Radicle
|
||||||
|
- **URL**: [$RADICLE_URL]($RADICLE_URL)
|
||||||
|
- **Purpose**: Radicle is a decentralized, peer-to-peer git platform that ensures sovereignty and censorship resistance. It hosts the repository in a distributed network, independent of centralized servers.
|
||||||
|
- **Value**: Protects against deplatforming by eliminating reliance on centralized infrastructure, ensuring the project remains accessible in a decentralized ecosystem.
|
||||||
|
|
||||||
|
### 2. GitLab
|
||||||
|
- **URL**: [$GITLAB_URL]($GITLAB_URL)
|
||||||
|
- **Purpose**: GitLab offers a comprehensive DevOps platform with advanced CI/CD capabilities, private repository options, and robust access controls. It serves as a reliable backup and a platform for advanced automation workflows.
|
||||||
|
- **Value**: Enhances project resilience with its integrated CI/CD pipelines and independent infrastructure, reducing reliance on a single provider.
|
||||||
|
|
||||||
|
### 3. Bitbucket
|
||||||
|
- **URL**: [$BITBUCKET_URL]($BITBUCKET_URL)
|
||||||
|
- **Purpose**: Bitbucket provides a secure environment for repository hosting with strong integration into Atlassian’s ecosystem (e.g., Jira, Trello). It serves as an additional layer of redundancy and a professional-grade hosting option.
|
||||||
|
- **Value**: Offers enterprise-grade security and integration capabilities, ensuring the project remains accessible even if other platforms face disruptions.
|
||||||
|
|
||||||
|
### 4. GitHub
|
||||||
|
- **URL**: [$GITHUB_URL]($GITHUB_URL)
|
||||||
|
- **Purpose**: GitHub serves as the primary platform for visibility, collaboration, and community engagement. Its widespread adoption and robust tooling make it ideal for public-facing development, issue tracking, and integration with CI/CD pipelines.
|
||||||
|
- **Value**: Provides a centralized hub for open-source contributions, pull requests, and project management, ensuring broad accessibility and developer familiarity.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛡️ Rationale for Redundancy
|
||||||
|
|
||||||
|
The decision to maintain multiple repositories stems from the need to safeguard the project against **deplatforming attempts** and ensure its **long-term availability**. Past incidents involving **Mr. Joel Johnson** and **Dr. Peter Gaied** have highlighted the vulnerability of relying on a single platform. By distributing the repository across GitHub, GitLab, Bitbucket, and Radicle, we achieve:
|
||||||
|
|
||||||
|
- **Resilience**: If one platform removes or restricts access, the project remains accessible on others.
|
||||||
|
- **Sovereignty**: Radicle’s decentralized nature ensures the project cannot be fully censored or controlled by any single entity.
|
||||||
|
- **Diversity**: Each platform’s unique features (e.g., GitHub’s community, GitLab’s CI/CD, Bitbucket’s integrations, Radicle’s decentralization) enhance the project’s functionality and reach.
|
||||||
|
- **Transparency**: Metadata snapshots in the \`.gitfield\` directory provide a verifiable record of the project’s state across all platforms.
|
||||||
|
|
||||||
|
This multi-repository approach reflects a commitment to preserving the integrity and accessibility of \`$REPO_NAME\`, ensuring it remains available to contributors and users regardless of external pressures.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📜 Metadata and Logs
|
||||||
|
|
||||||
|
- **Metadata Files**: Each platform generates a metadata snapshot in the \`.gitfield\` directory (e.g., \`github.sigil.md\`, \`gitlab.sigil.md\`, etc.), capturing commit details, environment information, and hardware fingerprints.
|
||||||
|
- **Push Log**: The \`.gitfield/pushed.log\` file records the date, time, and URL of every push operation across all platforms, providing a transparent audit trail.
|
||||||
|
- **Recursive Sync**: The repository is synchronized across all platforms in a recursive loop (three cycles) to ensure interconnected metadata captures the latest state of the project.
|
||||||
|
- **Push Order**: The repository is synchronized in the following order: **Radicle → GitLab → Bitbucket → GitHub**. This prioritizes Radicle’s decentralized, censorship-resistant network as the primary anchor, followed by GitLab’s robust DevOps features, Bitbucket’s enterprise redundancy, and GitHub’s broad visibility, ensuring a resilient and accessible metadata chain.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_Auto-generated by \`gitfield-sync\` at $TIMESTAMP (v$SCRIPT_VERSION)._
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Add and commit GITFIELD.md
|
||||||
|
git add "$GITFIELD_MD"
|
||||||
|
git commit -m "Generated GITFIELD.md at $TIMESTAMP" || warn "No changes to commit for $GITFIELD_MD"
|
||||||
|
info "Generated and committed $GITFIELD_MD"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ LOG URL FUNCTION │
|
||||||
|
# ╰─────────────────────────────────────╮
|
||||||
|
log_url() {
|
||||||
|
local platform=$1
|
||||||
|
local url=$2
|
||||||
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
echo "[$timestamp] $platform: $url" >> "$LOG_FILE"
|
||||||
|
info "Logged push to $LOG_FILE: [$timestamp] $platform: $url"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ EXECUTE PUSH SCRIPT │
|
||||||
|
# ╰─────────────────────────────────────╮
|
||||||
|
execute_push() {
|
||||||
|
local script=$1
|
||||||
|
local platform=$2
|
||||||
|
local url=$3
|
||||||
|
info "Running $script for $platform..."
|
||||||
|
if [ -x "$script" ]; then
|
||||||
|
./"$script" || warn "Execution of $script failed, continuing..."
|
||||||
|
# Log the URL after successful push
|
||||||
|
log_url "$platform" "$url"
|
||||||
|
# Add and commit any new files generated by the script
|
||||||
|
git add . || warn "Nothing to add after $script"
|
||||||
|
git commit -m "Post-$platform sync at $TIMESTAMP" || warn "No changes to commit after $script"
|
||||||
|
else
|
||||||
|
error "Script $script is not executable or does not exist"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ RECURSIVE PUSH LOOP │
|
||||||
|
# ╰─────────────────────────────────────╮
|
||||||
|
run_push_cycle() {
|
||||||
|
local cycle_number=$1
|
||||||
|
info "Starting push cycle $cycle_number..."
|
||||||
|
|
||||||
|
# Push to each platform in order
|
||||||
|
execute_push "gitfield-radicle" "Radicle" "$RADICLE_URL"
|
||||||
|
execute_push "gitfield-gitlab" "GitLab" "$GITLAB_URL"
|
||||||
|
execute_push "gitfield-bitbucket" "Bitbucket" "$BITBUCKET_URL"
|
||||||
|
execute_push "gitfield-github" "GitHub" "$GITHUB_URL"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ╭─────────────────────────────────────╮
|
||||||
|
# │ MAIN EXECUTION │
|
||||||
|
# ╰─────────────────────────────────────╮
|
||||||
|
info "Starting gitfield-sync for $REPO_NAME..."
|
||||||
|
|
||||||
|
# Ensure the repository is initialized
|
||||||
|
if [ ! -d .git ]; then
|
||||||
|
git init
|
||||||
|
git add .
|
||||||
|
git commit -m "Initial commit" || warn "Nothing to commit"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run the first push cycle
|
||||||
|
run_push_cycle 1
|
||||||
|
|
||||||
|
# Generate GITFIELD.md after the first cycle
|
||||||
|
generate_gitfield_md
|
||||||
|
|
||||||
|
# Run the second push cycle to include GITFIELD.md
|
||||||
|
run_push_cycle 2
|
||||||
|
|
||||||
|
# Run the third push cycle for final metadata sync
|
||||||
|
run_push_cycle 3
|
||||||
|
|
||||||
|
info "✅ gitfield-sync completed successfully."
|
||||||
|
info "🔗 View logs: $LOG_FILE"
|
||||||
|
info "🔗 View multi-repo manifest: $GITFIELD_MD"
|
Loading…
Add table
Add a link
Reference in a new issue