Compare commits
1045 Commits
Author | SHA1 | Date |
---|---|---|
Claire | 1726085db5 | |
Eugen Rochko | 9cdc60ecc6 | |
Claire | 7316a08380 | |
Matt Jankowski | 8b7b0ee598 | |
Claire | 812a131423 | |
Matt Jankowski | dd934ebb07 | |
renovate[bot] | 738dba0cf7 | |
Matt Jankowski | 022d2a3793 | |
Eugen Rochko | fa0ba67753 | |
Eugen Rochko | c4af668e5c | |
renovate[bot] | 0c0d077276 | |
renovate[bot] | 0bc526a967 | |
renovate[bot] | 8c08e5cdb2 | |
Matt Jankowski | ce0d134147 | |
Matt Jankowski | 86fbde7b46 | |
Yamagishi Kazutoshi | b3075a9993 | |
Matt Jankowski | f91acba70a | |
renovate[bot] | 9d3830344f | |
Matt Jankowski | adcd693b71 | |
J H | 1467f1e1e1 | |
Matt Jankowski | ff8937aa2c | |
Matt Jankowski | 44f6d285af | |
Matt Jankowski | 239244e2ed | |
Matt Jankowski | 5119fbc9b7 | |
Matt Jankowski | b6baab447d | |
Matt Jankowski | 7adcc0aae3 | |
Matt Jankowski | 0b0ca6f3b8 | |
renovate[bot] | 87ad398ddc | |
renovate[bot] | f4a12adfb7 | |
renovate[bot] | 160c8f4923 | |
Matt Jankowski | e519f113e8 | |
Matt Jankowski | d791bca11b | |
Matt Jankowski | 09a3493fca | |
Matt Jankowski | 5fbdb2055b | |
Matt Jankowski | 1a30a517d6 | |
Matt Jankowski | 685eaa04d4 | |
Matt Jankowski | beb74fd71c | |
Matt Jankowski | beaef4b672 | |
Matt Jankowski | 6d35a77c92 | |
Matt Jankowski | 2f8656334d | |
Matt Jankowski | 9cc1817bb4 | |
Claire | 805dba7f8d | |
github-actions[bot] | 45287049ab | |
Matt Jankowski | 0e0a94f483 | |
Emelia Smith | 881e8c113c | |
Eugen Rochko | 6936e5aa69 | |
Matt Jankowski | 42ab855b23 | |
Matt Jankowski | 4cdf62e576 | |
Matt Jankowski | 0b38946c87 | |
Matt Jankowski | 17ea22671d | |
Eugen Rochko | 3205a654ca | |
Matt Jankowski | 274a48a9f4 | |
Matt Jankowski | 2866106ec1 | |
Matt Jankowski | c8f59d2ca4 | |
Matt Jankowski | ca7053f19c | |
github-actions[bot] | 59d2ea0d82 | |
Matt Jankowski | 6b6586f5d0 | |
renovate[bot] | a69506a434 | |
Matt Jankowski | 7c9c6c7f80 | |
renovate[bot] | 1a565e4bea | |
renovate[bot] | d158f7e622 | |
Claire | 087415d0fe | |
Claire | 0471a78055 | |
Claire | c50274a0ac | |
KMY(雪あすか) | 9a8293f58d | |
Matt Jankowski | 38f7f8b909 | |
renovate[bot] | 9c5be13980 | |
renovate[bot] | 7019af431d | |
renovate[bot] | 559bbf0aa6 | |
renovate[bot] | ea5397c373 | |
renovate[bot] | 64993d3f77 | |
Claire | 5a838ceaa9 | |
Matt Jankowski | 1290fede65 | |
renovate[bot] | 41c2af2270 | |
Eugen Rochko | b19ae521b7 | |
Matt Jankowski | 7a1f087659 | |
Matt Jankowski | a11a2fb052 | |
github-actions[bot] | a34d27c18f | |
Matt Jankowski | 9d413cbaf8 | |
Matt Jankowski | 599bc69503 | |
Eugen Rochko | 5b1eb09d54 | |
Eugen Rochko | 01ce9df880 | |
renovate[bot] | 61a0ec69fc | |
Matt Jankowski | c0e8e457ab | |
Matt Jankowski | ceade78182 | |
github-actions[bot] | 78ee1453f9 | |
Matt Jankowski | d03fe2bdee | |
Matt Jankowski | b0207d7757 | |
Matt Jankowski | defe5f4076 | |
Matt Jankowski | 67f54c4e75 | |
Claire | e2d9635074 | |
Matt Jankowski | 18004bf227 | |
Matt Jankowski | 7ecf7f5403 | |
Matt Jankowski | 5efb00ddb8 | |
github-actions[bot] | 76e383ea1e | |
Andy Piper | 9620b21259 | |
renovate[bot] | e078d0048c | |
renovate[bot] | a83aeccac9 | |
renovate[bot] | 9ff9849381 | |
renovate[bot] | 62001b5a31 | |
Emelia Smith | 3fbf01918f | |
Eugen Rochko | 9f8e3cca9a | |
Claire | 93957daa50 | |
Claire | cf2a2ed71c | |
Claire | 3593ee2e36 | |
Matt Jankowski | 5fc4ae7c5f | |
Matt Jankowski | 6a5d70e146 | |
github-actions[bot] | 9cd17020bc | |
renovate[bot] | 163db814c2 | |
Matt Jankowski | 4ec7d7d989 | |
Matt Jankowski | 329911b0a3 | |
HTeuMeuLeu | 86cc88c216 | |
renovate[bot] | 6a1c998722 | |
renovate[bot] | 6dc97321a3 | |
Matt Jankowski | fd64817fbe | |
Jonathan de Jong | de09176ab9 | |
Matt Jankowski | 1480573c83 | |
renovate[bot] | 5ae3bae586 | |
renovate[bot] | 244182ad63 | |
Emelia Smith | 1335083bed | |
Matt Jankowski | f866413e72 | |
Matt Jankowski | f0b93ab02f | |
Matt Jankowski | d0b3bc23d7 | |
Matt Jankowski | 0b853678a4 | |
Matt Jankowski | 2115bc52e4 | |
Matt Jankowski | 9fb9ef418a | |
Matt Jankowski | 81e4e65610 | |
Matt Jankowski | aaa6f2e930 | |
Matt Jankowski | da31792ac7 | |
Matt Jankowski | 3d82040b26 | |
Matt Jankowski | 6c5a2d51bc | |
Matt Jankowski | 07e10e3747 | |
Matt Jankowski | 89c9a4502d | |
renovate[bot] | 4c23297c04 | |
renovate[bot] | 83a90f20d7 | |
Matt Jankowski | 127503eb2c | |
Santiago Kozak | 30b193b856 | |
Matt Jankowski | 09f76c5c8d | |
Claire | e817fe4c35 | |
HTeuMeuLeu | 1a3859d8e2 | |
Matt Jankowski | 6fab50ba9e | |
github-actions[bot] | 1ab42ad12b | |
Matt Jankowski | 9a475ea8b3 | |
Renaud Chaput | cb5ac15923 | |
Claire | baab58c80b | |
Matt Jankowski | c523a9601b | |
Matt Jankowski | 1b0cb3b54d | |
renovate[bot] | afb5e6cf46 | |
renovate[bot] | 259874f2ac | |
Matt Jankowski | 0ce081fe49 | |
renovate[bot] | 8cc322a0e1 | |
renovate[bot] | bd538598c2 | |
renovate[bot] | 4e277f83dc | |
renovate[bot] | e85e2929aa | |
Renaud Chaput | 01b6c83c36 | |
Jeong Arm | f0abba67db | |
renovate[bot] | f09035cc3f | |
Matt Jankowski | b4c332104a | |
HTeuMeuLeu | 7f471e70c0 | |
Claire | 98b5f85f10 | |
Claire | e621c1c44c | |
Matt Jankowski | a2f02a0775 | |
renovate[bot] | b5afbe0a61 | |
renovate[bot] | 367be82a29 | |
Claire | 8cb4825c8b | |
renovate[bot] | 8013d6c56d | |
github-actions[bot] | 1012ffac9e | |
Claire | e81c5c0a51 | |
Emelia Smith | 58830be943 | |
Matt Jankowski | e72676e83a | |
Matt Jankowski | cc3ff66246 | |
Claire | 6bbcd9348e | |
Claire | 1070804a1a | |
MitarashiDango | 2c05b8a60d | |
Matt Jankowski | 28fdf93362 | |
Matt Jankowski | a90c134850 | |
Renaud Chaput | 608f66f978 | |
Renaud Chaput | c6684aa1e3 | |
Matt Jankowski | a90696011e | |
Matt Jankowski | 7801db7ba4 | |
github-actions[bot] | b86083f0dc | |
Matt Jankowski | df9e220364 | |
Matt Jankowski | cd37048439 | |
Matt Jankowski | 32eeca9c7b | |
Renaud Chaput | 923fc83190 | |
Matt Jankowski | 575ab085be | |
Renaud Chaput | 383be173af | |
Matt Jankowski | 8b26614fa7 | |
Matt Jankowski | 185c806d69 | |
Essem | b6e353537b | |
renovate[bot] | 22d866ee1b | |
Matt Jankowski | 2954279e9c | |
Matt Jankowski | 95bd46d32a | |
Matt Jankowski | b68f185573 | |
renovate[bot] | 782a0165c7 | |
Matt Jankowski | 3f3df9ab20 | |
Matt Jankowski | 4e08a4892f | |
Matt Jankowski | 87097a227c | |
Matt Jankowski | 55802242ce | |
github-actions[bot] | 204bbf49d2 | |
Matt Jankowski | 6daa69327b | |
Matt Jankowski | 0a7cff53c2 | |
Claire | d7e13e2483 | |
Matt Jankowski | 8422b8ded0 | |
Matt Jankowski | 543d7890fd | |
Matt Jankowski | 00341c70ff | |
Matt Jankowski | ea1c0feb86 | |
zunda | 36b46ea3b5 | |
Matt Jankowski | 742d8d30e2 | |
Matt Jankowski | a71e918e95 | |
Renaud Chaput | 63d0b52cf3 | |
renovate[bot] | 1f44903991 | |
Matt Jankowski | eed4eef39a | |
Matt Jankowski | 09ab073f0c | |
renovate[bot] | 9a73a7dcaf | |
renovate[bot] | 93938751eb | |
Claire | 10203bd57a | |
Matt Jankowski | 4e02838832 | |
renovate[bot] | 1ad908e0c0 | |
Jean Boussier | 1781849884 | |
github-actions[bot] | 01ca84e541 | |
gunchleoc | 173953c23e | |
Matt Jankowski | 5dc634796a | |
Matt Jankowski | 68f06f1fd4 | |
github-actions[bot] | 8e7d5fe2ac | |
renovate[bot] | f7b61959cf | |
Matt Jankowski | 557c27e03b | |
Matt Jankowski | cd4b4d4734 | |
Matt Jankowski | e677eb164c | |
Matt Jankowski | 3e43cd095c | |
Matt Jankowski | 9322396e58 | |
Matt Jankowski | cd58e37b25 | |
Matt Jankowski | 3e7a9266ea | |
Matt Jankowski | 4ccba94489 | |
Matt Jankowski | c52a593a30 | |
Matt Jankowski | e827c4692c | |
github-actions[bot] | cc67943df2 | |
Claire | 157fc69954 | |
Matt Jankowski | 1bc5a52139 | |
Matt Jankowski | aa6d07dbd9 | |
Matt Jankowski | 202951e6d9 | |
Matt Jankowski | 57f49c8191 | |
Matt Jankowski | 832b92ac3e | |
renovate[bot] | 2ae53e655c | |
renovate[bot] | 8a44b182e8 | |
renovate[bot] | 4ed663a94f | |
Renaud Chaput | a0e237a96f | |
renovate[bot] | fe2667bb0d | |
renovate[bot] | c9e6752158 | |
renovate[bot] | 8d06baf812 | |
Matt Jankowski | e09419f22a | |
Matt Jankowski | a27a82939d | |
renovate[bot] | 352625c491 | |
renovate[bot] | 8a312ad79b | |
Jean Boussier | 5a6d533c53 | |
Matt Jankowski | 12bed81187 | |
Matt Jankowski | b3dab17b58 | |
Matt Jankowski | e1b49d3454 | |
github-actions[bot] | 43d800ada6 | |
Claire | 6ad0fb5a77 | |
renovate[bot] | 9699ea22d6 | |
renovate[bot] | d537b3926f | |
renovate[bot] | 6b63652656 | |
renovate[bot] | 9ecf99df14 | |
Claire | 5f4643b895 | |
Matt Jankowski | 964a0ecf37 | |
Matt Jankowski | ae39bed95b | |
Claire | d0fd14f851 | |
Claire | 419c659bc4 | |
renovate[bot] | da7290839a | |
github-actions[bot] | bdf4750633 | |
Matt Jankowski | 1af5c37701 | |
Matt Jankowski | f06c1f1552 | |
renovate[bot] | 06374d07c3 | |
Emelia Smith | 9826b7780a | |
renovate[bot] | 9c268c9413 | |
renovate[bot] | 0f3f98c01f | |
renovate[bot] | 38e5d1b53f | |
Claire | dfdadb92e8 | |
Michael Stanclift | 195b89d336 | |
Matt Jankowski | f92d8c654d | |
Claire | 905794fd57 | |
Matt Jankowski | 5c769de096 | |
Matt Jankowski | 51d2b80ff7 | |
Matt Jankowski | 74a0d81e90 | |
Matt Jankowski | e12d8893f4 | |
Claire | 092bb8a27a | |
Claire | bd415af9a1 | |
github-actions[bot] | 7cce2a41f2 | |
renovate[bot] | 2b330ede22 | |
renovate[bot] | 8c5d3e5278 | |
renovate[bot] | c2b4588f1c | |
Matt Jankowski | 3944b12b5e | |
Claire | 65ea097f1d | |
Claire | 1184887b01 | |
renovate[bot] | cd09be054f | |
github-actions[bot] | 0374e11091 | |
Michael Stanclift | fdec8d7ffb | |
renovate[bot] | 1982137590 | |
renovate[bot] | c2340682aa | |
renovate[bot] | 629152a80d | |
renovate[bot] | 663a7b6ba9 | |
renovate[bot] | e082a98b4d | |
Michael Stanclift | c652b0e46b | |
Dennis Kamau | ac588daf37 | |
Claire | 6374358357 | |
Claire | fcfdeadc04 | |
Cal Moody | 3599622b5b | |
Matt Jankowski | ba5f659bb3 | |
renovate[bot] | fd57e40681 | |
github-actions[bot] | 7df9c4f6f3 | |
renovate[bot] | 5fd16c3ffd | |
renovate[bot] | 54ed01538e | |
Matt Jankowski | 128c5b7db3 | |
renovate[bot] | 63901bb34b | |
renovate[bot] | f7f7236fa2 | |
renovate[bot] | 87bf85ffdd | |
renovate[bot] | b01a027543 | |
renovate[bot] | f6f85b9521 | |
renovate[bot] | 3fbfc50f17 | |
renovate[bot] | de3fa293b0 | |
renovate[bot] | 07ab97d7f9 | |
renovate[bot] | 87e9e87a14 | |
Christian Winther | 01df9f1abb | |
renovate[bot] | 3f0140bbdf | |
renovate[bot] | 851a9b80c8 | |
renovate[bot] | fb58397a33 | |
renovate[bot] | f923eeb9b8 | |
Santiago Kozak | 1cba91d6d1 | |
Renaud Chaput | fb5eb1f655 | |
Claire | a2624ff739 | |
Matt Jankowski | bb8077e784 | |
Claire | 2bf84b93d4 | |
Matt Jankowski | a4d49c236d | |
Matt Jankowski | e6e217fedd | |
Matt Jankowski | 513d35969e | |
github-actions[bot] | e70a65761a | |
renovate[bot] | 43547cd210 | |
Renaud Chaput | 1c041356a1 | |
Matt Jankowski | 9251779d75 | |
Matt Jankowski | efd16f3c2c | |
Matt Jankowski | c99f88e1a8 | |
Matt Jankowski | cd64a5b2ec | |
Eugen Rochko | 5976d3702f | |
Matt Jankowski | f32d672d2f | |
Matt Jankowski | c753b1ad35 | |
renovate[bot] | 87e2bd02ac | |
github-actions[bot] | 9e5ddc1745 | |
Matt Jankowski | 2463b53363 | |
Eugen Rochko | 01f0a6ca4f | |
Claire | d29b1cca2e | |
Claire | ac04e62a0e | |
github-actions[bot] | fecc07856c | |
renovate[bot] | 9a24b12416 | |
Matt Jankowski | 961d65aba6 | |
Claire | 6fed0fcbaa | |
Matt Jankowski | c7c727994a | |
renovate[bot] | 5489d4c84c | |
renovate[bot] | 4075b4d7ee | |
Eugen Rochko | b5ac61b2c5 | |
renovate[bot] | b7bdcd4f39 | |
Matt Jankowski | c28976d89e | |
Renaud Chaput | 7b1d390734 | |
github-actions[bot] | fa987db738 | |
Claire | 3598c2e1db | |
Renaud Chaput | 8b1eeb2f90 | |
Matt Jankowski | 7cfc078198 | |
Matt Jankowski | 476d1237d4 | |
renovate[bot] | ab1201c9d9 | |
Claire | 7d9b209fe8 | |
Yamagishi Kazutoshi | f4b9c2ba40 | |
Matt Jankowski | af366f65ee | |
renovate[bot] | b2ca71f733 | |
Matt Jankowski | 0b42cf2979 | |
Matt Jankowski | 1820bad646 | |
Matt Jankowski | 2bd8d343cf | |
Matt Jankowski | 8e9e7d57d8 | |
Matt Jankowski | 0e5b8fc46b | |
Matt Jankowski | 89d468ada7 | |
Matt Jankowski | e56fb9e489 | |
renovate[bot] | fc4eaa779a | |
renovate[bot] | fad7dca0e4 | |
renovate[bot] | 43f637c130 | |
renovate[bot] | 287384b3bb | |
renovate[bot] | d099cf67c0 | |
github-actions[bot] | f99e05710e | |
Matt Jankowski | b1dec09d20 | |
Matt Jankowski | 3e336fe706 | |
Matt Jankowski | e5717c9bc6 | |
Matt Jankowski | 1ee8d1e50e | |
Matt Jankowski | db897eaa5a | |
Matt Jankowski | e17faedffb | |
Matt Jankowski | 1c3b5f4a78 | |
Matt Jankowski | ef9797a395 | |
Matt Jankowski | adbfd40a1b | |
Matt Jankowski | cd9ebf5f0f | |
Matt Jankowski | 28e1a7a394 | |
renovate[bot] | d791b47058 | |
Matt Jankowski | 8a3d8c6c14 | |
renovate[bot] | 3a59365e40 | |
renovate[bot] | 49150e2f1d | |
github-actions[bot] | b2f915b31a | |
renovate[bot] | aae4b5644f | |
Claire | dcc24db793 | |
Claire | 3f1ec16377 | |
renovate[bot] | db3220ff77 | |
Claire | f37c93f3d7 | |
Claire | 393e851649 | |
Matt Jankowski | 4a7395d989 | |
renovate[bot] | ca51e41239 | |
github-actions[bot] | 14e64bc880 | |
renovate[bot] | 8078520c76 | |
Claire | 89a496b42f | |
Claire | a8a5c6514f | |
Matt Jankowski | 2c6369918c | |
renovate[bot] | 9dfa940636 | |
Claire | f3864db409 | |
Matt Jankowski | b5a1013ae3 | |
renovate[bot] | 4ad2e87c48 | |
github-actions[bot] | 79a81da69c | |
Matt Jankowski | 0e4233de9d | |
Matt Jankowski | 0c64092500 | |
Matt Jankowski | 253393f3a8 | |
renovate[bot] | f5d6143aa1 | |
Matt Jankowski | 16ede59d0a | |
Matt Jankowski | 809506bdd4 | |
Matt Jankowski | 94cc707ab3 | |
Matt Jankowski | e544b6df42 | |
Matt Jankowski | a968898dc7 | |
Matt Jankowski | 8f94502e7d | |
Matt Jankowski | 78347d2556 | |
Matt Jankowski | 11d2bd9716 | |
renovate[bot] | b82fc8a2ca | |
renovate[bot] | a117155728 | |
renovate[bot] | 7ddd937330 | |
renovate[bot] | d0e7999a90 | |
renovate[bot] | bd88883b6e | |
Michael Stanclift | afc8550b63 | |
Matt Jankowski | 490e4969a1 | |
Matt Jankowski | a3cbb4b2f1 | |
github-actions[bot] | ca1b7efb06 | |
JakePaustian | f37a1535ef | |
Matt Jankowski | 8de86eabbf | |
Matt Jankowski | 7e514688b3 | |
Matt Jankowski | 8d8ae05a18 | |
Matt Jankowski | 3918dc68c7 | |
Michael Stanclift | da3d8aff79 | |
Matt Jankowski | ad34d33bfd | |
Ken Greeff | 5d97a897c8 | |
Matt Jankowski | 0b4a3a0437 | |
Matt Jankowski | 1d7b8234c9 | |
github-actions[bot] | e0dacf6b4c | |
Claire | 7593465c23 | |
renovate[bot] | 336d6260ba | |
renovate[bot] | 54db2006a9 | |
renovate[bot] | 5e8a38e254 | |
Claire | 658ad7a6ca | |
Matt Jankowski | af66d3d836 | |
renovate[bot] | 23b16aaab0 | |
Matt Jankowski | ee83d5c760 | |
Matt Jankowski | 42afd30324 | |
github-actions[bot] | 954169966b | |
Matt Jankowski | 0e8ba19113 | |
Matt Jankowski | ed7b5c091b | |
Matt Jankowski | be6bb1a10d | |
Matt Jankowski | 5517df61de | |
Matt Jankowski | faffd81976 | |
renovate[bot] | 3b710b96cf | |
renovate[bot] | 996c13a24d | |
github-actions[bot] | 4238ec844d | |
Jonathan de Jong | d0a5ebf914 | |
renovate[bot] | 2d2e23c68d | |
renovate[bot] | f944a767c4 | |
Matt Jankowski | 89a8e6e622 | |
Matt Jankowski | 71e5a16eba | |
Matt Jankowski | cca19f5fbb | |
Matt Jankowski | b3b009e6aa | |
renovate[bot] | 829457212e | |
Claire | a2bcfeb887 | |
Matt Jankowski | 9603198982 | |
Matt Jankowski | 1bf2230fd1 | |
Matt Jankowski | 19ad51253d | |
renovate[bot] | 154fb95e44 | |
Matt Jankowski | d848d8d87c | |
renovate[bot] | 3ec263bf15 | |
renovate[bot] | b4fef6c26f | |
renovate[bot] | 0ca7a50e96 | |
renovate[bot] | 456597dae5 | |
Matt Jankowski | 469ee2ae36 | |
Matt Jankowski | 3bc437b99a | |
Matt Jankowski | 5631f139c1 | |
Matt Jankowski | aa8563d43d | |
Matt Jankowski | d83d01eb1e | |
Matt Jankowski | a98fccf84e | |
Matt Jankowski | f70f39dd04 | |
Matt Jankowski | 1564799952 | |
Matt Jankowski | 7753e5f715 | |
Matt Jankowski | 92fa9b109f | |
Michael Stanclift | 272592d16d | |
Matt Jankowski | 440b80b2e7 | |
Matt Jankowski | b751078fcd | |
Michael Stanclift | 8710bdb183 | |
Claire | 963354978a | |
Matt Jankowski | 35deaaf90b | |
Matt Jankowski | 1f1c75bba5 | |
Matt Jankowski | 0530ce5e95 | |
Matt Jankowski | e7c340a634 | |
Matt Jankowski | a8473f582d | |
Claire | b20af17a2c | |
Claire | 85662a5a57 | |
Matt Jankowski | bb0efe16e6 | |
renovate[bot] | 02a98210e8 | |
renovate[bot] | 0212e0cfbf | |
Claire | 7faa27e17d | |
Matt Jankowski | ce78a9c9ac | |
Filippo Giunchedi | e6fd9a59e6 | |
renovate[bot] | c761cc4738 | |
Matt Jankowski | b696ca6b1a | |
Filippo Giunchedi | 6e55ff9643 | |
Matt Jankowski | e48ecd2929 | |
Matt Jankowski | 291dc04e67 | |
Matt Jankowski | a1636fce7f | |
Matt Jankowski | 31bef99b9e | |
Matt Jankowski | 72b7cd349c | |
Matt Jankowski | 9b47c5d53c | |
Matt Jankowski | 186895fc88 | |
renovate[bot] | 3e1e41054b | |
Emelia Smith | 603b245cc6 | |
Michael Stanclift | c40cfc5d09 | |
Michael Stanclift | 7a3b41eb54 | |
Matt Jankowski | 6b46bf9953 | |
Matt Jankowski | b9492d84a0 | |
Matt Jankowski | b45fe15c06 | |
Josh Goldberg ✨ | 3a7f10c3f1 | |
Josh Goldberg ✨ | 1142f4c79e | |
Renaud Chaput | cdc7894243 | |
Emelia Smith | a4de0e364b | |
Emelia Smith | 4949b6da58 | |
Michael Stanclift | a80530d1df | |
Renaud Chaput | 8ebc94dd22 | |
Matt Jankowski | baf3b71e3b | |
renovate[bot] | c824d98cec | |
github-actions[bot] | af02484714 | |
Matt Jankowski | 9072896ae5 | |
Matt Jankowski | dfc7154767 | |
Matt Jankowski | 2d536bb05f | |
6543 | 10b879bd5e | |
Claire | f1657e6d62 | |
renovate[bot] | 7b56085f11 | |
Matt Jankowski | 9b8ba9b350 | |
renovate[bot] | b8fe77353e | |
renovate[bot] | 228b668446 | |
June | 97e677f993 | |
renovate[bot] | 73ab080608 | |
github-actions[bot] | fad9343bab | |
github-actions[bot] | 8521238677 | |
Claire | 3a24754229 | |
Claire | 6e70819840 | |
Matt Jankowski | 19baf22683 | |
renovate[bot] | bf7e8e81de | |
renovate[bot] | 1ee3314f58 | |
Kevin Bongart | 7877fcd83c | |
Matt Jankowski | 973597c6f1 | |
github-actions[bot] | c810b197ad | |
Matt Jankowski | 4be12791e6 | |
renovate[bot] | 990c63b440 | |
github-actions[bot] | d3ed03fd6b | |
Matt Jankowski | 9742bccbe7 | |
renovate[bot] | 183afc2465 | |
renovate[bot] | c3d3ada07b | |
Eugen Rochko | cdc57c74b7 | |
Emelia Smith | c9ffdcbaa2 | |
Matt Jankowski | 67fd3187b3 | |
Matt Jankowski | 30ee4aaff4 | |
renovate[bot] | f91e751383 | |
Matt Jankowski | 32e19e3af6 | |
Matt Jankowski | f7cb64a184 | |
Claire | 32319187ee | |
renovate[bot] | c836e71218 | |
Matt Jankowski | b2e8af8889 | |
Matt Jankowski | 6d51ac246b | |
github-actions[bot] | 3c3e0c25ef | |
Matt Jankowski | a6d446e6a7 | |
renovate[bot] | e1bb79718b | |
Matt Jankowski | 876f5b1d12 | |
Matt Jankowski | 718c95e7af | |
Claire | c260a68f54 | |
renovate[bot] | 18cb1f9196 | |
Matt Jankowski | 17582d36d5 | |
Matt Jankowski | 9a01a260a0 | |
Matt Jankowski | b9fb47aeb1 | |
renovate[bot] | 3a8dc9a5c6 | |
Matt Jankowski | 371f355719 | |
Matt Jankowski | d2aacea8da | |
Matt Jankowski | 00c6ebd86f | |
Matt Jankowski | 1fabf20a88 | |
renovate[bot] | 12c22ee5e7 | |
renovate[bot] | 6464b7cc45 | |
Matt Jankowski | 09a2db3f6c | |
github-actions[bot] | 8ceae2bce6 | |
renovate[bot] | 135c4d8250 | |
renovate[bot] | d75c7ac5a8 | |
renovate[bot] | 6d60b936ad | |
Tim Campbell | 60f143e41f | |
Matt Jankowski | e892efbc40 | |
Claire | 297839c10c | |
Claire | 9257737675 | |
Eugen Rochko | 0e9801443f | |
Matt Jankowski | 549e8e7baf | |
github-actions[bot] | 9c68741f46 | |
Matt Jankowski | 1526e54ac6 | |
renovate[bot] | 6c2e78f1b1 | |
renovate[bot] | 94178e2f68 | |
Matt Jankowski | cb1a4a8713 | |
Matt Jankowski | 155fb84141 | |
Claire | 0a6ec048a8 | |
Claire | c94bedf4e6 | |
Eugen Rochko | 87696ea26e | |
github-actions[bot] | 7232d4750d | |
Matt Jankowski | 8a285413f7 | |
Matt Jankowski | 3f0c1566c3 | |
Matt Jankowski | c1f93def40 | |
renovate[bot] | 669a7157cb | |
renovate[bot] | 91a05f3cad | |
Matt Jankowski | 04121bd020 | |
Matt Jankowski | 3de9145613 | |
Claire | bd575a1dd6 | |
Matt Jankowski | 12a5b7391d | |
Matt Jankowski | fe58ac8d9f | |
Eugen Rochko | d67bd44ca1 | |
github-actions[bot] | d8074128f9 | |
Jeong Arm | 922f086253 | |
renovate[bot] | 5d75799afa | |
Renaud Chaput | b6f29106ea | |
Matt Jankowski | 7c72944661 | |
renovate[bot] | 998f068499 | |
Emelia Smith | 15b2d7eec5 | |
Nick Schonning | 36d7d1781f | |
renovate[bot] | 35b9749b95 | |
ppnplus | 2b038b4f89 | |
Matt Jankowski | 7e1a77ea51 | |
Matt Jankowski | b2c5b20ef2 | |
Matt Jankowski | d562fb8459 | |
renovate[bot] | 4eb4e8b22c | |
github-actions[bot] | c1e071f634 | |
Matt Jankowski | 1f8173ac5a | |
renovate[bot] | 373aa95ddd | |
Matt Jankowski | 5e2ecc736d | |
Brian Holley | 4aa06cbdbf | |
Matt Jankowski | b7807f3d84 | |
Claire | bac9e0b55d | |
Matt Jankowski | 49ba5a9f94 | |
Matt Jankowski | 0945e25b8f | |
renovate[bot] | da59407520 | |
renovate[bot] | a1b48460e4 | |
Eugen Rochko | 7e3c10dec6 | |
Matt Jankowski | a36b59be8a | |
renovate[bot] | 0c98a9d9be | |
pajowu | ed79713f3a | |
Claire | 07a4059901 | |
renovate[bot] | 5bca5c4c5b | |
github-actions[bot] | e5a7b73ef4 | |
renovate[bot] | a7117bbef6 | |
renovate[bot] | 3b989e4d64 | |
Renaud Chaput | da4f37020b | |
Eugen Rochko | 0d14fcebae | |
Matt Jankowski | 9dc3ce878b | |
github-actions[bot] | ac62b995ef | |
Matt Jankowski | 43e2f763b2 | |
Matt Jankowski | ac69f90098 | |
renovate[bot] | fba838d61a | |
Aleks Xhuvani | 7840c6b75b | |
Matt Jankowski | e79bf1b1e7 | |
Matt Jankowski | 9429e30d75 | |
Claire | c451bbe249 | |
Michael Stanclift | b87bfb8c96 | |
Matt Jankowski | 548bb30b2a | |
Claire | 9b06c0f24a | |
Matt Jankowski | 63c9102f8a | |
renovate[bot] | dec2796a4a | |
renovate[bot] | 4812832620 | |
renovate[bot] | 23d88aa943 | |
Yamagishi Kazutoshi | 220a2e8fbf | |
github-actions[bot] | d6c971e158 | |
Matt Jankowski | ce1bd81c85 | |
Matt Jankowski | c9204b792c | |
Matt Jankowski | c875dfc90b | |
renovate[bot] | 5af47fbff8 | |
Matt Jankowski | 69d00e2721 | |
Matt Jankowski | 4329616c53 | |
Jaehong Kang | c73d5a6075 | |
Matt Jankowski | 13c3e59601 | |
Matt Jankowski | b05575e242 | |
Matt Jankowski | ce91d14d48 | |
Matt Jankowski | c03bd2a238 | |
github-actions[bot] | 5c328ae674 | |
Matt Jankowski | 9b7b4d748f | |
Matt Jankowski | 7d6bcc0615 | |
Matt Jankowski | 33cc3ae8fa | |
Renaud Chaput | 757d7c73c0 | |
Claire | 23e32a4b30 | |
Matt Jankowski | e545978076 | |
Matt Jankowski | 790f6356be | |
João Pedro Marques | d3cd37d73e | |
renovate[bot] | 389a6cc4c0 | |
renovate[bot] | 14e49e5e36 | |
renovate[bot] | 565d9a6cf3 | |
renovate[bot] | 8b0d86d407 | |
renovate[bot] | ac9f92bd73 | |
renovate[bot] | b36b35318a | |
renovate[bot] | bcdfb72686 | |
renovate[bot] | 4b8aee7ad8 | |
renovate[bot] | 1341790207 | |
renovate[bot] | b2619a10a5 | |
renovate[bot] | 110ace0474 | |
renovate[bot] | feea257f44 | |
renovate[bot] | b41e9b1d29 | |
Jasmin Johal | 27cbdc6f22 | |
Aleks Xhuvani | 58f01a5c9a | |
Matt Jankowski | ee57bb4b44 | |
Matt Jankowski | ae7c20b00c | |
Matt Jankowski | 02d27de5ce | |
Matt Jankowski | 370802ce48 | |
Matt Jankowski | 1d51e10510 | |
Matt Jankowski | a688a9ed20 | |
Matt Jankowski | dc0bf87090 | |
Renaud Chaput | f476d9dab2 | |
Matt Jankowski | 45770c9306 | |
Matt Jankowski | bbad5b6456 | |
Matt Jankowski | 49e2772064 | |
Renaud Chaput | ae0d551d33 | |
Matt Jankowski | 2862ad701f | |
Matt Jankowski | 2d39268bc5 | |
Matt Jankowski | cfa14ec6d1 | |
Matt Jankowski | b06284c572 | |
github-actions[bot] | 1b28ab7263 | |
Matt Jankowski | d6f50839e1 | |
Matt Jankowski | c501d626e8 | |
Matt Jankowski | 0c4e7c06dc | |
Matt Jankowski | fe26f33e0a | |
Matt Jankowski | 949f5eb860 | |
zunda | e4e752c26e | |
renovate[bot] | 9c34bb4d54 | |
renovate[bot] | 0ca27b2d81 | |
renovate[bot] | 22b4713d2e | |
Renaud Chaput | 3bf896c973 | |
renovate[bot] | 1416745a2b | |
renovate[bot] | afd1371fa3 | |
renovate[bot] | ef140da349 | |
Claire | c0989b78f8 | |
Renaud Chaput | 6712bf86cd | |
Renaud Chaput | 3bf2a7296e | |
Matt Jankowski | 9d799d40ba | |
Matt Jankowski | 5d9e71ebe0 | |
github-actions[bot] | 2d548e273e | |
Claire | 0337df3a42 | |
Renaud Chaput | 2aa28e06d1 | |
mogaminsk | ac8e4ed38d | |
Renaud Chaput | 277e6968f5 | |
Matt Jankowski | 7ef56d6e50 | |
Matt Jankowski | 3107a9410c | |
Matt Jankowski | b264318431 | |
Renaud Chaput | 0e3401bc1c | |
Claire | 9c8891b39a | |
Matt Jankowski | a916251d8a | |
Claire | d649bbf28f | |
github-actions[bot] | e5b7ae9576 | |
renovate[bot] | 147417a6d0 | |
renovate[bot] | 204c00b5c6 | |
Matt Jankowski | beee9ea991 | |
Claire | 6c52f8286b | |
renovate[bot] | b8adb08f92 | |
renovate[bot] | 372494e553 | |
renovate[bot] | 547d3c1b9b | |
renovate[bot] | c2cc1df5ef | |
github-actions[bot] | a918208ec6 | |
renovate[bot] | bf1d452978 | |
Ricardo Trindade | 33f8c1c5eb | |
Matt Jankowski | eae5c7334a | |
Matt Jankowski | 2e6bf60f15 | |
Jonathan de Jong | 1cc512909c | |
Claire | 93e4cdc31b | |
SouthFox | 08bdd5751e | |
renovate[bot] | 15ef654e9a | |
Renaud Chaput | 13d310e64d | |
Matt Jankowski | 1f5187e2e2 | |
renovate[bot] | 37929b9707 | |
github-actions[bot] | 8ca16f032e | |
Claire | bbf46cc418 | |
Jeong Arm | 8f998cd96a | |
Eugen Rochko | fa7e64df1d | |
Matt Jankowski | 12550a6a28 | |
Matt Jankowski | 4aa05d45fc | |
Simon Rapilly | 2d8f759a34 | |
Claire | d2f52f7f64 | |
Mark T. Tomczak | ba8dcb50fe | |
Claire | 75255c01fc | |
github-actions[bot] | 3427b51d63 | |
Renaud Chaput | 537442853f | |
Matt Jankowski | 3ca974e101 | |
renovate[bot] | 400f5c9174 | |
renovate[bot] | 6e018f7228 | |
Claire | 49b8433c56 | |
Matt Jankowski | 9a3d047f3e | |
Claire | 235a4cfdc8 | |
Renaud Chaput | a4e6fe36cb | |
Matt Jankowski | 70dbf84b9b | |
Claire | fa65c8244f | |
Matt Jankowski | c926f5fd67 | |
github-actions[bot] | c85e0a6b04 | |
renovate[bot] | f261b6499f | |
Matt Jankowski | cec7f0ed72 | |
Renaud Chaput | cb92cdf9af | |
Renaud Chaput | f08ca3f042 | |
Matt Jankowski | bc3afb6311 | |
Eugen Rochko | 134de736dc | |
Michael Stanclift | b1885387b6 | |
Claire | 15182d1e5e | |
Renaud Chaput | 6cf9f1211b | |
Matt Jankowski | 714e3ae5b5 | |
github-actions[bot] | 50b7ea810e | |
Matt Jankowski | e923bb9ec9 | |
Matt Jankowski | 4fdc548fa5 | |
たいち ひ | 9482810703 | |
Matt Jankowski | e93a75f1a1 | |
Claire | 379115e601 | |
Daniel M Brasil | 26d2a2a0cc | |
Eugen Rochko | d9503a1965 | |
Claire | 79a63201a9 | |
Renaud Chaput | fc7734df8d | |
Matt Jankowski | 3cfdab6b48 | |
renovate[bot] | d5408dbb54 | |
Claire | 8b770ce811 | |
Claire | 44edf3aa91 | |
Claire | 99f2534cee | |
Claire | c3e0eb3699 | |
Claire | bcae744275 | |
renovate[bot] | 53fd28b889 | |
renovate[bot] | f7b34707a8 | |
renovate[bot] | 25751c653e | |
renovate[bot] | 132204031f | |
renovate[bot] | bb5bae186f | |
renovate[bot] | 69d3318055 | |
renovate[bot] | cd08b436ab | |
renovate[bot] | 6f1eb89d21 | |
renovate[bot] | 6f429d3f1b | |
renovate[bot] | 773133befa | |
Claire | 0ad66175bf | |
github-actions[bot] | 70fd819935 | |
Matt Jankowski | b0213472df | |
Renaud Chaput | 9d45a444f9 | |
Matt Jankowski | ab0fb81479 | |
Claire | 13688539bc | |
github-actions[bot] | 284c719f64 | |
Eugen Rochko | 33bd8eccd5 | |
Renaud Chaput | 1b70d7ed7c | |
Renaud Chaput | 126cd7705d | |
Matt Jankowski | 9f218c9924 | |
Matt Jankowski | bcd0171e5e | |
Daniel M Brasil | 7bc8f03162 | |
github-actions[bot] | 1ffd5a98a9 | |
Brian Campbell | f76e5111f0 | |
Renaud Chaput | 10df97c542 | |
Claire | 510845b6b9 | |
Matt Jankowski | a1b27d8b61 | |
Emelia Smith | 7c3fea7275 | |
github-actions[bot] | 4612576c68 | |
Matt Jankowski | 63a2a4b074 | |
Daniel M Brasil | 091a21e1bc | |
Claire | e9dc30cdba | |
Nick Schonning | 5ef26d8fd5 | |
Matt Jankowski | 71447ab19f | |
renovate[bot] | 0036de46bc | |
Jeong Arm | ad44d832b8 | |
Matt Jankowski | 2528a0721f | |
renovate[bot] | 1996fb6fd6 | |
Matt Jankowski | 65cd0700e4 | |
Claire | b34a2b1b33 | |
Jeong Arm | c0cda1adaf | |
Renaud Chaput | 1fb4e40145 | |
Stanislas Signoud | 935d54124e | |
Victor Lee | c4bddc9855 | |
Matt Jankowski | 12bb7be8b5 | |
Matt Jankowski | d54fec24e5 | |
Matt Jankowski | 19900f647e | |
Claire | 1084703417 | |
Matt Jankowski | fc9ab61448 | |
Matt Jankowski | 33b073f77d | |
Matt Jankowski | 8d0f12f776 | |
Matt Jankowski | 893b2f33fd | |
Matt Jankowski | 708299bb0d | |
Daniel M Brasil | e0ed0f8c7c | |
Matt Jankowski | 08a376cbcb | |
Matt Jankowski | c91c0175db | |
Daniel M Brasil | cafdaec6cf | |
Daniel M Brasil | 8e6116503d | |
Daniel M Brasil | d9caa6ed24 | |
Matt Jankowski | f5bc1f20e2 | |
Matt Jankowski | f8afa0f614 | |
Matt Jankowski | 00e92b4038 | |
Claire | 299aa71c8f | |
Wladimir Palant | 23f8e93c64 | |
github-actions[bot] | 13456efd7b | |
renovate[bot] | a00fc83701 | |
renovate[bot] | f0ef87b84d | |
Renaud Chaput | e0da64bb4e | |
Daniel M Brasil | 82beeb2f7e | |
Matt Jankowski | 1b195ce115 | |
Claire | 71cfdd7865 | |
Matt Jankowski | cad8cc90ba | |
Daniel M Brasil | 058f73a4f5 | |
Matt Jankowski | abf0e1fa39 | |
Daniel M Brasil | bc6cd27d9e | |
Matt Jankowski | fd9dea21d0 | |
Daniel M Brasil | ecdb31d479 | |
Daniel M Brasil | 7664e3b692 | |
Daniel M Brasil | 4230d1ee0a | |
Renaud Chaput | 77098c6f1c | |
renovate[bot] | 5c287c4958 | |
KMY(雪あすか) | 45bdd60f3c | |
github-actions[bot] | 773d25e8df | |
renovate[bot] | 6a9aab38d7 | |
Matt Jankowski | 133f218a4d | |
Claire | c86ad45660 | |
github-actions[bot] | c348b904a5 | |
Matt Jankowski | d4c2dca874 | |
renovate[bot] | 85b36fbbd3 | |
Matt Jankowski | d7a8f6b658 | |
github-actions[bot] | f1ae72ba46 | |
renovate[bot] | d0a3331caa | |
François Hodierne | 608cd66239 | |
renovate[bot] | 1afb7f4104 | |
Matt Jankowski | f9abe700e7 | |
renovate[bot] | 0111e48893 | |
Matt Jankowski | 66becf9a1e | |
Claire | 7d2cd7195b | |
Claire | 27e84c0691 | |
Claire | 9d1c3d0678 | |
github-actions[bot] | 1a2a4c389f | |
renovate[bot] | 1745c582f8 | |
Claire | 4c2aca777f | |
Renaud Chaput | 774e1189d2 | |
Claire | c310374a2f | |
github-actions[bot] | 89b48681cf | |
renovate[bot] | 5fc5a548b4 | |
renovate[bot] | eabe839744 | |
Andy Piper | 640421f661 | |
Claire | 3262d1f1b6 | |
Michael Stanclift | 3171afc36a | |
Claire | 340c390849 | |
Claire | 4d59dfb1c6 | |
github-actions[bot] | e0b54ed3e1 | |
renovate[bot] | 027c1bef8d | |
Renaud Chaput | c4cff3d762 | |
Matt Jankowski | 165ec6c779 | |
renovate[bot] | 5606a17933 | |
Claire | 2b98e2ecd6 | |
github-actions[bot] | 32ab474472 | |
Claire | 3c13d70600 | |
renovate[bot] | d22515861e | |
Claire | 40ba6e119b | |
github-actions[bot] | 8e4251f9e7 | |
Matt Jankowski | 72cec47c13 | |
gunchleoc | 68ec1d180a | |
Matt Jankowski | c676bc91e9 | |
Matt Jankowski | 2f8f92df48 | |
Nick Schonning | 85db392464 | |
Matt Jankowski | e715da6d25 | |
Nick Schonning | 8bb4706e11 | |
Claire | 37bbd3c106 | |
Claire | ceb365c419 | |
Claire | 4e55001e65 | |
Michael Stanclift | 5a437edc7f | |
David Aaron | 6320c52630 | |
jsgoldstein | ad637eacd1 | |
renovate[bot] | e836d078bb | |
Jakob Gillich | 770fd993ec | |
github-actions[bot] | e95d25e101 | |
Claire | 5e56f3db65 | |
Claire | 7e7d6e695b | |
Claire | 1e2d4975cf | |
github-actions[bot] | ee866ec0e0 | |
Emelia Smith | f68d540271 | |
renovate[bot] | 5f2d494f0d | |
Jake Anto | c2f13769cd | |
renovate[bot] | bad1629dcd | |
renovate[bot] | 73a92f9e7a | |
renovate[bot] | 829be02abe | |
Claire | d80a819fc6 | |
renovate[bot] | 5393be7a21 | |
renovate[bot] | 48ef7d0f06 | |
renovate[bot] | 9b785877d2 | |
github-actions[bot] | 695e42de0d | |
renovate[bot] | 665093a7b6 | |
renovate[bot] | a1becc9189 | |
Matt Jankowski | 340f1a68be | |
Matt Jankowski | 2016c5d912 | |
Matt Jankowski | 99e289f03f | |
Matt Jankowski | 89a17878ef | |
renovate[bot] | f9eefb2785 | |
Matt Jankowski | 9d56c1949b | |
Matt Jankowski | 3060bfa4bd | |
Matt Jankowski | 937dc42f10 | |
Matt Jankowski | 56c0babc0b | |
Matt Jankowski | e6b903b21e | |
Claire | 1da3c588ca | |
Claire | 686406cc2d | |
Claire | f0c720cfc9 | |
github-actions[bot] | b93ce7d8b3 | |
Christian Schmidt | 6d0767558a | |
renovate[bot] | 66a7bc215c | |
renovate[bot] | 0f588a4a86 | |
Michael Stanclift | 7fddeca190 | |
renovate[bot] | 2979a5924b | |
gunchleoc | ce79caca4e | |
Renaud Chaput | 57f592fed5 | |
renovate[bot] | 2054ee7cd5 | |
Claire | 82eaa26d87 | |
renovate[bot] | fdc9f971f7 | |
github-actions[bot] | 5ea3e8e765 | |
renovate[bot] | 33a066a952 | |
Essem | bd810391d6 | |
renovate[bot] | 530f48610d | |
renovate[bot] | cdd8c4eb2a | |
renovate[bot] | 8ea98aa384 | |
renovate[bot] | 19bc73b736 | |
renovate[bot] | cf9230fa1c | |
Claire | 06444c86c7 | |
Claire | a001ae2f39 | |
Claire | 3de6dcf634 | |
Claire | 38753acaa5 | |
Claire | 1bd7455d81 | |
gunchleoc | 88fa8e710a | |
renovate[bot] | aeeddb9d46 | |
renovate[bot] | 82c44f492d | |
github-actions[bot] | 736fe75346 | |
renovate[bot] | c56d7d702f | |
renovate[bot] | a4c29a4e51 | |
renovate[bot] | 1fa40cff70 | |
Renaud Chaput | 4b7bc1f07c | |
Renaud Chaput | b93ffb74bb | |
Claire | 39da3d86f8 | |
github-actions[bot] | e824585523 | |
Renaud Chaput | 4aaaf0dde3 | |
Renaud Chaput | a011d3a7c6 |
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
ignore:
|
||||||
|
# devise-two-factor advisory about brute-forcing TOTP
|
||||||
|
# We have rate-limits on authentication endpoints in place (including second
|
||||||
|
# factor verification) since Mastodon v3.2.0
|
||||||
|
- CVE-2024-0227
|
|
@ -4,7 +4,7 @@ FROM mcr.microsoft.com/devcontainers/ruby:1-3.2-bullseye
|
||||||
# Install Rails
|
# Install Rails
|
||||||
# RUN gem install rails webdrivers
|
# RUN gem install rails webdrivers
|
||||||
|
|
||||||
ARG NODE_VERSION="16"
|
ARG NODE_VERSION="20"
|
||||||
RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"
|
RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"
|
||||||
|
|
||||||
# [Optional] Uncomment this section to install additional OS packages.
|
# [Optional] Uncomment this section to install additional OS packages.
|
||||||
|
@ -15,6 +15,6 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
||||||
RUN gem install foreman
|
RUN gem install foreman
|
||||||
|
|
||||||
# [Optional] Uncomment this line to install global node packages.
|
# [Optional] Uncomment this line to install global node packages.
|
||||||
RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g yarn" 2>&1
|
RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && corepack enable" 2>&1
|
||||||
|
|
||||||
COPY welcome-message.txt /usr/local/etc/vscode-dev-containers/first-run-notice.txt
|
COPY welcome-message.txt /usr/local/etc/vscode-dev-containers/first-run-notice.txt
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
|
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
|
||||||
|
|
||||||
"features": {
|
"features": {
|
||||||
"ghcr.io/devcontainers/features/sshd:1": {}
|
"ghcr.io/devcontainers/features/sshd:1": {},
|
||||||
},
|
},
|
||||||
|
|
||||||
"runServices": ["app", "db", "redis"],
|
"runServices": ["app", "db", "redis"],
|
||||||
|
@ -15,16 +15,16 @@
|
||||||
"portsAttributes": {
|
"portsAttributes": {
|
||||||
"3000": {
|
"3000": {
|
||||||
"label": "web",
|
"label": "web",
|
||||||
"onAutoForward": "notify"
|
"onAutoForward": "notify",
|
||||||
},
|
},
|
||||||
"4000": {
|
"4000": {
|
||||||
"label": "stream",
|
"label": "stream",
|
||||||
"onAutoForward": "silent"
|
"onAutoForward": "silent",
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
"otherPortsAttributes": {
|
"otherPortsAttributes": {
|
||||||
"onAutoForward": "silent"
|
"onAutoForward": "silent",
|
||||||
},
|
},
|
||||||
|
|
||||||
"remoteEnv": {
|
"remoteEnv": {
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
"STREAMING_API_BASE_URL": "https://${localEnv:CODESPACE_NAME}-4000.app.github.dev",
|
"STREAMING_API_BASE_URL": "https://${localEnv:CODESPACE_NAME}-4000.app.github.dev",
|
||||||
"DISABLE_FORGERY_REQUEST_PROTECTION": "true",
|
"DISABLE_FORGERY_REQUEST_PROTECTION": "true",
|
||||||
"ES_ENABLED": "",
|
"ES_ENABLED": "",
|
||||||
"LIBRE_TRANSLATE_ENDPOINT": ""
|
"LIBRE_TRANSLATE_ENDPOINT": "",
|
||||||
},
|
},
|
||||||
|
|
||||||
"onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
|
"onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
"customizations": {
|
"customizations": {
|
||||||
"vscode": {
|
"vscode": {
|
||||||
"settings": {},
|
"settings": {},
|
||||||
"extensions": ["EditorConfig.EditorConfig", "webben.browserslist"]
|
"extensions": ["EditorConfig.EditorConfig", "webben.browserslist"],
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
|
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
|
||||||
|
|
||||||
"features": {
|
"features": {
|
||||||
"ghcr.io/devcontainers/features/sshd:1": {}
|
"ghcr.io/devcontainers/features/sshd:1": {},
|
||||||
},
|
},
|
||||||
|
|
||||||
"forwardPorts": [3000, 4000],
|
"forwardPorts": [3000, 4000],
|
||||||
|
@ -14,17 +14,17 @@
|
||||||
"3000": {
|
"3000": {
|
||||||
"label": "web",
|
"label": "web",
|
||||||
"onAutoForward": "notify",
|
"onAutoForward": "notify",
|
||||||
"requireLocalPort": true
|
"requireLocalPort": true,
|
||||||
},
|
},
|
||||||
"4000": {
|
"4000": {
|
||||||
"label": "stream",
|
"label": "stream",
|
||||||
"onAutoForward": "silent",
|
"onAutoForward": "silent",
|
||||||
"requireLocalPort": true
|
"requireLocalPort": true,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
"otherPortsAttributes": {
|
"otherPortsAttributes": {
|
||||||
"onAutoForward": "silent"
|
"onAutoForward": "silent",
|
||||||
},
|
},
|
||||||
|
|
||||||
"onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
|
"onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
"customizations": {
|
"customizations": {
|
||||||
"vscode": {
|
"vscode": {
|
||||||
"settings": {},
|
"settings": {},
|
||||||
"extensions": ["EditorConfig.EditorConfig", "webben.browserslist"]
|
"extensions": ["EditorConfig.EditorConfig", "webben.browserslist"],
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ services:
|
||||||
hard: -1
|
hard: -1
|
||||||
|
|
||||||
libretranslate:
|
libretranslate:
|
||||||
image: libretranslate/libretranslate:v1.3.11
|
image: libretranslate/libretranslate:v1.5.4
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- lt-data:/home/libretranslate/.local
|
- lt-data:/home/libretranslate/.local
|
||||||
|
|
|
@ -11,7 +11,8 @@ bundle install
|
||||||
git checkout -- Gemfile.lock
|
git checkout -- Gemfile.lock
|
||||||
|
|
||||||
# Fetch Javascript dependencies
|
# Fetch Javascript dependencies
|
||||||
yarn --frozen-lockfile
|
corepack prepare
|
||||||
|
yarn install --immutable
|
||||||
|
|
||||||
# [re]create, migrate, and seed the test database
|
# [re]create, migrate, and seed the test database
|
||||||
RAILS_ENV=test ./bin/rails db:setup
|
RAILS_ENV=test ./bin/rails db:setup
|
||||||
|
@ -23,4 +24,4 @@ RAILS_ENV=development ./bin/rails db:setup
|
||||||
RAILS_ENV=development ./bin/rails assets:precompile
|
RAILS_ENV=development ./bin/rails assets:precompile
|
||||||
|
|
||||||
# Precompile assets for test
|
# Precompile assets for test
|
||||||
RAILS_ENV=test NODE_ENV=tests ./bin/rails assets:precompile
|
RAILS_ENV=test ./bin/rails assets:precompile
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
public/system
|
public/system
|
||||||
public/assets
|
public/assets
|
||||||
public/packs
|
public/packs
|
||||||
|
public/packs-test
|
||||||
node_modules
|
node_modules
|
||||||
neo4j
|
neo4j
|
||||||
vendor/bundle
|
vendor/bundle
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# Node.js
|
# In test, compile the NodeJS code as if we are in production
|
||||||
NODE_ENV=tests
|
NODE_ENV=production
|
||||||
# Federation
|
# Federation
|
||||||
LOCAL_DOMAIN=cb6e6126.ngrok.io
|
LOCAL_DOMAIN=cb6e6126.ngrok.io
|
||||||
LOCAL_HTTPS=true
|
LOCAL_HTTPS=true
|
||||||
|
|
41
.eslintrc.js
41
.eslintrc.js
|
@ -1,4 +1,7 @@
|
||||||
module.exports = {
|
// @ts-check
|
||||||
|
const { defineConfig } = require('eslint-define-config');
|
||||||
|
|
||||||
|
module.exports = defineConfig({
|
||||||
root: true,
|
root: true,
|
||||||
|
|
||||||
extends: [
|
extends: [
|
||||||
|
@ -9,7 +12,6 @@ module.exports = {
|
||||||
'plugin:import/recommended',
|
'plugin:import/recommended',
|
||||||
'plugin:promise/recommended',
|
'plugin:promise/recommended',
|
||||||
'plugin:jsdoc/recommended',
|
'plugin:jsdoc/recommended',
|
||||||
'plugin:prettier/recommended',
|
|
||||||
],
|
],
|
||||||
|
|
||||||
env: {
|
env: {
|
||||||
|
@ -63,7 +65,9 @@ module.exports = {
|
||||||
'consistent-return': 'error',
|
'consistent-return': 'error',
|
||||||
'dot-notation': 'error',
|
'dot-notation': 'error',
|
||||||
eqeqeq: ['error', 'always', { 'null': 'ignore' }],
|
eqeqeq: ['error', 'always', { 'null': 'ignore' }],
|
||||||
|
'indent': ['error', 2],
|
||||||
'jsx-quotes': ['error', 'prefer-single'],
|
'jsx-quotes': ['error', 'prefer-single'],
|
||||||
|
'semi': ['error', 'always'],
|
||||||
'no-case-declarations': 'off',
|
'no-case-declarations': 'off',
|
||||||
'no-catch-shadow': 'error',
|
'no-catch-shadow': 'error',
|
||||||
'no-console': [
|
'no-console': [
|
||||||
|
@ -116,7 +120,6 @@ module.exports = {
|
||||||
'react/jsx-uses-react': 'off', // not needed with new JSX transform
|
'react/jsx-uses-react': 'off', // not needed with new JSX transform
|
||||||
'react/jsx-wrap-multilines': 'error',
|
'react/jsx-wrap-multilines': 'error',
|
||||||
'react/no-deprecated': 'off',
|
'react/no-deprecated': 'off',
|
||||||
'react/no-unknown-property': 'off',
|
|
||||||
'react/react-in-jsx-scope': 'off', // not needed with new JSX transform
|
'react/react-in-jsx-scope': 'off', // not needed with new JSX transform
|
||||||
'react/self-closing-comp': 'error',
|
'react/self-closing-comp': 'error',
|
||||||
|
|
||||||
|
@ -162,7 +165,7 @@ module.exports = {
|
||||||
// },
|
// },
|
||||||
// ],
|
// ],
|
||||||
'jsx-a11y/no-noninteractive-tabindex': 'off',
|
'jsx-a11y/no-noninteractive-tabindex': 'off',
|
||||||
'jsx-a11y/no-onchange': 'warn',
|
'jsx-a11y/no-onchange': 'off',
|
||||||
// recommended is full 'error'
|
// recommended is full 'error'
|
||||||
'jsx-a11y/no-static-element-interactions': [
|
'jsx-a11y/no-static-element-interactions': [
|
||||||
'warn',
|
'warn',
|
||||||
|
@ -192,6 +195,7 @@ module.exports = {
|
||||||
'error',
|
'error',
|
||||||
{
|
{
|
||||||
devDependencies: [
|
devDependencies: [
|
||||||
|
'.eslintrc.js',
|
||||||
'config/webpack/**',
|
'config/webpack/**',
|
||||||
'app/javascript/mastodon/performance.js',
|
'app/javascript/mastodon/performance.js',
|
||||||
'app/javascript/mastodon/test_setup.js',
|
'app/javascript/mastodon/test_setup.js',
|
||||||
|
@ -235,13 +239,13 @@ module.exports = {
|
||||||
},
|
},
|
||||||
// Common React utilities
|
// Common React utilities
|
||||||
{
|
{
|
||||||
pattern: '{classnames,react-helmet,react-router-dom}',
|
pattern: '{classnames,react-helmet,react-router,react-router-dom}',
|
||||||
group: 'external',
|
group: 'external',
|
||||||
position: 'before',
|
position: 'before',
|
||||||
},
|
},
|
||||||
// Immutable / Redux / data store
|
// Immutable / Redux / data store
|
||||||
{
|
{
|
||||||
pattern: '{immutable,react-redux,react-immutable-proptypes,react-immutable-pure-component,reselect}',
|
pattern: '{immutable,@reduxjs/toolkit,react-redux,react-immutable-proptypes,react-immutable-pure-component}',
|
||||||
group: 'external',
|
group: 'external',
|
||||||
position: 'before',
|
position: 'before',
|
||||||
},
|
},
|
||||||
|
@ -279,7 +283,6 @@ module.exports = {
|
||||||
'formatjs/no-id': 'off', // IDs are used for translation keys
|
'formatjs/no-id': 'off', // IDs are used for translation keys
|
||||||
'formatjs/no-invalid-icu': 'error',
|
'formatjs/no-invalid-icu': 'error',
|
||||||
'formatjs/no-literal-string-in-jsx': 'off', // Should be looked at, but mainly flagging punctuation outside of strings
|
'formatjs/no-literal-string-in-jsx': 'off', // Should be looked at, but mainly flagging punctuation outside of strings
|
||||||
'formatjs/no-multiple-plurals': 'off', // Only used by hashtag.jsx
|
|
||||||
'formatjs/no-multiple-whitespaces': 'error',
|
'formatjs/no-multiple-whitespaces': 'error',
|
||||||
'formatjs/no-offset': 'error',
|
'formatjs/no-offset': 'error',
|
||||||
'formatjs/no-useless-message': 'error',
|
'formatjs/no-useless-message': 'error',
|
||||||
|
@ -298,6 +301,7 @@ module.exports = {
|
||||||
overrides: [
|
overrides: [
|
||||||
{
|
{
|
||||||
files: [
|
files: [
|
||||||
|
'.eslintrc.js',
|
||||||
'*.config.js',
|
'*.config.js',
|
||||||
'.*rc.js',
|
'.*rc.js',
|
||||||
'ide-helper.js',
|
'ide-helper.js',
|
||||||
|
@ -348,8 +352,15 @@ module.exports = {
|
||||||
'@typescript-eslint/consistent-type-definitions': ['warn', 'interface'],
|
'@typescript-eslint/consistent-type-definitions': ['warn', 'interface'],
|
||||||
'@typescript-eslint/consistent-type-exports': 'error',
|
'@typescript-eslint/consistent-type-exports': 'error',
|
||||||
'@typescript-eslint/consistent-type-imports': 'error',
|
'@typescript-eslint/consistent-type-imports': 'error',
|
||||||
"@typescript-eslint/prefer-nullish-coalescing": ['error', {ignorePrimitives: {boolean: true}}],
|
"@typescript-eslint/prefer-nullish-coalescing": ['error', { ignorePrimitives: { boolean: true } }],
|
||||||
|
"@typescript-eslint/no-restricted-imports": [
|
||||||
|
"warn",
|
||||||
|
{
|
||||||
|
"name": "react-redux",
|
||||||
|
"importNames": ["useSelector", "useDispatch"],
|
||||||
|
"message": "Use typed hooks `useAppDispatch` and `useAppSelector` instead."
|
||||||
|
}
|
||||||
|
],
|
||||||
'jsdoc/require-jsdoc': 'off',
|
'jsdoc/require-jsdoc': 'off',
|
||||||
|
|
||||||
// Those rules set stricter rules for TS files
|
// Those rules set stricter rules for TS files
|
||||||
|
@ -371,14 +382,6 @@ module.exports = {
|
||||||
env: {
|
env: {
|
||||||
jest: true,
|
jest: true,
|
||||||
},
|
},
|
||||||
},
|
}
|
||||||
{
|
|
||||||
files: [
|
|
||||||
'streaming/**/*',
|
|
||||||
],
|
|
||||||
rules: {
|
|
||||||
'import/no-commonjs': 'off',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
};
|
});
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
patreon: mastodon
|
|
||||||
open_collective: mastodon
|
|
||||||
custom: https://sponsor.joinmastodon.org
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
name: 'Setup Javascript'
|
||||||
|
description: 'Setup a Javascript environment ready to run the Mastodon code'
|
||||||
|
inputs:
|
||||||
|
onlyProduction:
|
||||||
|
description: Only install production dependencies
|
||||||
|
default: 'false'
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: 'composite'
|
||||||
|
steps:
|
||||||
|
- name: Set up Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
|
|
||||||
|
# The following is needed because we can not use `cache: true` for `setup-node`, as it does not support Corepack yet and mess up with the cache location if ran after Node is installed
|
||||||
|
- name: Enable corepack
|
||||||
|
shell: bash
|
||||||
|
run: corepack enable
|
||||||
|
|
||||||
|
- name: Get yarn cache directory path
|
||||||
|
id: yarn-cache-dir-path
|
||||||
|
shell: bash
|
||||||
|
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- uses: actions/cache@v4
|
||||||
|
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||||
|
with:
|
||||||
|
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||||
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-yarn-
|
||||||
|
|
||||||
|
- name: Install all yarn packages
|
||||||
|
shell: bash
|
||||||
|
run: yarn install --immutable
|
||||||
|
if: inputs.onlyProduction == 'false'
|
||||||
|
|
||||||
|
- name: Install all production yarn packages
|
||||||
|
shell: bash
|
||||||
|
run: yarn workspaces focus --production
|
||||||
|
if: inputs.onlyProduction != 'false'
|
|
@ -0,0 +1,23 @@
|
||||||
|
name: 'Setup RUby'
|
||||||
|
description: 'Setup a Ruby environment ready to run the Mastodon code'
|
||||||
|
inputs:
|
||||||
|
ruby-version:
|
||||||
|
description: The Ruby version to install
|
||||||
|
default: '.ruby-version'
|
||||||
|
additional-system-dependencies:
|
||||||
|
description: 'Additional packages to install'
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: 'composite'
|
||||||
|
steps:
|
||||||
|
- name: Install system dependencies
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y libicu-dev libidn11-dev ${{ inputs.additional-system-dependencies }}
|
||||||
|
|
||||||
|
- name: Set up Ruby
|
||||||
|
uses: ruby/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: ${{ inputs.ruby-version }}
|
||||||
|
bundler-cache: true
|
|
@ -0,0 +1,13 @@
|
||||||
|
coverage:
|
||||||
|
status:
|
||||||
|
project:
|
||||||
|
default:
|
||||||
|
# Github status check is not blocking
|
||||||
|
informational: true
|
||||||
|
patch:
|
||||||
|
default:
|
||||||
|
# Github status check is not blocking
|
||||||
|
informational: true
|
||||||
|
comment:
|
||||||
|
# Only write a comment in PR if there are changes
|
||||||
|
require_changes: true
|
|
@ -3,7 +3,6 @@
|
||||||
extends: [
|
extends: [
|
||||||
'config:recommended',
|
'config:recommended',
|
||||||
':labels(dependencies)',
|
':labels(dependencies)',
|
||||||
':maintainLockFilesMonthly', // update non-direct dependencies monthly
|
|
||||||
':prConcurrentLimitNone', // Remove limit for open PRs at any time.
|
':prConcurrentLimitNone', // Remove limit for open PRs at any time.
|
||||||
':prHourlyLimit2', // Rate limit PR creation to a maximum of two per hour.
|
':prHourlyLimit2', // Rate limit PR creation to a maximum of two per hour.
|
||||||
],
|
],
|
||||||
|
@ -13,6 +12,7 @@
|
||||||
// If we do not want a package to be grouped with others, we need to set its groupName
|
// If we do not want a package to be grouped with others, we need to set its groupName
|
||||||
// to `null` after any other rule set it to something.
|
// to `null` after any other rule set it to something.
|
||||||
dependencyDashboardHeader: 'This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more. Before approving any upgrade: read the description and comments in the [`renovate.json5` file](https://github.com/mastodon/mastodon/blob/main/.github/renovate.json5).',
|
dependencyDashboardHeader: 'This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more. Before approving any upgrade: read the description and comments in the [`renovate.json5` file](https://github.com/mastodon/mastodon/blob/main/.github/renovate.json5).',
|
||||||
|
postUpdateOptions: ['yarnDedupeHighest'],
|
||||||
packageRules: [
|
packageRules: [
|
||||||
{
|
{
|
||||||
// Require Dependency Dashboard Approval for major version bumps of these node packages
|
// Require Dependency Dashboard Approval for major version bumps of these node packages
|
||||||
|
@ -22,6 +22,7 @@
|
||||||
'react-hotkeys', // Requires code changes
|
'react-hotkeys', // Requires code changes
|
||||||
|
|
||||||
// Requires Webpacker upgrade or replacement
|
// Requires Webpacker upgrade or replacement
|
||||||
|
'@svgr/webpack',
|
||||||
'@types/webpack',
|
'@types/webpack',
|
||||||
'babel-loader',
|
'babel-loader',
|
||||||
'compression-webpack-plugin',
|
'compression-webpack-plugin',
|
||||||
|
@ -49,7 +50,6 @@
|
||||||
matchManagers: ['bundler'],
|
matchManagers: ['bundler'],
|
||||||
matchPackageNames: [
|
matchPackageNames: [
|
||||||
'rack', // Needs to be synced with Rails version
|
'rack', // Needs to be synced with Rails version
|
||||||
'sprockets', // Requires manual upgrade https://github.com/rails/sprockets/blob/master/UPGRADING.md#guide-to-upgrading-from-sprockets-3x-to-4x
|
|
||||||
'strong_migrations', // Requires manual upgrade
|
'strong_migrations', // Requires manual upgrade
|
||||||
'sidekiq', // Requires manual upgrade
|
'sidekiq', // Requires manual upgrade
|
||||||
'sidekiq-unique-jobs', // Requires manual upgrades and sync with Sidekiq version
|
'sidekiq-unique-jobs', // Requires manual upgrades and sync with Sidekiq version
|
||||||
|
@ -99,6 +99,16 @@
|
||||||
matchUpdateTypes: ['patch', 'minor'],
|
matchUpdateTypes: ['patch', 'minor'],
|
||||||
groupName: 'eslint (non-major)',
|
groupName: 'eslint (non-major)',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// Group actions/*-artifact in the same PR
|
||||||
|
matchManagers: ['github-actions'],
|
||||||
|
matchPackageNames: [
|
||||||
|
'actions/download-artifact',
|
||||||
|
'actions/upload-artifact',
|
||||||
|
],
|
||||||
|
matchUpdateTypes: ['major'],
|
||||||
|
groupName: 'artifact actions (major)',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
// Update @types/* packages every week, with one grouped PR
|
// Update @types/* packages every week, with one grouped PR
|
||||||
matchPackagePrefixes: '@types/',
|
matchPackagePrefixes: '@types/',
|
||||||
|
|
|
@ -21,6 +21,8 @@ on:
|
||||||
type: string
|
type: string
|
||||||
labels:
|
labels:
|
||||||
type: string
|
type: string
|
||||||
|
file_to_build:
|
||||||
|
type: string
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-image:
|
build-image:
|
||||||
|
@ -29,10 +31,10 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: docker/setup-qemu-action@v2
|
- uses: docker/setup-qemu-action@v3
|
||||||
if: contains(inputs.platforms, 'linux/arm64') && !inputs.use_native_arm64_builder
|
if: contains(inputs.platforms, 'linux/arm64') && !inputs.use_native_arm64_builder
|
||||||
|
|
||||||
- uses: docker/setup-buildx-action@v2
|
- uses: docker/setup-buildx-action@v3
|
||||||
id: buildx
|
id: buildx
|
||||||
if: ${{ !(inputs.use_native_arm64_builder && contains(inputs.platforms, 'linux/arm64')) }}
|
if: ${{ !(inputs.use_native_arm64_builder && contains(inputs.platforms, 'linux/arm64')) }}
|
||||||
|
|
||||||
|
@ -41,7 +43,7 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
docker run --rm -d --name buildkitd -p 1234:1234 --privileged moby/buildkit:latest --addr tcp://0.0.0.0:1234
|
docker run --rm -d --name buildkitd -p 1234:1234 --privileged moby/buildkit:latest --addr tcp://0.0.0.0:1234
|
||||||
|
|
||||||
- uses: docker/setup-buildx-action@v2
|
- uses: docker/setup-buildx-action@v3
|
||||||
id: buildx-native
|
id: buildx-native
|
||||||
if: inputs.use_native_arm64_builder && contains(inputs.platforms, 'linux/arm64')
|
if: inputs.use_native_arm64_builder && contains(inputs.platforms, 'linux/arm64')
|
||||||
with:
|
with:
|
||||||
|
@ -61,20 +63,20 @@ jobs:
|
||||||
|
|
||||||
- name: Log in to Docker Hub
|
- name: Log in to Docker Hub
|
||||||
if: contains(inputs.push_to_images, 'tootsuite')
|
if: contains(inputs.push_to_images, 'tootsuite')
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Log in to the Github Container registry
|
- name: Log in to the Github Container registry
|
||||||
if: contains(inputs.push_to_images, 'ghcr.io')
|
if: contains(inputs.push_to_images, 'ghcr.io')
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- uses: docker/metadata-action@v4
|
- uses: docker/metadata-action@v5
|
||||||
id: meta
|
id: meta
|
||||||
if: ${{ inputs.push_to_images != '' }}
|
if: ${{ inputs.push_to_images != '' }}
|
||||||
with:
|
with:
|
||||||
|
@ -83,9 +85,10 @@ jobs:
|
||||||
tags: ${{ inputs.tags }}
|
tags: ${{ inputs.tags }}
|
||||||
labels: ${{ inputs.labels }}
|
labels: ${{ inputs.labels }}
|
||||||
|
|
||||||
- uses: docker/build-push-action@v4
|
- uses: docker/build-push-action@v5
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
|
file: ${{ inputs.file_to_build }}
|
||||||
build-args: |
|
build-args: |
|
||||||
MASTODON_VERSION_PRERELEASE=${{ inputs.version_prerelease }}
|
MASTODON_VERSION_PRERELEASE=${{ inputs.version_prerelease }}
|
||||||
MASTODON_VERSION_METADATA=${{ inputs.version_metadata }}
|
MASTODON_VERSION_METADATA=${{ inputs.version_metadata }}
|
||||||
|
|
|
@ -11,6 +11,7 @@ permissions:
|
||||||
jobs:
|
jobs:
|
||||||
compute-suffix:
|
compute-suffix:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
if: github.repository == 'mastodon/mastodon'
|
||||||
steps:
|
steps:
|
||||||
- id: version_vars
|
- id: version_vars
|
||||||
env:
|
env:
|
||||||
|
@ -24,6 +25,7 @@ jobs:
|
||||||
needs: compute-suffix
|
needs: compute-suffix
|
||||||
uses: ./.github/workflows/build-container-image.yml
|
uses: ./.github/workflows/build-container-image.yml
|
||||||
with:
|
with:
|
||||||
|
file_to_build: Dockerfile
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
use_native_arm64_builder: true
|
use_native_arm64_builder: true
|
||||||
cache: false
|
cache: false
|
||||||
|
@ -40,3 +42,25 @@ jobs:
|
||||||
type=raw,value=nightly
|
type=raw,value=nightly
|
||||||
type=schedule,pattern=${{ needs.compute-suffix.outputs.prerelease }}
|
type=schedule,pattern=${{ needs.compute-suffix.outputs.prerelease }}
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
|
build-image-streaming:
|
||||||
|
needs: compute-suffix
|
||||||
|
uses: ./.github/workflows/build-container-image.yml
|
||||||
|
with:
|
||||||
|
file_to_build: streaming/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
use_native_arm64_builder: true
|
||||||
|
cache: false
|
||||||
|
push_to_images: |
|
||||||
|
tootsuite/mastodon-streaming
|
||||||
|
ghcr.io/mastodon/mastodon-streaming
|
||||||
|
version_prerelease: ${{ needs.compute-suffix.outputs.prerelease }}
|
||||||
|
labels: |
|
||||||
|
org.opencontainers.image.description=Nightly build image used for testing purposes
|
||||||
|
flavor: |
|
||||||
|
latest=auto
|
||||||
|
tags: |
|
||||||
|
type=raw,value=edge
|
||||||
|
type=raw,value=nightly
|
||||||
|
type=schedule,pattern=${{ needs.compute-suffix.outputs.prerelease }}
|
||||||
|
secrets: inherit
|
||||||
|
|
|
@ -29,6 +29,7 @@ jobs:
|
||||||
needs: compute-suffix
|
needs: compute-suffix
|
||||||
uses: ./.github/workflows/build-container-image.yml
|
uses: ./.github/workflows/build-container-image.yml
|
||||||
with:
|
with:
|
||||||
|
file_to_build: Dockerfile
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
use_native_arm64_builder: true
|
use_native_arm64_builder: true
|
||||||
push_to_images: |
|
push_to_images: |
|
||||||
|
@ -39,3 +40,19 @@ jobs:
|
||||||
tags: |
|
tags: |
|
||||||
type=ref,event=pr
|
type=ref,event=pr
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
|
build-image-streaming:
|
||||||
|
needs: compute-suffix
|
||||||
|
uses: ./.github/workflows/build-container-image.yml
|
||||||
|
with:
|
||||||
|
file_to_build: streaming/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
use_native_arm64_builder: true
|
||||||
|
push_to_images: |
|
||||||
|
ghcr.io/mastodon/mastodon-streaming
|
||||||
|
version_metadata: ${{ needs.compute-suffix.outputs.metadata }}
|
||||||
|
flavor: |
|
||||||
|
latest=auto
|
||||||
|
tags: |
|
||||||
|
type=ref,event=pr
|
||||||
|
secrets: inherit
|
||||||
|
|
|
@ -12,6 +12,7 @@ jobs:
|
||||||
build-image:
|
build-image:
|
||||||
uses: ./.github/workflows/build-container-image.yml
|
uses: ./.github/workflows/build-container-image.yml
|
||||||
with:
|
with:
|
||||||
|
file_to_build: Dockerfile
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
use_native_arm64_builder: true
|
use_native_arm64_builder: true
|
||||||
push_to_images: |
|
push_to_images: |
|
||||||
|
@ -27,3 +28,24 @@ jobs:
|
||||||
type=pep440,pattern={{raw}}
|
type=pep440,pattern={{raw}}
|
||||||
type=pep440,pattern=v{{major}}.{{minor}}
|
type=pep440,pattern=v{{major}}.{{minor}}
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
|
build-image-streaming:
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v4.3.')
|
||||||
|
uses: ./.github/workflows/build-container-image.yml
|
||||||
|
with:
|
||||||
|
file_to_build: streaming/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
use_native_arm64_builder: true
|
||||||
|
push_to_images: |
|
||||||
|
tootsuite/mastodon-streaming
|
||||||
|
ghcr.io/mastodon/mastodon-streaming
|
||||||
|
# Do not use cache when building releases, so apt update is always ran and the release always contain the latest packages
|
||||||
|
cache: false
|
||||||
|
# Only tag with latest when ran against the latest stable branch
|
||||||
|
# This needs to be updated after each minor version release
|
||||||
|
flavor: |
|
||||||
|
latest=${{ startsWith(github.ref, 'refs/tags/v4.3.') }}
|
||||||
|
tags: |
|
||||||
|
type=pep440,pattern={{raw}}
|
||||||
|
type=pep440,pattern=v{{major}}.{{minor}}
|
||||||
|
secrets: inherit
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
name: Build security nightly container image
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
compute-suffix:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.repository == 'mastodon/mastodon'
|
||||||
|
steps:
|
||||||
|
- id: version_vars
|
||||||
|
env:
|
||||||
|
TZ: Etc/UTC
|
||||||
|
run: |
|
||||||
|
echo mastodon_version_prerelease=nightly.$(date --date='next day' +'%Y-%m-%d')-security>> $GITHUB_OUTPUT
|
||||||
|
outputs:
|
||||||
|
prerelease: ${{ steps.version_vars.outputs.mastodon_version_prerelease }}
|
||||||
|
|
||||||
|
build-image:
|
||||||
|
needs: compute-suffix
|
||||||
|
uses: ./.github/workflows/build-container-image.yml
|
||||||
|
with:
|
||||||
|
file_to_build: Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
use_native_arm64_builder: true
|
||||||
|
cache: false
|
||||||
|
push_to_images: |
|
||||||
|
tootsuite/mastodon
|
||||||
|
ghcr.io/mastodon/mastodon
|
||||||
|
version_prerelease: ${{ needs.compute-suffix.outputs.prerelease }}
|
||||||
|
labels: |
|
||||||
|
org.opencontainers.image.description=Nightly build image used for testing purposes
|
||||||
|
flavor: |
|
||||||
|
latest=auto
|
||||||
|
tags: |
|
||||||
|
type=raw,value=edge
|
||||||
|
type=raw,value=nightly
|
||||||
|
type=schedule,pattern=${{ needs.compute-suffix.outputs.prerelease }}
|
||||||
|
secrets: inherit
|
||||||
|
|
||||||
|
build-image-streaming:
|
||||||
|
needs: compute-suffix
|
||||||
|
uses: ./.github/workflows/build-container-image.yml
|
||||||
|
with:
|
||||||
|
file_to_build: streaming/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
use_native_arm64_builder: true
|
||||||
|
cache: false
|
||||||
|
push_to_images: |
|
||||||
|
tootsuite/mastodon-streaming
|
||||||
|
ghcr.io/mastodon/mastodon-streaming
|
||||||
|
version_prerelease: ${{ needs.compute-suffix.outputs.prerelease }}
|
||||||
|
labels: |
|
||||||
|
org.opencontainers.image.description=Nightly build image used for testing purposes
|
||||||
|
flavor: |
|
||||||
|
latest=auto
|
||||||
|
tags: |
|
||||||
|
type=raw,value=edge
|
||||||
|
type=raw,value=nightly
|
||||||
|
type=schedule,pattern=${{ needs.compute-suffix.outputs.prerelease }}
|
||||||
|
secrets: inherit
|
|
@ -27,14 +27,8 @@ jobs:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install native Ruby dependencies
|
- name: Set up Ruby environment
|
||||||
run: sudo apt-get install -y libicu-dev libidn11-dev
|
uses: ./.github/actions/setup-ruby
|
||||||
|
|
||||||
- name: Set up Ruby
|
|
||||||
uses: ruby/setup-ruby@v1
|
|
||||||
with:
|
|
||||||
ruby-version: .ruby-version
|
|
||||||
bundler-cache: true
|
|
||||||
|
|
||||||
- name: Run bundler-audit
|
- name: Run bundler-audit
|
||||||
run: bundle exec bundler-audit
|
run: bundle exec bundler-audit
|
||||||
|
|
|
@ -19,25 +19,11 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install system dependencies
|
- name: Set up Ruby environment
|
||||||
run: |
|
uses: ./.github/actions/setup-ruby
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y libicu-dev libidn11-dev
|
|
||||||
|
|
||||||
- name: Set up Ruby
|
- name: Set up Javascript environment
|
||||||
uses: ruby/setup-ruby@v1
|
uses: ./.github/actions/setup-javascript
|
||||||
with:
|
|
||||||
ruby-version: .ruby-version
|
|
||||||
bundler-cache: true
|
|
||||||
|
|
||||||
- name: Set up Node.js
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
cache: yarn
|
|
||||||
node-version-file: '.nvmrc'
|
|
||||||
|
|
||||||
- name: Install all yarn packages
|
|
||||||
run: yarn --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Check for missing strings in English JSON
|
- name: Check for missing strings in English JSON
|
||||||
run: |
|
run: |
|
||||||
|
|
|
@ -31,7 +31,7 @@ jobs:
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v2
|
uses: github/codeql-action/init@v3
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
@ -44,7 +44,7 @@ jobs:
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v2
|
uses: github/codeql-action/autobuild@v3
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
|
@ -57,6 +57,6 @@ jobs:
|
||||||
# ./location_of_script_within_repo/buildscript.sh
|
# ./location_of_script_within_repo/buildscript.sh
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v2
|
uses: github/codeql-action/analyze@v3
|
||||||
with:
|
with:
|
||||||
category: '/language:${{matrix.language}}'
|
category: '/language:${{matrix.language}}'
|
||||||
|
|
|
@ -11,6 +11,7 @@ permissions:
|
||||||
jobs:
|
jobs:
|
||||||
download-translations:
|
download-translations:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
if: github.repository == 'mastodon/mastodon'
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
|
@ -43,14 +44,8 @@ jobs:
|
||||||
run: sudo chown -R runner:docker .
|
run: sudo chown -R runner:docker .
|
||||||
|
|
||||||
# This is needed to run the normalize step
|
# This is needed to run the normalize step
|
||||||
- name: Install native Ruby dependencies
|
- name: Set up Ruby environment
|
||||||
run: sudo apt-get install -y libicu-dev libidn11-dev
|
uses: ./.github/actions/setup-ruby
|
||||||
|
|
||||||
- name: Set up Ruby
|
|
||||||
uses: ruby/setup-ruby@v1
|
|
||||||
with:
|
|
||||||
ruby-version: .ruby-version
|
|
||||||
bundler-cache: true
|
|
||||||
|
|
||||||
- name: Run i18n normalize task
|
- name: Run i18n normalize task
|
||||||
run: bundle exec i18n-tasks normalize
|
run: bundle exec i18n-tasks normalize
|
||||||
|
|
|
@ -35,14 +35,8 @@ jobs:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Javascript environment
|
||||||
uses: actions/setup-node@v3
|
uses: ./.github/actions/setup-javascript
|
||||||
with:
|
|
||||||
cache: yarn
|
|
||||||
node-version-file: '.nvmrc'
|
|
||||||
|
|
||||||
- name: Install all yarn packages
|
|
||||||
run: yarn --frozen-lockfile
|
|
||||||
|
|
||||||
- uses: xt0rted/stylelint-problem-matcher@v1
|
- uses: xt0rted/stylelint-problem-matcher@v1
|
||||||
|
|
||||||
|
|
|
@ -30,16 +30,8 @@ jobs:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install native Ruby dependencies
|
- name: Set up Ruby environment
|
||||||
run: |
|
uses: ./.github/actions/setup-ruby
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y libicu-dev libidn11-dev
|
|
||||||
|
|
||||||
- name: Set up Ruby
|
|
||||||
uses: ruby/setup-ruby@v1
|
|
||||||
with:
|
|
||||||
ruby-version: .ruby-version
|
|
||||||
bundler-cache: true
|
|
||||||
|
|
||||||
- name: Run haml-lint
|
- name: Run haml-lint
|
||||||
run: |
|
run: |
|
||||||
|
|
|
@ -39,14 +39,8 @@ jobs:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Javascript environment
|
||||||
uses: actions/setup-node@v3
|
uses: ./.github/actions/setup-javascript
|
||||||
with:
|
|
||||||
cache: yarn
|
|
||||||
node-version-file: '.nvmrc'
|
|
||||||
|
|
||||||
- name: Install all yarn packages
|
|
||||||
run: yarn --frozen-lockfile
|
|
||||||
|
|
||||||
- name: ESLint
|
- name: ESLint
|
||||||
run: yarn lint:js --max-warnings 0
|
run: yarn lint:js --max-warnings 0
|
||||||
|
|
|
@ -31,14 +31,8 @@ jobs:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Javascript environment
|
||||||
uses: actions/setup-node@v3
|
uses: ./.github/actions/setup-javascript
|
||||||
with:
|
|
||||||
cache: yarn
|
|
||||||
node-version-file: '.nvmrc'
|
|
||||||
|
|
||||||
- name: Install all yarn packages
|
|
||||||
run: yarn --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Prettier
|
- name: Prettier
|
||||||
run: yarn lint:json
|
run: yarn lint:json
|
||||||
|
|
|
@ -31,14 +31,8 @@ jobs:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Javascript environment
|
||||||
uses: actions/setup-node@v3
|
uses: ./.github/actions/setup-javascript
|
||||||
with:
|
|
||||||
cache: yarn
|
|
||||||
node-version-file: '.nvmrc'
|
|
||||||
|
|
||||||
- name: Install all yarn packages
|
|
||||||
run: yarn --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Prettier
|
- name: Prettier
|
||||||
run: yarn lint:md
|
run: yarn lint:md
|
||||||
|
|
|
@ -31,14 +31,8 @@ jobs:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install native Ruby dependencies
|
- name: Set up Ruby environment
|
||||||
run: sudo apt-get install -y libicu-dev libidn11-dev
|
uses: ./.github/actions/setup-ruby
|
||||||
|
|
||||||
- name: Set up Ruby
|
|
||||||
uses: ruby/setup-ruby@v1
|
|
||||||
with:
|
|
||||||
ruby-version: .ruby-version
|
|
||||||
bundler-cache: true
|
|
||||||
|
|
||||||
- name: Set-up RuboCop Problem Matcher
|
- name: Set-up RuboCop Problem Matcher
|
||||||
uses: r7kamura/rubocop-problem-matchers-action@v1
|
uses: r7kamura/rubocop-problem-matchers-action@v1
|
||||||
|
|
|
@ -33,14 +33,8 @@ jobs:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Javascript environment
|
||||||
uses: actions/setup-node@v3
|
uses: ./.github/actions/setup-javascript
|
||||||
with:
|
|
||||||
cache: yarn
|
|
||||||
node-version-file: '.nvmrc'
|
|
||||||
|
|
||||||
- name: Install all yarn packages
|
|
||||||
run: yarn --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Prettier
|
- name: Prettier
|
||||||
run: yarn lint:yml
|
run: yarn lint:yml
|
||||||
|
|
|
@ -7,6 +7,7 @@ on:
|
||||||
- .github/workflows/build-releases.yml
|
- .github/workflows/build-releases.yml
|
||||||
- .github/workflows/test-image-build.yml
|
- .github/workflows/test-image-build.yml
|
||||||
- Dockerfile
|
- Dockerfile
|
||||||
|
- streaming/Dockerfile
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
|
@ -18,4 +19,17 @@ jobs:
|
||||||
|
|
||||||
uses: ./.github/workflows/build-container-image.yml
|
uses: ./.github/workflows/build-container-image.yml
|
||||||
with:
|
with:
|
||||||
|
file_to_build: Dockerfile
|
||||||
platforms: linux/amd64 # Testing only on native platform so it is performant
|
platforms: linux/amd64 # Testing only on native platform so it is performant
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
build-image-streaming:
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}-streaming
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
uses: ./.github/workflows/build-container-image.yml
|
||||||
|
with:
|
||||||
|
file_to_build: streaming/Dockerfile
|
||||||
|
platforms: linux/amd64 # Testing only on native platform so it is performant
|
||||||
|
cache: true
|
||||||
|
|
|
@ -35,14 +35,8 @@ jobs:
|
||||||
- name: Clone repository
|
- name: Clone repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Javascript environment
|
||||||
uses: actions/setup-node@v3
|
uses: ./.github/actions/setup-javascript
|
||||||
with:
|
|
||||||
cache: yarn
|
|
||||||
node-version-file: '.nvmrc'
|
|
||||||
|
|
||||||
- name: Install all yarn packages
|
|
||||||
run: yarn --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Jest testing
|
- name: Jest testing
|
||||||
run: yarn jest --reporters github-actions summary
|
run: yarn jest --reporters github-actions summary
|
||||||
|
|
|
@ -72,37 +72,14 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install native Ruby dependencies
|
- name: Set up Ruby environment
|
||||||
run: |
|
uses: ./.github/actions/setup-ruby
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y libicu-dev libidn11-dev
|
|
||||||
|
|
||||||
- name: Set up bundler cache
|
|
||||||
uses: ruby/setup-ruby@v1
|
|
||||||
with:
|
|
||||||
ruby-version: .ruby-version
|
|
||||||
bundler-cache: true
|
|
||||||
|
|
||||||
- name: Create database
|
- name: Create database
|
||||||
run: './bin/rails db:create'
|
run: './bin/rails db:create'
|
||||||
|
|
||||||
- name: Run migrations up to v2.0.0
|
- name: Run historical migrations with data population
|
||||||
run: './bin/rails db:migrate VERSION=20171010025614'
|
run: './bin/rails tests:migrations:prepare_database'
|
||||||
|
|
||||||
- name: Populate database with test data
|
|
||||||
run: './bin/rails tests:migrations:populate_v2'
|
|
||||||
|
|
||||||
- name: Run migrations up to v2.4.0
|
|
||||||
run: './bin/rails db:migrate VERSION=20180514140000'
|
|
||||||
|
|
||||||
- name: Populate database with test data
|
|
||||||
run: './bin/rails tests:migrations:populate_v2_4'
|
|
||||||
|
|
||||||
- name: Run migrations up to v2.4.3
|
|
||||||
run: './bin/rails db:migrate VERSION=20180707154237'
|
|
||||||
|
|
||||||
- name: Populate database with test data
|
|
||||||
run: './bin/rails tests:migrations:populate_v2_4_3'
|
|
||||||
|
|
||||||
- name: Run all remaining migrations
|
- name: Run all remaining migrations
|
||||||
run: './bin/rails db:migrate'
|
run: './bin/rails db:migrate'
|
||||||
|
|
|
@ -45,6 +45,7 @@ jobs:
|
||||||
--health-retries 5
|
--health-retries 5
|
||||||
ports:
|
ports:
|
||||||
- 5432:5432
|
- 5432:5432
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:7-alpine
|
image: redis:7-alpine
|
||||||
options: >-
|
options: >-
|
||||||
|
@ -71,42 +72,17 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install native Ruby dependencies
|
- name: Set up Ruby environment
|
||||||
run: |
|
uses: ./.github/actions/setup-ruby
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y libicu-dev libidn11-dev
|
|
||||||
|
|
||||||
- name: Set up bundler cache
|
|
||||||
uses: ruby/setup-ruby@v1
|
|
||||||
with:
|
|
||||||
ruby-version: .ruby-version
|
|
||||||
bundler-cache: true
|
|
||||||
|
|
||||||
- name: Create database
|
- name: Create database
|
||||||
run: './bin/rails db:create'
|
run: './bin/rails db:create'
|
||||||
|
|
||||||
- name: Run migrations up to v2.0.0
|
- name: Run historical migrations with data population
|
||||||
run: './bin/rails db:migrate VERSION=20171010025614'
|
run: './bin/rails tests:migrations:prepare_database'
|
||||||
|
|
||||||
- name: Populate database with test data
|
|
||||||
run: './bin/rails tests:migrations:populate_v2'
|
|
||||||
|
|
||||||
- name: Run pre-deployment migrations up to v2.4.0
|
|
||||||
run: './bin/rails db:migrate VERSION=20180514140000'
|
|
||||||
env:
|
env:
|
||||||
SKIP_POST_DEPLOYMENT_MIGRATIONS: true
|
SKIP_POST_DEPLOYMENT_MIGRATIONS: true
|
||||||
|
|
||||||
- name: Populate database with test data
|
|
||||||
run: './bin/rails tests:migrations:populate_v2_4'
|
|
||||||
|
|
||||||
- name: Run migrations up to v2.4.3
|
|
||||||
run: './bin/rails db:migrate VERSION=20180707154237'
|
|
||||||
env:
|
|
||||||
SKIP_POST_DEPLOYMENT_MIGRATIONS: true
|
|
||||||
|
|
||||||
- name: Populate database with test data
|
|
||||||
run: './bin/rails tests:migrations:populate_v2_4_3'
|
|
||||||
|
|
||||||
- name: Run all remaining pre-deployment migrations
|
- name: Run all remaining pre-deployment migrations
|
||||||
run: './bin/rails db:migrate'
|
run: './bin/rails db:migrate'
|
||||||
env:
|
env:
|
||||||
|
|
|
@ -34,36 +34,29 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Ruby environment
|
||||||
uses: actions/setup-node@v3
|
uses: ./.github/actions/setup-ruby
|
||||||
|
|
||||||
|
- name: Set up Javascript environment
|
||||||
|
uses: ./.github/actions/setup-javascript
|
||||||
with:
|
with:
|
||||||
cache: yarn
|
onlyProduction: 'true'
|
||||||
node-version-file: '.nvmrc'
|
|
||||||
|
|
||||||
- name: Install native Ruby dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y libicu-dev libidn11-dev
|
|
||||||
|
|
||||||
- name: Set up bundler cache
|
|
||||||
uses: ruby/setup-ruby@v1
|
|
||||||
with:
|
|
||||||
ruby-version: .ruby-version
|
|
||||||
bundler-cache: true
|
|
||||||
|
|
||||||
- run: yarn --frozen-lockfile --production
|
|
||||||
- name: Precompile assets
|
- name: Precompile assets
|
||||||
# Previously had set this, but it's not supported
|
# Previously had set this, but it's not supported
|
||||||
# export NODE_OPTIONS=--openssl-legacy-provider
|
# export NODE_OPTIONS=--openssl-legacy-provider
|
||||||
run: |-
|
run: |-
|
||||||
./bin/rails assets:precompile
|
./bin/rails assets:precompile
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- name: Archive asset artifacts
|
||||||
|
run: |
|
||||||
|
tar --exclude={"*.br","*.gz"} -zcf artifacts.tar.gz public/assets public/packs*
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
if: matrix.mode == 'test'
|
if: matrix.mode == 'test'
|
||||||
with:
|
with:
|
||||||
path: |-
|
path: |-
|
||||||
./public/assets
|
./artifacts.tar.gz
|
||||||
./public/packs-test
|
|
||||||
name: ${{ github.sha }}
|
name: ${{ github.sha }}
|
||||||
retention-days: 0
|
retention-days: 0
|
||||||
|
|
||||||
|
@ -101,7 +94,7 @@ jobs:
|
||||||
DB_HOST: localhost
|
DB_HOST: localhost
|
||||||
DB_USER: postgres
|
DB_USER: postgres
|
||||||
DB_PASS: postgres
|
DB_PASS: postgres
|
||||||
DISABLE_SIMPLECOV: true
|
DISABLE_SIMPLECOV: ${{ matrix.ruby-version != '.ruby-version' }}
|
||||||
RAILS_ENV: test
|
RAILS_ENV: test
|
||||||
ALLOW_NOPAM: true
|
ALLOW_NOPAM: true
|
||||||
PAM_ENABLED: true
|
PAM_ENABLED: true
|
||||||
|
@ -112,7 +105,7 @@ jobs:
|
||||||
SAML_ENABLED: true
|
SAML_ENABLED: true
|
||||||
CAS_ENABLED: true
|
CAS_ENABLED: true
|
||||||
BUNDLE_WITH: 'pam_authentication test'
|
BUNDLE_WITH: 'pam_authentication test'
|
||||||
CI_JOBS: ${{ matrix.ci_job }}/4
|
GITHUB_RSPEC: ${{ matrix.ruby-version == '.ruby-version' && github.event.pull_request && 'true' }}
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
@ -121,38 +114,34 @@ jobs:
|
||||||
- '3.0'
|
- '3.0'
|
||||||
- '3.1'
|
- '3.1'
|
||||||
- '.ruby-version'
|
- '.ruby-version'
|
||||||
ci_job:
|
|
||||||
- 1
|
|
||||||
- 2
|
|
||||||
- 3
|
|
||||||
- 4
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
path: './public'
|
path: './'
|
||||||
name: ${{ github.sha }}
|
name: ${{ github.sha }}
|
||||||
|
|
||||||
- name: Update package index
|
- name: Expand archived asset artifacts
|
||||||
run: sudo apt-get update
|
run: |
|
||||||
|
tar xvzf artifacts.tar.gz
|
||||||
|
|
||||||
- name: Install native Ruby dependencies
|
- name: Set up Ruby environment
|
||||||
run: sudo apt-get install -y libicu-dev libidn11-dev
|
uses: ./.github/actions/setup-ruby
|
||||||
|
|
||||||
- name: Install additional system dependencies
|
|
||||||
run: sudo apt-get install -y ffmpeg imagemagick libpam-dev
|
|
||||||
|
|
||||||
- name: Set up bundler cache
|
|
||||||
uses: ruby/setup-ruby@v1
|
|
||||||
with:
|
with:
|
||||||
ruby-version: ${{ matrix.ruby-version}}
|
ruby-version: ${{ matrix.ruby-version}}
|
||||||
bundler-cache: true
|
additional-system-dependencies: ffmpeg imagemagick libpam-dev
|
||||||
|
|
||||||
- name: Load database schema
|
- name: Load database schema
|
||||||
run: './bin/rails db:create db:schema:load db:seed'
|
run: './bin/rails db:create db:schema:load db:seed'
|
||||||
|
|
||||||
- run: bundle exec rake rspec_chunked
|
- run: bin/rspec
|
||||||
|
|
||||||
|
- name: Upload coverage reports to Codecov
|
||||||
|
if: matrix.ruby-version == '.ruby-version'
|
||||||
|
uses: codecov/codecov-action@v3
|
||||||
|
with:
|
||||||
|
files: coverage/lcov/mastodon.lcov
|
||||||
|
|
||||||
test-e2e:
|
test-e2e:
|
||||||
name: End to End testing
|
name: End to End testing
|
||||||
|
@ -204,33 +193,19 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
path: './public'
|
path: './public'
|
||||||
name: ${{ github.sha }}
|
name: ${{ github.sha }}
|
||||||
|
|
||||||
- name: Update package index
|
- name: Set up Ruby environment
|
||||||
run: sudo apt-get update
|
uses: ./.github/actions/setup-ruby
|
||||||
|
|
||||||
- name: Set up Node.js
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
cache: yarn
|
|
||||||
node-version-file: '.nvmrc'
|
|
||||||
|
|
||||||
- name: Install native Ruby dependencies
|
|
||||||
run: sudo apt-get install -y libicu-dev libidn11-dev
|
|
||||||
|
|
||||||
- name: Install additional system dependencies
|
|
||||||
run: sudo apt-get install -y ffmpeg imagemagick
|
|
||||||
|
|
||||||
- name: Set up bundler cache
|
|
||||||
uses: ruby/setup-ruby@v1
|
|
||||||
with:
|
with:
|
||||||
ruby-version: ${{ matrix.ruby-version}}
|
ruby-version: ${{ matrix.ruby-version}}
|
||||||
bundler-cache: true
|
additional-system-dependencies: ffmpeg imagemagick
|
||||||
|
|
||||||
- run: yarn --frozen-lockfile
|
- name: Set up Javascript environment
|
||||||
|
uses: ./.github/actions/setup-javascript
|
||||||
|
|
||||||
- name: Load database schema
|
- name: Load database schema
|
||||||
run: './bin/rails db:create db:schema:load db:seed'
|
run: './bin/rails db:create db:schema:load db:seed'
|
||||||
|
@ -238,21 +213,21 @@ jobs:
|
||||||
- run: bundle exec rake spec:system
|
- run: bundle exec rake spec:system
|
||||||
|
|
||||||
- name: Archive logs
|
- name: Archive logs
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
if: failure()
|
if: failure()
|
||||||
with:
|
with:
|
||||||
name: e2e-logs-${{ matrix.ruby-version }}
|
name: e2e-logs-${{ matrix.ruby-version }}
|
||||||
path: log/
|
path: log/
|
||||||
|
|
||||||
- name: Archive test screenshots
|
- name: Archive test screenshots
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
if: failure()
|
if: failure()
|
||||||
with:
|
with:
|
||||||
name: e2e-screenshots
|
name: e2e-screenshots
|
||||||
path: tmp/screenshots/
|
path: tmp/screenshots/
|
||||||
|
|
||||||
test-search:
|
test-search:
|
||||||
name: Testing search
|
name: Elastic Search integration testing
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
needs:
|
needs:
|
||||||
|
@ -282,8 +257,8 @@ jobs:
|
||||||
ports:
|
ports:
|
||||||
- 6379:6379
|
- 6379:6379
|
||||||
|
|
||||||
elasticsearch:
|
search:
|
||||||
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.13
|
image: ${{ matrix.search-image }}
|
||||||
env:
|
env:
|
||||||
discovery.type: single-node
|
discovery.type: single-node
|
||||||
xpack.security.enabled: false
|
xpack.security.enabled: false
|
||||||
|
@ -313,52 +288,43 @@ jobs:
|
||||||
- '3.0'
|
- '3.0'
|
||||||
- '3.1'
|
- '3.1'
|
||||||
- '.ruby-version'
|
- '.ruby-version'
|
||||||
|
search-image:
|
||||||
|
- docker.elastic.co/elasticsearch/elasticsearch:7.17.13
|
||||||
|
include:
|
||||||
|
- ruby-version: '.ruby-version'
|
||||||
|
search-image: docker.elastic.co/elasticsearch/elasticsearch:8.10.2
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
path: './public'
|
path: './public'
|
||||||
name: ${{ github.sha }}
|
name: ${{ github.sha }}
|
||||||
|
|
||||||
- name: Update package index
|
- name: Set up Ruby environment
|
||||||
run: sudo apt-get update
|
uses: ./.github/actions/setup-ruby
|
||||||
|
|
||||||
- name: Set up Node.js
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
cache: yarn
|
|
||||||
node-version-file: '.nvmrc'
|
|
||||||
|
|
||||||
- name: Install native Ruby dependencies
|
|
||||||
run: sudo apt-get install -y libicu-dev libidn11-dev
|
|
||||||
|
|
||||||
- name: Install additional system dependencies
|
|
||||||
run: sudo apt-get install -y ffmpeg imagemagick
|
|
||||||
|
|
||||||
- name: Set up bundler cache
|
|
||||||
uses: ruby/setup-ruby@v1
|
|
||||||
with:
|
with:
|
||||||
ruby-version: ${{ matrix.ruby-version}}
|
ruby-version: ${{ matrix.ruby-version}}
|
||||||
bundler-cache: true
|
additional-system-dependencies: ffmpeg imagemagick
|
||||||
|
|
||||||
- run: yarn --frozen-lockfile
|
- name: Set up Javascript environment
|
||||||
|
uses: ./.github/actions/setup-javascript
|
||||||
|
|
||||||
- name: Load database schema
|
- name: Load database schema
|
||||||
run: './bin/rails db:create db:schema:load db:seed'
|
run: './bin/rails db:create db:schema:load db:seed'
|
||||||
|
|
||||||
- run: bundle exec rake spec:search
|
- run: bin/rspec --tag search
|
||||||
|
|
||||||
- name: Archive logs
|
- name: Archive logs
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
if: failure()
|
if: failure()
|
||||||
with:
|
with:
|
||||||
name: test-search-logs-${{ matrix.ruby-version }}
|
name: test-search-logs-${{ matrix.ruby-version }}
|
||||||
path: log/
|
path: log/
|
||||||
|
|
||||||
- name: Archive test screenshots
|
- name: Archive test screenshots
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
if: failure()
|
if: failure()
|
||||||
with:
|
with:
|
||||||
name: test-search-screenshots
|
name: test-search-screenshots
|
||||||
|
|
|
@ -31,9 +31,6 @@
|
||||||
# Ignore Vagrant files
|
# Ignore Vagrant files
|
||||||
.vagrant/
|
.vagrant/
|
||||||
|
|
||||||
# Ignore Capistrano customizations
|
|
||||||
/config/deploy/*
|
|
||||||
|
|
||||||
# Ignore IDE files
|
# Ignore IDE files
|
||||||
.vscode/
|
.vscode/
|
||||||
.idea/
|
.idea/
|
||||||
|
@ -58,6 +55,15 @@ npm-debug.log
|
||||||
yarn-error.log
|
yarn-error.log
|
||||||
yarn-debug.log
|
yarn-debug.log
|
||||||
|
|
||||||
|
# From https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored
|
||||||
|
.pnp.*
|
||||||
|
.yarn/*
|
||||||
|
!.yarn/patches
|
||||||
|
!.yarn/plugins
|
||||||
|
!.yarn/releases
|
||||||
|
!.yarn/sdks
|
||||||
|
!.yarn/versions
|
||||||
|
|
||||||
# Ignore vagrant log files
|
# Ignore vagrant log files
|
||||||
*-cloudimg-console.log
|
*-cloudimg-console.log
|
||||||
|
|
||||||
|
|
|
@ -12,3 +12,5 @@ linters:
|
||||||
enabled: true
|
enabled: true
|
||||||
MiddleDot:
|
MiddleDot:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
LineLength:
|
||||||
|
max: 320
|
||||||
|
|
|
@ -1,47 +1,13 @@
|
||||||
# This configuration was generated by
|
# This configuration was generated by
|
||||||
# `haml-lint --auto-gen-config`
|
# `haml-lint --auto-gen-config`
|
||||||
# on 2023-07-20 09:47:50 -0400 using Haml-Lint version 0.48.0.
|
# on 2024-01-09 11:30:07 -0500 using Haml-Lint version 0.53.0.
|
||||||
# The point is for the user to remove these configuration records
|
# The point is for the user to remove these configuration records
|
||||||
# one by one as the lints are removed from the code base.
|
# one by one as the lints are removed from the code base.
|
||||||
# Note that changes in the inspected code, or installation of new
|
# Note that changes in the inspected code, or installation of new
|
||||||
# versions of Haml-Lint, may require this file to be generated again.
|
# versions of Haml-Lint, may require this file to be generated again.
|
||||||
|
|
||||||
linters:
|
linters:
|
||||||
# Offense count: 951
|
# Offense count: 1
|
||||||
LineLength:
|
LineLength:
|
||||||
enabled: false
|
|
||||||
|
|
||||||
# Offense count: 22
|
|
||||||
UnnecessaryStringOutput:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
# Offense count: 57
|
|
||||||
RuboCop:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
# Offense count: 3
|
|
||||||
ViewLength:
|
|
||||||
exclude:
|
exclude:
|
||||||
- 'app/views/admin/accounts/show.html.haml'
|
|
||||||
- 'app/views/admin/reports/show.html.haml'
|
|
||||||
- 'app/views/disputes/strikes/show.html.haml'
|
|
||||||
|
|
||||||
# Offense count: 32
|
|
||||||
InstanceVariables:
|
|
||||||
exclude:
|
|
||||||
- 'app/views/admin/reports/_actions.html.haml'
|
|
||||||
- 'app/views/admin/roles/_form.html.haml'
|
- 'app/views/admin/roles/_form.html.haml'
|
||||||
- 'app/views/admin/webhooks/_form.html.haml'
|
|
||||||
- 'app/views/auth/registrations/_status.html.haml'
|
|
||||||
- 'app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml'
|
|
||||||
- 'app/views/authorize_interactions/_post_follow_actions.html.haml'
|
|
||||||
- 'app/views/invites/_form.html.haml'
|
|
||||||
- 'app/views/relationships/_account.html.haml'
|
|
||||||
- 'app/views/shared/_og.html.haml'
|
|
||||||
|
|
||||||
# Offense count: 3
|
|
||||||
IdNames:
|
|
||||||
exclude:
|
|
||||||
- 'app/views/authorize_interactions/error.html.haml'
|
|
||||||
- 'app/views/oauth/authorizations/error.html.haml'
|
|
||||||
- 'app/views/shared/_error_messages.html.haml'
|
|
||||||
|
|
|
@ -31,9 +31,6 @@
|
||||||
# Ignore Vagrant files
|
# Ignore Vagrant files
|
||||||
.vagrant/
|
.vagrant/
|
||||||
|
|
||||||
# Ignore Capistrano customizations
|
|
||||||
/config/deploy/*
|
|
||||||
|
|
||||||
# Ignore IDE files
|
# Ignore IDE files
|
||||||
.vscode/
|
.vscode/
|
||||||
.idea/
|
.idea/
|
||||||
|
@ -76,3 +73,5 @@ app/javascript/styles/mastodon/reset.scss
|
||||||
|
|
||||||
# Ignore the generated AUTHORS.md
|
# Ignore the generated AUTHORS.md
|
||||||
AUTHORS.md
|
AUTHORS.md
|
||||||
|
|
||||||
|
!lint-staged.config.js
|
||||||
|
|
79
.rubocop.yml
79
.rubocop.yml
|
@ -27,7 +27,8 @@ AllCops:
|
||||||
- 'node_modules/**/*'
|
- 'node_modules/**/*'
|
||||||
- 'Vagrantfile'
|
- 'Vagrantfile'
|
||||||
- 'vendor/**/*'
|
- 'vendor/**/*'
|
||||||
- 'lib/json_ld/*' # Generated files
|
- 'config/initializers/json_ld*' # Generated files
|
||||||
|
- 'lib/mastodon/migration_helpers.rb' # Vendored from GitLab
|
||||||
- 'lib/templates/**/*'
|
- 'lib/templates/**/*'
|
||||||
|
|
||||||
# Reason: Prefer Hashes without extreme indentation
|
# Reason: Prefer Hashes without extreme indentation
|
||||||
|
@ -71,13 +72,6 @@ Metrics/ModuleLength:
|
||||||
# Reason: Currently disabled in .rubocop_todo.yml
|
# Reason: Currently disabled in .rubocop_todo.yml
|
||||||
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsabcsize
|
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsabcsize
|
||||||
Metrics/AbcSize:
|
Metrics/AbcSize:
|
||||||
Exclude:
|
|
||||||
- 'lib/mastodon/cli/*.rb'
|
|
||||||
- db/*migrate/**/*
|
|
||||||
|
|
||||||
# Reason:
|
|
||||||
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsblocknesting
|
|
||||||
Metrics/BlockNesting:
|
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'lib/mastodon/cli/*.rb'
|
- 'lib/mastodon/cli/*.rb'
|
||||||
|
|
||||||
|
@ -86,7 +80,6 @@ Metrics/BlockNesting:
|
||||||
Metrics/CyclomaticComplexity:
|
Metrics/CyclomaticComplexity:
|
||||||
Exclude:
|
Exclude:
|
||||||
- lib/mastodon/cli/*.rb
|
- lib/mastodon/cli/*.rb
|
||||||
- db/*migrate/**/*
|
|
||||||
|
|
||||||
# Reason:
|
# Reason:
|
||||||
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsparameterlists
|
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsparameterlists
|
||||||
|
@ -103,27 +96,48 @@ Rails/FilePath:
|
||||||
Rails/HttpStatus:
|
Rails/HttpStatus:
|
||||||
EnforcedStyle: numeric
|
EnforcedStyle: numeric
|
||||||
|
|
||||||
# Reason: Allowed in `tootctl` CLI code and in boot ENV checker
|
# Reason: Allowed in boot ENV checker
|
||||||
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsexit
|
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsexit
|
||||||
Rails/Exit:
|
Rails/Exit:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'config/boot.rb'
|
- 'config/boot.rb'
|
||||||
- 'lib/mastodon/cli/*.rb'
|
|
||||||
|
|
||||||
# Reason: Some single letter camel case files shouldn't be split
|
# Reason: Conflicts with `Lint/UselessMethodDefinition` for inherited controller actions
|
||||||
|
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railslexicallyscopedactionfilter
|
||||||
|
Rails/LexicallyScopedActionFilter:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/auth/*'
|
||||||
|
|
||||||
|
# Reason: These tasks are doing local work which do not need full env loaded
|
||||||
|
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsrakeenvironment
|
||||||
|
Rails/RakeEnvironment:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/tasks/auto_annotate_models.rake'
|
||||||
|
- 'lib/tasks/emojis.rake'
|
||||||
|
- 'lib/tasks/mastodon.rake'
|
||||||
|
- 'lib/tasks/repo.rake'
|
||||||
|
- 'lib/tasks/statistics.rake'
|
||||||
|
|
||||||
|
# Reason: There are appropriate times to use these features
|
||||||
|
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsskipsmodelvalidations
|
||||||
|
Rails/SkipsModelValidations:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Reason: We want to preserve the ability to migrate from arbitrary old versions,
|
||||||
|
# and cannot guarantee that every installation has run every migration as they upgrade.
|
||||||
|
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsunusedignoredcolumns
|
||||||
|
Rails/UnusedIgnoredColumns:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Reason: Prevailing style choice
|
||||||
|
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsnegateinclude
|
||||||
|
Rails/NegateInclude:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Reason: Deprecated cop, will be removed in 3.0, replaced by SpecFilePathFormat
|
||||||
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath
|
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath
|
||||||
RSpec/FilePath:
|
RSpec/FilePath:
|
||||||
CustomTransform:
|
Enabled: false
|
||||||
ActivityPub: activitypub # Ignore the snake_case due to the amount of files to rename
|
|
||||||
DeepL: deepl
|
|
||||||
FetchOEmbedService: fetch_oembed_service
|
|
||||||
JsonLdHelper: jsonld_helper
|
|
||||||
OEmbedController: oembed_controller
|
|
||||||
OStatus: ostatus
|
|
||||||
NodeInfoController: nodeinfo_controller # NodeInfo isn't snake_cased for any of the instances
|
|
||||||
Exclude:
|
|
||||||
- 'spec/config/initializers/rack_attack_spec.rb' # namespaces usually have separate folder
|
|
||||||
- 'spec/lib/sanitize_config_spec.rb' # namespaces usually have separate folder
|
|
||||||
|
|
||||||
# Reason:
|
# Reason:
|
||||||
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecnamedsubject
|
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecnamedsubject
|
||||||
|
@ -140,6 +154,16 @@ RSpec/NotToNot:
|
||||||
RSpec/Rails/HttpStatus:
|
RSpec/Rails/HttpStatus:
|
||||||
EnforcedStyle: numeric
|
EnforcedStyle: numeric
|
||||||
|
|
||||||
|
# Reason: Match overrides from Rspec/FilePath rule above
|
||||||
|
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecspecfilepathformat
|
||||||
|
RSpec/SpecFilePathFormat:
|
||||||
|
CustomTransform:
|
||||||
|
ActivityPub: activitypub
|
||||||
|
DeepL: deepl
|
||||||
|
FetchOEmbedService: fetch_oembed_service
|
||||||
|
OEmbedController: oembed_controller
|
||||||
|
OStatus: ostatus
|
||||||
|
|
||||||
# Reason:
|
# Reason:
|
||||||
# https://docs.rubocop.org/rubocop/cops_style.html#styleclassandmodulechildren
|
# https://docs.rubocop.org/rubocop/cops_style.html#styleclassandmodulechildren
|
||||||
Style/ClassAndModuleChildren:
|
Style/ClassAndModuleChildren:
|
||||||
|
@ -150,6 +174,15 @@ Style/ClassAndModuleChildren:
|
||||||
Style/Documentation:
|
Style/Documentation:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
|
# Reason: Route redirects are not token-formatted and must be skipped
|
||||||
|
# https://docs.rubocop.org/rubocop/cops_style.html#styleformatstringtoken
|
||||||
|
Style/FormatStringToken:
|
||||||
|
inherit_mode:
|
||||||
|
merge:
|
||||||
|
- AllowedMethods # The rubocop-rails config adds `redirect`
|
||||||
|
AllowedMethods:
|
||||||
|
- redirect_with_vary
|
||||||
|
|
||||||
# Reason: Enforce modern Ruby style
|
# Reason: Enforce modern Ruby style
|
||||||
# https://docs.rubocop.org/rubocop/cops_style.html#stylehashsyntax
|
# https://docs.rubocop.org/rubocop/cops_style.html#stylehashsyntax
|
||||||
Style/HashSyntax:
|
Style/HashSyntax:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# This configuration was generated by
|
# This configuration was generated by
|
||||||
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-exclude-limit --no-offense-counts --no-auto-gen-timestamp`
|
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-exclude-limit --no-offense-counts --no-auto-gen-timestamp`
|
||||||
# using RuboCop version 1.56.1.
|
# using RuboCop version 1.60.2.
|
||||||
# The point is for the user to remove these configuration records
|
# The point is for the user to remove these configuration records
|
||||||
# one by one as the offenses are removed from the code base.
|
# one by one as the offenses are removed from the code base.
|
||||||
# Note that changes in the inspected code, or installation of new
|
# Note that changes in the inspected code, or installation of new
|
||||||
|
@ -13,99 +13,13 @@ Bundler/OrderedGems:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'Gemfile'
|
- 'Gemfile'
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
|
||||||
# SupportedStyles: with_first_argument, with_fixed_indentation
|
|
||||||
Layout/ArgumentAlignment:
|
|
||||||
Exclude:
|
|
||||||
- 'config/initializers/cors.rb'
|
|
||||||
- 'config/initializers/session_store.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
|
|
||||||
# SupportedHashRocketStyles: key, separator, table
|
|
||||||
# SupportedColonStyles: key, separator, table
|
|
||||||
# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
|
|
||||||
Layout/HashAlignment:
|
|
||||||
Exclude:
|
|
||||||
- 'config/environments/production.rb'
|
|
||||||
- 'config/initializers/rack_attack.rb'
|
|
||||||
- 'config/routes.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: AllowDoxygenCommentStyle, AllowGemfileRubyComment.
|
|
||||||
Layout/LeadingCommentSpace:
|
|
||||||
Exclude:
|
|
||||||
- 'config/application.rb'
|
|
||||||
- 'config/initializers/3_omniauth.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
|
|
||||||
# URISchemes: http, https
|
|
||||||
Layout/LineLength:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/account.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: EnforcedStyle.
|
|
||||||
# SupportedStyles: require_no_space, require_space
|
|
||||||
Layout/SpaceInLambdaLiteral:
|
|
||||||
Exclude:
|
|
||||||
- 'config/environments/production.rb'
|
|
||||||
- 'config/initializers/content_security_policy.rb'
|
|
||||||
|
|
||||||
# Configuration parameters: AllowComments, AllowEmptyLambdas.
|
|
||||||
Lint/EmptyBlock:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/controllers/api/v2/search_controller_spec.rb'
|
|
||||||
- 'spec/fabricators/access_token_fabricator.rb'
|
|
||||||
- 'spec/fabricators/conversation_fabricator.rb'
|
|
||||||
- 'spec/fabricators/system_key_fabricator.rb'
|
|
||||||
- 'spec/lib/activitypub/adapter_spec.rb'
|
|
||||||
- 'spec/models/user_role_spec.rb'
|
|
||||||
|
|
||||||
Lint/NonLocalExitFromIterator:
|
Lint/NonLocalExitFromIterator:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/helpers/jsonld_helper.rb'
|
- 'app/helpers/jsonld_helper.rb'
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
||||||
Lint/OrAssignmentToConstant:
|
|
||||||
Exclude:
|
|
||||||
- 'lib/sanitize_ext/sanitize_config.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
|
|
||||||
Lint/UnusedBlockArgument:
|
|
||||||
Exclude:
|
|
||||||
- 'config/initializers/content_security_policy.rb'
|
|
||||||
- 'config/initializers/doorkeeper.rb'
|
|
||||||
- 'config/initializers/paperclip.rb'
|
|
||||||
- 'config/initializers/simple_form.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
||||||
Lint/UselessAssignment:
|
|
||||||
Exclude:
|
|
||||||
- 'app/services/activitypub/process_status_update_service.rb'
|
|
||||||
- 'config/initializers/3_omniauth.rb'
|
|
||||||
- 'db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb'
|
|
||||||
- 'db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb'
|
|
||||||
- 'spec/controllers/api/v1/favourites_controller_spec.rb'
|
|
||||||
- 'spec/controllers/concerns/account_controller_concern_spec.rb'
|
|
||||||
- 'spec/helpers/jsonld_helper_spec.rb'
|
|
||||||
- 'spec/models/account_spec.rb'
|
|
||||||
- 'spec/models/domain_block_spec.rb'
|
|
||||||
- 'spec/models/status_spec.rb'
|
|
||||||
- 'spec/models/user_spec.rb'
|
|
||||||
- 'spec/models/webauthn_credentials_spec.rb'
|
|
||||||
- 'spec/services/account_search_service_spec.rb'
|
|
||||||
- 'spec/services/post_status_service_spec.rb'
|
|
||||||
- 'spec/services/precompute_feed_service_spec.rb'
|
|
||||||
- 'spec/services/resolve_url_service_spec.rb'
|
|
||||||
- 'spec/views/statuses/show.html.haml_spec.rb'
|
|
||||||
|
|
||||||
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
|
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
|
||||||
Metrics/AbcSize:
|
Metrics/AbcSize:
|
||||||
Max: 144
|
Max: 82
|
||||||
|
|
||||||
# Configuration parameters: CountBlocks, Max.
|
# Configuration parameters: CountBlocks, Max.
|
||||||
Metrics/BlockNesting:
|
Metrics/BlockNesting:
|
||||||
|
@ -120,369 +34,33 @@ Metrics/CyclomaticComplexity:
|
||||||
Metrics/PerceivedComplexity:
|
Metrics/PerceivedComplexity:
|
||||||
Max: 27
|
Max: 27
|
||||||
|
|
||||||
# Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers, AllowedPatterns.
|
|
||||||
# SupportedStyles: snake_case, normalcase, non_integer
|
|
||||||
# AllowedIdentifiers: capture3, iso8601, rfc1123_date, rfc822, rfc2822, rfc3339, x86_64
|
|
||||||
Naming/VariableNumber:
|
|
||||||
Exclude:
|
|
||||||
- 'db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb'
|
|
||||||
- 'db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb'
|
|
||||||
- 'db/migrate/20190820003045_update_statuses_index.rb'
|
|
||||||
- 'db/migrate/20190823221802_add_local_index_to_statuses.rb'
|
|
||||||
- 'db/migrate/20200119112504_add_public_index_to_statuses.rb'
|
|
||||||
- 'spec/models/account_spec.rb'
|
|
||||||
- 'spec/models/domain_block_spec.rb'
|
|
||||||
- 'spec/models/user_spec.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
||||||
# Configuration parameters: SafeMultiline.
|
|
||||||
Performance/DeletePrefix:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/featured_tag.rb'
|
|
||||||
|
|
||||||
Performance/MapMethodChain:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/feed.rb'
|
|
||||||
- 'lib/mastodon/cli/maintenance.rb'
|
|
||||||
- 'spec/services/bulk_import_service_spec.rb'
|
|
||||||
- 'spec/services/import_service_spec.rb'
|
|
||||||
|
|
||||||
RSpec/AnyInstance:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/controllers/activitypub/inboxes_controller_spec.rb'
|
|
||||||
- 'spec/controllers/admin/accounts_controller_spec.rb'
|
|
||||||
- 'spec/controllers/admin/resets_controller_spec.rb'
|
|
||||||
- 'spec/controllers/admin/settings/branding_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v1/media_controller_spec.rb'
|
|
||||||
- 'spec/controllers/auth/sessions_controller_spec.rb'
|
|
||||||
- 'spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb'
|
|
||||||
- 'spec/controllers/settings/two_factor_authentication/recovery_codes_controller_spec.rb'
|
|
||||||
- 'spec/lib/request_spec.rb'
|
|
||||||
- 'spec/lib/status_filter_spec.rb'
|
|
||||||
- 'spec/models/account_spec.rb'
|
|
||||||
- 'spec/models/setting_spec.rb'
|
|
||||||
- 'spec/services/activitypub/process_collection_service_spec.rb'
|
|
||||||
- 'spec/validators/follow_limit_validator_spec.rb'
|
|
||||||
- 'spec/workers/activitypub/delivery_worker_spec.rb'
|
|
||||||
- 'spec/workers/web/push_notification_worker_spec.rb'
|
|
||||||
|
|
||||||
# Configuration parameters: CountAsOne.
|
# Configuration parameters: CountAsOne.
|
||||||
RSpec/ExampleLength:
|
RSpec/ExampleLength:
|
||||||
Max: 22
|
Max: 22
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: EnforcedStyle.
|
|
||||||
# SupportedStyles: implicit, each, example
|
|
||||||
RSpec/HookArgument:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/controllers/api/v1/streaming_controller_spec.rb'
|
|
||||||
- 'spec/controllers/well_known/webfinger_controller_spec.rb'
|
|
||||||
- 'spec/helpers/instance_helper_spec.rb'
|
|
||||||
- 'spec/models/user_spec.rb'
|
|
||||||
- 'spec/rails_helper.rb'
|
|
||||||
- 'spec/serializers/activitypub/note_serializer_spec.rb'
|
|
||||||
- 'spec/serializers/activitypub/update_poll_serializer_spec.rb'
|
|
||||||
- 'spec/services/import_service_spec.rb'
|
|
||||||
|
|
||||||
# Configuration parameters: AssignmentOnly.
|
|
||||||
RSpec/InstanceVariable:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/controllers/api/v1/streaming_controller_spec.rb'
|
|
||||||
- 'spec/controllers/auth/confirmations_controller_spec.rb'
|
|
||||||
- 'spec/controllers/auth/passwords_controller_spec.rb'
|
|
||||||
- 'spec/controllers/auth/sessions_controller_spec.rb'
|
|
||||||
- 'spec/controllers/concerns/export_controller_concern_spec.rb'
|
|
||||||
- 'spec/controllers/home_controller_spec.rb'
|
|
||||||
- 'spec/controllers/settings/two_factor_authentication/webauthn_credentials_controller_spec.rb'
|
|
||||||
- 'spec/controllers/statuses_cleanup_controller_spec.rb'
|
|
||||||
- 'spec/models/concerns/account_finder_concern_spec.rb'
|
|
||||||
- 'spec/models/concerns/account_interactions_spec.rb'
|
|
||||||
- 'spec/models/public_feed_spec.rb'
|
|
||||||
- 'spec/serializers/activitypub/note_serializer_spec.rb'
|
|
||||||
- 'spec/serializers/activitypub/update_poll_serializer_spec.rb'
|
|
||||||
- 'spec/services/remove_status_service_spec.rb'
|
|
||||||
- 'spec/services/search_service_spec.rb'
|
|
||||||
- 'spec/services/unblock_domain_service_spec.rb'
|
|
||||||
|
|
||||||
RSpec/LetSetup:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/controllers/admin/accounts_controller_spec.rb'
|
|
||||||
- 'spec/controllers/admin/action_logs_controller_spec.rb'
|
|
||||||
- 'spec/controllers/admin/instances_controller_spec.rb'
|
|
||||||
- 'spec/controllers/admin/reports/actions_controller_spec.rb'
|
|
||||||
- 'spec/controllers/admin/statuses_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v1/accounts/statuses_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v1/admin/accounts_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v1/filters_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v1/followed_tags_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v2/admin/accounts_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v2/filters/keywords_controller_spec.rb'
|
|
||||||
- 'spec/controllers/api/v2/filters/statuses_controller_spec.rb'
|
|
||||||
- 'spec/controllers/auth/confirmations_controller_spec.rb'
|
|
||||||
- 'spec/controllers/auth/passwords_controller_spec.rb'
|
|
||||||
- 'spec/controllers/auth/sessions_controller_spec.rb'
|
|
||||||
- 'spec/controllers/follower_accounts_controller_spec.rb'
|
|
||||||
- 'spec/controllers/following_accounts_controller_spec.rb'
|
|
||||||
- 'spec/controllers/oauth/authorized_applications_controller_spec.rb'
|
|
||||||
- 'spec/controllers/oauth/tokens_controller_spec.rb'
|
|
||||||
- 'spec/controllers/settings/imports_controller_spec.rb'
|
|
||||||
- 'spec/lib/activitypub/activity/delete_spec.rb'
|
|
||||||
- 'spec/lib/vacuum/applications_vacuum_spec.rb'
|
|
||||||
- 'spec/lib/vacuum/preview_cards_vacuum_spec.rb'
|
|
||||||
- 'spec/models/account_spec.rb'
|
|
||||||
- 'spec/models/account_statuses_cleanup_policy_spec.rb'
|
|
||||||
- 'spec/models/canonical_email_block_spec.rb'
|
|
||||||
- 'spec/models/status_spec.rb'
|
|
||||||
- 'spec/models/user_spec.rb'
|
|
||||||
- 'spec/services/account_statuses_cleanup_service_spec.rb'
|
|
||||||
- 'spec/services/activitypub/fetch_featured_collection_service_spec.rb'
|
|
||||||
- 'spec/services/activitypub/fetch_remote_status_service_spec.rb'
|
|
||||||
- 'spec/services/activitypub/process_account_service_spec.rb'
|
|
||||||
- 'spec/services/activitypub/process_collection_service_spec.rb'
|
|
||||||
- 'spec/services/batched_remove_status_service_spec.rb'
|
|
||||||
- 'spec/services/block_domain_service_spec.rb'
|
|
||||||
- 'spec/services/bulk_import_service_spec.rb'
|
|
||||||
- 'spec/services/delete_account_service_spec.rb'
|
|
||||||
- 'spec/services/import_service_spec.rb'
|
|
||||||
- 'spec/services/notify_service_spec.rb'
|
|
||||||
- 'spec/services/remove_status_service_spec.rb'
|
|
||||||
- 'spec/services/report_service_spec.rb'
|
|
||||||
- 'spec/services/resolve_account_service_spec.rb'
|
|
||||||
- 'spec/services/suspend_account_service_spec.rb'
|
|
||||||
- 'spec/services/unallow_domain_service_spec.rb'
|
|
||||||
- 'spec/services/unsuspend_account_service_spec.rb'
|
|
||||||
- 'spec/workers/scheduler/user_cleanup_scheduler_spec.rb'
|
|
||||||
|
|
||||||
RSpec/MessageChain:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/controllers/api/v1/media_controller_spec.rb'
|
|
||||||
- 'spec/models/concerns/remotable_spec.rb'
|
|
||||||
- 'spec/models/session_activation_spec.rb'
|
|
||||||
- 'spec/models/setting_spec.rb'
|
|
||||||
|
|
||||||
# Configuration parameters: EnforcedStyle.
|
|
||||||
# SupportedStyles: have_received, receive
|
|
||||||
RSpec/MessageSpies:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/controllers/admin/accounts_controller_spec.rb'
|
|
||||||
- 'spec/helpers/admin/account_moderation_notes_helper_spec.rb'
|
|
||||||
- 'spec/lib/webfinger_resource_spec.rb'
|
|
||||||
- 'spec/models/admin/account_action_spec.rb'
|
|
||||||
- 'spec/models/concerns/remotable_spec.rb'
|
|
||||||
- 'spec/models/follow_request_spec.rb'
|
|
||||||
- 'spec/models/identity_spec.rb'
|
|
||||||
- 'spec/models/session_activation_spec.rb'
|
|
||||||
- 'spec/models/setting_spec.rb'
|
|
||||||
- 'spec/services/activitypub/fetch_replies_service_spec.rb'
|
|
||||||
- 'spec/services/activitypub/process_collection_service_spec.rb'
|
|
||||||
- 'spec/spec_helper.rb'
|
|
||||||
- 'spec/validators/status_length_validator_spec.rb'
|
|
||||||
|
|
||||||
RSpec/MultipleExpectations:
|
RSpec/MultipleExpectations:
|
||||||
Max: 8
|
Max: 8
|
||||||
|
|
||||||
# Configuration parameters: AllowSubject.
|
# Configuration parameters: AllowSubject.
|
||||||
RSpec/MultipleMemoizedHelpers:
|
RSpec/MultipleMemoizedHelpers:
|
||||||
Max: 21
|
Max: 17
|
||||||
|
|
||||||
# Configuration parameters: AllowedGroups.
|
# Configuration parameters: AllowedGroups.
|
||||||
RSpec/NestedGroups:
|
RSpec/NestedGroups:
|
||||||
Max: 6
|
Max: 6
|
||||||
|
|
||||||
RSpec/PendingWithoutReason:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/models/account_spec.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
||||||
Rails/ApplicationController:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/health_controller.rb'
|
|
||||||
|
|
||||||
# Configuration parameters: Include.
|
|
||||||
# Include: db/**/*.rb
|
|
||||||
Rails/CreateTableWithTimestamps:
|
|
||||||
Exclude:
|
|
||||||
- 'db/migrate/20170508230434_create_conversation_mutes.rb'
|
|
||||||
- 'db/migrate/20170823162448_create_status_pins.rb'
|
|
||||||
- 'db/migrate/20171116161857_create_list_accounts.rb'
|
|
||||||
- 'db/migrate/20180929222014_create_account_conversations.rb'
|
|
||||||
- 'db/migrate/20181007025445_create_pghero_space_stats.rb'
|
|
||||||
- 'db/migrate/20190103124649_create_scheduled_statuses.rb'
|
|
||||||
- 'db/migrate/20220824233535_create_status_trends.rb'
|
|
||||||
- 'db/migrate/20221006061337_create_preview_card_trends.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: Severity.
|
|
||||||
Rails/DuplicateAssociation:
|
|
||||||
Exclude:
|
|
||||||
- 'app/serializers/activitypub/collection_serializer.rb'
|
|
||||||
- 'app/serializers/activitypub/note_serializer.rb'
|
|
||||||
|
|
||||||
# Configuration parameters: Include.
|
# Configuration parameters: Include.
|
||||||
# Include: app/models/**/*.rb
|
# Include: app/models/**/*.rb
|
||||||
Rails/HasAndBelongsToMany:
|
Rails/HasAndBelongsToMany:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/models/concerns/account_associations.rb'
|
- 'app/models/concerns/account/associations.rb'
|
||||||
- 'app/models/preview_card.rb'
|
|
||||||
- 'app/models/status.rb'
|
- 'app/models/status.rb'
|
||||||
- 'app/models/tag.rb'
|
- 'app/models/tag.rb'
|
||||||
|
|
||||||
# Configuration parameters: Include.
|
|
||||||
# Include: app/models/**/*.rb
|
|
||||||
Rails/HasManyOrHasOneDependent:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/concerns/account_counters.rb'
|
|
||||||
- 'app/models/conversation.rb'
|
|
||||||
- 'app/models/custom_emoji.rb'
|
|
||||||
- 'app/models/custom_emoji_category.rb'
|
|
||||||
- 'app/models/domain_block.rb'
|
|
||||||
- 'app/models/invite.rb'
|
|
||||||
- 'app/models/status.rb'
|
|
||||||
- 'app/models/user.rb'
|
|
||||||
- 'app/models/web/push_subscription.rb'
|
|
||||||
|
|
||||||
Rails/I18nLocaleTexts:
|
|
||||||
Exclude:
|
|
||||||
- 'lib/tasks/mastodon.rake'
|
|
||||||
- 'spec/helpers/flashes_helper_spec.rb'
|
|
||||||
|
|
||||||
# Configuration parameters: Include.
|
|
||||||
# Include: app/controllers/**/*.rb, app/mailers/**/*.rb
|
|
||||||
Rails/LexicallyScopedActionFilter:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/auth/passwords_controller.rb'
|
|
||||||
- 'app/controllers/auth/registrations_controller.rb'
|
|
||||||
- 'app/controllers/auth/sessions_controller.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
||||||
Rails/NegateInclude:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/concerns/signature_verification.rb'
|
|
||||||
- 'app/helpers/jsonld_helper.rb'
|
|
||||||
- 'app/lib/activitypub/activity/create.rb'
|
|
||||||
- 'app/lib/activitypub/activity/move.rb'
|
|
||||||
- 'app/lib/feed_manager.rb'
|
|
||||||
- 'app/lib/link_details_extractor.rb'
|
|
||||||
- 'app/models/concerns/attachmentable.rb'
|
|
||||||
- 'app/models/concerns/remotable.rb'
|
|
||||||
- 'app/models/custom_filter.rb'
|
|
||||||
- 'app/services/activitypub/process_status_update_service.rb'
|
|
||||||
- 'app/services/fetch_link_card_service.rb'
|
|
||||||
- 'app/services/search_service.rb'
|
|
||||||
- 'app/workers/web/push_notification_worker.rb'
|
|
||||||
- 'lib/paperclip/color_extractor.rb'
|
|
||||||
|
|
||||||
Rails/OutputSafety:
|
Rails/OutputSafety:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'config/initializers/simple_form.rb'
|
- 'config/initializers/simple_form.rb'
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
||||||
# Configuration parameters: Include.
|
|
||||||
# Include: **/Rakefile, **/*.rake
|
|
||||||
Rails/RakeEnvironment:
|
|
||||||
Exclude:
|
|
||||||
- 'lib/tasks/auto_annotate_models.rake'
|
|
||||||
- 'lib/tasks/db.rake'
|
|
||||||
- 'lib/tasks/emojis.rake'
|
|
||||||
- 'lib/tasks/mastodon.rake'
|
|
||||||
- 'lib/tasks/repo.rake'
|
|
||||||
- 'lib/tasks/statistics.rake'
|
|
||||||
|
|
||||||
# Configuration parameters: Include.
|
|
||||||
# Include: db/**/*.rb
|
|
||||||
Rails/ReversibleMigration:
|
|
||||||
Exclude:
|
|
||||||
- 'db/migrate/20160223164502_make_uris_nullable_in_statuses.rb'
|
|
||||||
- 'db/migrate/20161122163057_remove_unneeded_indexes.rb'
|
|
||||||
- 'db/migrate/20170205175257_remove_devices.rb'
|
|
||||||
- 'db/migrate/20170322143850_change_primary_key_to_bigint_on_statuses.rb'
|
|
||||||
- 'db/migrate/20170520145338_change_language_filter_to_opt_out.rb'
|
|
||||||
- 'db/migrate/20170609145826_remove_default_language_from_statuses.rb'
|
|
||||||
- 'db/migrate/20170711225116_fix_null_booleans.rb'
|
|
||||||
- 'db/migrate/20171129172043_add_index_on_stream_entries.rb'
|
|
||||||
- 'db/migrate/20171212195226_remove_duplicate_indexes_in_lists.rb'
|
|
||||||
- 'db/migrate/20171226094803_more_faster_index_on_notifications.rb'
|
|
||||||
- 'db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb'
|
|
||||||
- 'db/migrate/20180617162849_remove_unused_indexes.rb'
|
|
||||||
- 'db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb'
|
|
||||||
|
|
||||||
# Configuration parameters: ForbiddenMethods, AllowedMethods.
|
|
||||||
# ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, insert, insert!, insert_all, insert_all!, toggle!, touch, touch_all, update_all, update_attribute, update_column, update_columns, update_counters, upsert, upsert_all
|
|
||||||
Rails/SkipsModelValidations:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/admin/invites_controller.rb'
|
|
||||||
- 'app/controllers/concerns/session_tracking_concern.rb'
|
|
||||||
- 'app/models/concerns/account_merging.rb'
|
|
||||||
- 'app/models/concerns/expireable.rb'
|
|
||||||
- 'app/models/status.rb'
|
|
||||||
- 'app/models/trends/links.rb'
|
|
||||||
- 'app/models/trends/preview_card_batch.rb'
|
|
||||||
- 'app/models/trends/preview_card_provider_batch.rb'
|
|
||||||
- 'app/models/trends/status_batch.rb'
|
|
||||||
- 'app/models/trends/statuses.rb'
|
|
||||||
- 'app/models/trends/tag_batch.rb'
|
|
||||||
- 'app/models/trends/tags.rb'
|
|
||||||
- 'app/models/user.rb'
|
|
||||||
- 'app/services/activitypub/process_status_update_service.rb'
|
|
||||||
- 'app/services/approve_appeal_service.rb'
|
|
||||||
- 'app/services/block_domain_service.rb'
|
|
||||||
- 'app/services/delete_account_service.rb'
|
|
||||||
- 'app/services/process_mentions_service.rb'
|
|
||||||
- 'app/services/unallow_domain_service.rb'
|
|
||||||
- 'app/services/unblock_domain_service.rb'
|
|
||||||
- 'app/services/update_status_service.rb'
|
|
||||||
- 'app/workers/activitypub/post_upgrade_worker.rb'
|
|
||||||
- 'app/workers/move_worker.rb'
|
|
||||||
- 'app/workers/scheduler/ip_cleanup_scheduler.rb'
|
|
||||||
- 'app/workers/scheduler/scheduled_statuses_scheduler.rb'
|
|
||||||
- 'db/migrate/20161203164520_add_from_account_id_to_notifications.rb'
|
|
||||||
- 'db/migrate/20170105224407_add_shortcode_to_media_attachments.rb'
|
|
||||||
- 'db/migrate/20170209184350_add_reply_to_statuses.rb'
|
|
||||||
- 'db/migrate/20170304202101_add_type_to_media_attachments.rb'
|
|
||||||
- 'db/migrate/20180528141303_fix_accounts_unique_index.rb'
|
|
||||||
- 'db/migrate/20180609104432_migrate_web_push_subscriptions2.rb'
|
|
||||||
- 'db/migrate/20181207011115_downcase_custom_emoji_domains.rb'
|
|
||||||
- 'db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb'
|
|
||||||
- 'db/migrate/20191007013357_update_pt_locales.rb'
|
|
||||||
- 'db/migrate/20220316233212_update_kurdish_locales.rb'
|
|
||||||
- 'db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb'
|
|
||||||
- 'db/post_migrate/20200917193528_migrate_notifications_type.rb'
|
|
||||||
- 'db/post_migrate/20201017234926_fill_account_suspension_origin.rb'
|
|
||||||
- 'db/post_migrate/20220617202502_migrate_roles.rb'
|
|
||||||
- 'db/post_migrate/20221101190723_backfill_admin_action_logs.rb'
|
|
||||||
- 'db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb'
|
|
||||||
- 'lib/mastodon/cli/accounts.rb'
|
|
||||||
- 'lib/mastodon/cli/main.rb'
|
|
||||||
- 'lib/mastodon/cli/maintenance.rb'
|
|
||||||
- 'spec/controllers/api/v1/admin/accounts_controller_spec.rb'
|
|
||||||
- 'spec/lib/activitypub/activity/follow_spec.rb'
|
|
||||||
- 'spec/services/follow_service_spec.rb'
|
|
||||||
- 'spec/services/update_account_service_spec.rb'
|
|
||||||
|
|
||||||
# Configuration parameters: Include.
|
|
||||||
# Include: db/**/*.rb
|
|
||||||
Rails/ThreeStateBooleanColumn:
|
|
||||||
Exclude:
|
|
||||||
- 'db/migrate/20160325130944_add_admin_to_users.rb'
|
|
||||||
- 'db/migrate/20161123093447_add_sensitive_to_statuses.rb'
|
|
||||||
- 'db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb'
|
|
||||||
- 'db/migrate/20170127165745_add_devise_two_factor_to_users.rb'
|
|
||||||
- 'db/migrate/20170209184350_add_reply_to_statuses.rb'
|
|
||||||
- 'db/migrate/20170330163835_create_imports.rb'
|
|
||||||
- 'db/migrate/20170905165803_add_local_to_statuses.rb'
|
|
||||||
- 'db/migrate/20181203021853_add_discoverable_to_accounts.rb'
|
|
||||||
- 'db/migrate/20190509164208_add_by_moderator_to_tombstone.rb'
|
|
||||||
- 'db/migrate/20190805123746_add_capabilities_to_tags.rb'
|
|
||||||
- 'db/migrate/20191212163405_add_hide_collections_to_accounts.rb'
|
|
||||||
- 'db/migrate/20200309150742_add_forwarded_to_reports.rb'
|
|
||||||
- 'db/migrate/20210609202149_create_login_activities.rb'
|
|
||||||
- 'db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb'
|
|
||||||
- 'db/migrate/20211031031021_create_preview_card_providers.rb'
|
|
||||||
- 'db/migrate/20211115032527_add_trendable_to_preview_cards.rb'
|
|
||||||
- 'db/migrate/20220202200743_add_trendable_to_accounts.rb'
|
|
||||||
- 'db/migrate/20220202200926_add_trendable_to_statuses.rb'
|
|
||||||
- 'db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb'
|
|
||||||
|
|
||||||
# Configuration parameters: Include.
|
# Configuration parameters: Include.
|
||||||
# Include: app/models/**/*.rb
|
# Include: app/models/**/*.rb
|
||||||
Rails/UniqueValidationWithoutIndex:
|
Rails/UniqueValidationWithoutIndex:
|
||||||
|
@ -492,61 +70,7 @@ Rails/UniqueValidationWithoutIndex:
|
||||||
- 'app/models/identity.rb'
|
- 'app/models/identity.rb'
|
||||||
- 'app/models/webauthn_credential.rb'
|
- 'app/models/webauthn_credential.rb'
|
||||||
|
|
||||||
# Configuration parameters: Include.
|
|
||||||
# Include: app/models/**/*.rb
|
|
||||||
Rails/UnusedIgnoredColumns:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/account.rb'
|
|
||||||
- 'app/models/account_stat.rb'
|
|
||||||
- 'app/models/admin/action_log.rb'
|
|
||||||
- 'app/models/custom_filter.rb'
|
|
||||||
- 'app/models/email_domain_block.rb'
|
|
||||||
- 'app/models/report.rb'
|
|
||||||
- 'app/models/status_edit.rb'
|
|
||||||
- 'app/models/user.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
# Configuration parameters: EnforcedStyle.
|
|
||||||
# SupportedStyles: exists, where
|
|
||||||
Rails/WhereExists:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/activitypub/inboxes_controller.rb'
|
|
||||||
- 'app/controllers/admin/email_domain_blocks_controller.rb'
|
|
||||||
- 'app/controllers/auth/registrations_controller.rb'
|
|
||||||
- 'app/lib/activitypub/activity/create.rb'
|
|
||||||
- 'app/lib/delivery_failure_tracker.rb'
|
|
||||||
- 'app/lib/feed_manager.rb'
|
|
||||||
- 'app/lib/status_cache_hydrator.rb'
|
|
||||||
- 'app/lib/suspicious_sign_in_detector.rb'
|
|
||||||
- 'app/models/concerns/account_interactions.rb'
|
|
||||||
- 'app/models/featured_tag.rb'
|
|
||||||
- 'app/models/poll.rb'
|
|
||||||
- 'app/models/session_activation.rb'
|
|
||||||
- 'app/models/status.rb'
|
|
||||||
- 'app/models/user.rb'
|
|
||||||
- 'app/policies/status_policy.rb'
|
|
||||||
- 'app/serializers/rest/announcement_serializer.rb'
|
|
||||||
- 'app/serializers/rest/tag_serializer.rb'
|
|
||||||
- 'app/services/activitypub/fetch_remote_status_service.rb'
|
|
||||||
- 'app/services/app_sign_up_service.rb'
|
|
||||||
- 'app/services/vote_service.rb'
|
|
||||||
- 'app/validators/reaction_validator.rb'
|
|
||||||
- 'app/validators/vote_validator.rb'
|
|
||||||
- 'app/workers/move_worker.rb'
|
|
||||||
- 'db/migrate/20190529143559_preserve_old_layout_for_existing_users.rb'
|
|
||||||
- 'lib/tasks/tests.rake'
|
|
||||||
- 'spec/models/account_spec.rb'
|
|
||||||
- 'spec/services/activitypub/process_collection_service_spec.rb'
|
|
||||||
- 'spec/services/purge_domain_service_spec.rb'
|
|
||||||
- 'spec/services/unallow_domain_service_spec.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: AllowOnConstant, AllowOnSelfClass.
|
|
||||||
Style/CaseEquality:
|
|
||||||
Exclude:
|
|
||||||
- 'config/initializers/trusted_proxies.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: AllowedMethods, AllowedPatterns.
|
# Configuration parameters: AllowedMethods, AllowedPatterns.
|
||||||
# AllowedMethods: ==, equal?, eql?
|
# AllowedMethods: ==, equal?, eql?
|
||||||
Style/ClassEqualityComparison:
|
Style/ClassEqualityComparison:
|
||||||
|
@ -558,12 +82,6 @@ Style/ClassVars:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'config/initializers/devise.rb'
|
- 'config/initializers/devise.rb'
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
||||||
Style/CombinableLoops:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/form/custom_emoji_batch.rb'
|
|
||||||
- 'app/models/form/ip_block_batch.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
# This cop supports safe autocorrection (--autocorrect).
|
||||||
# Configuration parameters: AllowedVars.
|
# Configuration parameters: AllowedVars.
|
||||||
Style/FetchEnvVar:
|
Style/FetchEnvVar:
|
||||||
|
@ -576,12 +94,11 @@ Style/FetchEnvVar:
|
||||||
- 'config/initializers/3_omniauth.rb'
|
- 'config/initializers/3_omniauth.rb'
|
||||||
- 'config/initializers/blacklists.rb'
|
- 'config/initializers/blacklists.rb'
|
||||||
- 'config/initializers/cache_buster.rb'
|
- 'config/initializers/cache_buster.rb'
|
||||||
- 'config/initializers/content_security_policy.rb'
|
|
||||||
- 'config/initializers/devise.rb'
|
- 'config/initializers/devise.rb'
|
||||||
- 'config/initializers/paperclip.rb'
|
- 'config/initializers/paperclip.rb'
|
||||||
- 'config/initializers/vapid.rb'
|
- 'config/initializers/vapid.rb'
|
||||||
- 'lib/mastodon/premailer_webpack_strategy.rb'
|
|
||||||
- 'lib/mastodon/redis_config.rb'
|
- 'lib/mastodon/redis_config.rb'
|
||||||
|
- 'lib/premailer_webpack_strategy.rb'
|
||||||
- 'lib/tasks/repo.rake'
|
- 'lib/tasks/repo.rake'
|
||||||
- 'spec/features/profile_spec.rb'
|
- 'spec/features/profile_spec.rb'
|
||||||
|
|
||||||
|
@ -591,14 +108,12 @@ Style/FetchEnvVar:
|
||||||
# AllowedMethods: redirect
|
# AllowedMethods: redirect
|
||||||
Style/FormatStringToken:
|
Style/FormatStringToken:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/models/privacy_policy.rb'
|
|
||||||
- 'config/initializers/devise.rb'
|
- 'config/initializers/devise.rb'
|
||||||
- 'lib/paperclip/color_extractor.rb'
|
- 'lib/paperclip/color_extractor.rb'
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
Style/GlobalStdStream:
|
Style/GlobalStdStream:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'config/boot.rb'
|
|
||||||
- 'config/environments/development.rb'
|
- 'config/environments/development.rb'
|
||||||
- 'config/environments/production.rb'
|
- 'config/environments/production.rb'
|
||||||
|
|
||||||
|
@ -606,17 +121,13 @@ Style/GlobalStdStream:
|
||||||
# Configuration parameters: MinBodyLength, AllowConsecutiveConditionals.
|
# Configuration parameters: MinBodyLength, AllowConsecutiveConditionals.
|
||||||
Style/GuardClause:
|
Style/GuardClause:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/controllers/admin/confirmations_controller.rb'
|
|
||||||
- 'app/controllers/auth/confirmations_controller.rb'
|
|
||||||
- 'app/controllers/auth/passwords_controller.rb'
|
|
||||||
- 'app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb'
|
|
||||||
- 'app/lib/activitypub/activity/block.rb'
|
- 'app/lib/activitypub/activity/block.rb'
|
||||||
- 'app/lib/request.rb'
|
- 'app/lib/request.rb'
|
||||||
- 'app/lib/request_pool.rb'
|
- 'app/lib/request_pool.rb'
|
||||||
- 'app/lib/webfinger.rb'
|
- 'app/lib/webfinger.rb'
|
||||||
- 'app/lib/webfinger_resource.rb'
|
- 'app/lib/webfinger_resource.rb'
|
||||||
- 'app/models/concerns/account_counters.rb'
|
- 'app/models/concerns/account/counters.rb'
|
||||||
- 'app/models/concerns/ldap_authenticable.rb'
|
- 'app/models/concerns/user/ldap_authenticable.rb'
|
||||||
- 'app/models/tag.rb'
|
- 'app/models/tag.rb'
|
||||||
- 'app/models/user.rb'
|
- 'app/models/user.rb'
|
||||||
- 'app/services/fan_out_on_write_service.rb'
|
- 'app/services/fan_out_on_write_service.rb'
|
||||||
|
@ -628,10 +139,8 @@ Style/GuardClause:
|
||||||
- 'app/workers/redownload_media_worker.rb'
|
- 'app/workers/redownload_media_worker.rb'
|
||||||
- 'app/workers/remote_account_refresh_worker.rb'
|
- 'app/workers/remote_account_refresh_worker.rb'
|
||||||
- 'config/initializers/devise.rb'
|
- 'config/initializers/devise.rb'
|
||||||
- 'db/migrate/20170901141119_truncate_preview_cards.rb'
|
- 'lib/devise/strategies/two_factor_ldap_authenticatable.rb'
|
||||||
- 'db/post_migrate/20220704024901_migrate_settings_to_user_roles.rb'
|
- 'lib/devise/strategies/two_factor_pam_authenticatable.rb'
|
||||||
- 'lib/devise/two_factor_ldap_authenticatable.rb'
|
|
||||||
- 'lib/devise/two_factor_pam_authenticatable.rb'
|
|
||||||
- 'lib/mastodon/cli/accounts.rb'
|
- 'lib/mastodon/cli/accounts.rb'
|
||||||
- 'lib/mastodon/cli/maintenance.rb'
|
- 'lib/mastodon/cli/maintenance.rb'
|
||||||
- 'lib/mastodon/cli/media.rb'
|
- 'lib/mastodon/cli/media.rb'
|
||||||
|
@ -645,12 +154,11 @@ Style/HashAsLastArrayItem:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/controllers/admin/statuses_controller.rb'
|
- 'app/controllers/admin/statuses_controller.rb'
|
||||||
- 'app/controllers/api/v1/statuses_controller.rb'
|
- 'app/controllers/api/v1/statuses_controller.rb'
|
||||||
- 'app/models/concerns/account_counters.rb'
|
- 'app/models/concerns/account/counters.rb'
|
||||||
- 'app/models/concerns/status_threading_concern.rb'
|
- 'app/models/concerns/status/threading_concern.rb'
|
||||||
- 'app/models/status.rb'
|
- 'app/models/status.rb'
|
||||||
- 'app/services/batched_remove_status_service.rb'
|
- 'app/services/batched_remove_status_service.rb'
|
||||||
- 'app/services/notify_service.rb'
|
- 'app/services/notify_service.rb'
|
||||||
- 'db/migrate/20181024224956_migrate_account_conversations.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
Style/HashTransformValues:
|
Style/HashTransformValues:
|
||||||
|
@ -665,22 +173,6 @@ Style/IfUnlessModifier:
|
||||||
- 'config/initializers/devise.rb'
|
- 'config/initializers/devise.rb'
|
||||||
- 'config/initializers/ffmpeg.rb'
|
- 'config/initializers/ffmpeg.rb'
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
||||||
# Configuration parameters: InverseMethods, InverseBlocks.
|
|
||||||
Style/InverseMethods:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/custom_filter.rb'
|
|
||||||
- 'app/services/update_account_service.rb'
|
|
||||||
- 'spec/controllers/activitypub/replies_controller_spec.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: EnforcedStyle.
|
|
||||||
# SupportedStyles: line_count_dependent, lambda, literal
|
|
||||||
Style/Lambda:
|
|
||||||
Exclude:
|
|
||||||
- 'config/initializers/simple_form.rb'
|
|
||||||
- 'config/routes.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
Style/MapToHash:
|
Style/MapToHash:
|
||||||
Exclude:
|
Exclude:
|
||||||
|
@ -745,49 +237,26 @@ Style/RedundantFetchBlock:
|
||||||
- 'config/initializers/paperclip.rb'
|
- 'config/initializers/paperclip.rb'
|
||||||
- 'config/puma.rb'
|
- 'config/puma.rb'
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: AllowMultipleReturnValues.
|
|
||||||
Style/RedundantReturn:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/api/v1/directories_controller.rb'
|
|
||||||
- 'app/controllers/auth/confirmations_controller.rb'
|
|
||||||
- 'app/lib/ostatus/tag_manager.rb'
|
|
||||||
- 'app/models/form/import.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
# Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength.
|
# Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength.
|
||||||
# AllowedMethods: present?, blank?, presence, try, try!
|
# AllowedMethods: present?, blank?, presence, try, try!
|
||||||
Style/SafeNavigation:
|
Style/SafeNavigation:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/models/concerns/account_finder_concern.rb'
|
- 'app/models/concerns/account/finder_concern.rb'
|
||||||
- 'app/models/status.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
# This cop supports safe autocorrection (--autocorrect).
|
||||||
# Configuration parameters: EnforcedStyle.
|
# Configuration parameters: EnforcedStyle.
|
||||||
# SupportedStyles: only_raise, only_fail, semantic
|
# SupportedStyles: only_raise, only_fail, semantic
|
||||||
Style/SignalException:
|
Style/SignalException:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'lib/devise/two_factor_ldap_authenticatable.rb'
|
- 'lib/devise/strategies/two_factor_ldap_authenticatable.rb'
|
||||||
- 'lib/devise/two_factor_pam_authenticatable.rb'
|
- 'lib/devise/strategies/two_factor_pam_authenticatable.rb'
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
Style/SingleArgumentDig:
|
Style/SingleArgumentDig:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'lib/webpacker/manifest_extensions.rb'
|
- 'lib/webpacker/manifest_extensions.rb'
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: EnforcedStyle.
|
|
||||||
# SupportedStyles: require_parentheses, require_no_parentheses
|
|
||||||
Style/StabbyLambdaParentheses:
|
|
||||||
Exclude:
|
|
||||||
- 'config/environments/production.rb'
|
|
||||||
- 'config/initializers/content_security_policy.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
Style/StderrPuts:
|
|
||||||
Exclude:
|
|
||||||
- 'config/boot.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
# Configuration parameters: Mode.
|
# Configuration parameters: Mode.
|
||||||
Style/StringConcatenation:
|
Style/StringConcatenation:
|
||||||
|
@ -806,20 +275,6 @@ Style/StringLiterals:
|
||||||
- 'config/initializers/webauthn.rb'
|
- 'config/initializers/webauthn.rb'
|
||||||
- 'config/routes.rb'
|
- 'config/routes.rb'
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
||||||
# Configuration parameters: AllowMethodsWithArguments, AllowedMethods, AllowedPatterns, AllowComments.
|
|
||||||
# AllowedMethods: define_method, mail, respond_to
|
|
||||||
Style/SymbolProc:
|
|
||||||
Exclude:
|
|
||||||
- 'config/initializers/3_omniauth.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: EnforcedStyle, AllowSafeAssignment.
|
|
||||||
# SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex
|
|
||||||
Style/TernaryParentheses:
|
|
||||||
Exclude:
|
|
||||||
- 'config/environments/development.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
# This cop supports safe autocorrection (--autocorrect).
|
||||||
# Configuration parameters: EnforcedStyleForMultiline.
|
# Configuration parameters: EnforcedStyleForMultiline.
|
||||||
# SupportedStylesForMultiline: comma, consistent_comma, no_comma
|
# SupportedStylesForMultiline: comma, consistent_comma, no_comma
|
||||||
|
@ -836,11 +291,8 @@ Style/TrailingCommaInHashLiteral:
|
||||||
- 'config/environments/test.rb'
|
- 'config/environments/test.rb'
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
# This cop supports safe autocorrection (--autocorrect).
|
||||||
# Configuration parameters: EnforcedStyle, MinSize, WordRegex.
|
# Configuration parameters: WordRegex.
|
||||||
# SupportedStyles: percent, brackets
|
# SupportedStyles: percent, brackets
|
||||||
Style/WordArray:
|
Style/WordArray:
|
||||||
Exclude:
|
EnforcedStyle: percent
|
||||||
- 'app/helpers/languages_helper.rb'
|
MinSize: 3
|
||||||
- 'config/initializers/cors.rb'
|
|
||||||
- 'spec/controllers/settings/imports_controller_spec.rb'
|
|
||||||
- 'spec/models/form/import_spec.rb'
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
3.2.2
|
3.2.3
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
if ENV['CI']
|
||||||
|
require 'simplecov-lcov'
|
||||||
|
SimpleCov::Formatter::LcovFormatter.config.report_with_single_file = true
|
||||||
|
SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter
|
||||||
|
else
|
||||||
|
SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
|
||||||
|
end
|
||||||
|
|
||||||
|
SimpleCov.start 'rails' do
|
||||||
|
enable_coverage :branch
|
||||||
|
|
||||||
|
add_filter 'lib/linter'
|
||||||
|
|
||||||
|
add_group 'Libraries', 'lib'
|
||||||
|
add_group 'Policies', 'app/policies'
|
||||||
|
add_group 'Presenters', 'app/presenters'
|
||||||
|
add_group 'Serializers', 'app/serializers'
|
||||||
|
add_group 'Services', 'app/services'
|
||||||
|
add_group 'Validators', 'app/validators'
|
||||||
|
end
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"ignore_dirs": ["node_modules/", "public/"]
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
diff --git a/lib/index.js b/lib/index.js
|
||||||
|
index 16ed6be8be8f555cc99096c2ff60954b42dc313d..d009c069770d066ad0db7ad02de1ea473a29334e 100644
|
||||||
|
--- a/lib/index.js
|
||||||
|
+++ b/lib/index.js
|
||||||
|
@@ -99,7 +99,7 @@ function lodash(_ref) {
|
||||||
|
|
||||||
|
var node = _ref3;
|
||||||
|
|
||||||
|
- if ((0, _types.isModuleDeclaration)(node)) {
|
||||||
|
+ if ((0, _types.isImportDeclaration)(node) || (0, _types.isExportDeclaration)(node)) {
|
||||||
|
isModule = true;
|
||||||
|
break;
|
||||||
|
}
|
49
.yarnclean
49
.yarnclean
|
@ -1,49 +0,0 @@
|
||||||
# test directories
|
|
||||||
__tests__
|
|
||||||
test
|
|
||||||
tests
|
|
||||||
powered-test
|
|
||||||
|
|
||||||
# asset directories
|
|
||||||
docs
|
|
||||||
doc
|
|
||||||
website
|
|
||||||
images
|
|
||||||
# assets
|
|
||||||
|
|
||||||
# examples
|
|
||||||
example
|
|
||||||
examples
|
|
||||||
|
|
||||||
# code coverage directories
|
|
||||||
coverage
|
|
||||||
.nyc_output
|
|
||||||
|
|
||||||
# build scripts
|
|
||||||
Makefile
|
|
||||||
Gulpfile.js
|
|
||||||
Gruntfile.js
|
|
||||||
|
|
||||||
# configs
|
|
||||||
.tern-project
|
|
||||||
.gitattributes
|
|
||||||
.editorconfig
|
|
||||||
.*ignore
|
|
||||||
.eslintrc
|
|
||||||
.jshintrc
|
|
||||||
.flowconfig
|
|
||||||
.documentup.json
|
|
||||||
.yarn-metadata.json
|
|
||||||
.*.yml
|
|
||||||
*.yml
|
|
||||||
|
|
||||||
# misc
|
|
||||||
*.gz
|
|
||||||
*.md
|
|
||||||
|
|
||||||
# for specific ignore
|
|
||||||
!.svgo.yml
|
|
||||||
!sass-lint/**/*.yml
|
|
||||||
|
|
||||||
# breaks lint-staged or generally anything using https://github.com/eemeli/yaml/issues/384
|
|
||||||
!**/yaml/dist/**/doc
|
|
|
@ -0,0 +1 @@
|
||||||
|
nodeLinker: node-modules
|
2369
CHANGELOG.md
2369
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
|
@ -11,6 +11,10 @@ You can contribute in the following ways:
|
||||||
|
|
||||||
If your contributions are accepted into Mastodon, you can request to be paid through [our OpenCollective](https://opencollective.com/mastodon).
|
If your contributions are accepted into Mastodon, you can request to be paid through [our OpenCollective](https://opencollective.com/mastodon).
|
||||||
|
|
||||||
|
## API Changes and Additions
|
||||||
|
|
||||||
|
Please note that any changes or additions made to the API should have an accompanying pull request on [our documentation repository](https://github.com/mastodon/documentation).
|
||||||
|
|
||||||
## Bug reports
|
## Bug reports
|
||||||
|
|
||||||
Bug reports and feature suggestions must use descriptive and concise titles and be submitted to [GitHub Issues](https://github.com/mastodon/mastodon/issues). Please use the search function to make sure that you are not submitting duplicates, and that a similar report or request has not already been resolved or rejected.
|
Bug reports and feature suggestions must use descriptive and concise titles and be submitted to [GitHub Issues](https://github.com/mastodon/mastodon/issues). Please use the search function to make sure that you are not submitting duplicates, and that a similar report or request has not already been resolved or rejected.
|
||||||
|
|
15
Capfile
15
Capfile
|
@ -1,15 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
require 'capistrano/setup'
|
|
||||||
require 'capistrano/deploy'
|
|
||||||
require 'capistrano/scm/git'
|
|
||||||
|
|
||||||
install_plugin Capistrano::SCM::Git
|
|
||||||
|
|
||||||
require 'capistrano/rbenv'
|
|
||||||
require 'capistrano/bundler'
|
|
||||||
require 'capistrano/yarn'
|
|
||||||
require 'capistrano/rails/assets'
|
|
||||||
require 'capistrano/rails/migrations'
|
|
||||||
|
|
||||||
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
|
|
327
Dockerfile
327
Dockerfile
|
@ -1,105 +1,260 @@
|
||||||
# syntax=docker/dockerfile:1.4
|
# syntax=docker/dockerfile:1.4
|
||||||
# This needs to be bookworm-slim because the Ruby image is built on bookworm-slim
|
|
||||||
ARG NODE_VERSION="20.6-bookworm-slim"
|
|
||||||
|
|
||||||
FROM ghcr.io/moritzheiber/ruby-jemalloc:3.2.2-slim as ruby
|
# Please see https://docs.docker.com/engine/reference/builder for information about
|
||||||
FROM node:${NODE_VERSION} as build
|
# the extended buildx capabilities used in this file.
|
||||||
|
# Make sure multiarch TARGETPLATFORM is available for interpolation
|
||||||
|
# See: https://docs.docker.com/build/building/multi-platform/
|
||||||
|
ARG TARGETPLATFORM=${TARGETPLATFORM}
|
||||||
|
ARG BUILDPLATFORM=${BUILDPLATFORM}
|
||||||
|
|
||||||
COPY --link --from=ruby /opt/ruby /opt/ruby
|
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.2.3"]
|
||||||
|
ARG RUBY_VERSION="3.2.3"
|
||||||
|
# # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
|
||||||
|
ARG NODE_MAJOR_VERSION="20"
|
||||||
|
# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"]
|
||||||
|
ARG DEBIAN_VERSION="bookworm"
|
||||||
|
# Node image to use for base image based on combined variables (ex: 20-bookworm-slim)
|
||||||
|
FROM docker.io/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim as node
|
||||||
|
# Ruby image to use for base image based on combined variables (ex: 3.2.3-slim-bookworm)
|
||||||
|
FROM docker.io/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} as ruby
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND="noninteractive" \
|
# Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA
|
||||||
PATH="${PATH}:/opt/ruby/bin"
|
# Example: v4.2.0-nightly.2023.11.09+something
|
||||||
|
# Overwrite existance of 'alpha.0' in version.rb [--build-arg MASTODON_VERSION_PRERELEASE="nightly.2023.11.09"]
|
||||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
|
||||||
|
|
||||||
WORKDIR /opt/mastodon
|
|
||||||
COPY Gemfile* package.json yarn.lock /opt/mastodon/
|
|
||||||
|
|
||||||
# hadolint ignore=DL3008
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get -yq dist-upgrade && \
|
|
||||||
apt-get install -y --no-install-recommends build-essential \
|
|
||||||
git \
|
|
||||||
libicu-dev \
|
|
||||||
libidn-dev \
|
|
||||||
libpq-dev \
|
|
||||||
libjemalloc-dev \
|
|
||||||
zlib1g-dev \
|
|
||||||
libgdbm-dev \
|
|
||||||
libgmp-dev \
|
|
||||||
libssl-dev \
|
|
||||||
libyaml-0-2 \
|
|
||||||
ca-certificates \
|
|
||||||
libreadline8 \
|
|
||||||
python3 \
|
|
||||||
shared-mime-info && \
|
|
||||||
bundle config set --local deployment 'true' && \
|
|
||||||
bundle config set --local without 'development test' && \
|
|
||||||
bundle config set silence_root_warning true && \
|
|
||||||
bundle install -j"$(nproc)" && \
|
|
||||||
yarn install --pure-lockfile --production --network-timeout 600000 && \
|
|
||||||
yarn cache clean
|
|
||||||
|
|
||||||
FROM node:${NODE_VERSION}
|
|
||||||
|
|
||||||
# Use those args to specify your own version flags & suffixes
|
|
||||||
ARG MASTODON_VERSION_PRERELEASE=""
|
ARG MASTODON_VERSION_PRERELEASE=""
|
||||||
|
# Append build metadata or fork information to version.rb [--build-arg MASTODON_VERSION_METADATA="something"]
|
||||||
ARG MASTODON_VERSION_METADATA=""
|
ARG MASTODON_VERSION_METADATA=""
|
||||||
|
|
||||||
|
# Allow Ruby on Rails to serve static files
|
||||||
|
# See: https://docs.joinmastodon.org/admin/config/#rails_serve_static_files
|
||||||
|
ARG RAILS_SERVE_STATIC_FILES="true"
|
||||||
|
# Allow to use YJIT compiler
|
||||||
|
# See: https://github.com/ruby/ruby/blob/master/doc/yjit/yjit.md
|
||||||
|
ARG RUBY_YJIT_ENABLE="1"
|
||||||
|
# Timezone used by the Docker container and runtime, change with [--build-arg TZ=Europe/Berlin]
|
||||||
|
ARG TZ="Etc/UTC"
|
||||||
|
# Linux UID (user id) for the mastodon user, change with [--build-arg UID=1234]
|
||||||
ARG UID="991"
|
ARG UID="991"
|
||||||
|
# Linux GID (group id) for the mastodon user, change with [--build-arg GID=1234]
|
||||||
ARG GID="991"
|
ARG GID="991"
|
||||||
|
|
||||||
COPY --link --from=ruby /opt/ruby /opt/ruby
|
# Apply Mastodon build options based on options above
|
||||||
|
ENV \
|
||||||
|
# Apply Mastodon version information
|
||||||
|
MASTODON_VERSION_PRERELEASE="${MASTODON_VERSION_PRERELEASE}" \
|
||||||
|
MASTODON_VERSION_METADATA="${MASTODON_VERSION_METADATA}" \
|
||||||
|
# Apply Mastodon static files and YJIT options
|
||||||
|
RAILS_SERVE_STATIC_FILES=${RAILS_SERVE_STATIC_FILES} \
|
||||||
|
RUBY_YJIT_ENABLE=${RUBY_YJIT_ENABLE} \
|
||||||
|
# Apply timezone
|
||||||
|
TZ=${TZ}
|
||||||
|
|
||||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
ENV \
|
||||||
|
# Configure the IP to bind Mastodon to when serving traffic
|
||||||
|
BIND="0.0.0.0" \
|
||||||
|
# Use production settings for Yarn, Node and related nodejs based tools
|
||||||
|
NODE_ENV="production" \
|
||||||
|
# Use production settings for Ruby on Rails
|
||||||
|
RAILS_ENV="production" \
|
||||||
|
# Add Ruby and Mastodon installation to the PATH
|
||||||
|
DEBIAN_FRONTEND="noninteractive" \
|
||||||
|
PATH="${PATH}:/opt/ruby/bin:/opt/mastodon/bin" \
|
||||||
|
# Optimize jemalloc 5.x performance
|
||||||
|
MALLOC_CONF="narenas:2,background_thread:true,thp:never,dirty_decay_ms:1000,muzzy_decay_ms:0"
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND="noninteractive" \
|
# Set default shell used for running commands
|
||||||
PATH="${PATH}:/opt/ruby/bin:/opt/mastodon/bin"
|
SHELL ["/bin/bash", "-o", "pipefail", "-o", "errexit", "-c"]
|
||||||
|
|
||||||
# Ignoring these here since we don't want to pin any versions and the Debian image removes apt-get content after use
|
ARG TARGETPLATFORM
|
||||||
# hadolint ignore=DL3008,DL3009
|
|
||||||
RUN apt-get update && \
|
|
||||||
echo "Etc/UTC" > /etc/localtime && \
|
|
||||||
groupadd -g "${GID}" mastodon && \
|
|
||||||
useradd -l -u "$UID" -g "${GID}" -m -d /opt/mastodon mastodon && \
|
|
||||||
apt-get -y --no-install-recommends install whois \
|
|
||||||
wget \
|
|
||||||
procps \
|
|
||||||
libssl3 \
|
|
||||||
libpq5 \
|
|
||||||
imagemagick \
|
|
||||||
ffmpeg \
|
|
||||||
libjemalloc2 \
|
|
||||||
libicu72 \
|
|
||||||
libidn12 \
|
|
||||||
libyaml-0-2 \
|
|
||||||
file \
|
|
||||||
ca-certificates \
|
|
||||||
tzdata \
|
|
||||||
libreadline8 \
|
|
||||||
tini && \
|
|
||||||
ln -s /opt/mastodon /mastodon
|
|
||||||
|
|
||||||
# Note: no, cleaning here since Debian does this automatically
|
RUN echo "Target platform is $TARGETPLATFORM"
|
||||||
# See the file /etc/apt/apt.conf.d/docker-clean within the Docker image's filesystem
|
|
||||||
|
|
||||||
COPY --chown=mastodon:mastodon . /opt/mastodon
|
RUN \
|
||||||
COPY --chown=mastodon:mastodon --from=build /opt/mastodon /opt/mastodon
|
# Remove automatic apt cache Docker cleanup scripts
|
||||||
|
rm -f /etc/apt/apt.conf.d/docker-clean; \
|
||||||
|
# Sets timezone
|
||||||
|
echo "${TZ}" > /etc/localtime; \
|
||||||
|
# Creates mastodon user/group and sets home directory
|
||||||
|
groupadd -g "${GID}" mastodon; \
|
||||||
|
useradd -l -u "${UID}" -g "${GID}" -m -d /opt/mastodon mastodon; \
|
||||||
|
# Creates /mastodon symlink to /opt/mastodon
|
||||||
|
ln -s /opt/mastodon /mastodon;
|
||||||
|
|
||||||
ENV RAILS_ENV="production" \
|
# Set /opt/mastodon as working directory
|
||||||
NODE_ENV="production" \
|
|
||||||
RAILS_SERVE_STATIC_FILES="true" \
|
|
||||||
BIND="0.0.0.0" \
|
|
||||||
MASTODON_VERSION_PRERELEASE="${MASTODON_VERSION_PRERELEASE}" \
|
|
||||||
MASTODON_VERSION_METADATA="${MASTODON_VERSION_METADATA}"
|
|
||||||
|
|
||||||
# Set the run user
|
|
||||||
USER mastodon
|
|
||||||
WORKDIR /opt/mastodon
|
WORKDIR /opt/mastodon
|
||||||
|
|
||||||
# Precompile assets
|
# hadolint ignore=DL3008,DL3005
|
||||||
RUN OTP_SECRET=precompile_placeholder SECRET_KEY_BASE=precompile_placeholder rails assets:precompile
|
RUN \
|
||||||
|
# Mount Apt cache and lib directories from Docker buildx caches
|
||||||
|
--mount=type=cache,id=apt-cache-${TARGETPLATFORM},target=/var/cache/apt,sharing=locked \
|
||||||
|
--mount=type=cache,id=apt-lib-${TARGETPLATFORM},target=/var/lib/apt,sharing=locked \
|
||||||
|
# Apt update & upgrade to check for security updates to Debian image
|
||||||
|
apt-get update; \
|
||||||
|
apt-get dist-upgrade -yq; \
|
||||||
|
# Install jemalloc, curl and other necessary components
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
ffmpeg \
|
||||||
|
file \
|
||||||
|
imagemagick \
|
||||||
|
libjemalloc2 \
|
||||||
|
patchelf \
|
||||||
|
procps \
|
||||||
|
tini \
|
||||||
|
tzdata \
|
||||||
|
wget \
|
||||||
|
; \
|
||||||
|
# Patch Ruby to use jemalloc
|
||||||
|
patchelf --add-needed libjemalloc.so.2 /usr/local/bin/ruby; \
|
||||||
|
# Discard patchelf after use
|
||||||
|
apt-get purge -y \
|
||||||
|
patchelf \
|
||||||
|
;
|
||||||
|
|
||||||
# Set the work dir and the container entry point
|
# Create temporary build layer from base image
|
||||||
ENTRYPOINT ["/usr/bin/tini", "--"]
|
FROM ruby as build
|
||||||
EXPOSE 3000 4000
|
|
||||||
|
# Copy Node package configuration files into working directory
|
||||||
|
COPY package.json yarn.lock .yarnrc.yml /opt/mastodon/
|
||||||
|
COPY .yarn /opt/mastodon/.yarn
|
||||||
|
|
||||||
|
COPY --from=node /usr/local/bin /usr/local/bin
|
||||||
|
COPY --from=node /usr/local/lib /usr/local/lib
|
||||||
|
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
|
||||||
|
# hadolint ignore=DL3008
|
||||||
|
RUN \
|
||||||
|
# Mount Apt cache and lib directories from Docker buildx caches
|
||||||
|
--mount=type=cache,id=apt-cache-${TARGETPLATFORM},target=/var/cache/apt,sharing=locked \
|
||||||
|
--mount=type=cache,id=apt-lib-${TARGETPLATFORM},target=/var/lib/apt,sharing=locked \
|
||||||
|
# Install build tools and bundler dependencies from APT
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
g++ \
|
||||||
|
gcc \
|
||||||
|
git \
|
||||||
|
libgdbm-dev \
|
||||||
|
libgmp-dev \
|
||||||
|
libicu-dev \
|
||||||
|
libidn-dev \
|
||||||
|
libpq-dev \
|
||||||
|
libssl-dev \
|
||||||
|
make \
|
||||||
|
shared-mime-info \
|
||||||
|
zlib1g-dev \
|
||||||
|
;
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
# Configure Corepack
|
||||||
|
rm /usr/local/bin/yarn*; \
|
||||||
|
corepack enable; \
|
||||||
|
corepack prepare --activate;
|
||||||
|
|
||||||
|
# Create temporary bundler specific build layer from build layer
|
||||||
|
FROM build as bundler
|
||||||
|
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
|
||||||
|
# Copy Gemfile config into working directory
|
||||||
|
COPY Gemfile* /opt/mastodon/
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
# Mount Ruby Gem caches
|
||||||
|
--mount=type=cache,id=gem-cache-${TARGETPLATFORM},target=/usr/local/bundle/cache/,sharing=locked \
|
||||||
|
# Configure bundle to prevent changes to Gemfile and Gemfile.lock
|
||||||
|
bundle config set --global frozen "true"; \
|
||||||
|
# Configure bundle to not cache downloaded Gems
|
||||||
|
bundle config set --global cache_all "false"; \
|
||||||
|
# Configure bundle to only process production Gems
|
||||||
|
bundle config set --local without "development test"; \
|
||||||
|
# Configure bundle to not warn about root user
|
||||||
|
bundle config set silence_root_warning "true"; \
|
||||||
|
# Download and install required Gems
|
||||||
|
bundle install -j"$(nproc)";
|
||||||
|
|
||||||
|
# Create temporary node specific build layer from build layer
|
||||||
|
FROM build as yarn
|
||||||
|
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
|
||||||
|
# Copy Node package configuration files into working directory
|
||||||
|
COPY package.json yarn.lock .yarnrc.yml /opt/mastodon/
|
||||||
|
COPY streaming/package.json /opt/mastodon/streaming/
|
||||||
|
COPY .yarn /opt/mastodon/.yarn
|
||||||
|
|
||||||
|
# hadolint ignore=DL3008
|
||||||
|
RUN \
|
||||||
|
--mount=type=cache,id=corepack-cache-${TARGETPLATFORM},target=/usr/local/share/.cache/corepack,sharing=locked \
|
||||||
|
--mount=type=cache,id=yarn-cache-${TARGETPLATFORM},target=/usr/local/share/.cache/yarn,sharing=locked \
|
||||||
|
# Install Node packages
|
||||||
|
yarn workspaces focus --production @mastodon/mastodon;
|
||||||
|
|
||||||
|
# Create temporary assets build layer from build layer
|
||||||
|
FROM build as precompiler
|
||||||
|
|
||||||
|
# Copy Mastodon sources into precompiler layer
|
||||||
|
COPY . /opt/mastodon/
|
||||||
|
|
||||||
|
# Copy bundler and node packages from build layer to container
|
||||||
|
COPY --from=yarn /opt/mastodon /opt/mastodon/
|
||||||
|
COPY --from=bundler /opt/mastodon /opt/mastodon/
|
||||||
|
COPY --from=bundler /usr/local/bundle/ /usr/local/bundle/
|
||||||
|
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
# Use Ruby on Rails to create Mastodon assets
|
||||||
|
OTP_SECRET=precompile_placeholder SECRET_KEY_BASE=precompile_placeholder bundle exec rails assets:precompile; \
|
||||||
|
# Cleanup temporary files
|
||||||
|
rm -fr /opt/mastodon/tmp;
|
||||||
|
|
||||||
|
# Prep final Mastodon Ruby layer
|
||||||
|
FROM ruby as mastodon
|
||||||
|
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
|
||||||
|
# hadolint ignore=DL3008
|
||||||
|
RUN \
|
||||||
|
# Mount Apt cache and lib directories from Docker buildx caches
|
||||||
|
--mount=type=cache,id=apt-cache-${TARGETPLATFORM},target=/var/cache/apt,sharing=locked \
|
||||||
|
--mount=type=cache,id=apt-lib-${TARGETPLATFORM},target=/var/lib/apt,sharing=locked \
|
||||||
|
# Mount Corepack and Yarn caches from Docker buildx caches
|
||||||
|
--mount=type=cache,id=corepack-cache-${TARGETPLATFORM},target=/usr/local/share/.cache/corepack,sharing=locked \
|
||||||
|
--mount=type=cache,id=yarn-cache-${TARGETPLATFORM},target=/usr/local/share/.cache/yarn,sharing=locked \
|
||||||
|
# Apt update install non-dev versions of necessary components
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
libssl3 \
|
||||||
|
libpq5 \
|
||||||
|
libicu72 \
|
||||||
|
libidn12 \
|
||||||
|
libreadline8 \
|
||||||
|
libyaml-0-2 \
|
||||||
|
;
|
||||||
|
|
||||||
|
# Copy Mastodon sources into final layer
|
||||||
|
COPY . /opt/mastodon/
|
||||||
|
|
||||||
|
# Copy compiled assets to layer
|
||||||
|
COPY --from=precompiler /opt/mastodon/public/packs /opt/mastodon/public/packs
|
||||||
|
COPY --from=precompiler /opt/mastodon/public/assets /opt/mastodon/public/assets
|
||||||
|
# Copy bundler components to layer
|
||||||
|
COPY --from=bundler /usr/local/bundle/ /usr/local/bundle/
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
# Precompile bootsnap code for faster Rails startup
|
||||||
|
bundle exec bootsnap precompile --gemfile app/ lib/;
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
# Pre-create and chown system volume to Mastodon user
|
||||||
|
mkdir -p /opt/mastodon/public/system; \
|
||||||
|
chown mastodon:mastodon /opt/mastodon/public/system; \
|
||||||
|
# Set Mastodon user as owner of tmp folder
|
||||||
|
chown -R mastodon:mastodon /opt/mastodon/tmp;
|
||||||
|
|
||||||
|
# Set the running user for resulting container
|
||||||
|
USER mastodon
|
||||||
|
# Expose default Puma ports
|
||||||
|
EXPOSE 3000
|
||||||
|
# Set container tini as default entry point
|
||||||
|
ENTRYPOINT ["/usr/bin/tini", "--"]
|
|
@ -1,19 +1,35 @@
|
||||||
## ActivityPub federation in Mastodon
|
# Federation
|
||||||
|
|
||||||
|
## Supported federation protocols and standards
|
||||||
|
|
||||||
|
- [ActivityPub](https://www.w3.org/TR/activitypub/) (Server-to-Server)
|
||||||
|
- [WebFinger](https://webfinger.net/)
|
||||||
|
- [Http Signatures](https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures)
|
||||||
|
- [NodeInfo](https://nodeinfo.diaspora.software/)
|
||||||
|
|
||||||
|
## Supported FEPs
|
||||||
|
|
||||||
|
- [FEP-67ff: FEDERATION.md](https://codeberg.org/fediverse/fep/src/branch/main/fep/67ff/fep-67ff.md)
|
||||||
|
- [FEP-f1d5: NodeInfo in Fediverse Software](https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md)
|
||||||
|
- [FEP-8fcf: Followers collection synchronization across servers](https://codeberg.org/fediverse/fep/src/branch/main/fep/8fcf/fep-8fcf.md)
|
||||||
|
- [FEP-5feb: Search indexing consent for actors](https://codeberg.org/fediverse/fep/src/branch/main/fep/5feb/fep-5feb.md)
|
||||||
|
|
||||||
|
## ActivityPub in Mastodon
|
||||||
|
|
||||||
Mastodon largely follows the ActivityPub server-to-server specification but it makes uses of some non-standard extensions, some of which are required for interacting with Mastodon at all.
|
Mastodon largely follows the ActivityPub server-to-server specification but it makes uses of some non-standard extensions, some of which are required for interacting with Mastodon at all.
|
||||||
|
|
||||||
Supported vocabulary: https://docs.joinmastodon.org/spec/activitypub/
|
- [Supported ActivityPub vocabulary](https://docs.joinmastodon.org/spec/activitypub/)
|
||||||
|
|
||||||
### Required extensions
|
### Required extensions
|
||||||
|
|
||||||
#### Webfinger
|
#### WebFinger
|
||||||
|
|
||||||
In Mastodon, users are identified by a `username` and `domain` pair (e.g., `Gargron@mastodon.social`).
|
In Mastodon, users are identified by a `username` and `domain` pair (e.g., `Gargron@mastodon.social`).
|
||||||
This is used both for discovery and for unambiguously mentioning users across the fediverse. Furthermore, this is part of Mastodon's database design from its very beginnings.
|
This is used both for discovery and for unambiguously mentioning users across the fediverse. Furthermore, this is part of Mastodon's database design from its very beginnings.
|
||||||
|
|
||||||
As a result, Mastodon requires that each ActivityPub actor uniquely maps back to an `acct:` URI that can be resolved via WebFinger.
|
As a result, Mastodon requires that each ActivityPub actor uniquely maps back to an `acct:` URI that can be resolved via WebFinger.
|
||||||
|
|
||||||
More information and examples are available at: https://docs.joinmastodon.org/spec/webfinger/
|
- [WebFinger information and examples](https://docs.joinmastodon.org/spec/webfinger/)
|
||||||
|
|
||||||
#### HTTP Signatures
|
#### HTTP Signatures
|
||||||
|
|
||||||
|
@ -21,11 +37,13 @@ In order to authenticate activities, Mastodon relies on HTTP Signatures, signing
|
||||||
|
|
||||||
Mastodon requires all `POST` requests to be signed, and MAY require `GET` requests to be signed, depending on the configuration of the Mastodon server.
|
Mastodon requires all `POST` requests to be signed, and MAY require `GET` requests to be signed, depending on the configuration of the Mastodon server.
|
||||||
|
|
||||||
More information on HTTP Signatures, as well as examples, can be found here: https://docs.joinmastodon.org/spec/security/#http
|
- [HTTP Signatures information and examples](https://docs.joinmastodon.org/spec/security/#http)
|
||||||
|
|
||||||
### Optional extensions
|
### Optional extensions
|
||||||
|
|
||||||
- Linked-Data Signatures: https://docs.joinmastodon.org/spec/security/#ld
|
- [Linked-Data Signatures](https://docs.joinmastodon.org/spec/security/#ld)
|
||||||
- Bearcaps: https://docs.joinmastodon.org/spec/bearcaps/
|
- [Bearcaps](https://docs.joinmastodon.org/spec/bearcaps/)
|
||||||
- Followers collection synchronization: https://codeberg.org/fediverse/fep/src/branch/main/fep/8fcf/fep-8fcf.md
|
|
||||||
- Search indexing consent for actors: https://codeberg.org/fediverse/fep/src/branch/main/fep/5feb/fep-5feb.md
|
### Additional documentation
|
||||||
|
|
||||||
|
- [Mastodon documentation](https://docs.joinmastodon.org/)
|
||||||
|
|
53
Gemfile
53
Gemfile
|
@ -4,11 +4,14 @@ source 'https://rubygems.org'
|
||||||
ruby '>= 3.0.0'
|
ruby '>= 3.0.0'
|
||||||
|
|
||||||
gem 'puma', '~> 6.3'
|
gem 'puma', '~> 6.3'
|
||||||
gem 'rails', '~> 7.0'
|
gem 'rails', '~> 7.1.1'
|
||||||
gem 'sprockets', '~> 3.7.2'
|
gem 'propshaft'
|
||||||
gem 'thor', '~> 1.2'
|
gem 'thor', '~> 1.2'
|
||||||
gem 'rack', '~> 2.2.7'
|
gem 'rack', '~> 2.2.7'
|
||||||
|
|
||||||
|
# For why irb is in the Gemfile, see: https://ruby.social/@st0012/111444685161478182
|
||||||
|
gem 'irb', '~> 1.8'
|
||||||
|
|
||||||
gem 'haml-rails', '~>2.0'
|
gem 'haml-rails', '~>2.0'
|
||||||
gem 'pg', '~> 1.5'
|
gem 'pg', '~> 1.5'
|
||||||
gem 'pghero'
|
gem 'pghero'
|
||||||
|
@ -16,14 +19,14 @@ gem 'dotenv-rails', '~> 2.8'
|
||||||
|
|
||||||
gem 'aws-sdk-s3', '~> 1.123', require: false
|
gem 'aws-sdk-s3', '~> 1.123', require: false
|
||||||
gem 'fog-core', '<= 2.4.0'
|
gem 'fog-core', '<= 2.4.0'
|
||||||
gem 'fog-openstack', '~> 0.3', require: false
|
gem 'fog-openstack', '~> 1.0', require: false
|
||||||
gem 'kt-paperclip', '~> 7.2'
|
gem 'kt-paperclip', '~> 7.2'
|
||||||
gem 'md-paperclip-azure', '~> 2.2', require: false
|
gem 'md-paperclip-azure', '~> 2.2', require: false
|
||||||
gem 'blurhash', '~> 0.1'
|
gem 'blurhash', '~> 0.1'
|
||||||
|
|
||||||
gem 'active_model_serializers', '~> 0.10'
|
gem 'active_model_serializers', '~> 0.10'
|
||||||
gem 'addressable', '~> 2.8'
|
gem 'addressable', '~> 2.8'
|
||||||
gem 'bootsnap', '~> 1.16.0', require: false
|
gem 'bootsnap', '~> 1.17.0', require: false
|
||||||
gem 'browser'
|
gem 'browser'
|
||||||
gem 'charlock_holmes', '~> 0.7.7'
|
gem 'charlock_holmes', '~> 0.7.7'
|
||||||
gem 'chewy', '~> 7.3'
|
gem 'chewy', '~> 7.3'
|
||||||
|
@ -36,15 +39,14 @@ end
|
||||||
|
|
||||||
gem 'net-ldap', '~> 0.18'
|
gem 'net-ldap', '~> 0.18'
|
||||||
|
|
||||||
# TODO: Point back at released omniauth-cas gem when PR merged
|
gem 'omniauth-cas', '~> 3.0.0.beta.1'
|
||||||
# https://github.com/dlindahl/omniauth-cas/pull/68
|
|
||||||
gem 'omniauth-cas', github: 'stanhu/omniauth-cas', ref: '4211e6d05941b4a981f9a36b49ec166cecd0e271'
|
|
||||||
gem 'omniauth-saml', '~> 2.0'
|
gem 'omniauth-saml', '~> 2.0'
|
||||||
gem 'omniauth_openid_connect', '~> 0.6.1'
|
gem 'omniauth_openid_connect', '~> 0.6.1'
|
||||||
gem 'omniauth', '~> 2.0'
|
gem 'omniauth', '~> 2.0'
|
||||||
gem 'omniauth-rails_csrf_protection', '~> 1.0'
|
gem 'omniauth-rails_csrf_protection', '~> 1.0'
|
||||||
|
|
||||||
gem 'color_diff', '~> 0.1'
|
gem 'color_diff', '~> 0.1'
|
||||||
|
gem 'csv', '~> 3.2'
|
||||||
gem 'discard', '~> 1.2'
|
gem 'discard', '~> 1.2'
|
||||||
gem 'doorkeeper', '~> 5.6'
|
gem 'doorkeeper', '~> 5.6'
|
||||||
gem 'ed25519', '~> 1.3'
|
gem 'ed25519', '~> 1.3'
|
||||||
|
@ -72,7 +74,6 @@ gem 'premailer-rails'
|
||||||
gem 'rack-attack', '~> 6.6'
|
gem 'rack-attack', '~> 6.6'
|
||||||
gem 'rack-cors', '~> 2.0', require: 'rack/cors'
|
gem 'rack-cors', '~> 2.0', require: 'rack/cors'
|
||||||
gem 'rails-i18n', '~> 7.0'
|
gem 'rails-i18n', '~> 7.0'
|
||||||
gem 'rails-settings-cached', '~> 0.6', git: 'https://github.com/mastodon/rails-settings-cached.git', branch: 'v0.6.6-aliases-true'
|
|
||||||
gem 'redcarpet', '~> 3.6'
|
gem 'redcarpet', '~> 3.6'
|
||||||
gem 'redis', '~> 4.5', require: ['redis', 'redis/connection/hiredis']
|
gem 'redis', '~> 4.5', require: ['redis', 'redis/connection/hiredis']
|
||||||
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
|
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
|
||||||
|
@ -86,9 +87,8 @@ gem 'sidekiq-unique-jobs', '~> 7.1'
|
||||||
gem 'sidekiq-bulk', '~> 0.2.0'
|
gem 'sidekiq-bulk', '~> 0.2.0'
|
||||||
gem 'simple-navigation', '~> 4.4'
|
gem 'simple-navigation', '~> 4.4'
|
||||||
gem 'simple_form', '~> 5.2'
|
gem 'simple_form', '~> 5.2'
|
||||||
gem 'sprockets-rails', '~> 3.4', require: 'sprockets/railtie'
|
|
||||||
gem 'stoplight', '~> 3.0.1'
|
gem 'stoplight', '~> 3.0.1'
|
||||||
gem 'strong_migrations', '~> 0.8'
|
gem 'strong_migrations', '1.7.0'
|
||||||
gem 'tty-prompt', '~> 0.23', require: false
|
gem 'tty-prompt', '~> 0.23', require: false
|
||||||
gem 'twitter-text', '~> 3.1.0'
|
gem 'twitter-text', '~> 3.1.0'
|
||||||
gem 'tzinfo-data', '~> 1.2023'
|
gem 'tzinfo-data', '~> 1.2023'
|
||||||
|
@ -103,12 +103,15 @@ gem 'rdf-normalize', '~> 0.5'
|
||||||
gem 'private_address_check', '~> 0.5'
|
gem 'private_address_check', '~> 0.5'
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
# Used to split testing into chunks in CI
|
# Adds RSpec Error/Warning annotations to GitHub PRs on the Files tab
|
||||||
gem 'rspec_chunked', '~> 0.6'
|
gem 'rspec-github', '~> 2.4', require: false
|
||||||
|
|
||||||
# RSpec progress bar formatter
|
# RSpec progress bar formatter
|
||||||
gem 'fuubar', '~> 2.5'
|
gem 'fuubar', '~> 2.5'
|
||||||
|
|
||||||
|
# RSpec helpers for email specs
|
||||||
|
gem 'email_spec'
|
||||||
|
|
||||||
# Extra RSpec extenion methods and helpers for sidekiq
|
# Extra RSpec extenion methods and helpers for sidekiq
|
||||||
gem 'rspec-sidekiq', '~> 4.0'
|
gem 'rspec-sidekiq', '~> 4.0'
|
||||||
|
|
||||||
|
@ -120,13 +123,7 @@ group :test do
|
||||||
gem 'database_cleaner-active_record'
|
gem 'database_cleaner-active_record'
|
||||||
|
|
||||||
# Used to mock environment variables
|
# Used to mock environment variables
|
||||||
gem 'climate_control', '~> 0.2'
|
gem 'climate_control'
|
||||||
|
|
||||||
# Generating fake data for specs
|
|
||||||
gem 'faker', '~> 3.2'
|
|
||||||
|
|
||||||
# Generate test objects for specs
|
|
||||||
gem 'fabrication', '~> 2.30'
|
|
||||||
|
|
||||||
# Add back helpers functions removed in Rails 5.1
|
# Add back helpers functions removed in Rails 5.1
|
||||||
gem 'rails-controller-testing', '~> 1.0'
|
gem 'rails-controller-testing', '~> 1.0'
|
||||||
|
@ -139,6 +136,7 @@ group :test do
|
||||||
|
|
||||||
# Coverage formatter for RSpec test if DISABLE_SIMPLECOV is false
|
# Coverage formatter for RSpec test if DISABLE_SIMPLECOV is false
|
||||||
gem 'simplecov', '~> 0.22', require: false
|
gem 'simplecov', '~> 0.22', require: false
|
||||||
|
gem 'simplecov-lcov', '~> 0.8', require: false
|
||||||
|
|
||||||
# Stub web requests for specs
|
# Stub web requests for specs
|
||||||
gem 'webmock', '~> 3.18'
|
gem 'webmock', '~> 3.18'
|
||||||
|
@ -170,17 +168,20 @@ group :development do
|
||||||
# Linter CLI for HAML files
|
# Linter CLI for HAML files
|
||||||
gem 'haml_lint', require: false
|
gem 'haml_lint', require: false
|
||||||
|
|
||||||
# Deployment automation
|
|
||||||
gem 'capistrano', '~> 3.17'
|
|
||||||
gem 'capistrano-rails', '~> 1.6'
|
|
||||||
gem 'capistrano-rbenv', '~> 2.2'
|
|
||||||
gem 'capistrano-yarn', '~> 2.0'
|
|
||||||
|
|
||||||
# Validate missing i18n keys
|
# Validate missing i18n keys
|
||||||
gem 'i18n-tasks', '~> 1.0', require: false
|
gem 'i18n-tasks', '~> 1.0', require: false
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
|
# Interactive Debugging tools
|
||||||
|
gem 'debug', '~> 1.8'
|
||||||
|
|
||||||
|
# Generate fake data values
|
||||||
|
gem 'faker', '~> 3.2'
|
||||||
|
|
||||||
|
# Generate factory objects
|
||||||
|
gem 'fabrication', '~> 2.30'
|
||||||
|
|
||||||
# Profiling tools
|
# Profiling tools
|
||||||
gem 'memory_profiler', require: false
|
gem 'memory_profiler', require: false
|
||||||
gem 'ruby-prof', require: false
|
gem 'ruby-prof', require: false
|
||||||
|
@ -200,7 +201,7 @@ gem 'connection_pool', require: false
|
||||||
gem 'xorcist', '~> 1.1'
|
gem 'xorcist', '~> 1.1'
|
||||||
gem 'cocoon', '~> 1.2'
|
gem 'cocoon', '~> 1.2'
|
||||||
|
|
||||||
gem 'net-http', '~> 0.3.2'
|
gem 'net-http', '~> 0.4.0'
|
||||||
gem 'rubyzip', '~> 2.3'
|
gem 'rubyzip', '~> 2.3'
|
||||||
|
|
||||||
gem 'hcaptcha', '~> 7.1'
|
gem 'hcaptcha', '~> 7.1'
|
||||||
|
|
521
Gemfile.lock
521
Gemfile.lock
|
@ -18,102 +18,91 @@ GIT
|
||||||
sidekiq (>= 3.5)
|
sidekiq (>= 3.5)
|
||||||
statsd-ruby (~> 1.4, >= 1.4.0)
|
statsd-ruby (~> 1.4, >= 1.4.0)
|
||||||
|
|
||||||
GIT
|
|
||||||
remote: https://github.com/mastodon/rails-settings-cached.git
|
|
||||||
revision: 86328ef0bd04ce21cc0504ff5e334591e8c2ccab
|
|
||||||
branch: v0.6.6-aliases-true
|
|
||||||
specs:
|
|
||||||
rails-settings-cached (0.6.6)
|
|
||||||
rails (>= 4.2.0)
|
|
||||||
|
|
||||||
GIT
|
|
||||||
remote: https://github.com/stanhu/omniauth-cas.git
|
|
||||||
revision: 4211e6d05941b4a981f9a36b49ec166cecd0e271
|
|
||||||
ref: 4211e6d05941b4a981f9a36b49ec166cecd0e271
|
|
||||||
specs:
|
|
||||||
omniauth-cas (2.0.0)
|
|
||||||
addressable (~> 2.3)
|
|
||||||
nokogiri (~> 1.5)
|
|
||||||
omniauth (>= 1.2, < 3)
|
|
||||||
|
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
actioncable (7.0.8)
|
actioncable (7.1.3)
|
||||||
actionpack (= 7.0.8)
|
actionpack (= 7.1.3)
|
||||||
activesupport (= 7.0.8)
|
activesupport (= 7.1.3)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
websocket-driver (>= 0.6.1)
|
websocket-driver (>= 0.6.1)
|
||||||
actionmailbox (7.0.8)
|
zeitwerk (~> 2.6)
|
||||||
actionpack (= 7.0.8)
|
actionmailbox (7.1.3)
|
||||||
activejob (= 7.0.8)
|
actionpack (= 7.1.3)
|
||||||
activerecord (= 7.0.8)
|
activejob (= 7.1.3)
|
||||||
activestorage (= 7.0.8)
|
activerecord (= 7.1.3)
|
||||||
activesupport (= 7.0.8)
|
activestorage (= 7.1.3)
|
||||||
|
activesupport (= 7.1.3)
|
||||||
mail (>= 2.7.1)
|
mail (>= 2.7.1)
|
||||||
net-imap
|
net-imap
|
||||||
net-pop
|
net-pop
|
||||||
net-smtp
|
net-smtp
|
||||||
actionmailer (7.0.8)
|
actionmailer (7.1.3)
|
||||||
actionpack (= 7.0.8)
|
actionpack (= 7.1.3)
|
||||||
actionview (= 7.0.8)
|
actionview (= 7.1.3)
|
||||||
activejob (= 7.0.8)
|
activejob (= 7.1.3)
|
||||||
activesupport (= 7.0.8)
|
activesupport (= 7.1.3)
|
||||||
mail (~> 2.5, >= 2.5.4)
|
mail (~> 2.5, >= 2.5.4)
|
||||||
net-imap
|
net-imap
|
||||||
net-pop
|
net-pop
|
||||||
net-smtp
|
net-smtp
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.2)
|
||||||
actionpack (7.0.8)
|
actionpack (7.1.3)
|
||||||
actionview (= 7.0.8)
|
actionview (= 7.1.3)
|
||||||
activesupport (= 7.0.8)
|
activesupport (= 7.1.3)
|
||||||
rack (~> 2.0, >= 2.2.4)
|
nokogiri (>= 1.8.5)
|
||||||
|
racc
|
||||||
|
rack (>= 2.2.4)
|
||||||
|
rack-session (>= 1.0.1)
|
||||||
rack-test (>= 0.6.3)
|
rack-test (>= 0.6.3)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.2)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
rails-html-sanitizer (~> 1.6)
|
||||||
actiontext (7.0.8)
|
actiontext (7.1.3)
|
||||||
actionpack (= 7.0.8)
|
actionpack (= 7.1.3)
|
||||||
activerecord (= 7.0.8)
|
activerecord (= 7.1.3)
|
||||||
activestorage (= 7.0.8)
|
activestorage (= 7.1.3)
|
||||||
activesupport (= 7.0.8)
|
activesupport (= 7.1.3)
|
||||||
globalid (>= 0.6.0)
|
globalid (>= 0.6.0)
|
||||||
nokogiri (>= 1.8.5)
|
nokogiri (>= 1.8.5)
|
||||||
actionview (7.0.8)
|
actionview (7.1.3)
|
||||||
activesupport (= 7.0.8)
|
activesupport (= 7.1.3)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
erubi (~> 1.4)
|
erubi (~> 1.11)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.2)
|
||||||
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
rails-html-sanitizer (~> 1.6)
|
||||||
active_model_serializers (0.10.13)
|
active_model_serializers (0.10.14)
|
||||||
actionpack (>= 4.1, < 7.1)
|
actionpack (>= 4.1)
|
||||||
activemodel (>= 4.1, < 7.1)
|
activemodel (>= 4.1)
|
||||||
case_transform (>= 0.2)
|
case_transform (>= 0.2)
|
||||||
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
|
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
|
||||||
activejob (7.0.8)
|
activejob (7.1.3)
|
||||||
activesupport (= 7.0.8)
|
activesupport (= 7.1.3)
|
||||||
globalid (>= 0.3.6)
|
globalid (>= 0.3.6)
|
||||||
activemodel (7.0.8)
|
activemodel (7.1.3)
|
||||||
activesupport (= 7.0.8)
|
activesupport (= 7.1.3)
|
||||||
activerecord (7.0.8)
|
activerecord (7.1.3)
|
||||||
activemodel (= 7.0.8)
|
activemodel (= 7.1.3)
|
||||||
activesupport (= 7.0.8)
|
activesupport (= 7.1.3)
|
||||||
activestorage (7.0.8)
|
timeout (>= 0.4.0)
|
||||||
actionpack (= 7.0.8)
|
activestorage (7.1.3)
|
||||||
activejob (= 7.0.8)
|
actionpack (= 7.1.3)
|
||||||
activerecord (= 7.0.8)
|
activejob (= 7.1.3)
|
||||||
activesupport (= 7.0.8)
|
activerecord (= 7.1.3)
|
||||||
|
activesupport (= 7.1.3)
|
||||||
marcel (~> 1.0)
|
marcel (~> 1.0)
|
||||||
mini_mime (>= 1.1.0)
|
activesupport (7.1.3)
|
||||||
activesupport (7.0.8)
|
base64
|
||||||
|
bigdecimal
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
|
connection_pool (>= 2.2.5)
|
||||||
|
drb
|
||||||
i18n (>= 1.6, < 2)
|
i18n (>= 1.6, < 2)
|
||||||
minitest (>= 5.1)
|
minitest (>= 5.1)
|
||||||
|
mutex_m
|
||||||
tzinfo (~> 2.0)
|
tzinfo (~> 2.0)
|
||||||
addressable (2.8.5)
|
addressable (2.8.6)
|
||||||
public_suffix (>= 2.0.2, < 6.0)
|
public_suffix (>= 2.0.2, < 6.0)
|
||||||
aes_key_wrap (1.1.0)
|
aes_key_wrap (1.1.0)
|
||||||
airbrussh (1.4.1)
|
|
||||||
sshkit (>= 1.6.1, != 1.7.0)
|
|
||||||
android_key_attestation (0.3.0)
|
android_key_attestation (0.3.0)
|
||||||
annotate (3.2.0)
|
annotate (3.2.0)
|
||||||
activerecord (>= 3.2, < 8.0)
|
activerecord (>= 3.2, < 8.0)
|
||||||
|
@ -123,21 +112,21 @@ GEM
|
||||||
encryptor (~> 3.0.0)
|
encryptor (~> 3.0.0)
|
||||||
attr_required (1.0.1)
|
attr_required (1.0.1)
|
||||||
awrence (1.2.1)
|
awrence (1.2.1)
|
||||||
aws-eventstream (1.2.0)
|
aws-eventstream (1.3.0)
|
||||||
aws-partitions (1.809.0)
|
aws-partitions (1.873.0)
|
||||||
aws-sdk-core (3.181.0)
|
aws-sdk-core (3.190.1)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
aws-eventstream (~> 1, >= 1.3.0)
|
||||||
aws-partitions (~> 1, >= 1.651.0)
|
aws-partitions (~> 1, >= 1.651.0)
|
||||||
aws-sigv4 (~> 1.5)
|
aws-sigv4 (~> 1.8)
|
||||||
jmespath (~> 1, >= 1.6.1)
|
jmespath (~> 1, >= 1.6.1)
|
||||||
aws-sdk-kms (1.71.0)
|
aws-sdk-kms (1.75.0)
|
||||||
aws-sdk-core (~> 3, >= 3.177.0)
|
aws-sdk-core (~> 3, >= 3.188.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.1)
|
||||||
aws-sdk-s3 (1.133.0)
|
aws-sdk-s3 (1.142.0)
|
||||||
aws-sdk-core (~> 3, >= 3.181.0)
|
aws-sdk-core (~> 3, >= 3.189.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.6)
|
aws-sigv4 (~> 1.8)
|
||||||
aws-sigv4 (1.6.0)
|
aws-sigv4 (1.8.0)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
aws-eventstream (~> 1, >= 1.0.2)
|
||||||
azure-storage-blob (2.0.3)
|
azure-storage-blob (2.0.3)
|
||||||
azure-storage-common (~> 2.0)
|
azure-storage-common (~> 2.0)
|
||||||
|
@ -147,26 +136,29 @@ GEM
|
||||||
faraday_middleware (~> 1.0, >= 1.0.0.rc1)
|
faraday_middleware (~> 1.0, >= 1.0.0.rc1)
|
||||||
net-http-persistent (~> 4.0)
|
net-http-persistent (~> 4.0)
|
||||||
nokogiri (~> 1, >= 1.10.8)
|
nokogiri (~> 1, >= 1.10.8)
|
||||||
base64 (0.1.1)
|
base64 (0.2.0)
|
||||||
bcrypt (3.1.18)
|
bcp47_spec (0.2.1)
|
||||||
|
bcrypt (3.1.20)
|
||||||
better_errors (2.10.1)
|
better_errors (2.10.1)
|
||||||
erubi (>= 1.0.0)
|
erubi (>= 1.0.0)
|
||||||
rack (>= 0.9.0)
|
rack (>= 0.9.0)
|
||||||
rouge (>= 1.0.0)
|
rouge (>= 1.0.0)
|
||||||
better_html (2.0.1)
|
better_html (2.0.2)
|
||||||
actionview (>= 6.0)
|
actionview (>= 6.0)
|
||||||
activesupport (>= 6.0)
|
activesupport (>= 6.0)
|
||||||
ast (~> 2.0)
|
ast (~> 2.0)
|
||||||
erubi (~> 1.4)
|
erubi (~> 1.4)
|
||||||
parser (>= 2.4)
|
parser (>= 2.4)
|
||||||
smart_properties
|
smart_properties
|
||||||
|
bigdecimal (3.1.6)
|
||||||
bindata (2.4.15)
|
bindata (2.4.15)
|
||||||
binding_of_caller (1.0.0)
|
binding_of_caller (1.0.0)
|
||||||
debug_inspector (>= 0.0.1)
|
debug_inspector (>= 0.0.1)
|
||||||
blurhash (0.1.7)
|
blurhash (0.1.7)
|
||||||
bootsnap (1.16.0)
|
bootsnap (1.17.1)
|
||||||
msgpack (~> 1.2)
|
msgpack (~> 1.2)
|
||||||
brakeman (6.0.1)
|
brakeman (6.1.1)
|
||||||
|
racc
|
||||||
browser (5.3.1)
|
browser (5.3.1)
|
||||||
brpoplpush-redis_script (0.1.3)
|
brpoplpush-redis_script (0.1.3)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.5)
|
concurrent-ruby (~> 1.0, >= 1.0.5)
|
||||||
|
@ -175,26 +167,11 @@ GEM
|
||||||
bundler-audit (0.9.1)
|
bundler-audit (0.9.1)
|
||||||
bundler (>= 1.2.0, < 3)
|
bundler (>= 1.2.0, < 3)
|
||||||
thor (~> 1.0)
|
thor (~> 1.0)
|
||||||
capistrano (3.17.3)
|
capybara (3.40.0)
|
||||||
airbrussh (>= 1.0.0)
|
|
||||||
i18n
|
|
||||||
rake (>= 10.0.0)
|
|
||||||
sshkit (>= 1.9.0)
|
|
||||||
capistrano-bundler (2.1.0)
|
|
||||||
capistrano (~> 3.1)
|
|
||||||
capistrano-rails (1.6.3)
|
|
||||||
capistrano (~> 3.1)
|
|
||||||
capistrano-bundler (>= 1.1, < 3)
|
|
||||||
capistrano-rbenv (2.2.0)
|
|
||||||
capistrano (~> 3.1)
|
|
||||||
sshkit (~> 1.3)
|
|
||||||
capistrano-yarn (2.0.2)
|
|
||||||
capistrano (~> 3.0)
|
|
||||||
capybara (3.39.2)
|
|
||||||
addressable
|
addressable
|
||||||
matrix
|
matrix
|
||||||
mini_mime (>= 0.1.3)
|
mini_mime (>= 0.1.3)
|
||||||
nokogiri (~> 1.8)
|
nokogiri (~> 1.11)
|
||||||
rack (>= 1.6.0)
|
rack (>= 1.6.0)
|
||||||
rack-test (>= 0.6.3)
|
rack-test (>= 0.6.3)
|
||||||
regexp_parser (>= 1.5, < 3.0)
|
regexp_parser (>= 1.5, < 3.0)
|
||||||
|
@ -203,15 +180,15 @@ GEM
|
||||||
activesupport
|
activesupport
|
||||||
cbor (0.5.9.6)
|
cbor (0.5.9.6)
|
||||||
charlock_holmes (0.7.7)
|
charlock_holmes (0.7.7)
|
||||||
chewy (7.3.4)
|
chewy (7.5.1)
|
||||||
activesupport (>= 5.2)
|
activesupport (>= 5.2)
|
||||||
elasticsearch (>= 7.12.0, < 7.14.0)
|
elasticsearch (>= 7.12.0, < 7.14.0)
|
||||||
elasticsearch-dsl
|
elasticsearch-dsl
|
||||||
chunky_png (1.4.0)
|
chunky_png (1.4.0)
|
||||||
climate_control (0.2.0)
|
climate_control (1.2.0)
|
||||||
cocoon (1.2.15)
|
cocoon (1.2.15)
|
||||||
color_diff (0.1)
|
color_diff (0.1)
|
||||||
concurrent-ruby (1.2.2)
|
concurrent-ruby (1.2.3)
|
||||||
connection_pool (2.4.1)
|
connection_pool (2.4.1)
|
||||||
cose (1.3.0)
|
cose (1.3.0)
|
||||||
cbor (~> 0.5.9)
|
cbor (~> 0.5.9)
|
||||||
|
@ -221,39 +198,45 @@ GEM
|
||||||
crass (1.0.6)
|
crass (1.0.6)
|
||||||
css_parser (1.14.0)
|
css_parser (1.14.0)
|
||||||
addressable
|
addressable
|
||||||
|
csv (3.2.8)
|
||||||
database_cleaner-active_record (2.1.0)
|
database_cleaner-active_record (2.1.0)
|
||||||
activerecord (>= 5.a)
|
activerecord (>= 5.a)
|
||||||
database_cleaner-core (~> 2.0.0)
|
database_cleaner-core (~> 2.0.0)
|
||||||
database_cleaner-core (2.0.1)
|
database_cleaner-core (2.0.1)
|
||||||
date (3.3.3)
|
date (3.3.4)
|
||||||
|
debug (1.9.1)
|
||||||
|
irb (~> 1.10)
|
||||||
|
reline (>= 0.3.8)
|
||||||
debug_inspector (1.1.0)
|
debug_inspector (1.1.0)
|
||||||
devise (4.9.2)
|
devise (4.9.3)
|
||||||
bcrypt (~> 3.0)
|
bcrypt (~> 3.0)
|
||||||
orm_adapter (~> 0.1)
|
orm_adapter (~> 0.1)
|
||||||
railties (>= 4.1.0)
|
railties (>= 4.1.0)
|
||||||
responders
|
responders
|
||||||
warden (~> 1.2.3)
|
warden (~> 1.2.3)
|
||||||
devise-two-factor (4.1.0)
|
devise-two-factor (4.1.1)
|
||||||
activesupport (< 7.1)
|
activesupport (~> 7.0)
|
||||||
attr_encrypted (>= 1.3, < 5, != 2)
|
attr_encrypted (>= 1.3, < 5, != 2)
|
||||||
devise (~> 4.0)
|
devise (~> 4.0)
|
||||||
railties (< 7.1)
|
railties (~> 7.0)
|
||||||
rotp (~> 6.0)
|
rotp (~> 6.0)
|
||||||
devise_pam_authenticatable2 (9.2.0)
|
devise_pam_authenticatable2 (9.2.0)
|
||||||
devise (>= 4.0.0)
|
devise (>= 4.0.0)
|
||||||
rpam2 (~> 4.0)
|
rpam2 (~> 4.0)
|
||||||
diff-lcs (1.5.0)
|
diff-lcs (1.5.0)
|
||||||
discard (1.2.1)
|
discard (1.3.0)
|
||||||
activerecord (>= 4.2, < 8)
|
activerecord (>= 4.2, < 8)
|
||||||
docile (1.4.0)
|
docile (1.4.0)
|
||||||
domain_name (0.5.20190701)
|
domain_name (0.5.20190701)
|
||||||
unf (>= 0.0.5, < 1.0.0)
|
unf (>= 0.0.5, < 1.0.0)
|
||||||
doorkeeper (5.6.6)
|
doorkeeper (5.6.8)
|
||||||
railties (>= 5)
|
railties (>= 5)
|
||||||
dotenv (2.8.1)
|
dotenv (2.8.1)
|
||||||
dotenv-rails (2.8.1)
|
dotenv-rails (2.8.1)
|
||||||
dotenv (= 2.8.1)
|
dotenv (= 2.8.1)
|
||||||
railties (>= 3.2)
|
railties (>= 3.2)
|
||||||
|
drb (2.2.0)
|
||||||
|
ruby2_keywords
|
||||||
ed25519 (1.3.0)
|
ed25519 (1.3.0)
|
||||||
elasticsearch (7.13.3)
|
elasticsearch (7.13.3)
|
||||||
elasticsearch-api (= 7.13.3)
|
elasticsearch-api (= 7.13.3)
|
||||||
|
@ -264,13 +247,17 @@ GEM
|
||||||
elasticsearch-transport (7.13.3)
|
elasticsearch-transport (7.13.3)
|
||||||
faraday (~> 1)
|
faraday (~> 1)
|
||||||
multi_json
|
multi_json
|
||||||
|
email_spec (2.2.2)
|
||||||
|
htmlentities (~> 4.3.3)
|
||||||
|
launchy (~> 2.1)
|
||||||
|
mail (~> 2.7)
|
||||||
encryptor (3.0.0)
|
encryptor (3.0.0)
|
||||||
erubi (1.12.0)
|
erubi (1.12.0)
|
||||||
et-orbi (1.2.7)
|
et-orbi (1.2.7)
|
||||||
tzinfo
|
tzinfo
|
||||||
excon (0.100.0)
|
excon (0.109.0)
|
||||||
fabrication (2.30.0)
|
fabrication (2.31.0)
|
||||||
faker (3.2.1)
|
faker (3.2.3)
|
||||||
i18n (>= 1.8.11, < 2)
|
i18n (>= 1.8.11, < 2)
|
||||||
faraday (1.10.3)
|
faraday (1.10.3)
|
||||||
faraday-em_http (~> 1.0)
|
faraday-em_http (~> 1.0)
|
||||||
|
@ -298,33 +285,32 @@ GEM
|
||||||
faraday_middleware (1.2.0)
|
faraday_middleware (1.2.0)
|
||||||
faraday (~> 1.0)
|
faraday (~> 1.0)
|
||||||
fast_blank (1.0.1)
|
fast_blank (1.0.1)
|
||||||
fastimage (2.2.7)
|
fastimage (2.3.0)
|
||||||
ffi (1.15.5)
|
ffi (1.15.5)
|
||||||
ffi-compiler (1.0.1)
|
ffi-compiler (1.0.1)
|
||||||
ffi (>= 1.0.0)
|
ffi (>= 1.0.0)
|
||||||
rake
|
rake
|
||||||
fog-core (2.1.0)
|
fog-core (2.4.0)
|
||||||
builder
|
builder
|
||||||
excon (~> 0.58)
|
excon (~> 0.71)
|
||||||
formatador (~> 0.2)
|
formatador (>= 0.2, < 2.0)
|
||||||
mime-types
|
mime-types
|
||||||
fog-json (1.2.0)
|
fog-json (1.2.0)
|
||||||
fog-core
|
fog-core
|
||||||
multi_json (~> 1.10)
|
multi_json (~> 1.10)
|
||||||
fog-openstack (0.3.10)
|
fog-openstack (1.1.0)
|
||||||
fog-core (>= 1.45, <= 2.1.0)
|
fog-core (~> 2.1)
|
||||||
fog-json (>= 1.0)
|
fog-json (>= 1.0)
|
||||||
ipaddress (>= 0.8)
|
formatador (1.1.0)
|
||||||
formatador (0.3.0)
|
|
||||||
fugit (1.8.1)
|
fugit (1.8.1)
|
||||||
et-orbi (~> 1, >= 1.2.7)
|
et-orbi (~> 1, >= 1.2.7)
|
||||||
raabro (~> 1.4)
|
raabro (~> 1.4)
|
||||||
fuubar (2.5.1)
|
fuubar (2.5.1)
|
||||||
rspec-core (~> 3.0)
|
rspec-core (~> 3.0)
|
||||||
ruby-progressbar (~> 1.4)
|
ruby-progressbar (~> 1.4)
|
||||||
globalid (1.1.0)
|
globalid (1.2.1)
|
||||||
activesupport (>= 5.0)
|
activesupport (>= 6.1)
|
||||||
haml (6.1.2)
|
haml (6.3.0)
|
||||||
temple (>= 0.8.2)
|
temple (>= 0.8.2)
|
||||||
thor
|
thor
|
||||||
tilt
|
tilt
|
||||||
|
@ -333,8 +319,8 @@ GEM
|
||||||
activesupport (>= 5.1)
|
activesupport (>= 5.1)
|
||||||
haml (>= 4.0.6)
|
haml (>= 4.0.6)
|
||||||
railties (>= 5.1)
|
railties (>= 5.1)
|
||||||
haml_lint (0.50.0)
|
haml_lint (0.55.0)
|
||||||
haml (>= 4.0, < 6.2)
|
haml (>= 5.0)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
rainbow
|
rainbow
|
||||||
rubocop (>= 1.0)
|
rubocop (>= 1.0)
|
||||||
|
@ -362,38 +348,41 @@ GEM
|
||||||
rainbow (>= 2.0.0)
|
rainbow (>= 2.0.0)
|
||||||
i18n (1.14.1)
|
i18n (1.14.1)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
i18n-tasks (1.0.12)
|
i18n-tasks (1.0.13)
|
||||||
activesupport (>= 4.0.2)
|
activesupport (>= 4.0.2)
|
||||||
ast (>= 2.1.0)
|
ast (>= 2.1.0)
|
||||||
better_html (>= 1.0, < 3.0)
|
better_html (>= 1.0, < 3.0)
|
||||||
erubi
|
erubi
|
||||||
highline (>= 2.0.0)
|
highline (>= 2.0.0)
|
||||||
i18n
|
i18n
|
||||||
parser (>= 2.2.3.0)
|
parser (>= 3.2.2.1)
|
||||||
rails-i18n
|
rails-i18n
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
terminal-table (>= 1.5.1)
|
terminal-table (>= 1.5.1)
|
||||||
idn-ruby (0.1.5)
|
idn-ruby (0.1.5)
|
||||||
ipaddress (0.8.3)
|
io-console (0.7.2)
|
||||||
|
irb (1.11.1)
|
||||||
|
rdoc
|
||||||
|
reline (>= 0.4.2)
|
||||||
jmespath (1.6.2)
|
jmespath (1.6.2)
|
||||||
json (2.6.3)
|
json (2.7.1)
|
||||||
json-canonicalization (0.3.2)
|
json-canonicalization (1.0.0)
|
||||||
json-jwt (1.15.3)
|
json-jwt (1.15.3)
|
||||||
activesupport (>= 4.2)
|
activesupport (>= 4.2)
|
||||||
aes_key_wrap
|
aes_key_wrap
|
||||||
bindata
|
bindata
|
||||||
httpclient
|
httpclient
|
||||||
json-ld (3.2.5)
|
json-ld (3.3.1)
|
||||||
htmlentities (~> 4.3)
|
htmlentities (~> 4.3)
|
||||||
json-canonicalization (~> 0.3, >= 0.3.2)
|
json-canonicalization (~> 1.0)
|
||||||
link_header (~> 0.0, >= 0.0.8)
|
link_header (~> 0.0, >= 0.0.8)
|
||||||
multi_json (~> 1.15)
|
multi_json (~> 1.15)
|
||||||
rack (>= 2.2, < 4)
|
rack (>= 2.2, < 4)
|
||||||
rdf (~> 3.2, >= 3.2.10)
|
rdf (~> 3.3)
|
||||||
json-ld-preloaded (3.2.2)
|
json-ld-preloaded (3.3.0)
|
||||||
json-ld (~> 3.2)
|
json-ld (~> 3.3)
|
||||||
rdf (~> 3.2)
|
rdf (~> 3.3)
|
||||||
json-schema (4.0.0)
|
json-schema (4.1.1)
|
||||||
addressable (>= 2.8)
|
addressable (>= 2.8)
|
||||||
jsonapi-renderer (0.2.2)
|
jsonapi-renderer (0.2.2)
|
||||||
jwt (2.7.1)
|
jwt (2.7.1)
|
||||||
|
@ -409,12 +398,12 @@ GEM
|
||||||
activerecord
|
activerecord
|
||||||
kaminari-core (= 1.2.2)
|
kaminari-core (= 1.2.2)
|
||||||
kaminari-core (1.2.2)
|
kaminari-core (1.2.2)
|
||||||
kt-paperclip (7.2.1)
|
kt-paperclip (7.2.2)
|
||||||
activemodel (>= 4.2.0)
|
activemodel (>= 4.2.0)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
marcel (~> 1.0.1)
|
marcel (~> 1.0.1)
|
||||||
mime-types
|
mime-types
|
||||||
terrapin (~> 0.6.0)
|
terrapin (>= 0.6.0, < 2.0)
|
||||||
language_server-protocol (3.17.0.3)
|
language_server-protocol (3.17.0.3)
|
||||||
launchy (2.5.2)
|
launchy (2.5.2)
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
|
@ -429,12 +418,12 @@ GEM
|
||||||
llhttp-ffi (0.4.0)
|
llhttp-ffi (0.4.0)
|
||||||
ffi-compiler (~> 1.0)
|
ffi-compiler (~> 1.0)
|
||||||
rake (~> 13.0)
|
rake (~> 13.0)
|
||||||
lograge (0.13.0)
|
lograge (0.14.0)
|
||||||
actionpack (>= 4)
|
actionpack (>= 4)
|
||||||
activesupport (>= 4)
|
activesupport (>= 4)
|
||||||
railties (>= 4)
|
railties (>= 4)
|
||||||
request_store (~> 1.0)
|
request_store (~> 1.0)
|
||||||
loofah (2.21.3)
|
loofah (2.22.0)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.12.0)
|
nokogiri (>= 1.12.0)
|
||||||
mail (2.8.1)
|
mail (2.8.1)
|
||||||
|
@ -451,42 +440,44 @@ GEM
|
||||||
azure-storage-blob (~> 2.0.1)
|
azure-storage-blob (~> 2.0.1)
|
||||||
hashie (~> 5.0)
|
hashie (~> 5.0)
|
||||||
memory_profiler (1.0.1)
|
memory_profiler (1.0.1)
|
||||||
method_source (1.0.0)
|
mime-types (3.5.2)
|
||||||
mime-types (3.5.1)
|
|
||||||
mime-types-data (~> 3.2015)
|
mime-types-data (~> 3.2015)
|
||||||
mime-types-data (3.2023.0808)
|
mime-types-data (3.2023.1205)
|
||||||
mini_mime (1.1.5)
|
mini_mime (1.1.5)
|
||||||
mini_portile2 (2.8.4)
|
mini_portile2 (2.8.5)
|
||||||
minitest (5.19.0)
|
minitest (5.21.2)
|
||||||
msgpack (1.7.1)
|
msgpack (1.7.2)
|
||||||
multi_json (1.15.0)
|
multi_json (1.15.0)
|
||||||
multipart-post (2.3.0)
|
multipart-post (2.3.0)
|
||||||
net-http (0.3.2)
|
mutex_m (0.2.0)
|
||||||
|
net-http (0.4.1)
|
||||||
uri
|
uri
|
||||||
net-http-persistent (4.0.2)
|
net-http-persistent (4.0.2)
|
||||||
connection_pool (~> 2.2)
|
connection_pool (~> 2.2)
|
||||||
net-imap (0.3.7)
|
net-imap (0.4.9.1)
|
||||||
date
|
date
|
||||||
net-protocol
|
net-protocol
|
||||||
net-ldap (0.18.0)
|
net-ldap (0.19.0)
|
||||||
net-pop (0.1.2)
|
net-pop (0.1.2)
|
||||||
net-protocol
|
net-protocol
|
||||||
net-protocol (0.2.1)
|
net-protocol (0.2.2)
|
||||||
timeout
|
timeout
|
||||||
net-scp (4.0.0)
|
net-smtp (0.4.0.1)
|
||||||
net-ssh (>= 2.6.5, < 8.0.0)
|
|
||||||
net-smtp (0.3.3)
|
|
||||||
net-protocol
|
net-protocol
|
||||||
net-ssh (7.1.0)
|
|
||||||
nio4r (2.5.9)
|
nio4r (2.5.9)
|
||||||
nokogiri (1.15.4)
|
nokogiri (1.16.0)
|
||||||
mini_portile2 (~> 2.8.2)
|
mini_portile2 (~> 2.8.2)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
oj (3.16.1)
|
oj (3.16.3)
|
||||||
|
bigdecimal (>= 3.0)
|
||||||
omniauth (2.1.1)
|
omniauth (2.1.1)
|
||||||
hashie (>= 3.4.6)
|
hashie (>= 3.4.6)
|
||||||
rack (>= 2.2.3)
|
rack (>= 2.2.3)
|
||||||
rack-protection
|
rack-protection
|
||||||
|
omniauth-cas (3.0.0.beta.1)
|
||||||
|
addressable (~> 2.8)
|
||||||
|
nokogiri (~> 1.12)
|
||||||
|
omniauth (~> 2.1)
|
||||||
omniauth-rails_csrf_protection (1.0.1)
|
omniauth-rails_csrf_protection (1.0.1)
|
||||||
actionpack (>= 4.2)
|
actionpack (>= 4.2)
|
||||||
omniauth (~> 2.0)
|
omniauth (~> 2.0)
|
||||||
|
@ -507,20 +498,20 @@ GEM
|
||||||
validate_email
|
validate_email
|
||||||
validate_url
|
validate_url
|
||||||
webfinger (~> 1.2)
|
webfinger (~> 1.2)
|
||||||
openssl (3.1.0)
|
openssl (3.2.0)
|
||||||
openssl-signature_algorithm (1.3.0)
|
openssl-signature_algorithm (1.3.0)
|
||||||
openssl (> 2.0)
|
openssl (> 2.0)
|
||||||
orm_adapter (0.5.0)
|
orm_adapter (0.5.0)
|
||||||
ox (2.14.17)
|
ox (2.14.17)
|
||||||
parallel (1.23.0)
|
parallel (1.24.0)
|
||||||
parser (3.2.2.3)
|
parser (3.3.0.5)
|
||||||
ast (~> 2.4.1)
|
ast (~> 2.4.1)
|
||||||
racc
|
racc
|
||||||
parslet (2.0.0)
|
parslet (2.0.0)
|
||||||
pastel (0.8.0)
|
pastel (0.8.0)
|
||||||
tty-color (~> 0.5)
|
tty-color (~> 0.5)
|
||||||
pg (1.5.4)
|
pg (1.5.4)
|
||||||
pghero (3.3.4)
|
pghero (3.4.0)
|
||||||
activerecord (>= 6)
|
activerecord (>= 6)
|
||||||
posix-spawn (0.3.15)
|
posix-spawn (0.3.15)
|
||||||
premailer (1.21.0)
|
premailer (1.21.0)
|
||||||
|
@ -532,13 +523,20 @@ GEM
|
||||||
net-smtp
|
net-smtp
|
||||||
premailer (~> 1.7, >= 1.7.9)
|
premailer (~> 1.7, >= 1.7.9)
|
||||||
private_address_check (0.5.0)
|
private_address_check (0.5.0)
|
||||||
public_suffix (5.0.3)
|
propshaft (0.8.0)
|
||||||
puma (6.3.1)
|
actionpack (>= 7.0.0)
|
||||||
|
activesupport (>= 7.0.0)
|
||||||
|
rack
|
||||||
|
railties (>= 7.0.0)
|
||||||
|
psych (5.1.2)
|
||||||
|
stringio
|
||||||
|
public_suffix (5.0.4)
|
||||||
|
puma (6.4.2)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
pundit (2.3.0)
|
pundit (2.3.1)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
raabro (1.4.0)
|
raabro (1.4.0)
|
||||||
racc (1.7.1)
|
racc (1.7.3)
|
||||||
rack (2.2.8)
|
rack (2.2.8)
|
||||||
rack-attack (6.7.0)
|
rack-attack (6.7.0)
|
||||||
rack (>= 1.0, < 4)
|
rack (>= 1.0, < 4)
|
||||||
|
@ -554,63 +552,74 @@ GEM
|
||||||
rack
|
rack
|
||||||
rack-proxy (0.7.6)
|
rack-proxy (0.7.6)
|
||||||
rack
|
rack
|
||||||
|
rack-session (1.0.2)
|
||||||
|
rack (< 3)
|
||||||
rack-test (2.1.0)
|
rack-test (2.1.0)
|
||||||
rack (>= 1.3)
|
rack (>= 1.3)
|
||||||
rails (7.0.8)
|
rackup (1.0.0)
|
||||||
actioncable (= 7.0.8)
|
rack (< 3)
|
||||||
actionmailbox (= 7.0.8)
|
webrick
|
||||||
actionmailer (= 7.0.8)
|
rails (7.1.3)
|
||||||
actionpack (= 7.0.8)
|
actioncable (= 7.1.3)
|
||||||
actiontext (= 7.0.8)
|
actionmailbox (= 7.1.3)
|
||||||
actionview (= 7.0.8)
|
actionmailer (= 7.1.3)
|
||||||
activejob (= 7.0.8)
|
actionpack (= 7.1.3)
|
||||||
activemodel (= 7.0.8)
|
actiontext (= 7.1.3)
|
||||||
activerecord (= 7.0.8)
|
actionview (= 7.1.3)
|
||||||
activestorage (= 7.0.8)
|
activejob (= 7.1.3)
|
||||||
activesupport (= 7.0.8)
|
activemodel (= 7.1.3)
|
||||||
|
activerecord (= 7.1.3)
|
||||||
|
activestorage (= 7.1.3)
|
||||||
|
activesupport (= 7.1.3)
|
||||||
bundler (>= 1.15.0)
|
bundler (>= 1.15.0)
|
||||||
railties (= 7.0.8)
|
railties (= 7.1.3)
|
||||||
rails-controller-testing (1.0.5)
|
rails-controller-testing (1.0.5)
|
||||||
actionpack (>= 5.0.1.rc1)
|
actionpack (>= 5.0.1.rc1)
|
||||||
actionview (>= 5.0.1.rc1)
|
actionview (>= 5.0.1.rc1)
|
||||||
activesupport (>= 5.0.1.rc1)
|
activesupport (>= 5.0.1.rc1)
|
||||||
rails-dom-testing (2.1.1)
|
rails-dom-testing (2.2.0)
|
||||||
activesupport (>= 5.0.0)
|
activesupport (>= 5.0.0)
|
||||||
minitest
|
minitest
|
||||||
nokogiri (>= 1.6)
|
nokogiri (>= 1.6)
|
||||||
rails-html-sanitizer (1.6.0)
|
rails-html-sanitizer (1.6.0)
|
||||||
loofah (~> 2.21)
|
loofah (~> 2.21)
|
||||||
nokogiri (~> 1.14)
|
nokogiri (~> 1.14)
|
||||||
rails-i18n (7.0.7)
|
rails-i18n (7.0.8)
|
||||||
i18n (>= 0.7, < 2)
|
i18n (>= 0.7, < 2)
|
||||||
railties (>= 6.0.0, < 8)
|
railties (>= 6.0.0, < 8)
|
||||||
railties (7.0.8)
|
railties (7.1.3)
|
||||||
actionpack (= 7.0.8)
|
actionpack (= 7.1.3)
|
||||||
activesupport (= 7.0.8)
|
activesupport (= 7.1.3)
|
||||||
method_source
|
irb
|
||||||
|
rackup (>= 1.0.0)
|
||||||
rake (>= 12.2)
|
rake (>= 12.2)
|
||||||
thor (~> 1.0)
|
thor (~> 1.0, >= 1.2.2)
|
||||||
zeitwerk (~> 2.5)
|
zeitwerk (~> 2.6)
|
||||||
rainbow (3.1.1)
|
rainbow (3.1.1)
|
||||||
rake (13.0.6)
|
rake (13.1.0)
|
||||||
rdf (3.2.11)
|
rdf (3.3.1)
|
||||||
|
bcp47_spec (~> 0.2)
|
||||||
link_header (~> 0.0, >= 0.0.8)
|
link_header (~> 0.0, >= 0.0.8)
|
||||||
rdf-normalize (0.6.1)
|
rdf-normalize (0.7.0)
|
||||||
rdf (~> 3.2)
|
rdf (~> 3.3)
|
||||||
|
rdoc (6.6.2)
|
||||||
|
psych (>= 4.0.0)
|
||||||
redcarpet (3.6.0)
|
redcarpet (3.6.0)
|
||||||
redis (4.8.1)
|
redis (4.8.1)
|
||||||
redis-namespace (1.11.0)
|
redis-namespace (1.11.0)
|
||||||
redis (>= 4)
|
redis (>= 4)
|
||||||
redlock (1.3.2)
|
redlock (1.3.2)
|
||||||
redis (>= 3.0.0, < 6.0)
|
redis (>= 3.0.0, < 6.0)
|
||||||
regexp_parser (2.8.1)
|
regexp_parser (2.9.0)
|
||||||
|
reline (0.4.2)
|
||||||
|
io-console (~> 0.5)
|
||||||
request_store (1.5.1)
|
request_store (1.5.1)
|
||||||
rack (>= 1.4)
|
rack (>= 1.4)
|
||||||
responders (3.1.0)
|
responders (3.1.1)
|
||||||
actionpack (>= 5.2)
|
actionpack (>= 5.2)
|
||||||
railties (>= 5.2)
|
railties (>= 5.2)
|
||||||
rexml (3.2.6)
|
rexml (3.2.6)
|
||||||
rotp (6.2.2)
|
rotp (6.3.0)
|
||||||
rouge (4.1.2)
|
rouge (4.1.2)
|
||||||
rpam2 (4.0.2)
|
rpam2 (4.0.2)
|
||||||
rqrcode (2.2.0)
|
rqrcode (2.2.0)
|
||||||
|
@ -622,10 +631,12 @@ GEM
|
||||||
rspec-expectations (3.12.3)
|
rspec-expectations (3.12.3)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.12.0)
|
rspec-support (~> 3.12.0)
|
||||||
rspec-mocks (3.12.5)
|
rspec-github (2.4.0)
|
||||||
|
rspec-core (~> 3.0)
|
||||||
|
rspec-mocks (3.12.6)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.12.0)
|
rspec-support (~> 3.12.0)
|
||||||
rspec-rails (6.0.3)
|
rspec-rails (6.1.1)
|
||||||
actionpack (>= 6.1)
|
actionpack (>= 6.1)
|
||||||
activesupport (>= 6.1)
|
activesupport (>= 6.1)
|
||||||
railties (>= 6.1)
|
railties (>= 6.1)
|
||||||
|
@ -633,43 +644,42 @@ GEM
|
||||||
rspec-expectations (~> 3.12)
|
rspec-expectations (~> 3.12)
|
||||||
rspec-mocks (~> 3.12)
|
rspec-mocks (~> 3.12)
|
||||||
rspec-support (~> 3.12)
|
rspec-support (~> 3.12)
|
||||||
rspec-sidekiq (4.0.1)
|
rspec-sidekiq (4.1.0)
|
||||||
rspec-core (~> 3.0)
|
rspec-core (~> 3.0)
|
||||||
rspec-expectations (~> 3.0)
|
rspec-expectations (~> 3.0)
|
||||||
rspec-mocks (~> 3.0)
|
rspec-mocks (~> 3.0)
|
||||||
sidekiq (>= 5, < 8)
|
sidekiq (>= 5, < 8)
|
||||||
rspec-support (3.12.1)
|
rspec-support (3.12.1)
|
||||||
rspec_chunked (0.6)
|
rubocop (1.60.2)
|
||||||
rubocop (1.56.3)
|
|
||||||
base64 (~> 0.1.1)
|
|
||||||
json (~> 2.3)
|
json (~> 2.3)
|
||||||
language_server-protocol (>= 3.17.0)
|
language_server-protocol (>= 3.17.0)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
parser (>= 3.2.2.3)
|
parser (>= 3.3.0.2)
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
regexp_parser (>= 1.8, < 3.0)
|
regexp_parser (>= 1.8, < 3.0)
|
||||||
rexml (>= 3.2.5, < 4.0)
|
rexml (>= 3.2.5, < 4.0)
|
||||||
rubocop-ast (>= 1.28.1, < 2.0)
|
rubocop-ast (>= 1.30.0, < 2.0)
|
||||||
ruby-progressbar (~> 1.7)
|
ruby-progressbar (~> 1.7)
|
||||||
unicode-display_width (>= 2.4.0, < 3.0)
|
unicode-display_width (>= 2.4.0, < 3.0)
|
||||||
rubocop-ast (1.29.0)
|
rubocop-ast (1.30.0)
|
||||||
parser (>= 3.2.1.0)
|
parser (>= 3.2.1.0)
|
||||||
rubocop-capybara (2.18.0)
|
rubocop-capybara (2.20.0)
|
||||||
rubocop (~> 1.41)
|
rubocop (~> 1.41)
|
||||||
rubocop-factory_bot (2.23.1)
|
rubocop-factory_bot (2.25.0)
|
||||||
rubocop (~> 1.33)
|
rubocop (~> 1.33)
|
||||||
rubocop-performance (1.19.0)
|
rubocop-performance (1.20.2)
|
||||||
rubocop (>= 1.7.0, < 2.0)
|
rubocop (>= 1.48.1, < 2.0)
|
||||||
rubocop-ast (>= 0.4.0)
|
rubocop-ast (>= 1.30.0, < 2.0)
|
||||||
rubocop-rails (2.20.2)
|
rubocop-rails (2.23.1)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
rack (>= 1.1)
|
rack (>= 1.1)
|
||||||
rubocop (>= 1.33.0, < 2.0)
|
rubocop (>= 1.33.0, < 2.0)
|
||||||
rubocop-rspec (2.23.2)
|
rubocop-ast (>= 1.30.0, < 2.0)
|
||||||
rubocop (~> 1.33)
|
rubocop-rspec (2.26.1)
|
||||||
|
rubocop (~> 1.40)
|
||||||
rubocop-capybara (~> 2.17)
|
rubocop-capybara (~> 2.17)
|
||||||
rubocop-factory_bot (~> 2.22)
|
rubocop-factory_bot (~> 2.22)
|
||||||
ruby-prof (1.6.3)
|
ruby-prof (1.7.0)
|
||||||
ruby-progressbar (1.13.0)
|
ruby-progressbar (1.13.0)
|
||||||
ruby-saml (1.15.0)
|
ruby-saml (1.15.0)
|
||||||
nokogiri (>= 1.13.10)
|
nokogiri (>= 1.13.10)
|
||||||
|
@ -680,18 +690,19 @@ GEM
|
||||||
fugit (~> 1.1, >= 1.1.6)
|
fugit (~> 1.1, >= 1.1.6)
|
||||||
safety_net_attestation (0.4.0)
|
safety_net_attestation (0.4.0)
|
||||||
jwt (~> 2.0)
|
jwt (~> 2.0)
|
||||||
sanitize (6.0.2)
|
sanitize (6.1.0)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.12.0)
|
nokogiri (>= 1.12.0)
|
||||||
scenic (1.7.0)
|
scenic (1.7.0)
|
||||||
activerecord (>= 4.0.0)
|
activerecord (>= 4.0.0)
|
||||||
railties (>= 4.0.0)
|
railties (>= 4.0.0)
|
||||||
selenium-webdriver (4.11.0)
|
selenium-webdriver (4.17.0)
|
||||||
|
base64 (~> 0.2)
|
||||||
rexml (~> 3.2, >= 3.2.5)
|
rexml (~> 3.2, >= 3.2.5)
|
||||||
rubyzip (>= 1.2.2, < 3.0)
|
rubyzip (>= 1.2.2, < 3.0)
|
||||||
websocket (~> 1.0)
|
websocket (~> 1.0)
|
||||||
semantic_range (3.0.0)
|
semantic_range (3.0.0)
|
||||||
sidekiq (6.5.9)
|
sidekiq (6.5.12)
|
||||||
connection_pool (>= 2.2.5, < 3)
|
connection_pool (>= 2.2.5, < 3)
|
||||||
rack (~> 2.0)
|
rack (~> 2.0)
|
||||||
redis (>= 4.5.0, < 5)
|
redis (>= 4.5.0, < 5)
|
||||||
|
@ -701,7 +712,7 @@ GEM
|
||||||
rufus-scheduler (~> 3.2)
|
rufus-scheduler (~> 3.2)
|
||||||
sidekiq (>= 6, < 8)
|
sidekiq (>= 6, < 8)
|
||||||
tilt (>= 1.4.0)
|
tilt (>= 1.4.0)
|
||||||
sidekiq-unique-jobs (7.1.29)
|
sidekiq-unique-jobs (7.1.31)
|
||||||
brpoplpush-redis_script (> 0.1.1, <= 2.0.0)
|
brpoplpush-redis_script (> 0.1.1, <= 2.0.0)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.5)
|
concurrent-ruby (~> 1.0, >= 1.0.5)
|
||||||
redis (< 5.0)
|
redis (< 5.0)
|
||||||
|
@ -709,7 +720,7 @@ GEM
|
||||||
thor (>= 0.20, < 3.0)
|
thor (>= 0.20, < 3.0)
|
||||||
simple-navigation (4.4.0)
|
simple-navigation (4.4.0)
|
||||||
activesupport (>= 2.3.2)
|
activesupport (>= 2.3.2)
|
||||||
simple_form (5.2.0)
|
simple_form (5.3.0)
|
||||||
actionpack (>= 5.2)
|
actionpack (>= 5.2)
|
||||||
activemodel (>= 5.2)
|
activemodel (>= 5.2)
|
||||||
simplecov (0.22.0)
|
simplecov (0.22.0)
|
||||||
|
@ -717,38 +728,30 @@ GEM
|
||||||
simplecov-html (~> 0.11)
|
simplecov-html (~> 0.11)
|
||||||
simplecov_json_formatter (~> 0.1)
|
simplecov_json_formatter (~> 0.1)
|
||||||
simplecov-html (0.12.3)
|
simplecov-html (0.12.3)
|
||||||
|
simplecov-lcov (0.8.0)
|
||||||
simplecov_json_formatter (0.1.4)
|
simplecov_json_formatter (0.1.4)
|
||||||
smart_properties (1.17.0)
|
smart_properties (1.17.0)
|
||||||
sprockets (3.7.2)
|
stackprof (0.2.26)
|
||||||
concurrent-ruby (~> 1.0)
|
|
||||||
rack (> 1, < 3)
|
|
||||||
sprockets-rails (3.4.2)
|
|
||||||
actionpack (>= 5.2)
|
|
||||||
activesupport (>= 5.2)
|
|
||||||
sprockets (>= 3.0.0)
|
|
||||||
sshkit (1.21.5)
|
|
||||||
net-scp (>= 1.1.2)
|
|
||||||
net-ssh (>= 2.8.0)
|
|
||||||
stackprof (0.2.25)
|
|
||||||
statsd-ruby (1.5.0)
|
statsd-ruby (1.5.0)
|
||||||
stoplight (3.0.2)
|
stoplight (3.0.2)
|
||||||
redlock (~> 1.0)
|
redlock (~> 1.0)
|
||||||
strong_migrations (0.8.0)
|
stringio (3.1.0)
|
||||||
|
strong_migrations (1.7.0)
|
||||||
activerecord (>= 5.2)
|
activerecord (>= 5.2)
|
||||||
swd (1.3.0)
|
swd (1.3.0)
|
||||||
activesupport (>= 3)
|
activesupport (>= 3)
|
||||||
attr_required (>= 0.0.5)
|
attr_required (>= 0.0.5)
|
||||||
httpclient (>= 2.4)
|
httpclient (>= 2.4)
|
||||||
sysexits (1.2.0)
|
sysexits (1.2.0)
|
||||||
temple (0.10.2)
|
temple (0.10.3)
|
||||||
terminal-table (3.0.2)
|
terminal-table (3.0.2)
|
||||||
unicode-display_width (>= 1.1.1, < 3)
|
unicode-display_width (>= 1.1.1, < 3)
|
||||||
terrapin (0.6.0)
|
terrapin (1.0.1)
|
||||||
climate_control (>= 0.0.3, < 1.0)
|
climate_control
|
||||||
test-prof (1.2.3)
|
test-prof (1.3.1)
|
||||||
thor (1.2.2)
|
thor (1.3.0)
|
||||||
tilt (2.2.0)
|
tilt (2.3.0)
|
||||||
timeout (0.4.0)
|
timeout (0.4.1)
|
||||||
tpm-key_attestation (0.12.0)
|
tpm-key_attestation (0.12.0)
|
||||||
bindata (~> 2.4)
|
bindata (~> 2.4)
|
||||||
openssl (> 2.0)
|
openssl (> 2.0)
|
||||||
|
@ -768,12 +771,12 @@ GEM
|
||||||
unf (~> 0.1.0)
|
unf (~> 0.1.0)
|
||||||
tzinfo (2.0.6)
|
tzinfo (2.0.6)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
tzinfo-data (1.2023.3)
|
tzinfo-data (1.2023.4)
|
||||||
tzinfo (>= 1.0.0)
|
tzinfo (>= 1.0.0)
|
||||||
unf (0.1.4)
|
unf (0.1.4)
|
||||||
unf_ext
|
unf_ext
|
||||||
unf_ext (0.0.8.2)
|
unf_ext (0.0.8.2)
|
||||||
unicode-display_width (2.4.2)
|
unicode-display_width (2.5.0)
|
||||||
uri (0.12.2)
|
uri (0.12.2)
|
||||||
validate_email (0.1.6)
|
validate_email (0.1.6)
|
||||||
activemodel (>= 3.0)
|
activemodel (>= 3.0)
|
||||||
|
@ -783,7 +786,7 @@ GEM
|
||||||
public_suffix
|
public_suffix
|
||||||
warden (1.2.9)
|
warden (1.2.9)
|
||||||
rack (>= 2.0.9)
|
rack (>= 2.0.9)
|
||||||
webauthn (3.0.0)
|
webauthn (3.1.0)
|
||||||
android_key_attestation (~> 0.3.0)
|
android_key_attestation (~> 0.3.0)
|
||||||
awrence (~> 1.1)
|
awrence (~> 1.1)
|
||||||
bindata (~> 2.4)
|
bindata (~> 2.4)
|
||||||
|
@ -804,7 +807,8 @@ GEM
|
||||||
rack-proxy (>= 0.6.1)
|
rack-proxy (>= 0.6.1)
|
||||||
railties (>= 5.2)
|
railties (>= 5.2)
|
||||||
semantic_range (>= 2.3.0)
|
semantic_range (>= 2.3.0)
|
||||||
websocket (1.2.9)
|
webrick (1.8.1)
|
||||||
|
websocket (1.2.10)
|
||||||
websocket-driver (0.7.6)
|
websocket-driver (0.7.6)
|
||||||
websocket-extensions (>= 0.1.0)
|
websocket-extensions (>= 0.1.0)
|
||||||
websocket-extensions (0.1.5)
|
websocket-extensions (0.1.5)
|
||||||
|
@ -812,7 +816,7 @@ GEM
|
||||||
xorcist (1.1.3)
|
xorcist (1.1.3)
|
||||||
xpath (3.2.0)
|
xpath (3.2.0)
|
||||||
nokogiri (~> 1.8)
|
nokogiri (~> 1.8)
|
||||||
zeitwerk (2.6.11)
|
zeitwerk (2.6.12)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
@ -825,23 +829,21 @@ DEPENDENCIES
|
||||||
better_errors (~> 2.9)
|
better_errors (~> 2.9)
|
||||||
binding_of_caller (~> 1.0)
|
binding_of_caller (~> 1.0)
|
||||||
blurhash (~> 0.1)
|
blurhash (~> 0.1)
|
||||||
bootsnap (~> 1.16.0)
|
bootsnap (~> 1.17.0)
|
||||||
brakeman (~> 6.0)
|
brakeman (~> 6.0)
|
||||||
browser
|
browser
|
||||||
bundler-audit (~> 0.9)
|
bundler-audit (~> 0.9)
|
||||||
capistrano (~> 3.17)
|
|
||||||
capistrano-rails (~> 1.6)
|
|
||||||
capistrano-rbenv (~> 2.2)
|
|
||||||
capistrano-yarn (~> 2.0)
|
|
||||||
capybara (~> 3.39)
|
capybara (~> 3.39)
|
||||||
charlock_holmes (~> 0.7.7)
|
charlock_holmes (~> 0.7.7)
|
||||||
chewy (~> 7.3)
|
chewy (~> 7.3)
|
||||||
climate_control (~> 0.2)
|
climate_control
|
||||||
cocoon (~> 1.2)
|
cocoon (~> 1.2)
|
||||||
color_diff (~> 0.1)
|
color_diff (~> 0.1)
|
||||||
concurrent-ruby
|
concurrent-ruby
|
||||||
connection_pool
|
connection_pool
|
||||||
|
csv (~> 3.2)
|
||||||
database_cleaner-active_record
|
database_cleaner-active_record
|
||||||
|
debug (~> 1.8)
|
||||||
devise (~> 4.9)
|
devise (~> 4.9)
|
||||||
devise-two-factor (~> 4.1)
|
devise-two-factor (~> 4.1)
|
||||||
devise_pam_authenticatable2 (~> 9.2)
|
devise_pam_authenticatable2 (~> 9.2)
|
||||||
|
@ -849,12 +851,13 @@ DEPENDENCIES
|
||||||
doorkeeper (~> 5.6)
|
doorkeeper (~> 5.6)
|
||||||
dotenv-rails (~> 2.8)
|
dotenv-rails (~> 2.8)
|
||||||
ed25519 (~> 1.3)
|
ed25519 (~> 1.3)
|
||||||
|
email_spec
|
||||||
fabrication (~> 2.30)
|
fabrication (~> 2.30)
|
||||||
faker (~> 3.2)
|
faker (~> 3.2)
|
||||||
fast_blank (~> 1.0)
|
fast_blank (~> 1.0)
|
||||||
fastimage
|
fastimage
|
||||||
fog-core (<= 2.4.0)
|
fog-core (<= 2.4.0)
|
||||||
fog-openstack (~> 0.3)
|
fog-openstack (~> 1.0)
|
||||||
fuubar (~> 2.5)
|
fuubar (~> 2.5)
|
||||||
haml-rails (~> 2.0)
|
haml-rails (~> 2.0)
|
||||||
haml_lint
|
haml_lint
|
||||||
|
@ -866,6 +869,7 @@ DEPENDENCIES
|
||||||
httplog (~> 1.6.2)
|
httplog (~> 1.6.2)
|
||||||
i18n-tasks (~> 1.0)
|
i18n-tasks (~> 1.0)
|
||||||
idn-ruby
|
idn-ruby
|
||||||
|
irb (~> 1.8)
|
||||||
json-ld
|
json-ld
|
||||||
json-ld-preloaded (~> 3.2)
|
json-ld-preloaded (~> 3.2)
|
||||||
json-schema (~> 4.0)
|
json-schema (~> 4.0)
|
||||||
|
@ -879,13 +883,13 @@ DEPENDENCIES
|
||||||
md-paperclip-azure (~> 2.2)
|
md-paperclip-azure (~> 2.2)
|
||||||
memory_profiler
|
memory_profiler
|
||||||
mime-types (~> 3.5.0)
|
mime-types (~> 3.5.0)
|
||||||
net-http (~> 0.3.2)
|
net-http (~> 0.4.0)
|
||||||
net-ldap (~> 0.18)
|
net-ldap (~> 0.18)
|
||||||
nokogiri (~> 1.15)
|
nokogiri (~> 1.15)
|
||||||
nsa!
|
nsa!
|
||||||
oj (~> 3.14)
|
oj (~> 3.14)
|
||||||
omniauth (~> 2.0)
|
omniauth (~> 2.0)
|
||||||
omniauth-cas!
|
omniauth-cas (~> 3.0.0.beta.1)
|
||||||
omniauth-rails_csrf_protection (~> 1.0)
|
omniauth-rails_csrf_protection (~> 1.0)
|
||||||
omniauth-saml (~> 2.0)
|
omniauth-saml (~> 2.0)
|
||||||
omniauth_openid_connect (~> 0.6.1)
|
omniauth_openid_connect (~> 0.6.1)
|
||||||
|
@ -896,6 +900,7 @@ DEPENDENCIES
|
||||||
posix-spawn
|
posix-spawn
|
||||||
premailer-rails
|
premailer-rails
|
||||||
private_address_check (~> 0.5)
|
private_address_check (~> 0.5)
|
||||||
|
propshaft
|
||||||
public_suffix (~> 5.0)
|
public_suffix (~> 5.0)
|
||||||
puma (~> 6.3)
|
puma (~> 6.3)
|
||||||
pundit (~> 2.3)
|
pundit (~> 2.3)
|
||||||
|
@ -903,18 +908,17 @@ DEPENDENCIES
|
||||||
rack-attack (~> 6.6)
|
rack-attack (~> 6.6)
|
||||||
rack-cors (~> 2.0)
|
rack-cors (~> 2.0)
|
||||||
rack-test (~> 2.1)
|
rack-test (~> 2.1)
|
||||||
rails (~> 7.0)
|
rails (~> 7.1.1)
|
||||||
rails-controller-testing (~> 1.0)
|
rails-controller-testing (~> 1.0)
|
||||||
rails-i18n (~> 7.0)
|
rails-i18n (~> 7.0)
|
||||||
rails-settings-cached (~> 0.6)!
|
|
||||||
rdf-normalize (~> 0.5)
|
rdf-normalize (~> 0.5)
|
||||||
redcarpet (~> 3.6)
|
redcarpet (~> 3.6)
|
||||||
redis (~> 4.5)
|
redis (~> 4.5)
|
||||||
redis-namespace (~> 1.10)
|
redis-namespace (~> 1.10)
|
||||||
rqrcode (~> 2.2)
|
rqrcode (~> 2.2)
|
||||||
|
rspec-github (~> 2.4)
|
||||||
rspec-rails (~> 6.0)
|
rspec-rails (~> 6.0)
|
||||||
rspec-sidekiq (~> 4.0)
|
rspec-sidekiq (~> 4.0)
|
||||||
rspec_chunked (~> 0.6)
|
|
||||||
rubocop
|
rubocop
|
||||||
rubocop-capybara
|
rubocop-capybara
|
||||||
rubocop-performance
|
rubocop-performance
|
||||||
|
@ -933,11 +937,10 @@ DEPENDENCIES
|
||||||
simple-navigation (~> 4.4)
|
simple-navigation (~> 4.4)
|
||||||
simple_form (~> 5.2)
|
simple_form (~> 5.2)
|
||||||
simplecov (~> 0.22)
|
simplecov (~> 0.22)
|
||||||
sprockets (~> 3.7.2)
|
simplecov-lcov (~> 0.8)
|
||||||
sprockets-rails (~> 3.4)
|
|
||||||
stackprof
|
stackprof
|
||||||
stoplight (~> 3.0.1)
|
stoplight (~> 3.0.1)
|
||||||
strong_migrations (~> 0.8)
|
strong_migrations (= 1.7.0)
|
||||||
test-prof
|
test-prof
|
||||||
thor (~> 1.2)
|
thor (~> 1.2)
|
||||||
tty-prompt (~> 0.23)
|
tty-prompt (~> 0.23)
|
||||||
|
@ -953,4 +956,4 @@ RUBY VERSION
|
||||||
ruby 3.2.2p53
|
ruby 3.2.2p53
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
2.4.13
|
2.5.4
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
web: env PORT=3000 RAILS_ENV=development bundle exec puma -C config/puma.rb
|
web: env PORT=3000 RAILS_ENV=development bundle exec puma -C config/puma.rb
|
||||||
sidekiq: env PORT=3000 RAILS_ENV=development bundle exec sidekiq
|
sidekiq: env PORT=3000 RAILS_ENV=development bundle exec sidekiq
|
||||||
stream: env PORT=4000 yarn run start
|
stream: env PORT=4000 yarn workspace @mastodon/streaming start
|
||||||
webpack: bin/webpack-dev-server
|
webpack: bin/webpack-dev-server
|
||||||
|
|
|
@ -67,10 +67,10 @@ Mastodon acts as an OAuth2 provider, so 3rd party apps can use the REST and Stre
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
|
|
||||||
- **PostgreSQL** 9.5+
|
- **PostgreSQL** 12+
|
||||||
- **Redis** 4+
|
- **Redis** 4+
|
||||||
- **Ruby** 2.7+
|
- **Ruby** 2.7+
|
||||||
- **Node.js** 14+
|
- **Node.js** 16+
|
||||||
|
|
||||||
The repository includes deployment configurations for **Docker and docker-compose** as well as specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). The [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation.
|
The repository includes deployment configurations for **Docker and docker-compose** as well as specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). The [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation.
|
||||||
|
|
||||||
|
@ -94,9 +94,10 @@ To set up **MacOS** for native development, complete the following steps:
|
||||||
- Run `brew install postgresql@14`
|
- Run `brew install postgresql@14`
|
||||||
- Run `brew install redis`
|
- Run `brew install redis`
|
||||||
- Run `brew install imagemagick`
|
- Run `brew install imagemagick`
|
||||||
|
- Run `brew install libidn`
|
||||||
- Install Foreman or a similar tool (such as [overmind](https://github.com/DarthSim/overmind)) to handle multiple process launching.
|
- Install Foreman or a similar tool (such as [overmind](https://github.com/DarthSim/overmind)) to handle multiple process launching.
|
||||||
- Navigate to Mastodon's root directory and run `brew install nvm` then `nvm use` to use the version from .nvmrc
|
- Navigate to Mastodon's root directory and run `brew install nvm` then `nvm use` to use the version from .nvmrc
|
||||||
- Run `corepack enable && yarn set version classic`
|
- Run `corepack enable && corepack prepare`
|
||||||
- Run `bundle exec rails db:setup` (optionally prepend `RAILS_ENV=development` to target the dev environment)
|
- Run `bundle exec rails db:setup` (optionally prepend `RAILS_ENV=development` to target the dev environment)
|
||||||
- Finally, run `overmind start -f Procfile.dev`
|
- Finally, run `overmind start -f Procfile.dev`
|
||||||
|
|
||||||
|
@ -132,7 +133,7 @@ You can open issues for bugs you've found or features you think are missing. You
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Copyright (C) 2016-2023 Eugen Rochko & other Mastodon contributors (see [AUTHORS.md](AUTHORS.md))
|
Copyright (C) 2016-2024 Eugen Rochko & other Mastodon contributors (see [AUTHORS.md](AUTHORS.md))
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
|
11
SECURITY.md
11
SECURITY.md
|
@ -13,9 +13,8 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through
|
||||||
|
|
||||||
## Supported Versions
|
## Supported Versions
|
||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
| ------- | ---------------- |
|
| ------- | --------- |
|
||||||
| 4.1.x | Yes |
|
| 4.2.x | Yes |
|
||||||
| 4.0.x | Until 2023-10-31 |
|
| 4.1.x | Yes |
|
||||||
| 3.5.x | Until 2023-12-31 |
|
| < 4.1 | No |
|
||||||
| < 3.5 | No |
|
|
||||||
|
|
|
@ -10,7 +10,11 @@ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
|
||||||
sudo apt-add-repository 'deb https://dl.yarnpkg.com/debian/ stable main'
|
sudo apt-add-repository 'deb https://dl.yarnpkg.com/debian/ stable main'
|
||||||
|
|
||||||
# Add repo for NodeJS
|
# Add repo for NodeJS
|
||||||
curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -
|
sudo mkdir -p /etc/apt/keyrings
|
||||||
|
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||||
|
NODE_MAJOR=20
|
||||||
|
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
|
||||||
|
sudo apt-get update
|
||||||
|
|
||||||
# Add firewall rule to redirect 80 to PORT and save
|
# Add firewall rule to redirect 80 to PORT and save
|
||||||
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port #{ENV["PORT"]}
|
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port #{ENV["PORT"]}
|
||||||
|
@ -112,11 +116,11 @@ bundle install
|
||||||
|
|
||||||
# Install node modules
|
# Install node modules
|
||||||
sudo corepack enable
|
sudo corepack enable
|
||||||
yarn set version classic
|
corepack prepare
|
||||||
yarn install
|
yarn install
|
||||||
|
|
||||||
# Build Mastodon
|
# Build Mastodon
|
||||||
export RAILS_ENV=development
|
export RAILS_ENV=development
|
||||||
export $(cat ".env.vagrant" | xargs)
|
export $(cat ".env.vagrant" | xargs)
|
||||||
bundle exec rails db:setup
|
bundle exec rails db:setup
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class AccountsIndex < Chewy::Index
|
class AccountsIndex < Chewy::Index
|
||||||
|
include DatetimeClampingConcern
|
||||||
|
|
||||||
settings index: index_preset(refresh_interval: '30s'), analysis: {
|
settings index: index_preset(refresh_interval: '30s'), analysis: {
|
||||||
filter: {
|
filter: {
|
||||||
english_stop: {
|
english_stop: {
|
||||||
|
@ -60,7 +62,7 @@ class AccountsIndex < Chewy::Index
|
||||||
field(:following_count, type: 'long')
|
field(:following_count, type: 'long')
|
||||||
field(:followers_count, type: 'long')
|
field(:followers_count, type: 'long')
|
||||||
field(:properties, type: 'keyword', value: ->(account) { account.searchable_properties })
|
field(:properties, type: 'keyword', value: ->(account) { account.searchable_properties })
|
||||||
field(:last_status_at, type: 'date', value: ->(account) { account.last_status_at || account.created_at })
|
field(:last_status_at, type: 'date', value: ->(account) { clamp_date(account.last_status_at || account.created_at) })
|
||||||
field(:display_name, type: 'text', analyzer: 'verbatim') { field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'verbatim' }
|
field(:display_name, type: 'text', analyzer: 'verbatim') { field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'verbatim' }
|
||||||
field(:username, type: 'text', analyzer: 'verbatim', value: ->(account) { [account.username, account.domain].compact.join('@') }) { field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'verbatim' }
|
field(:username, type: 'text', analyzer: 'verbatim', value: ->(account) { [account.username, account.domain].compact.join('@') }) { field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'verbatim' }
|
||||||
field(:text, type: 'text', analyzer: 'verbatim', value: ->(account) { account.searchable_text }) { field :stemmed, type: 'text', analyzer: 'natural' }
|
field(:text, type: 'text', analyzer: 'verbatim', value: ->(account) { account.searchable_text }) { field :stemmed, type: 'text', analyzer: 'natural' }
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module DatetimeClampingConcern
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
MIN_ISO8601_DATETIME = '0000-01-01T00:00:00Z'.to_datetime.freeze
|
||||||
|
MAX_ISO8601_DATETIME = '9999-12-31T23:59:59Z'.to_datetime.freeze
|
||||||
|
|
||||||
|
class_methods do
|
||||||
|
def clamp_date(datetime)
|
||||||
|
datetime.clamp(MIN_ISO8601_DATETIME, MAX_ISO8601_DATETIME)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class PublicStatusesIndex < Chewy::Index
|
class PublicStatusesIndex < Chewy::Index
|
||||||
|
include DatetimeClampingConcern
|
||||||
|
|
||||||
settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: {
|
settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: {
|
||||||
filter: {
|
filter: {
|
||||||
english_stop: {
|
english_stop: {
|
||||||
|
@ -53,7 +55,7 @@ class PublicStatusesIndex < Chewy::Index
|
||||||
index_scope ::Status.unscoped
|
index_scope ::Status.unscoped
|
||||||
.kept
|
.kept
|
||||||
.indexable
|
.indexable
|
||||||
.includes(:media_attachments, :preloadable_poll, :preview_cards, :tags)
|
.includes(:media_attachments, :preloadable_poll, :tags, preview_cards_status: :preview_card)
|
||||||
|
|
||||||
root date_detection: false do
|
root date_detection: false do
|
||||||
field(:id, type: 'long')
|
field(:id, type: 'long')
|
||||||
|
@ -62,6 +64,6 @@ class PublicStatusesIndex < Chewy::Index
|
||||||
field(:tags, type: 'text', analyzer: 'hashtag', value: ->(status) { status.tags.map(&:display_name) })
|
field(:tags, type: 'text', analyzer: 'hashtag', value: ->(status) { status.tags.map(&:display_name) })
|
||||||
field(:language, type: 'keyword')
|
field(:language, type: 'keyword')
|
||||||
field(:properties, type: 'keyword', value: ->(status) { status.searchable_properties })
|
field(:properties, type: 'keyword', value: ->(status) { status.searchable_properties })
|
||||||
field(:created_at, type: 'date')
|
field(:created_at, type: 'date', value: ->(status) { clamp_date(status.created_at) })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class StatusesIndex < Chewy::Index
|
class StatusesIndex < Chewy::Index
|
||||||
|
include DatetimeClampingConcern
|
||||||
|
|
||||||
settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: {
|
settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: {
|
||||||
filter: {
|
filter: {
|
||||||
english_stop: {
|
english_stop: {
|
||||||
|
@ -50,7 +52,7 @@ class StatusesIndex < Chewy::Index
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
index_scope ::Status.unscoped.kept.without_reblogs.includes(:media_attachments, :preview_cards, :local_mentioned, :local_favorited, :local_reblogged, :local_bookmarked, :tags, preloadable_poll: :local_voters), delete_if: ->(status) { status.searchable_by.empty? }
|
index_scope ::Status.unscoped.kept.without_reblogs.includes(:media_attachments, :local_mentioned, :local_favorited, :local_reblogged, :local_bookmarked, :tags, preview_cards_status: :preview_card, preloadable_poll: :local_voters), delete_if: ->(status) { status.searchable_by.empty? }
|
||||||
|
|
||||||
root date_detection: false do
|
root date_detection: false do
|
||||||
field(:id, type: 'long')
|
field(:id, type: 'long')
|
||||||
|
@ -60,6 +62,6 @@ class StatusesIndex < Chewy::Index
|
||||||
field(:searchable_by, type: 'long', value: ->(status) { status.searchable_by })
|
field(:searchable_by, type: 'long', value: ->(status) { status.searchable_by })
|
||||||
field(:language, type: 'keyword')
|
field(:language, type: 'keyword')
|
||||||
field(:properties, type: 'keyword', value: ->(status) { status.searchable_properties })
|
field(:properties, type: 'keyword', value: ->(status) { status.searchable_properties })
|
||||||
field(:created_at, type: 'date')
|
field(:created_at, type: 'date', value: ->(status) { clamp_date(status.created_at) })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class TagsIndex < Chewy::Index
|
class TagsIndex < Chewy::Index
|
||||||
|
include DatetimeClampingConcern
|
||||||
|
|
||||||
settings index: index_preset(refresh_interval: '30s'), analysis: {
|
settings index: index_preset(refresh_interval: '30s'), analysis: {
|
||||||
analyzer: {
|
analyzer: {
|
||||||
content: {
|
content: {
|
||||||
|
@ -42,6 +44,6 @@ class TagsIndex < Chewy::Index
|
||||||
field(:name, type: 'text', analyzer: 'content', value: :display_name) { field(:edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content') }
|
field(:name, type: 'text', analyzer: 'content', value: :display_name) { field(:edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content') }
|
||||||
field(:reviewed, type: 'boolean', value: ->(tag) { tag.reviewed? })
|
field(:reviewed, type: 'boolean', value: ->(tag) { tag.reviewed? })
|
||||||
field(:usage, type: 'long', value: ->(tag, crutches) { tag.history.aggregate(crutches.time_period).accounts })
|
field(:usage, type: 'long', value: ->(tag, crutches) { tag.history.aggregate(crutches.time_period).accounts })
|
||||||
field(:last_status_at, type: 'date', value: ->(tag) { tag.last_status_at || tag.created_at })
|
field(:last_status_at, type: 'date', value: ->(tag) { clamp_date(tag.last_status_at || tag.created_at) })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,15 +5,7 @@ class AboutController < ApplicationController
|
||||||
|
|
||||||
skip_before_action :require_functional!
|
skip_before_action :require_functional!
|
||||||
|
|
||||||
before_action :set_instance_presenter
|
|
||||||
|
|
||||||
def show
|
def show
|
||||||
expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in?
|
expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in?
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_instance_presenter
|
|
||||||
@instance_presenter = InstancePresenter.new
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,8 +18,6 @@ class AccountsController < ApplicationController
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html do
|
format.html do
|
||||||
expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.hour) unless user_signed_in?
|
expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.hour) unless user_signed_in?
|
||||||
|
|
||||||
@rss_url = rss_url
|
|
||||||
end
|
end
|
||||||
|
|
||||||
format.rss do
|
format.rss do
|
||||||
|
@ -52,7 +50,7 @@ class AccountsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def only_media_scope
|
def only_media_scope
|
||||||
Status.joins(:media_attachments).merge(@account.media_attachments.reorder(nil)).group(:id)
|
Status.joins(:media_attachments).merge(@account.media_attachments).group(:id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def no_replies_scope
|
def no_replies_scope
|
||||||
|
@ -84,29 +82,21 @@ class AccountsController < ApplicationController
|
||||||
short_account_url(@account, format: 'rss')
|
short_account_url(@account, format: 'rss')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
helper_method :rss_url
|
||||||
|
|
||||||
def media_requested?
|
def media_requested?
|
||||||
request.path.split('.').first.end_with?('/media') && !tag_requested?
|
path_without_format.end_with?('/media') && !tag_requested?
|
||||||
end
|
end
|
||||||
|
|
||||||
def replies_requested?
|
def replies_requested?
|
||||||
request.path.split('.').first.end_with?('/with_replies') && !tag_requested?
|
path_without_format.end_with?('/with_replies') && !tag_requested?
|
||||||
end
|
end
|
||||||
|
|
||||||
def tag_requested?
|
def tag_requested?
|
||||||
request.path.split('.').first.end_with?(Addressable::URI.parse("/tagged/#{params[:tag]}").normalize)
|
path_without_format.end_with?(Addressable::URI.parse("/tagged/#{params[:tag]}").normalize)
|
||||||
end
|
end
|
||||||
|
|
||||||
def cached_filtered_status_page
|
def path_without_format
|
||||||
cache_collection_paginated_by_id(
|
request.path.split('.').first
|
||||||
filtered_statuses,
|
|
||||||
Status,
|
|
||||||
PAGE_SIZE,
|
|
||||||
params_slice(:max_id, :min_id, :since_id)
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def params_slice(*keys)
|
|
||||||
params.slice(*keys).permit(*keys)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,7 +24,7 @@ class ActivityPub::FollowersSynchronizationsController < ActivityPub::BaseContro
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_items
|
def set_items
|
||||||
@items = @account.followers.where(Account.arel_table[:uri].matches("#{Account.sanitize_sql_like(uri_prefix)}/%", false, true)).or(@account.followers.where(uri: uri_prefix)).pluck(:uri)
|
@items = @account.followers.matches_uri_prefix(uri_prefix).pluck(:uri)
|
||||||
end
|
end
|
||||||
|
|
||||||
def collection_presenter
|
def collection_presenter
|
||||||
|
|
|
@ -24,7 +24,7 @@ class ActivityPub::InboxesController < ActivityPub::BaseController
|
||||||
|
|
||||||
def unknown_affected_account?
|
def unknown_affected_account?
|
||||||
json = Oj.load(body, mode: :strict)
|
json = Oj.load(body, mode: :strict)
|
||||||
json.is_a?(Hash) && %w(Delete Update).include?(json['type']) && json['actor'].present? && json['actor'] == value_or_id(json['object']) && !Account.where(uri: json['actor']).exists?
|
json.is_a?(Hash) && %w(Delete Update).include?(json['type']) && json['actor'].present? && json['actor'] == value_or_id(json['object']) && !Account.exists?(uri: json['actor'])
|
||||||
rescue Oj::ParseError
|
rescue Oj::ParseError
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,7 +21,7 @@ module Admin
|
||||||
account_action.save!
|
account_action.save!
|
||||||
|
|
||||||
if account_action.with_report?
|
if account_action.with_report?
|
||||||
redirect_to admin_reports_path, notice: I18n.t('admin.reports.processed_msg', id: params[:report_id])
|
redirect_to admin_reports_path, notice: I18n.t('admin.reports.processed_msg', id: resource_params[:report_id])
|
||||||
else
|
else
|
||||||
redirect_to admin_account_path(@account.id)
|
redirect_to admin_account_path(@account.id)
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,7 +16,7 @@ module Admin
|
||||||
@moderation_notes = @account.targeted_moderation_notes.latest
|
@moderation_notes = @account.targeted_moderation_notes.latest
|
||||||
@warnings = @account.strikes.custom.latest
|
@warnings = @account.strikes.custom.latest
|
||||||
|
|
||||||
render template: 'admin/accounts/show'
|
render 'admin/accounts/show'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ module Admin
|
||||||
|
|
||||||
def index
|
def index
|
||||||
authorize :audit_log, :index?
|
authorize :audit_log, :index?
|
||||||
@auditable_accounts = Account.where(id: Admin::ActionLog.reorder(nil).select('distinct account_id')).select(:id, :username)
|
@auditable_accounts = Account.auditable.select(:id, :username)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
module Admin
|
module Admin
|
||||||
class ConfirmationsController < BaseController
|
class ConfirmationsController < BaseController
|
||||||
before_action :set_user
|
before_action :set_user
|
||||||
before_action :check_confirmation, only: [:resend]
|
before_action :redirect_confirmed_user, only: [:resend], if: :user_confirmed?
|
||||||
|
|
||||||
def create
|
def create
|
||||||
authorize @user, :confirm?
|
authorize @user, :confirm?
|
||||||
@user.confirm!
|
@user.mark_email_as_confirmed!
|
||||||
log_action :confirm, @user
|
log_action :confirm, @user
|
||||||
redirect_to admin_accounts_path
|
redirect_to admin_accounts_path
|
||||||
end
|
end
|
||||||
|
@ -25,11 +25,13 @@ module Admin
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def check_confirmation
|
def redirect_confirmed_user
|
||||||
if @user.confirmed?
|
flash[:error] = I18n.t('admin.accounts.resend_confirmation.already_confirmed')
|
||||||
flash[:error] = I18n.t('admin.accounts.resend_confirmation.already_confirmed')
|
redirect_to admin_accounts_path
|
||||||
redirect_to admin_accounts_path
|
end
|
||||||
end
|
|
||||||
|
def user_confirmed?
|
||||||
|
@user.confirmed?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,7 +20,7 @@ class Admin::Disputes::AppealsController < Admin::BaseController
|
||||||
authorize @appeal, :approve?
|
authorize @appeal, :approve?
|
||||||
log_action :reject, @appeal
|
log_action :reject, @appeal
|
||||||
@appeal.reject!(current_account)
|
@appeal.reject!(current_account)
|
||||||
UserMailer.appeal_rejected(@appeal.account.user, @appeal)
|
UserMailer.appeal_rejected(@appeal.account.user, @appeal).deliver_later
|
||||||
redirect_to disputes_strike_path(@appeal.strike)
|
redirect_to disputes_strike_path(@appeal.strike)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ module Admin
|
||||||
|
|
||||||
# Disallow accidentally downgrading a domain block
|
# Disallow accidentally downgrading a domain block
|
||||||
if existing_domain_block.present? && !@domain_block.stricter_than?(existing_domain_block)
|
if existing_domain_block.present? && !@domain_block.stricter_than?(existing_domain_block)
|
||||||
@domain_block.save
|
@domain_block.validate
|
||||||
flash.now[:alert] = I18n.t('admin.domain_blocks.existing_domain_block_html', name: existing_domain_block.domain, unblock_url: admin_domain_block_path(existing_domain_block)).html_safe
|
flash.now[:alert] = I18n.t('admin.domain_blocks.existing_domain_block_html', name: existing_domain_block.domain, unblock_url: admin_domain_block_path(existing_domain_block)).html_safe
|
||||||
@domain_block.errors.delete(:domain)
|
@domain_block.errors.delete(:domain)
|
||||||
return render :new
|
return render :new
|
||||||
|
|
|
@ -38,9 +38,9 @@ module Admin
|
||||||
log_action :create, @email_domain_block
|
log_action :create, @email_domain_block
|
||||||
|
|
||||||
(@email_domain_block.other_domains || []).uniq.each do |domain|
|
(@email_domain_block.other_domains || []).uniq.each do |domain|
|
||||||
next if EmailDomainBlock.where(domain: domain).exists?
|
next if EmailDomainBlock.exists?(domain: domain)
|
||||||
|
|
||||||
other_email_domain_block = EmailDomainBlock.create!(domain: domain, parent: @email_domain_block)
|
other_email_domain_block = EmailDomainBlock.create!(domain: domain, allow_with_approval: @email_domain_block.allow_with_approval, parent: @email_domain_block)
|
||||||
log_action :create, other_email_domain_block
|
log_action :create, other_email_domain_block
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -65,7 +65,7 @@ module Admin
|
||||||
end
|
end
|
||||||
|
|
||||||
def resource_params
|
def resource_params
|
||||||
params.require(:email_domain_block).permit(:domain, other_domains: [])
|
params.require(:email_domain_block).permit(:domain, :allow_with_approval, other_domains: [])
|
||||||
end
|
end
|
||||||
|
|
||||||
def form_email_domain_block_batch_params
|
def form_email_domain_block_batch_params
|
||||||
|
|
|
@ -4,7 +4,7 @@ require 'csv'
|
||||||
|
|
||||||
module Admin
|
module Admin
|
||||||
class ExportDomainAllowsController < BaseController
|
class ExportDomainAllowsController < BaseController
|
||||||
include AdminExportControllerConcern
|
include Admin::ExportControllerConcern
|
||||||
|
|
||||||
before_action :set_dummy_import!, only: [:new]
|
before_action :set_dummy_import!, only: [:new]
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ require 'csv'
|
||||||
|
|
||||||
module Admin
|
module Admin
|
||||||
class ExportDomainBlocksController < BaseController
|
class ExportDomainBlocksController < BaseController
|
||||||
include AdminExportControllerConcern
|
include Admin::ExportControllerConcern
|
||||||
|
|
||||||
before_action :set_dummy_import!, only: [:new]
|
before_action :set_dummy_import!, only: [:new]
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ module Admin
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
|
|
||||||
@warning_domains = Instance.where(domain: @domain_blocks.map(&:domain)).where('EXISTS (SELECT 1 FROM follows JOIN accounts ON follows.account_id = accounts.id OR follows.target_account_id = accounts.id WHERE accounts.domain = instances.domain)').pluck(:domain)
|
@warning_domains = instances_from_imported_blocks.pluck(:domain)
|
||||||
rescue ActionController::ParameterMissing
|
rescue ActionController::ParameterMissing
|
||||||
flash.now[:alert] = I18n.t('admin.export_domain_blocks.no_file')
|
flash.now[:alert] = I18n.t('admin.export_domain_blocks.no_file')
|
||||||
set_dummy_import!
|
set_dummy_import!
|
||||||
|
@ -58,6 +58,10 @@ module Admin
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def instances_from_imported_blocks
|
||||||
|
Instance.with_domain_follows(@domain_blocks.map(&:domain))
|
||||||
|
end
|
||||||
|
|
||||||
def export_filename
|
def export_filename
|
||||||
'domain_blocks.csv'
|
'domain_blocks.csv'
|
||||||
end
|
end
|
||||||
|
@ -68,7 +72,7 @@ module Admin
|
||||||
|
|
||||||
def export_data
|
def export_data
|
||||||
CSV.generate(headers: export_headers, write_headers: true) do |content|
|
CSV.generate(headers: export_headers, write_headers: true) do |content|
|
||||||
DomainBlock.with_limitations.each do |instance|
|
DomainBlock.with_limitations.order(id: :asc).each do |instance|
|
||||||
content << [instance.domain, instance.severity, instance.reject_media, instance.reject_reports, instance.public_comment, instance.obfuscate]
|
content << [instance.domain, instance.severity, instance.reject_media, instance.reject_reports, instance.public_comment, instance.obfuscate]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,7 +8,7 @@ module Admin
|
||||||
authorize :follow_recommendation, :show?
|
authorize :follow_recommendation, :show?
|
||||||
|
|
||||||
@form = Form::AccountBatch.new
|
@form = Form::AccountBatch.new
|
||||||
@accounts = filtered_follow_recommendations
|
@accounts = filtered_follow_recommendations.page(params[:page])
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
|
|
@ -49,7 +49,7 @@ module Admin
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_instance
|
def set_instance
|
||||||
@instance = Instance.find(TagManager.instance.normalize_domain(params[:id]&.strip))
|
@instance = Instance.find_or_initialize_by(domain: TagManager.instance.normalize_domain(params[:id]&.strip))
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_instances
|
def set_instances
|
||||||
|
|
|
@ -24,7 +24,7 @@ module Admin
|
||||||
@relay.enable!
|
@relay.enable!
|
||||||
redirect_to admin_relays_path
|
redirect_to admin_relays_path
|
||||||
else
|
else
|
||||||
render action: :new
|
render :new
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ module Admin
|
||||||
@form = Admin::StatusBatchAction.new
|
@form = Admin::StatusBatchAction.new
|
||||||
@statuses = @report.statuses.with_includes
|
@statuses = @report.statuses.with_includes
|
||||||
|
|
||||||
render template: 'admin/reports/show'
|
render 'admin/reports/show'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,11 @@ module Admin
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def batched_ordered_status_edits
|
||||||
|
@status.edits.includes(:account, status: [:account]).find_each(order: :asc)
|
||||||
|
end
|
||||||
|
helper_method :batched_ordered_status_edits
|
||||||
|
|
||||||
def admin_status_batch_action_params
|
def admin_status_batch_action_params
|
||||||
params.require(:admin_status_batch_action).permit(status_ids: [])
|
params.require(:admin_status_batch_action).permit(status_ids: [])
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,9 +4,10 @@ class Api::BaseController < ApplicationController
|
||||||
DEFAULT_STATUSES_LIMIT = 20
|
DEFAULT_STATUSES_LIMIT = 20
|
||||||
DEFAULT_ACCOUNTS_LIMIT = 40
|
DEFAULT_ACCOUNTS_LIMIT = 40
|
||||||
|
|
||||||
include RateLimitHeaders
|
include Api::RateLimitHeaders
|
||||||
include AccessTokenTrackingConcern
|
include Api::AccessTokenTrackingConcern
|
||||||
include ApiCachingConcern
|
include Api::CachingConcern
|
||||||
|
include Api::ContentSecurityPolicy
|
||||||
|
|
||||||
skip_before_action :require_functional!, unless: :limited_federation_mode?
|
skip_before_action :require_functional!, unless: :limited_federation_mode?
|
||||||
|
|
||||||
|
@ -17,26 +18,6 @@ class Api::BaseController < ApplicationController
|
||||||
|
|
||||||
protect_from_forgery with: :null_session
|
protect_from_forgery with: :null_session
|
||||||
|
|
||||||
content_security_policy do |p|
|
|
||||||
# Set every directive that does not have a fallback
|
|
||||||
p.default_src :none
|
|
||||||
p.frame_ancestors :none
|
|
||||||
p.form_action :none
|
|
||||||
|
|
||||||
# Disable every directive with a fallback to cut on response size
|
|
||||||
p.base_uri false
|
|
||||||
p.font_src false
|
|
||||||
p.img_src false
|
|
||||||
p.style_src false
|
|
||||||
p.media_src false
|
|
||||||
p.frame_src false
|
|
||||||
p.manifest_src false
|
|
||||||
p.connect_src false
|
|
||||||
p.script_src false
|
|
||||||
p.child_src false
|
|
||||||
p.worker_src false
|
|
||||||
end
|
|
||||||
|
|
||||||
rescue_from ActiveRecord::RecordInvalid, Mastodon::ValidationError do |e|
|
rescue_from ActiveRecord::RecordInvalid, Mastodon::ValidationError do |e|
|
||||||
render json: { error: e.to_s }, status: 422
|
render json: { error: e.to_s }, status: 422
|
||||||
end
|
end
|
||||||
|
@ -83,7 +64,7 @@ class Api::BaseController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def doorkeeper_unauthorized_render_options(error: nil)
|
def doorkeeper_unauthorized_render_options(error: nil)
|
||||||
{ json: { error: (error.try(:description) || 'Not authorized') } }
|
{ json: { error: error.try(:description) || 'Not authorized' } }
|
||||||
end
|
end
|
||||||
|
|
||||||
def doorkeeper_forbidden_render_options(*)
|
def doorkeeper_forbidden_render_options(*)
|
||||||
|
@ -124,7 +105,11 @@ class Api::BaseController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def require_not_suspended!
|
def require_not_suspended!
|
||||||
render json: { error: 'Your login is currently disabled' }, status: 403 if current_user&.account&.suspended?
|
render json: { error: 'Your login is currently disabled' }, status: 403 if current_user&.account&.unavailable?
|
||||||
|
end
|
||||||
|
|
||||||
|
def require_valid_pagination_options!
|
||||||
|
render json: { error: 'Pagination values for `offset` and `limit` must be positive' }, status: 400 if pagination_options_invalid?
|
||||||
end
|
end
|
||||||
|
|
||||||
def require_user!
|
def require_user!
|
||||||
|
@ -155,6 +140,10 @@ class Api::BaseController < ApplicationController
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def pagination_options_invalid?
|
||||||
|
params.slice(:limit, :offset).values.map(&:to_i).any?(&:negative?)
|
||||||
|
end
|
||||||
|
|
||||||
def respond_with_error(code)
|
def respond_with_error(code)
|
||||||
render json: { error: Rack::Utils::HTTP_STATUS_CODES[code] }, status: code
|
render json: { error: Rack::Utils::HTTP_STATUS_CODES[code] }, status: code
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,6 +16,8 @@ class Api::V1::Accounts::CredentialsController < Api::BaseController
|
||||||
current_user.update(user_params) if user_params
|
current_user.update(user_params) if user_params
|
||||||
ActivityPub::UpdateDistributionWorker.perform_async(@account.id)
|
ActivityPub::UpdateDistributionWorker.perform_async(@account.id)
|
||||||
render json: @account, serializer: REST::CredentialAccountSerializer
|
render json: @account, serializer: REST::CredentialAccountSerializer
|
||||||
|
rescue ActiveRecord::RecordInvalid => e
|
||||||
|
render json: ValidationErrorFormatter.new(e).as_json, status: 422
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -12,7 +12,7 @@ class Api::V1::Accounts::FamiliarFollowersController < Api::BaseController
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_accounts
|
def set_accounts
|
||||||
@accounts = Account.without_suspended.where(id: account_ids).select('id, hide_collections').index_by(&:id).values_at(*account_ids).compact
|
@accounts = Account.without_suspended.where(id: account_ids).select('id, hide_collections')
|
||||||
end
|
end
|
||||||
|
|
||||||
def familiar_followers
|
def familiar_followers
|
||||||
|
|
|
@ -21,16 +21,16 @@ class Api::V1::Accounts::FollowerAccountsController < Api::BaseController
|
||||||
return [] if hide_results?
|
return [] if hide_results?
|
||||||
|
|
||||||
scope = default_accounts
|
scope = default_accounts
|
||||||
scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil? || current_account.id == @account.id
|
scope = scope.not_excluded_by_account(current_account) unless current_account.nil? || current_account.id == @account.id
|
||||||
scope.merge(paginated_follows).to_a
|
scope.merge(paginated_follows).to_a
|
||||||
end
|
end
|
||||||
|
|
||||||
def hide_results?
|
def hide_results?
|
||||||
@account.suspended? || (@account.hides_followers? && current_account&.id != @account.id) || (current_account && @account.blocking?(current_account))
|
@account.unavailable? || (@account.hides_followers? && current_account&.id != @account.id) || (current_account && @account.blocking?(current_account))
|
||||||
end
|
end
|
||||||
|
|
||||||
def default_accounts
|
def default_accounts
|
||||||
Account.includes(:active_relationships, :account_stat).references(:active_relationships)
|
Account.includes(:active_relationships, :account_stat, :user).references(:active_relationships)
|
||||||
end
|
end
|
||||||
|
|
||||||
def paginated_follows
|
def paginated_follows
|
||||||
|
|
|
@ -21,16 +21,16 @@ class Api::V1::Accounts::FollowingAccountsController < Api::BaseController
|
||||||
return [] if hide_results?
|
return [] if hide_results?
|
||||||
|
|
||||||
scope = default_accounts
|
scope = default_accounts
|
||||||
scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil? || current_account.id == @account.id
|
scope = scope.not_excluded_by_account(current_account) unless current_account.nil? || current_account.id == @account.id
|
||||||
scope.merge(paginated_follows).to_a
|
scope.merge(paginated_follows).to_a
|
||||||
end
|
end
|
||||||
|
|
||||||
def hide_results?
|
def hide_results?
|
||||||
@account.suspended? || (@account.hides_following? && current_account&.id != @account.id) || (current_account && @account.blocking?(current_account))
|
@account.unavailable? || (@account.hides_following? && current_account&.id != @account.id) || (current_account && @account.blocking?(current_account))
|
||||||
end
|
end
|
||||||
|
|
||||||
def default_accounts
|
def default_accounts
|
||||||
Account.includes(:passive_relationships, :account_stat).references(:passive_relationships)
|
Account.includes(:passive_relationships, :account_stat, :user).references(:passive_relationships)
|
||||||
end
|
end
|
||||||
|
|
||||||
def paginated_follows
|
def paginated_follows
|
||||||
|
|
|
@ -25,6 +25,6 @@ class Api::V1::Accounts::NotesController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def relationships_presenter
|
def relationships_presenter
|
||||||
AccountRelationshipsPresenter.new([@account.id], current_user.account_id)
|
AccountRelationshipsPresenter.new([@account], current_user.account_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,6 +25,6 @@ class Api::V1::Accounts::PinsController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def relationships_presenter
|
def relationships_presenter
|
||||||
AccountRelationshipsPresenter.new([@account.id], current_user.account_id)
|
AccountRelationshipsPresenter.new([@account], current_user.account_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,10 +5,8 @@ class Api::V1::Accounts::RelationshipsController < Api::BaseController
|
||||||
before_action :require_user!
|
before_action :require_user!
|
||||||
|
|
||||||
def index
|
def index
|
||||||
accounts = Account.without_suspended.where(id: account_ids).select('id')
|
@accounts = Account.where(id: account_ids).select(:id, :domain)
|
||||||
# .where doesn't guarantee that our results are in the same order
|
@accounts.merge!(Account.without_suspended) unless truthy_param?(:with_suspended)
|
||||||
# we requested them, so return the "right" order to the requestor.
|
|
||||||
@accounts = accounts.index_by(&:id).values_at(*account_ids).compact
|
|
||||||
render json: @accounts, each_serializer: REST::RelationshipSerializer, relationships: relationships
|
render json: @accounts, each_serializer: REST::RelationshipSerializer, relationships: relationships
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ class Api::V1::Accounts::StatusesController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_statuses
|
def load_statuses
|
||||||
@account.suspended? ? [] : cached_account_statuses
|
@account.unavailable? ? [] : cached_account_statuses
|
||||||
end
|
end
|
||||||
|
|
||||||
def cached_account_statuses
|
def cached_account_statuses
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class Api::V1::AccountsController < Api::BaseController
|
class Api::V1::AccountsController < Api::BaseController
|
||||||
|
include RegistrationHelper
|
||||||
|
|
||||||
before_action -> { authorize_if_got_token! :read, :'read:accounts' }, except: [:create, :follow, :unfollow, :remove_from_followers, :block, :unblock, :mute, :unmute]
|
before_action -> { authorize_if_got_token! :read, :'read:accounts' }, except: [:create, :follow, :unfollow, :remove_from_followers, :block, :unblock, :mute, :unmute]
|
||||||
before_action -> { doorkeeper_authorize! :follow, :write, :'write:follows' }, only: [:follow, :unfollow, :remove_from_followers]
|
before_action -> { doorkeeper_authorize! :follow, :write, :'write:follows' }, only: [:follow, :unfollow, :remove_from_followers]
|
||||||
before_action -> { doorkeeper_authorize! :follow, :write, :'write:mutes' }, only: [:mute, :unmute]
|
before_action -> { doorkeeper_authorize! :follow, :write, :'write:mutes' }, only: [:mute, :unmute]
|
||||||
|
@ -47,7 +49,7 @@ class Api::V1::AccountsController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def mute
|
def mute
|
||||||
MuteService.new.call(current_user.account, @account, notifications: truthy_param?(:notifications), duration: (params[:duration]&.to_i || 0))
|
MuteService.new.call(current_user.account, @account, notifications: truthy_param?(:notifications), duration: params[:duration].to_i)
|
||||||
render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships
|
render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -86,22 +88,18 @@ class Api::V1::AccountsController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def relationships(**options)
|
def relationships(**options)
|
||||||
AccountRelationshipsPresenter.new([@account.id], current_user.account_id, **options)
|
AccountRelationshipsPresenter.new([@account], current_user.account_id, **options)
|
||||||
end
|
end
|
||||||
|
|
||||||
def account_params
|
def account_params
|
||||||
params.permit(:username, :email, :password, :agreement, :locale, :reason, :time_zone)
|
params.permit(:username, :email, :password, :agreement, :locale, :reason, :time_zone, :invite_code)
|
||||||
|
end
|
||||||
|
|
||||||
|
def invite
|
||||||
|
Invite.find_by(code: params[:invite_code]) if params[:invite_code].present?
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_enabled_registrations
|
def check_enabled_registrations
|
||||||
forbidden if single_user_mode? || omniauth_only? || !allowed_registrations?
|
forbidden unless allowed_registration?(request.remote_ip, invite)
|
||||||
end
|
|
||||||
|
|
||||||
def allowed_registrations?
|
|
||||||
Setting.registrations_mode != 'none'
|
|
||||||
end
|
|
||||||
|
|
||||||
def omniauth_only?
|
|
||||||
ENV['OMNIAUTH_ONLY'] == 'true'
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -55,7 +55,7 @@ class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def resource_params
|
def resource_params
|
||||||
params.permit(:domain)
|
params.permit(:domain, :allow_with_approval)
|
||||||
end
|
end
|
||||||
|
|
||||||
def insert_pagination_headers
|
def insert_pagination_headers
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class Api::V1::AnnualReportsController < Api::BaseController
|
||||||
|
before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, only: :index
|
||||||
|
before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, except: :index
|
||||||
|
before_action :require_user!
|
||||||
|
before_action :set_annual_report, except: :index
|
||||||
|
|
||||||
|
def index
|
||||||
|
with_read_replica do
|
||||||
|
@presenter = AnnualReportsPresenter.new(GeneratedAnnualReport.where(account_id: current_account.id).pending)
|
||||||
|
@relationships = StatusRelationshipsPresenter.new(@presenter.statuses, current_account.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
render json: @presenter,
|
||||||
|
serializer: REST::AnnualReportsSerializer,
|
||||||
|
relationships: @relationships
|
||||||
|
end
|
||||||
|
|
||||||
|
def read
|
||||||
|
@annual_report.view!
|
||||||
|
render_empty
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def set_annual_report
|
||||||
|
@annual_report = GeneratedAnnualReport.find_by!(account_id: current_account.id, year: params[:id])
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,9 +1,9 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class Api::V1::Apps::CredentialsController < Api::BaseController
|
class Api::V1::Apps::CredentialsController < Api::BaseController
|
||||||
before_action -> { doorkeeper_authorize! :read }
|
|
||||||
|
|
||||||
def show
|
def show
|
||||||
render json: doorkeeper_token.application, serializer: REST::ApplicationSerializer, fields: %i(name website vapid_key)
|
return doorkeeper_render_error unless valid_doorkeeper_token?
|
||||||
|
|
||||||
|
render json: doorkeeper_token.application, serializer: REST::ApplicationSerializer, fields: %i(name website vapid_key client_id scopes)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,7 +17,7 @@ class Api::V1::BlocksController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def paginated_blocks
|
def paginated_blocks
|
||||||
@paginated_blocks ||= Block.eager_load(target_account: :account_stat)
|
@paginated_blocks ||= Block.eager_load(target_account: [:account_stat, :user])
|
||||||
.joins(:target_account)
|
.joins(:target_account)
|
||||||
.merge(Account.without_suspended)
|
.merge(Account.without_suspended)
|
||||||
.where(account: current_account)
|
.where(account: current_account)
|
||||||
|
|
|
@ -41,10 +41,10 @@ class Api::V1::ConversationsController < Api::BaseController
|
||||||
account: :account_stat,
|
account: :account_stat,
|
||||||
last_status: [
|
last_status: [
|
||||||
:media_attachments,
|
:media_attachments,
|
||||||
:preview_cards,
|
|
||||||
:status_stat,
|
:status_stat,
|
||||||
:tags,
|
:tags,
|
||||||
{
|
{
|
||||||
|
preview_cards_status: :preview_card,
|
||||||
active_mentions: [account: :account_stat],
|
active_mentions: [account: :account_stat],
|
||||||
account: :account_stat,
|
account: :account_stat,
|
||||||
},
|
},
|
||||||
|
|
|
@ -12,7 +12,7 @@ class Api::V1::DirectoriesController < Api::BaseController
|
||||||
private
|
private
|
||||||
|
|
||||||
def require_enabled!
|
def require_enabled!
|
||||||
return not_found unless Setting.profile_directory
|
not_found unless Setting.profile_directory
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_accounts
|
def set_accounts
|
||||||
|
@ -27,7 +27,7 @@ class Api::V1::DirectoriesController < Api::BaseController
|
||||||
scope.merge!(local_account_scope) if local_accounts?
|
scope.merge!(local_account_scope) if local_accounts?
|
||||||
scope.merge!(account_exclusion_scope) if current_account
|
scope.merge!(account_exclusion_scope) if current_account
|
||||||
scope.merge!(account_domain_block_scope) if current_account && !local_accounts?
|
scope.merge!(account_domain_block_scope) if current_account && !local_accounts?
|
||||||
end
|
end.includes(:account_stat, user: :role)
|
||||||
end
|
end
|
||||||
|
|
||||||
def local_accounts?
|
def local_accounts?
|
||||||
|
|
|
@ -25,7 +25,7 @@ class Api::V1::EndorsementsController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def endorsed_accounts
|
def endorsed_accounts
|
||||||
current_account.endorsed_accounts.includes(:account_stat).without_suspended
|
current_account.endorsed_accounts.includes(:account_stat, :user).without_suspended
|
||||||
end
|
end
|
||||||
|
|
||||||
def insert_pagination_headers
|
def insert_pagination_headers
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue