diff --git a/.eslintignore b/.eslintignore
index 4ed37ed78..ce0ef0026 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -933,6 +933,7 @@ packages/tools/setupNewRelease.js
packages/tools/spellcheck.js
packages/tools/tagServerLatest.js
packages/tools/tool-utils.js
+packages/tools/update-readme-contributors.js
packages/tools/update-readme-download.test.js
packages/tools/update-readme-download.js
packages/tools/update-readme-sponsors.js
diff --git a/.gitignore b/.gitignore
index dcd8b4e63..20bb83916 100644
--- a/.gitignore
+++ b/.gitignore
@@ -919,6 +919,7 @@ packages/tools/setupNewRelease.js
packages/tools/spellcheck.js
packages/tools/tagServerLatest.js
packages/tools/tool-utils.js
+packages/tools/update-readme-contributors.js
packages/tools/update-readme-download.test.js
packages/tools/update-readme-download.js
packages/tools/update-readme-sponsors.js
diff --git a/README.md b/README.md
index 0c56d1770..96f9a7564 100644
--- a/README.md
+++ b/README.md
@@ -587,78 +587,93 @@ Thank you to everyone who've contributed to Joplin's source code!
| | | | | |
| :---: | :---: | :---: | :---: | :---: |
-| [laurent22](https://github.com/laurent22) | [tessus](https://github.com/tessus) | [CalebJohn](https://github.com/CalebJohn) | [mic704b](https://github.com/mic704b) | [roman-r-m](https://github.com/roman-r-m) |
-| [genneko](https://github.com/genneko) | [j-krl](https://github.com/j-krl) | [tanrax](https://github.com/tanrax) | [naviji](https://github.com/naviji) | [PackElend](https://github.com/PackElend) |
-| [rtmkrlv](https://github.com/rtmkrlv) | [fmrtn](https://github.com/fmrtn) | [potatogim](https://github.com/potatogim) | [devonzuegel](https://github.com/devonzuegel) | [anjulalk](https://github.com/anjulalk) |
-| [gabcoh](https://github.com/gabcoh) | [matsest](https://github.com/matsest) | [abonte](https://github.com/abonte) | [Abijeet](https://github.com/Abijeet) | [ishantgupta777](https://github.com/ishantgupta777) |
-| [JackGruber](https://github.com/JackGruber) | [Ardakilic](https://github.com/Ardakilic) | [rabeehrz](https://github.com/rabeehrz) | [coderrsid](https://github.com/coderrsid) | [foxmask](https://github.com/foxmask) |
-| [innocuo](https://github.com/innocuo) | [Rahulm2310](https://github.com/Rahulm2310) | [readingsnail](https://github.com/readingsnail) | [mablin7](https://github.com/mablin7) | [XarisA](https://github.com/XarisA) |
-| [jonath92](https://github.com/jonath92) | [alexdevero](https://github.com/alexdevero) | [Runo-saduwa](https://github.com/Runo-saduwa) | [marcosvega91](https://github.com/marcosvega91) | [petrz12](https://github.com/petrz12) |
-| [rnbastos](https://github.com/rnbastos) | [ProgramFan](https://github.com/ProgramFan) | [zblesk](https://github.com/zblesk) | [vsimkus](https://github.com/vsimkus) | [moltenform](https://github.com/moltenform) |
-| [nishantwrp](https://github.com/nishantwrp) | [zuphilip](https://github.com/zuphilip) | [Rishabh-malhotraa](https://github.com/Rishabh-malhotraa) | [metbril](https://github.com/metbril) | [WhiredPlanck](https://github.com/WhiredPlanck) |
-| [milotype](https://github.com/milotype) | [yaozeye](https://github.com/yaozeye) | [ylc395](https://github.com/ylc395) | [RenatoXSR](https://github.com/RenatoXSR) | [RedDocMD](https://github.com/RedDocMD) |
-| [q1011](https://github.com/q1011) | [amitsin6h](https://github.com/amitsin6h) | [Atalanttore](https://github.com/Atalanttore) | [Mannivu](https://github.com/Mannivu) | [martonpaulo](https://github.com/martonpaulo) |
-| [mmahmoudian](https://github.com/mmahmoudian) | [rccavalcanti](https://github.com/rccavalcanti) | [ShaneKilkelly](https://github.com/ShaneKilkelly) | [sinkuu](https://github.com/sinkuu) | [stweil](https://github.com/stweil) |
-| [conyx](https://github.com/conyx) | [anihm136](https://github.com/anihm136) | [archont00](https://github.com/archont00) | [bradmcl](https://github.com/bradmcl) | [tfinnberg](https://github.com/tfinnberg) |
-| [amandamcg](https://github.com/amandamcg) | [marcushill](https://github.com/marcushill) | [nathanleiby](https://github.com/nathanleiby) | [RaphaelKimmig](https://github.com/RaphaelKimmig) | [Vaso3](https://github.com/Vaso3) |
-| [sensor-freak](https://github.com/sensor-freak) | [lkiThakur](https://github.com/lkiThakur) | [infinity052](https://github.com/infinity052) | [BartBucknill](https://github.com/BartBucknill) | [mrwulf](https://github.com/mrwulf) |
-| [chrisb86](https://github.com/chrisb86) | [chrmoritz](https://github.com/chrmoritz) | [Daeraxa](https://github.com/Daeraxa) | [Elaborendum](https://github.com/Elaborendum) | [ethan42411](https://github.com/ethan42411) |
-| [JOJ0](https://github.com/JOJ0) | [jalajcodes](https://github.com/jalajcodes) | [jblunck](https://github.com/jblunck) | [jdrobertso](https://github.com/jdrobertso) | [Jesssullivan](https://github.com/Jesssullivan) |
-| [jmontane](https://github.com/jmontane) | [johanhammar](https://github.com/johanhammar) | [solariz](https://github.com/solariz) | [maicki](https://github.com/maicki) | [mjjzf](https://github.com/mjjzf) |
-| [rt-oliveira](https://github.com/rt-oliveira) | [sebastienjust](https://github.com/sebastienjust) | [sealch](https://github.com/sealch) | [StarFang208](https://github.com/StarFang208) | [Subhra264](https://github.com/Subhra264) |
-| [SubodhDahal](https://github.com/SubodhDahal) | [TobiasDev](https://github.com/TobiasDev) | [Whaell](https://github.com/Whaell) | [jyuvaraj03](https://github.com/jyuvaraj03) | [kowalskidev](https://github.com/kowalskidev) |
-| [alexchee](https://github.com/alexchee) | [axq](https://github.com/axq) | [barbowza](https://github.com/barbowza) | [eresytter](https://github.com/eresytter) | [lightray22](https://github.com/lightray22) |
-| [lscolombo](https://github.com/lscolombo) | [mrkaato](https://github.com/mrkaato) | [pf-siedler](https://github.com/pf-siedler) | [ruuti](https://github.com/ruuti) | [s1nceri7y](https://github.com/s1nceri7y) |
-| [kornava](https://github.com/kornava) | [ShuiHuo](https://github.com/ShuiHuo) | [ikunya](https://github.com/ikunya) | [Ahmad45123](https://github.com/Ahmad45123) | [bedwardly-down](https://github.com/bedwardly-down) |
-| [dcaveiro](https://github.com/dcaveiro) | [hexclover](https://github.com/hexclover) | [2jaeyeol](https://github.com/2jaeyeol) | [thackeraaron](https://github.com/thackeraaron) | [aaronxn](https://github.com/aaronxn) |
-| [xUser5000](https://github.com/xUser5000) | [iamabhi222](https://github.com/iamabhi222) | [Aksh-Konda](https://github.com/Aksh-Konda) | [alanfortlink](https://github.com/alanfortlink) | [AverageUser2](https://github.com/AverageUser2) |
-| [afischer211](https://github.com/afischer211) | [a13xk](https://github.com/a13xk) | [apankratov](https://github.com/apankratov) | [teterkin](https://github.com/teterkin) | [avanderberg](https://github.com/avanderberg) |
-| [serenitatis](https://github.com/serenitatis) | [lex111](https://github.com/lex111) | [Alkindi42](https://github.com/Alkindi42) | [Jumanjii](https://github.com/Jumanjii) | [AlphaJack](https://github.com/AlphaJack) |
-| [Lord-Aman](https://github.com/Lord-Aman) | [richtwin567](https://github.com/richtwin567) | [ajilderda](https://github.com/ajilderda) | [adrynov](https://github.com/adrynov) | [andrewperry](https://github.com/andrewperry) |
-| [tekdel](https://github.com/tekdel) | [anshuman9999](https://github.com/anshuman9999) | [rasklaad](https://github.com/rasklaad) | [Technik-J](https://github.com/Technik-J) | [Shaxine](https://github.com/Shaxine) |
-| [antonio-ramadas](https://github.com/antonio-ramadas) | [heyapoorva](https://github.com/heyapoorva) | [assimd](https://github.com/assimd) | [Atrate](https://github.com/Atrate) | [Beowulf2](https://github.com/Beowulf2) |
-| [bimlas](https://github.com/bimlas) | [brenobaptista](https://github.com/brenobaptista) | [brttbndr](https://github.com/brttbndr) | [carlbordum](https://github.com/carlbordum) | [carlosedp](https://github.com/carlosedp) |
-| [chaifeng](https://github.com/chaifeng) | [charles-e](https://github.com/charles-e) | [cyy5358](https://github.com/cyy5358) | [Chillu1](https://github.com/Chillu1) | [Techwolf12](https://github.com/Techwolf12) |
-| [cloudtrends](https://github.com/cloudtrends) | [idcristi](https://github.com/idcristi) | [damienmascre](https://github.com/damienmascre) | [daniellandau](https://github.com/daniellandau) | [danil-tolkachev](https://github.com/danil-tolkachev) |
-| [darshani28](https://github.com/darshani28) | [daukadolt](https://github.com/daukadolt) | [NeverMendel](https://github.com/NeverMendel) | [dervist](https://github.com/dervist) | [diego-betto](https://github.com/diego-betto) |
-| [erdody](https://github.com/erdody) | [domgoodwin](https://github.com/domgoodwin) | [b4mboo](https://github.com/b4mboo) | [donbowman](https://github.com/donbowman) | [sirnacnud](https://github.com/sirnacnud) |
-| [dflock](https://github.com/dflock) | [drobilica](https://github.com/drobilica) | [educbraga](https://github.com/educbraga) | [eduardokimmel](https://github.com/eduardokimmel) | [VodeniZeko](https://github.com/VodeniZeko) |
-| [ei-ke](https://github.com/ei-ke) | [einverne](https://github.com/einverne) | [eodeluga](https://github.com/eodeluga) | [fathyar](https://github.com/fathyar) | [fer22f](https://github.com/fer22f) |
-| [fpindado](https://github.com/fpindado) | [FleischKarussel](https://github.com/FleischKarussel) | [talkdirty](https://github.com/talkdirty) | [gmaubach](https://github.com/gmaubach) | [gmag11](https://github.com/gmag11) |
-| [Jackymancs4](https://github.com/Jackymancs4) | [Glandos](https://github.com/Glandos) | [vibraniumdev](https://github.com/vibraniumdev) | [gusbemacbe](https://github.com/gusbemacbe) | [HOLLYwyh](https://github.com/HOLLYwyh) |
-| [Fvbor](https://github.com/Fvbor) | [bennetthanna](https://github.com/bennetthanna) | [harshitkathuria](https://github.com/harshitkathuria) | [Vistaus](https://github.com/Vistaus) | [ianjs](https://github.com/ianjs) |
-| [iahmedbacha](https://github.com/iahmedbacha) | [IrvinDominin](https://github.com/IrvinDominin) | [ishammahajan](https://github.com/ishammahajan) | [ffadilaputra](https://github.com/ffadilaputra) | [JRaiden16](https://github.com/JRaiden16) |
-| [jacobherrington](https://github.com/jacobherrington) | [jamesadjinwa](https://github.com/jamesadjinwa) | [jrwrigh](https://github.com/jrwrigh) | [jaredcrowe](https://github.com/jaredcrowe) | [volatilevar](https://github.com/volatilevar) |
-| [innkuika](https://github.com/innkuika) | [JoelRSimpson](https://github.com/JoelRSimpson) | [joeltaylor](https://github.com/joeltaylor) | [exic](https://github.com/exic) | [JonathanPlasse](https://github.com/JonathanPlasse) |
-| [joesfer](https://github.com/joesfer) | [joybinchen](https://github.com/joybinchen) | [kaustubhsh](https://github.com/kaustubhsh) | [y-usuzumi](https://github.com/y-usuzumi) | [xuhcc](https://github.com/xuhcc) |
-| [kirtanprht](https://github.com/kirtanprht) | [k0ur0x](https://github.com/k0ur0x) | [kklas](https://github.com/kklas) | [xmlangel](https://github.com/xmlangel) | [troilus](https://github.com/troilus) |
-| [lboullo0](https://github.com/lboullo0) | [dbinary](https://github.com/dbinary) | [marc-bouvier](https://github.com/marc-bouvier) | [mvonmaltitz](https://github.com/mvonmaltitz) | [mlkood](https://github.com/mlkood) |
-| [plextoriano](https://github.com/plextoriano) | [Marmo](https://github.com/Marmo) | [mcejp](https://github.com/mcejp) | [freaktechnik](https://github.com/freaktechnik) | [martinkorelic](https://github.com/martinkorelic) |
-| [Petemir](https://github.com/Petemir) | [matsair](https://github.com/matsair) | [mgroth0](https://github.com/mgroth0) | [silentmatt](https://github.com/silentmatt) | [maxs-test](https://github.com/maxs-test) |
-| [MichBoi](https://github.com/MichBoi) | [MichipX](https://github.com/MichipX) | [MrTraduttore](https://github.com/MrTraduttore) | [sanjarcode](https://github.com/sanjarcode) | [Mustafa-ALD](https://github.com/Mustafa-ALD) |
-| [NJannasch](https://github.com/NJannasch) | [zomglings](https://github.com/zomglings) | [Frichetten](https://github.com/Frichetten) | [nicolas-suzuki](https://github.com/nicolas-suzuki) | [Ouvill](https://github.com/Ouvill) |
-| [shorty2380](https://github.com/shorty2380) | [dist3r](https://github.com/dist3r) | [rakleed](https://github.com/rakleed) | [idle-code](https://github.com/idle-code) | [bobchao](https://github.com/bobchao) |
-| [Diadlo](https://github.com/Diadlo) | [pranavmodx](https://github.com/pranavmodx) | [R3dError](https://github.com/R3dError) | [rajprakash00](https://github.com/rajprakash00) | [rahil1304](https://github.com/rahil1304) |
-| [rasulkireev](https://github.com/rasulkireev) | [reinhart1010](https://github.com/reinhart1010) | [Retew](https://github.com/Retew) | [ambrt](https://github.com/ambrt) | [Derkades](https://github.com/Derkades) |
-| [fourstepper](https://github.com/fourstepper) | [rodgco](https://github.com/rodgco) | [Ronnie76er](https://github.com/Ronnie76er) | [roryokane](https://github.com/roryokane) | [ruzaq](https://github.com/ruzaq) |
-| [szokesandor](https://github.com/szokesandor) | [SamuelBlickle](https://github.com/SamuelBlickle) | [livingc0l0ur](https://github.com/livingc0l0ur) | [bronson](https://github.com/bronson) | [semperor](https://github.com/semperor) |
-| [shawnaxsom](https://github.com/shawnaxsom) | [SFoskitt](https://github.com/SFoskitt) | [kcrt](https://github.com/kcrt) | [xissy](https://github.com/xissy) | [tams](https://github.com/tams) |
-| [Tekki](https://github.com/Tekki) | [ThatcherC](https://github.com/ThatcherC) | [TheoDutch](https://github.com/TheoDutch) | [tbroadley](https://github.com/tbroadley) | [Kriechi](https://github.com/Kriechi) |
-| [tkilaker](https://github.com/tkilaker) | [Tim-Erwin](https://github.com/Tim-Erwin) | [tcyrus](https://github.com/tcyrus) | [tobias-grasse](https://github.com/tobias-grasse) | [strobeltobias](https://github.com/strobeltobias) |
-| [kostegit](https://github.com/kostegit) | [tbergeron](https://github.com/tbergeron) | [Ullas-Aithal](https://github.com/Ullas-Aithal) | [MyTheValentinus](https://github.com/MyTheValentinus) | [vassudanagunta](https://github.com/vassudanagunta) |
-| [vijayjoshi16](https://github.com/vijayjoshi16) | [max-keviv](https://github.com/max-keviv) | [vandreykiv](https://github.com/vandreykiv) | [WisdomCode](https://github.com/WisdomCode) | [xsak](https://github.com/xsak) |
-| [ymitsos](https://github.com/ymitsos) | [abolishallprivateproperty](https://github.com/abolishallprivateproperty) | [aerotog](https://github.com/aerotog) | [albertopasqualetto](https://github.com/albertopasqualetto) | [asrient](https://github.com/asrient) |
-| [bestlibre](https://github.com/bestlibre) | [boring10](https://github.com/boring10) | [cadolphs](https://github.com/cadolphs) | [colorchestra](https://github.com/colorchestra) | [cybertramp](https://github.com/cybertramp) |
-| [dartero](https://github.com/dartero) | [delta-emil](https://github.com/delta-emil) | [doc75](https://github.com/doc75) | [dsp77](https://github.com/dsp77) | [ebayer](https://github.com/ebayer) |
-| [elsiehupp](https://github.com/elsiehupp) | [espinosa](https://github.com/espinosa) | [exponentactivity](https://github.com/exponentactivity) | [exprez135](https://github.com/exprez135) | [fab4x](https://github.com/fab4x) |
-| [fabianski7](https://github.com/fabianski7) | [rasperepodvipodvert](https://github.com/rasperepodvipodvert) | [gasolin](https://github.com/gasolin) | [githubaccount073](https://github.com/githubaccount073) | [hms5232](https://github.com/hms5232) |
-| [hydrandt](https://github.com/hydrandt) | [iamtalwinder](https://github.com/iamtalwinder) | [jabdoa2](https://github.com/jabdoa2) | [jduar](https://github.com/jduar) | [jibedoubleve](https://github.com/jibedoubleve) |
-| [johanvanheusden](https://github.com/johanvanheusden) | [jtagcat](https://github.com/jtagcat) | [konhi](https://github.com/konhi) | [krzysiekwie](https://github.com/krzysiekwie) | [lighthousebulb](https://github.com/lighthousebulb) |
-| [luzpaz](https://github.com/luzpaz) | [majsterkovic](https://github.com/majsterkovic) | [mak2002](https://github.com/mak2002) | [nmiquan](https://github.com/nmiquan) | [nullpointer666](https://github.com/nullpointer666) |
-| [oscaretu](https://github.com/oscaretu) | [oskarsh](https://github.com/oskarsh) | [osso73](https://github.com/osso73) | [over-soul](https://github.com/over-soul) | [pensierocrea](https://github.com/pensierocrea) |
-| [pomeloy](https://github.com/pomeloy) | [rhtenhove](https://github.com/rhtenhove) | [rikanotank1](https://github.com/rikanotank1) | [rxliuli](https://github.com/rxliuli) | [simonsan](https://github.com/simonsan) |
-| [stellarpower](https://github.com/stellarpower) | [suixinio](https://github.com/suixinio) | [sumomo-99](https://github.com/sumomo-99) | [xtatsux](https://github.com/xtatsux) | [taw00](https://github.com/taw00) |
-| [tcassaert](https://github.com/tcassaert) | [victante](https://github.com/victante) | [Voltinus](https://github.com/Voltinus) | [xcffl](https://github.com/xcffl) | [yourcontact](https://github.com/yourcontact) |
-| [zaoyifan](https://github.com/zaoyifan) | [zawnk](https://github.com/zawnk) | [zen-quo](https://github.com/zen-quo) | [zozolina123](https://github.com/zozolina123) | [xcession](https://github.com/xcession) |
-| [paventyang](https://github.com/paventyang) | [jackytsu](https://github.com/jackytsu) | [zhangmx](https://github.com/zhangmx) | | |
+| [laurent22](https://github.com/laurent22) | [tessus](https://github.com/tessus) | [CalebJohn](https://github.com/CalebJohn) | [personalizedrefrigerator](https://github.com/personalizedrefrigerator) | [roman-r-m](https://github.com/roman-r-m) |
+| [miciasto](https://github.com/miciasto) | [ken1kob](https://github.com/ken1kob) | [genneko](https://github.com/genneko) | [Daeraxa](https://github.com/Daeraxa) | [tanrax](https://github.com/tanrax) |
+| [j-krl](https://github.com/j-krl) | [wh201906](https://github.com/wh201906) | [JackGruber](https://github.com/JackGruber) | [naviji](https://github.com/naviji) | [PackElend](https://github.com/PackElend) |
+| [julien-me](https://github.com/julien-me) | [pedr](https://github.com/pedr) | [potatogim](https://github.com/potatogim) | [JonatanWick](https://github.com/JonatanWick) | [Ardakilic](https://github.com/Ardakilic) |
+| [milotype](https://github.com/milotype) | [asrient](https://github.com/asrient) | [rtmkrlv](https://github.com/rtmkrlv) | [fmrtn](https://github.com/fmrtn) | [Mr-Kanister](https://github.com/Mr-Kanister) |
+| [palerdot](https://github.com/palerdot) | [matsest](https://github.com/matsest) | [devonzuegel](https://github.com/devonzuegel) | [anjulalk](https://github.com/anjulalk) | [gabcoh](https://github.com/gabcoh) |
+| [hubertfilho](https://github.com/hubertfilho) | [abonte](https://github.com/abonte) | [Abijeet](https://github.com/Abijeet) | [ishantgupta777](https://github.com/ishantgupta777) | [ScriptInfra](https://github.com/ScriptInfra) |
+| [jd1378](https://github.com/jd1378) | [rabeehrz](https://github.com/rabeehrz) | [coderrsid](https://github.com/coderrsid) | [mablin7](https://github.com/mablin7) | [jackytsu](https://github.com/jackytsu) |
+| [mak2002](https://github.com/mak2002) | [XarisA](https://github.com/XarisA) | [foxmask](https://github.com/foxmask) | [innocuo](https://github.com/innocuo) | [Rahulm2310](https://github.com/Rahulm2310) |
+| [Ahmad45123](https://github.com/Ahmad45123) | [jonath92](https://github.com/jonath92) | [readingsnail](https://github.com/readingsnail) | [xavivars](https://github.com/xavivars) | [rnbastos](https://github.com/rnbastos) |
+| [alexdevero](https://github.com/alexdevero) | [Elaborendum](https://github.com/Elaborendum) | [Mannivu](https://github.com/Mannivu) | [nishantwrp](https://github.com/nishantwrp) | [Runo-saduwa](https://github.com/Runo-saduwa) |
+| [shinglyu](https://github.com/shinglyu) | [Tolu-Mals](https://github.com/Tolu-Mals) | [marcosvega91](https://github.com/marcosvega91) | [mrkaato0](https://github.com/mrkaato0) | [petrz12](https://github.com/petrz12) |
+| [zblesk](https://github.com/zblesk) | [vsimkus](https://github.com/vsimkus) | [Vaso3](https://github.com/Vaso3) | [moltenform](https://github.com/moltenform) | [marph91](https://github.com/marph91) |
+| [zuphilip](https://github.com/zuphilip) | [Retr0ve](https://github.com/Retr0ve) | [Rishabh-malhotraa](https://github.com/Rishabh-malhotraa) | [metbril](https://github.com/metbril) | [SFulpius](https://github.com/SFulpius) |
+| [TaoK](https://github.com/TaoK) | [WhiredPlanck](https://github.com/WhiredPlanck) | [ProgramFan](https://github.com/ProgramFan) | [yaozeye](https://github.com/yaozeye) | [ylc395](https://github.com/ylc395) |
+| [amandamcg](https://github.com/amandamcg) | [leematos](https://github.com/leematos) | [RenatoXSR](https://github.com/RenatoXSR) | [RedDocMD](https://github.com/RedDocMD) | [t1011](https://github.com/t1011) |
+| [whalehub](https://github.com/whalehub) | [amitsin6h](https://github.com/amitsin6h) | [Atalanttore](https://github.com/Atalanttore) | [hieuthi](https://github.com/hieuthi) | [martonpaulo](https://github.com/martonpaulo) |
+| [mmahmoudian](https://github.com/mmahmoudian) | [bobchao](https://github.com/bobchao) | [rc2dev](https://github.com/rc2dev) | [Rishabhraghwendra18](https://github.com/Rishabhraghwendra18) | [sinkuu](https://github.com/sinkuu) |
+| [stweil](https://github.com/stweil) | [Subhra264](https://github.com/Subhra264) | [conyx](https://github.com/conyx) | [anihm136](https://github.com/anihm136) | [archont00](https://github.com/archont00) |
+| [bradmcl](https://github.com/bradmcl) | [jcgurango](https://github.com/jcgurango) | [mrkaato](https://github.com/mrkaato) | [tfinnberg](https://github.com/tfinnberg) | [adarsh-sgh](https://github.com/adarsh-sgh) |
+| [marcushill](https://github.com/marcushill) | [nathanleiby](https://github.com/nathanleiby) | [piotrb](https://github.com/piotrb) | [RaphaelKimmig](https://github.com/RaphaelKimmig) | [Wartijn](https://github.com/Wartijn) |
+| [xUser5000](https://github.com/xUser5000) | [serenitatis](https://github.com/serenitatis) | [k33pn3xtlvl](https://github.com/k33pn3xtlvl) | [antontkv](https://github.com/antontkv) | [infinity052](https://github.com/infinity052) |
+| [entrymaster](https://github.com/entrymaster) | [BartBucknill](https://github.com/BartBucknill) | [betty-alagwu](https://github.com/betty-alagwu) | [mrwulf](https://github.com/mrwulf) | [brttbndr](https://github.com/brttbndr) |
+| [cas--](https://github.com/cas--) | [chrisb86](https://github.com/chrisb86) | [chrmoritz](https://github.com/chrmoritz) | [djunho](https://github.com/djunho) | [daniellandau](https://github.com/daniellandau) |
+| [krote5k](https://github.com/krote5k) | [ethan42411](https://github.com/ethan42411) | [JOJ0](https://github.com/JOJ0) | [jalajcodes](https://github.com/jalajcodes) | [jblunck](https://github.com/jblunck) |
+| [jdrobertso](https://github.com/jdrobertso) | [Jesssullivan](https://github.com/Jesssullivan) | [jmontane](https://github.com/jmontane) | [johanhammar](https://github.com/johanhammar) | [krishna8421](https://github.com/krishna8421) |
+| [Linkosred](https://github.com/Linkosred) | [solariz](https://github.com/solariz) | [maicki](https://github.com/maicki) | [mjjzf](https://github.com/mjjzf) | [popovoleksandr](https://github.com/popovoleksandr) |
+| [Philipp91](https://github.com/Philipp91) | [rt-oliveira](https://github.com/rt-oliveira) | [sebastienjust](https://github.com/sebastienjust) | [sealch](https://github.com/sealch) | [StarFang208](https://github.com/StarFang208) |
+| [SubodhDahal](https://github.com/SubodhDahal) | [TobiasDev](https://github.com/TobiasDev) | [tmclo](https://github.com/tmclo) | [Whaell](https://github.com/Whaell) | [jyuvaraj03](https://github.com/jyuvaraj03) |
+| [kowalskidev](https://github.com/kowalskidev) | [alexchee](https://github.com/alexchee) | [axq](https://github.com/axq) | [balmag](https://github.com/balmag) | [barbowza](https://github.com/barbowza) |
+| [eresytter](https://github.com/eresytter) | [kik0220](https://github.com/kik0220) | [stingray-11](https://github.com/stingray-11) | [lscolombo](https://github.com/lscolombo) | [majsterkovic](https://github.com/majsterkovic) |
+| [pf-siedler](https://github.com/pf-siedler) | [ruuti](https://github.com/ruuti) | [s1nceri7y](https://github.com/s1nceri7y) | [kornava](https://github.com/kornava) | [sensor-freak](https://github.com/sensor-freak) |
+| [paventyang](https://github.com/paventyang) | [ShuiHuo](https://github.com/ShuiHuo) | [ikunya](https://github.com/ikunya) | [bedwardly-down](https://github.com/bedwardly-down) | [fstanis](https://github.com/fstanis) |
+| [sammyhori](https://github.com/sammyhori) | [hexclover](https://github.com/hexclover) | [2jaeyeol](https://github.com/2jaeyeol) | [thackeraaron](https://github.com/thackeraaron) | [AIbnuHIbban](https://github.com/AIbnuHIbban) |
+| [asalthobaity](https://github.com/asalthobaity) | [abhi-bhatra](https://github.com/abhi-bhatra) | [iamabhi222](https://github.com/iamabhi222) | [waditos](https://github.com/waditos) | [sandstone991](https://github.com/sandstone991) |
+| [Aksh-Konda](https://github.com/Aksh-Konda) | [alanfortlink](https://github.com/alanfortlink) | [alecmaly](https://github.com/alecmaly) | [AverageUser2](https://github.com/AverageUser2) | [adw2019](https://github.com/adw2019) |
+| [afischer211](https://github.com/afischer211) | [bablecopherye](https://github.com/bablecopherye) | [a13xk](https://github.com/a13xk) | [apankratov](https://github.com/apankratov) | [teterkin](https://github.com/teterkin) |
+| [avanderberg](https://github.com/avanderberg) | [lex111](https://github.com/lex111) | [Alkindi42](https://github.com/Alkindi42) | [Jumanjii](https://github.com/Jumanjii) | [AlphaJack](https://github.com/AlphaJack) |
+| [Lord-Aman](https://github.com/Lord-Aman) | [aminvakil](https://github.com/aminvakil) | [richtwin567](https://github.com/richtwin567) | [andrejilderda](https://github.com/andrejilderda) | [deining](https://github.com/deining) |
+| [adrynov](https://github.com/adrynov) | [andrewperry](https://github.com/andrewperry) | [tekdel](https://github.com/tekdel) | [fobo66](https://github.com/fobo66) | [andzs](https://github.com/andzs) |
+| [pandeymangg](https://github.com/pandeymangg) | [rasklaad](https://github.com/rasklaad) | [Shaxine](https://github.com/Shaxine) | [antonio-ramadas](https://github.com/antonio-ramadas) | [aprvsh](https://github.com/aprvsh) |
+| [aynp](https://github.com/aynp) | [assimd](https://github.com/assimd) | [Atrate](https://github.com/Atrate) | [austindoupnik](https://github.com/austindoupnik) | [BeeverTeeth](https://github.com/BeeverTeeth) |
+| [be-we](https://github.com/be-we) | [ei8fdb](https://github.com/ei8fdb) | [bimlas](https://github.com/bimlas) | [bishoy-magdy](https://github.com/bishoy-magdy) | [brad](https://github.com/brad) |
+| [brenobaptista](https://github.com/brenobaptista) | [CandleCandle](https://github.com/CandleCandle) | [carlbordum](https://github.com/carlbordum) | [carlosngo](https://github.com/carlosngo) | [carlosedp](https://github.com/carlosedp) |
+| [chaifeng](https://github.com/chaifeng) | [charles-e](https://github.com/charles-e) | [cyy53589](https://github.com/cyy53589) | [Chillu1](https://github.com/Chillu1) | [Techwolf12](https://github.com/Techwolf12) |
+| [christopher-o-toole](https://github.com/christopher-o-toole) | [cloudtrends](https://github.com/cloudtrends) | [idcristi](https://github.com/idcristi) | [damienmascre](https://github.com/damienmascre) | [da2x](https://github.com/da2x) |
+| [danielb2](https://github.com/danielb2) | [danil-tolkachev](https://github.com/danil-tolkachev) | [darshani28](https://github.com/darshani28) | [daukadolt](https://github.com/daukadolt) | [DavidBeale](https://github.com/DavidBeale) |
+| [NeverMendel](https://github.com/NeverMendel) | [Mr-DG-Wick](https://github.com/Mr-DG-Wick) | [DG0lden](https://github.com/DG0lden) | [deunlee](https://github.com/deunlee) | [diego-betto](https://github.com/diego-betto) |
+| [erdody](https://github.com/erdody) | [diragb](https://github.com/diragb) | [domgoodwin](https://github.com/domgoodwin) | [b4mboo](https://github.com/b4mboo) | [donbowman](https://github.com/donbowman) |
+| [DeeJayLSP](https://github.com/DeeJayLSP) | [sirnacnud](https://github.com/sirnacnud) | [dflock](https://github.com/dflock) | [drobilica](https://github.com/drobilica) | [educbraga](https://github.com/educbraga) |
+| [eduebernal](https://github.com/eduebernal) | [eduardokimmel](https://github.com/eduardokimmel) | [ei-ke](https://github.com/ei-ke) | [einverne](https://github.com/einverne) | [etho201](https://github.com/etho201) |
+| [eodeluga](https://github.com/eodeluga) | [fathyar](https://github.com/fathyar) | [Fejby](https://github.com/Fejby) | [fkinoshita](https://github.com/fkinoshita) | [fer22f](https://github.com/fer22f) |
+| [fpindado](https://github.com/fpindado) | [FleischKarussel](https://github.com/FleischKarussel) | [easyteacher](https://github.com/easyteacher) | [halkeye](https://github.com/halkeye) | [gmaubach](https://github.com/gmaubach) |
+| [gmag11](https://github.com/gmag11) | [Jackymancs4](https://github.com/Jackymancs4) | [gitstart](https://github.com/gitstart) | [Glandos](https://github.com/Glandos) | [ggteixeira](https://github.com/ggteixeira) |
+| [gusbemacbe](https://github.com/gusbemacbe) | [HOLLYwyh](https://github.com/HOLLYwyh) | [Fvbor](https://github.com/Fvbor) | [hamishmb](https://github.com/hamishmb) | [bennetthanna](https://github.com/bennetthanna) |
+| [graueneko](https://github.com/graueneko) | [harshitkathuria](https://github.com/harshitkathuria) | [Vistaus](https://github.com/Vistaus) | [gtlsgamr](https://github.com/gtlsgamr) | [horaceyoung](https://github.com/horaceyoung) |
+| [ianjs](https://github.com/ianjs) | [iahmedbacha](https://github.com/iahmedbacha) | [caseycs](https://github.com/caseycs) | [IrvinDominin](https://github.com/IrvinDominin) | [ishammahajan](https://github.com/ishammahajan) |
+| [ffadilaputra](https://github.com/ffadilaputra) | [Iwantgreencard](https://github.com/Iwantgreencard) | [j0hn-mc-clane](https://github.com/j0hn-mc-clane) | [JRaiden16](https://github.com/JRaiden16) | [jacobherrington](https://github.com/jacobherrington) |
+| [jamesadjinwa](https://github.com/jamesadjinwa) | [jrwrigh](https://github.com/jrwrigh) | [analogist](https://github.com/analogist) | [jaredcrowe](https://github.com/jaredcrowe) | [jasonwilliams](https://github.com/jasonwilliams) |
+| [volatilevar](https://github.com/volatilevar) | [innkuika](https://github.com/innkuika) | [JoelRSimpson](https://github.com/JoelRSimpson) | [joeltaylor](https://github.com/joeltaylor) | [thejohnfreeman](https://github.com/thejohnfreeman) |
+| [exic](https://github.com/exic) | [JonathanPlasse](https://github.com/JonathanPlasse) | [joschaschmiedt](https://github.com/joschaschmiedt) | [joesfer](https://github.com/joesfer) | [joserebelo](https://github.com/joserebelo) |
+| [joybinchen](https://github.com/joybinchen) | [Juvecu](https://github.com/Juvecu) | [KaneGreen](https://github.com/KaneGreen) | [kaustubhsh](https://github.com/kaustubhsh) | [y-usuzumi](https://github.com/y-usuzumi) |
+| [kevinshu1995](https://github.com/kevinshu1995) | [Kevin-vdberg](https://github.com/Kevin-vdberg) | [kkoyung](https://github.com/kkoyung) | [xuhcc](https://github.com/xuhcc) | [kirtanprht](https://github.com/kirtanprht) |
+| [k0ur0x](https://github.com/k0ur0x) | [kklas](https://github.com/kklas) | [xmlangel](https://github.com/xmlangel) | [Letty](https://github.com/Letty) | [troilus](https://github.com/troilus) |
+| [LightAPIs](https://github.com/LightAPIs) | [Longhao-Chen](https://github.com/Longhao-Chen) | [diogocaveiro](https://github.com/diogocaveiro) | [lboullo0](https://github.com/lboullo0) | [luisperezmarin](https://github.com/luisperezmarin) |
+| [MHolkamp](https://github.com/MHolkamp) | [marc-bouvier](https://github.com/marc-bouvier) | [mvonmaltitz](https://github.com/mvonmaltitz) | [mlkood](https://github.com/mlkood) | [plextoriano](https://github.com/plextoriano) |
+| [Marmo](https://github.com/Marmo) | [mcejp](https://github.com/mcejp) | [freaktechnik](https://github.com/freaktechnik) | [martinkorelic](https://github.com/martinkorelic) | [Petemir](https://github.com/Petemir) |
+| [matsair](https://github.com/matsair) | [MattDemers](https://github.com/MattDemers) | [mgroth0](https://github.com/mgroth0) | [silentmatt](https://github.com/silentmatt) | [maxs-test](https://github.com/maxs-test) |
+| [MichBoi](https://github.com/MichBoi) | [MikkCZ](https://github.com/MikkCZ) | [MichipX](https://github.com/MichipX) | [Elleo](https://github.com/Elleo) | [phucbm](https://github.com/phucbm) |
+| [miucci](https://github.com/miucci) | [MovingEarth](https://github.com/MovingEarth) | [MrTraduttore](https://github.com/MrTraduttore) | [sanjarcode](https://github.com/sanjarcode) | [Mustafa-ALD](https://github.com/Mustafa-ALD) |
+| [LeMyst](https://github.com/LeMyst) | [matmolni](https://github.com/matmolni) | [NJannasch](https://github.com/NJannasch) | [kna](https://github.com/kna) | [zomglings](https://github.com/zomglings) |
+| [nicholas-10](https://github.com/nicholas-10) | [nickhobbs94](https://github.com/nickhobbs94) | [Frichetten](https://github.com/Frichetten) | [nicolas-suzuki](https://github.com/nicolas-suzuki) | [Nicryc](https://github.com/Nicryc) |
+| [nik-gautam](https://github.com/nik-gautam) | [noah-nash](https://github.com/noah-nash) | [OmGole](https://github.com/OmGole) | [Ouvill](https://github.com/Ouvill) | [shorty2380](https://github.com/shorty2380) |
+| [dist3r](https://github.com/dist3r) | [rakleed](https://github.com/rakleed) | [idle-code](https://github.com/idle-code) | [Oaklight](https://github.com/Oaklight) | [Perkolator](https://github.com/Perkolator) |
+| [petzi53](https://github.com/petzi53) | [phitsc](https://github.com/phitsc) | [KowalskiPiotr98](https://github.com/KowalskiPiotr98) | [Polaris66](https://github.com/Polaris66) | [Diadlo](https://github.com/Diadlo) |
+| [pranavmodx](https://github.com/pranavmodx) | [R3dError](https://github.com/R3dError) | [rajprakash00](https://github.com/rajprakash00) | [rahil1304](https://github.com/rahil1304) | [rasulkireev](https://github.com/rasulkireev) |
+| [reinhart1010](https://github.com/reinhart1010) | [Retew](https://github.com/Retew) | [ambrt](https://github.com/ambrt) | [rio-codes](https://github.com/rio-codes) | [robmoffat](https://github.com/robmoffat) |
+| [Derkades](https://github.com/Derkades) | [fourstepper](https://github.com/fourstepper) | [rodgco](https://github.com/rodgco) | [Ronnie76er](https://github.com/Ronnie76er) | [roryokane](https://github.com/roryokane) |
+| [ruzaq](https://github.com/ruzaq) | [szokesandor](https://github.com/szokesandor) | [forsh4w](https://github.com/forsh4w) | [SamuelBlickle](https://github.com/SamuelBlickle) | [livingc0l0ur](https://github.com/livingc0l0ur) |
+| [bronson](https://github.com/bronson) | [sebthom](https://github.com/sebthom) | [semperor](https://github.com/semperor) | [SeptemberHX](https://github.com/SeptemberHX) | [shawnaxsom](https://github.com/shawnaxsom) |
+| [hurutoriya](https://github.com/hurutoriya) | [siddharthmagadum16](https://github.com/siddharthmagadum16) | [5idereal](https://github.com/5idereal) | [stephan-dev](https://github.com/stephan-dev) | [SFoskitt](https://github.com/SFoskitt) |
+| [stephanoskomnenos](https://github.com/stephanoskomnenos) | [WebSnke](https://github.com/WebSnke) | [kcrt](https://github.com/kcrt) | [xissy](https://github.com/xissy) | [tams](https://github.com/tams) |
+| [Tekki](https://github.com/Tekki) | [Teko-uy](https://github.com/Teko-uy) | [ThatcherC](https://github.com/ThatcherC) | [TheoDutch](https://github.com/TheoDutch) | [Theta-Dev](https://github.com/Theta-Dev) |
+| [ThibaultJanBeyer](https://github.com/ThibaultJanBeyer) | [tbroadley](https://github.com/tbroadley) | [Kriechi](https://github.com/Kriechi) | [tkilaker](https://github.com/tkilaker) | [Archelyst](https://github.com/Archelyst) |
+| [tcyrus](https://github.com/tcyrus) | [tobias-grasse](https://github.com/tobias-grasse) | [strobeltobias](https://github.com/strobeltobias) | [kostegit](https://github.com/kostegit) | [TomBursch](https://github.com/TomBursch) |
+| [tbergeron](https://github.com/tbergeron) | [tbjers](https://github.com/tbjers) | [trentlarson](https://github.com/trentlarson) | [Ullas-Aithal](https://github.com/Ullas-Aithal) | [vdeville](https://github.com/vdeville) |
+| [vassudanagunta](https://github.com/vassudanagunta) | [vijayjoshi16](https://github.com/vijayjoshi16) | [vjocw](https://github.com/vjocw) | [max-keviv](https://github.com/max-keviv) | [vandreykiv](https://github.com/vandreykiv) |
+| [warddr](https://github.com/warddr) | [westfalenyeti](https://github.com/westfalenyeti) | [WisdomCode](https://github.com/WisdomCode) | [X3NOOO](https://github.com/X3NOOO) | [xsak](https://github.com/xsak) |
+| | | | | |
diff --git a/packages/tools/update-readme-contributors.js b/packages/tools/update-readme-contributors.ts
similarity index 81%
rename from packages/tools/update-readme-contributors.js
rename to packages/tools/update-readme-contributors.ts
index 17801e9bc..dfd1a331f 100644
--- a/packages/tools/update-readme-contributors.js
+++ b/packages/tools/update-readme-contributors.ts
@@ -1,17 +1,21 @@
-'use strict';
-
const request = require('request');
+interface Contributor {
+ avatar_url: string;
+ login: string;
+ html_url: string;
+}
+
const readmePath = `${__dirname}/../../README.md`;
const { insertContentIntoFile } = require('./tool-utils.js');
-async function gitHubContributors(page) {
+async function gitHubContributors(page: number): Promise {
return new Promise((resolve, reject) => {
request.get({
url: `https://api.github.com/repos/laurent22/joplin/contributors${page ? `?page=${page}` : ''}`,
json: true,
headers: { 'User-Agent': 'Joplin Readme Updater' },
- }, (error, response, data) => {
+ }, (error: any, response: any, data: any) => {
if (error) {
reject(error);
} else if (response.statusCode !== 200) {
@@ -23,10 +27,10 @@ async function gitHubContributors(page) {
});
}
-function contributorTable(contributors) {
+function contributorTable(contributors: Contributor[]) {
const rows = [];
- let row = [];
+ let row: string[] = [];
rows.push(row);
const rowLength = 5;
let contributorIndex = 0;
@@ -65,7 +69,7 @@ function contributorTable(contributors) {
}
async function main() {
- let contributors = [];
+ let contributors: Contributor[] = [];
let pageIndex = 0;
const doneNames = [];
while (true) {
@@ -84,6 +88,10 @@ async function main() {
contributors = contributors.concat(temp);
}
+ contributors = contributors.filter(c => {
+ return !['joplinbot', 'renovate[bot]', 'github-actions[bot]'].includes(c.login);
+ });
+
const tableHtml = contributorTable(contributors);
await insertContentIntoFile(
@@ -94,7 +102,7 @@ async function main() {
);
}
-main(process.argv).catch((error) => {
+main().catch((error) => {
console.error('Fatal error', error);
process.exit(1);
});