Compare commits
3 Commits
2025.09.14
...
all-contri
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a9dedb8db | ||
|
|
fc1738a58b | ||
|
|
dbc95f3b7d |
@@ -5,12 +5,12 @@
|
||||
"repoHost": "https://github.com",
|
||||
"files": [
|
||||
"README.md",
|
||||
"includes/contributors.md"
|
||||
"docs/about/contributors.md"
|
||||
],
|
||||
"imageSize": 100,
|
||||
"commit": false,
|
||||
"commitConvention": "none",
|
||||
"contributorTemplate": "<% if (contributor.profile) { %><a rel=\"nofollow noopener noreferrer\" href=\"<%= contributor.profile %>\"><% } %><img src=\"<%= contributor.avatar_url %>\" width=\"<%= options.imageSize %>px;\" loading=lazy /><br /><sub><b><%= contributor.name %></b></sub><% if (contributor.profile) { %></a><% } %><br /><%= contributions %>",
|
||||
"contributorTemplate": "<a rel=\"nofollow noopener noreferrer\" href=\"<%= contributor.profile %>\"><img src=\"<%= contributor.avatar_url %>\" width=\"<%= options.imageSize %>px;\" loading=lazy/><br /><sub><b><%= contributor.name %></b></sub></a><br /><%= contributions %>",
|
||||
"contributors": [
|
||||
{
|
||||
"login": "jonaharagon",
|
||||
@@ -187,18 +187,6 @@
|
||||
"research"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "mfwmyfacewhen",
|
||||
"name": "mfwmyfacewhen",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/10137?v=4",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"ideas",
|
||||
"review",
|
||||
"research",
|
||||
"question"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "TommyTran732",
|
||||
"name": "Tommy",
|
||||
@@ -232,61 +220,7 @@
|
||||
"doc",
|
||||
"research",
|
||||
"ideas",
|
||||
"review",
|
||||
"blog"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "friadev",
|
||||
"name": "fria",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/138676274?v=4",
|
||||
"profile": "https://friadev.github.io/",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"review",
|
||||
"research",
|
||||
"question",
|
||||
"bug",
|
||||
"ideas"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "jordan-warne",
|
||||
"name": "jordan warne",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/154663344?v=4",
|
||||
"profile": "https://jordanwarne.net/",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"video",
|
||||
"research",
|
||||
"ideas",
|
||||
"question",
|
||||
"promotion"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "EmAtPrivacyGuides",
|
||||
"name": "Em",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/194856901?v=4",
|
||||
"profile": "https://github.com/EmAtPrivacyGuides",
|
||||
"contributions": [
|
||||
"blog",
|
||||
"promotion",
|
||||
"ideas"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "kpham42",
|
||||
"name": "Kevin Pham",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/123699355?v=4",
|
||||
"profile": "https://github.com/kpham42",
|
||||
"contributions": [
|
||||
"blog",
|
||||
"promotion",
|
||||
"question",
|
||||
"research",
|
||||
"ideas",
|
||||
"doc"
|
||||
"review"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -298,24 +232,6 @@
|
||||
"infra"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "triplebit",
|
||||
"name": "Triplebit",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/178061783?v=4",
|
||||
"profile": "https://www.triplebit.org/",
|
||||
"contributions": [
|
||||
"infra"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "magicgrants",
|
||||
"name": "MAGIC Grants",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/90805358?v=4",
|
||||
"profile": "https://magicgrants.org/",
|
||||
"contributions": [
|
||||
"business"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "netlify",
|
||||
"name": "Netlify",
|
||||
@@ -415,10 +331,7 @@
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/153316540?v=4",
|
||||
"profile": "https://github.com/rollsicecream",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"question",
|
||||
"translation",
|
||||
"review"
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -442,7 +355,7 @@
|
||||
{
|
||||
"login": "5amm",
|
||||
"name": "Sam Howell",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/10137?v=4",
|
||||
"avatar_url": "https://www.samhowell.uk/images/avatar-main.png",
|
||||
"profile": "https://www.samhowell.uk/",
|
||||
"contributions": [
|
||||
"blog"
|
||||
@@ -499,8 +412,7 @@
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/47955724?v=4",
|
||||
"profile": "https://github.com/taivlam",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"maintenance"
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -536,8 +448,8 @@
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/161974310?v=4",
|
||||
"profile": "https://github.com/redoomed1",
|
||||
"contributions": [
|
||||
"review",
|
||||
"doc"
|
||||
"doc",
|
||||
"review"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -582,10 +494,7 @@
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/6412153?v=4",
|
||||
"profile": "https://github.com/paulverbeke",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"translation",
|
||||
"bug",
|
||||
"mentoring"
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -660,6 +569,15 @@
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "crowdin-bot",
|
||||
"name": "Crowdin Bot",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/58779643?v=4",
|
||||
"profile": "https://github.com/crowdin-bot",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "datoshkr",
|
||||
"name": "datoshkr",
|
||||
@@ -693,12 +611,7 @@
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/30749146?v=4",
|
||||
"profile": "https://github.com/razac-elda",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"bug",
|
||||
"financial",
|
||||
"promotion",
|
||||
"question",
|
||||
"translation"
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -755,6 +668,15 @@
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "privacyguides-bot",
|
||||
"name": "Privacy Guides [bot]",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/112040067?v=4",
|
||||
"profile": "https://www.privacyguides.org/",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Perelandra0x309",
|
||||
"name": "Brian",
|
||||
@@ -770,8 +692,7 @@
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/8296104?v=4",
|
||||
"profile": "https://github.com/SkewedZeppelin",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"question"
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -798,8 +719,7 @@
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/8676443?v=4",
|
||||
"profile": "https://namazso.eu/",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"question"
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1672,11 +1592,7 @@
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/15004290?v=4",
|
||||
"profile": "https://github.com/ph00lt0",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"research",
|
||||
"promotion",
|
||||
"question",
|
||||
"review"
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1877,6 +1793,15 @@
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "imgbot[bot]",
|
||||
"name": "imgbot[bot]",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/in/4706?v=4",
|
||||
"profile": "https://github.com/apps/imgbot",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "jfabraxas",
|
||||
"name": "nein",
|
||||
@@ -1994,6 +1919,15 @@
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "aghorler",
|
||||
"name": "Aaron Horler",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/13065365?v=4",
|
||||
"profile": "https://aaronhorler.com/",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Commenter25",
|
||||
"name": "Commenter",
|
||||
@@ -2540,8 +2474,7 @@
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/13170204?v=4",
|
||||
"profile": "https://github.com/PoorPocketsMcNewHold",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"translation"
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2750,377 +2683,9 @@
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "dioxias",
|
||||
"name": "skye",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/48442092?v=4",
|
||||
"profile": "https://skye.sh/",
|
||||
"contributions": [
|
||||
"question"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "r2fo",
|
||||
"name": "r2fo",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/50496756?v=4",
|
||||
"profile": "https://github.com/r2fo",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "lamtrinhdev",
|
||||
"name": "LamTrinh.Dev",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/49742151?v=4",
|
||||
"profile": "https://lamtrinh.dev/",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"bug",
|
||||
"question"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "frostlike",
|
||||
"avatar_url": "https://forum-cdn.privacyguides.net/user_avatar/discuss.privacyguides.net/frostlike/288/3600_2.png",
|
||||
"profile": "https://discuss.privacyguides.net/u/frostlike",
|
||||
"contributions": [
|
||||
"question"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "merlinscholz",
|
||||
"name": "Merlin Scholz",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/21988035?v=4",
|
||||
"profile": "https://scholz.ruhr/",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "dzenan",
|
||||
"name": "Dženan",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/69632324?v=4",
|
||||
"profile": "https://github.com/Dzenan",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "jxtsai",
|
||||
"name": "jx tsai",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/8361268?v=4",
|
||||
"profile": "https://jxtsai.info",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "backstab5983",
|
||||
"name": "backstab5983",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/21013752?v=4",
|
||||
"profile": "https://github.com/backstab5983",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "antgig",
|
||||
"name": "antgig",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/144840521?v=4",
|
||||
"profile": "https://github.com/antgig",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "akosnikhazy",
|
||||
"name": "Ákos Nikházy",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/604311?v=4",
|
||||
"profile": "https://yzahk.in/",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "fmarier",
|
||||
"name": "Francois Marier",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/167821?v=4",
|
||||
"profile": "https://fmarier.org/",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "5-tom",
|
||||
"name": "5-tom",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/132141431?v=4",
|
||||
"profile": "https://filmsbytom.com/",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Ralphie0511",
|
||||
"name": "Ralphie0511",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/99518791?v=4",
|
||||
"profile": "https://github.com/Ralphie0511",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "aleksejs1",
|
||||
"name": "aleksejs1",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/5563309?v=4",
|
||||
"profile": "https://kovalovs.lv/",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "snwfdhmp",
|
||||
"name": "Martin",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/23099246?v=4",
|
||||
"profile": "https://github.com/snwfdhmp",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "overwatcheddude",
|
||||
"name": "Overwatch",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/37483931?v=4",
|
||||
"profile": "https://github.com/overwatcheddude",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "m00t316",
|
||||
"name": "Kieran Colfer",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/54213179?v=4",
|
||||
"profile": "https://github.com/m00t316",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "I-I-IT",
|
||||
"name": "Triple T",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/78900789?v=4",
|
||||
"profile": "https://github.com/I-I-IT",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "IDON-TEXIST",
|
||||
"name": "IDON-TEXIST",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/73442356?v=4",
|
||||
"profile": "https://github.com/IDON-TEXIST",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "yusuf-daglioglu",
|
||||
"name": "Yusuf Daglioglu",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/90555550?v=4",
|
||||
"profile": "https://github.com/yusuf-daglioglu",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "yikerman",
|
||||
"name": "Yi Cao",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/32544798?v=4",
|
||||
"profile": "https://ycao.net/",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "sdhlfqr",
|
||||
"name": "Sayf Dhū al-Faqār",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/155405590?v=4",
|
||||
"profile": "https://github.com/sdhlfqr",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "eylenburg",
|
||||
"name": "eylenburg",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/84839316?v=4",
|
||||
"profile": "https://github.com/eylenburg",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "PASSK3YS",
|
||||
"name": "Kieran Colfer",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/54213179?v=4",
|
||||
"profile": "https://github.com/PASSK3YS",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "SamsungGalaxyPlayer",
|
||||
"name": "Justin Ehrenhofer",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/12520755?v=4",
|
||||
"profile": "https://github.com/SamsungGalaxyPlayer",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"business",
|
||||
"fundingFinding"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "bruch-alex",
|
||||
"name": "Alex Bruch",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/173354246?v=4",
|
||||
"profile": "https://github.com/bruch-alex",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "qiyongzheng",
|
||||
"name": "qiyongzheng",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/153378707?v=4",
|
||||
"profile": "https://github.com/qiyongzheng",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "hashcatHitman",
|
||||
"name": "Sam K",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/155700084?v=4",
|
||||
"profile": "https://github.com/hashcatHitman",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"promotion",
|
||||
"question"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Spirizer",
|
||||
"name": "Spirizer",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/51120100?v=4",
|
||||
"profile": "https://github.com/Spirizer",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "jordbm",
|
||||
"name": "jordbm",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/160433264?v=4",
|
||||
"profile": "https://github.com/jordbm",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"maintenance",
|
||||
"security"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "austinhuang0131",
|
||||
"name": "Austin Huang",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/16656689?v=4",
|
||||
"profile": "https://austinhuang.me/",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"question"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "WardPearce",
|
||||
"name": "Ward",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/27844174?v=4",
|
||||
"profile": "https://github.com/WardPearce",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "oilmaint",
|
||||
"name": "oilmaint",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/79659024?v=4",
|
||||
"profile": "https://github.com/oilmaint",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "headdirt",
|
||||
"name": "headdirt",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/37009392?v=4",
|
||||
"profile": "https://github.com/headdirt",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "qmcree",
|
||||
"name": "Quentin McRee",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/7796024?v=4",
|
||||
"profile": "https://github.com/qmcree",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "sv3nnie",
|
||||
"name": "Sven",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/67653224?v=4",
|
||||
"profile": "https://github.com/sv3nnie",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "tomhonour",
|
||||
"name": "Tom Honour",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/132141431?v=4",
|
||||
"profile": "https://git.sr.ht/~tomhonour/",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "brog-io",
|
||||
"name": "Brogio",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/141176104?v=4",
|
||||
"profile": "https://brog.io/",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "nathany",
|
||||
"name": "Nathan Youngman",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/4566?v=4",
|
||||
"profile": "https://nathany.com/",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "blanchardjeremy",
|
||||
"name": "Jeremy",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/32290?v=4",
|
||||
"profile": "https://github.com/blanchardjeremy",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
}
|
||||
],
|
||||
"contributorsPerLine": 5,
|
||||
"contributorsPerLine": 6,
|
||||
"linkToUsage": true,
|
||||
"commitType": "docs"
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
:1337 {
|
||||
reverse_proxy /articles/* http://127.0.0.1:8001
|
||||
reverse_proxy /en/* http://127.0.0.1:8000
|
||||
redir / /en/
|
||||
}
|
||||
@@ -1,117 +1,8 @@
|
||||
// For format details, see https://aka.ms/devcontainer.json.
|
||||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
||||
// README at: https://github.com/devcontainers/templates/tree/main/src/python
|
||||
{
|
||||
"name": "Privacy Guides",
|
||||
"image": "ghcr.io/privacyguides/privacyguides.org:sha-5648a3f",
|
||||
// "build": {
|
||||
// "dockerfile": "../Dockerfile",
|
||||
// "context": ".."
|
||||
// },
|
||||
"overrideCommand": true,
|
||||
"portsAttributes": {
|
||||
"1337": {
|
||||
"label": "Website Live Preview",
|
||||
"onAutoForward": "notify"
|
||||
},
|
||||
"8000": {
|
||||
"label": "Main",
|
||||
"onAutoForward": "silent"
|
||||
},
|
||||
"8001": {
|
||||
"label": "Articles",
|
||||
"onAutoForward": "silent"
|
||||
}
|
||||
},
|
||||
"otherPortsAttributes": {
|
||||
"onAutoForward": "ignore"
|
||||
},
|
||||
"mounts": [
|
||||
"source=${env:HOME}${env:USERPROFILE}/.config,target=/root/.config,type=bind"
|
||||
],
|
||||
"updateContentCommand": "git submodule update --init theme/assets/brand",
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"settings": {
|
||||
"tasks": {
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Articles",
|
||||
"type": "shell",
|
||||
"command": "mkdocs serve --config-file=mkdocs.blog.yml --dev-addr=localhost:8001",
|
||||
"group": "test",
|
||||
"runOptions": {
|
||||
"runOn": "folderOpen"
|
||||
},
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "dedicated",
|
||||
"group": "Live server"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Main",
|
||||
"type": "shell",
|
||||
"command": "./run.sh --cmd=mkdocs --insiders",
|
||||
"group": "test",
|
||||
"runOptions": {
|
||||
"runOn": "folderOpen"
|
||||
},
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "dedicated",
|
||||
"group": "Live server",
|
||||
"focus": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Caddy",
|
||||
"type": "shell",
|
||||
"command": "caddy run --config .devcontainer/Caddyfile",
|
||||
"group": "test",
|
||||
"runOptions": {
|
||||
"runOn": "folderOpen"
|
||||
},
|
||||
"presentation": {
|
||||
"reveal": "never",
|
||||
"panel": "dedicated"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"extensions": [
|
||||
"EditorConfig.EditorConfig",
|
||||
"DavidAnson.vscode-markdownlint",
|
||||
"wholroyd.jinja",
|
||||
"mikestead.dotenv",
|
||||
"redhat.vscode-yaml",
|
||||
"ecmel.vscode-html-css",
|
||||
"yzhang.markdown-all-in-one",
|
||||
"bierner.markdown-checkbox",
|
||||
"bierner.markdown-emoji",
|
||||
"bierner.markdown-footnotes",
|
||||
"bierner.markdown-preview-github-styles",
|
||||
"esbenp.prettier-vscode",
|
||||
"ltex-plus.vscode-ltex-plus",
|
||||
"ms-python.python",
|
||||
"github.vscode-github-actions",
|
||||
"matthewpi.caddyfile-support",
|
||||
"ms-vsliveshare.vsliveshare"
|
||||
]
|
||||
},
|
||||
"codespaces": {
|
||||
"repositories": {
|
||||
"privacyguides/mkdocs-material-insiders": {
|
||||
"permissions": {
|
||||
"content": "read"
|
||||
}
|
||||
},
|
||||
"privacyguides/brand": {
|
||||
"permissions": {
|
||||
"content": "read"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"name": "Privacy Guides",
|
||||
"image": "ghcr.io/squidfunk/mkdocs-material:9.5.17",
|
||||
"forwardPorts": [8000],
|
||||
"postCreateCommand": "git submodule init; git submodule update theme/assets/brand; apk add bash; /bin/bash run.sh --cmd=mkdocs --cmd_flags=--dev-addr=0.0.0.0:8000"
|
||||
}
|
||||
|
||||
8
.devcontainer/team/devcontainer.json
Normal file
@@ -0,0 +1,8 @@
|
||||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
||||
// README at: https://github.com/devcontainers/templates/tree/main/src/python
|
||||
{
|
||||
"name": "Privacy Guides Team",
|
||||
"image": "ghcr.io/privacyguides/privacyguides.org:main",
|
||||
"forwardPorts": [8000],
|
||||
"postCreateCommand": "git submodule init; git submodule update theme/assets/brand; ./run.sh --cmd=mkdocs --insiders --production --cmd_flags=--dev-addr=0.0.0.0:8000"
|
||||
}
|
||||
63
.github/CODEOWNERS
vendored
@@ -1,66 +1,15 @@
|
||||
# Org
|
||||
# High-traffic pages
|
||||
/docs/index.md @jonaharagon @dngray
|
||||
/theme/overrides/ @jonaharagon
|
||||
|
||||
# Org
|
||||
/docs/about/ @jonaharagon
|
||||
CODE_OF_CONDUCT.md @jonaharagon
|
||||
CITATION.cff @jonaharagon
|
||||
LICENSE @jonaharagon @dngray
|
||||
LICENSE-CODE @jonaharagon
|
||||
CITATION.cff
|
||||
LICENSE @jonaharagon
|
||||
README.md @jonaharagon @dngray
|
||||
|
||||
# Config
|
||||
|
||||
/mkdocs.yml @jonaharagon
|
||||
/mkdocs.blog.yml @jonaharagon
|
||||
/crowdin.yml @jonaharagon
|
||||
/includes/ @jonaharagon
|
||||
|
||||
# Ops
|
||||
|
||||
Dockerfile @jonaharagon
|
||||
/Pipfile @jonaharagon
|
||||
/Pipfile.lock @jonaharagon
|
||||
/.github/ @jonaharagon
|
||||
/run.sh @jonaharagon
|
||||
/modules/ @jonaharagon
|
||||
|
||||
# High-traffic pages
|
||||
|
||||
/blog/index.md @jonaharagon @freddy-m
|
||||
/docs/index.md @jonaharagon @dngray
|
||||
/theme/home.html @jonaharagon @dngray
|
||||
/theme/main.html @jonaharagon
|
||||
/theme/blog-post.html @jonaharagon
|
||||
/theme/partials/ @jonaharagon
|
||||
/theme/layouts/ @jonaharagon
|
||||
|
||||
# Financial-Related
|
||||
|
||||
/docs/about/donate.md @jonaharagon @SamsungGalaxyPlayer
|
||||
/docs/cryptocurrency.md @jonaharagon @SamsungGalaxyPlayer
|
||||
/docs/financial-services.md @jonaharagon @SamsungGalaxyPlayer
|
||||
/docs/advanced/payments.md @jonaharagon @SamsungGalaxyPlayer
|
||||
|
||||
# Blog authors
|
||||
|
||||
/blog/.authors.yml @jonaharagon @dngray @freddy-m
|
||||
/blog/author/ @jonaharagon @dngray @freddy-m
|
||||
/blog/author/dngray.md @dngray
|
||||
/blog/author/freddy.md @freddy-m
|
||||
/blog/author/jonah.md @jonaharagon
|
||||
/blog/author/niek-de-wilde.md @blacklight447
|
||||
|
||||
# Blog posts
|
||||
|
||||
/blog/posts/ @jonaharagon
|
||||
/blog/posts/firefox-privacy-2021-update.md @dngray
|
||||
/blog/posts/firefox-privacy.md @jonaharagon
|
||||
/blog/posts/hide-nothing.md @freddy-m
|
||||
/blog/posts/macos-ventura-privacy-security-updates.md @jonaharagon
|
||||
/blog/posts/move-fast-and-break-things.md @freddy-m
|
||||
/blog/posts/mozilla-disappoints-us-yet-again-2.md @jonaharagon
|
||||
/blog/posts/privacy-guides-partners-with-magic-grants-501-c-3.md @jonaharagon
|
||||
/blog/posts/proton-wallet-review.md @jonaharagon
|
||||
/blog/posts/restrict-act.md @jonaharagon
|
||||
/blog/posts/the-trouble-with-vpn-and-privacy-review-sites.md @jonaharagon
|
||||
/blog/posts/virtual-insanity.md @freddy-m
|
||||
/blog/posts/welcome-to-privacy-guides.md @jonaharagon
|
||||
|
||||
18
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,14 +1,24 @@
|
||||
List of changes proposed in this PR:
|
||||
Changes proposed in this PR:
|
||||
|
||||
-
|
||||
|
||||
<!--
|
||||
<!-- SCROLL TO BOTTOM TO AGREE!:
|
||||
Please use a descriptive title for your PR, it will be included in our changelog!
|
||||
|
||||
If you are making changes that you have a conflict of interest with, you MUST
|
||||
If you are making changes that you have a conflict of interest with, please
|
||||
disclose this as well (this does not disqualify your PR by any means):
|
||||
|
||||
Conflict of interest contributions involve contributing about yourself,
|
||||
family, friends, clients, employers, or your financial and other relationships.
|
||||
ANY external relationship can trigger a conflict of interest.
|
||||
Any external relationship can trigger a conflict of interest.
|
||||
-->
|
||||
|
||||
<!-- Place an x in the boxes below, like: [x] -->
|
||||
- [ ] I have disclosed any relevant conflicts of interest in my post.
|
||||
- [ ] I agree to grant Privacy Guides a perpetual, worldwide, non-exclusive, transferable, royalty-free, irrevocable license with the right to sublicense such rights through multiple tiers of sublicensees, to reproduce, modify, display, perform, relicense, and distribute my contribution as part of this project.
|
||||
- [ ] I am the sole author of this work. <!-- Do not check this box if you are not -->
|
||||
- [ ] I agree to the [Community Code of Conduct](https://www.privacyguides.org/coc).
|
||||
|
||||
<!-- What's this? When you submit a PR, you keep the Copyright for the work you
|
||||
are contributing. We need you to agree to the above terms in order for us to
|
||||
publish this contribution to our website. -->
|
||||
|
||||
77
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
# Copyright (c) 2021-2023 Jonah Aragon <jonah@triplebit.net>
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
# IN THE SOFTWARE.
|
||||
|
||||
version: 2
|
||||
|
||||
registries:
|
||||
github-privacyguides:
|
||||
type: git
|
||||
url: https://github.com
|
||||
username: x-access-token
|
||||
password: ${{secrets.REPO_PAT}}
|
||||
|
||||
updates:
|
||||
# Maintain dependencies for GitHub Actions
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "monthly"
|
||||
assignees:
|
||||
- "jonaharagon"
|
||||
reviewers:
|
||||
- "jonaharagon"
|
||||
labels:
|
||||
- "fix:github_actions"
|
||||
|
||||
# Maintain submodules
|
||||
- package-ecosystem: "gitsubmodule"
|
||||
directory: "/"
|
||||
registries:
|
||||
- github-privacyguides
|
||||
schedule:
|
||||
interval: "monthly"
|
||||
labels:
|
||||
- "fix:submodules"
|
||||
|
||||
- package-ecosystem: "devcontainers"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
|
||||
- package-ecosystem: "docker"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
# Disabled because some updates tend to remove needed dependencies for some reason
|
||||
|
||||
# # Maintain dependencies for pipenv
|
||||
# - package-ecosystem: "pip"
|
||||
# directory: "/"
|
||||
# insecure-external-code-execution: allow
|
||||
# registries:
|
||||
# - github-privacyguides
|
||||
# schedule:
|
||||
# interval: "daily"
|
||||
# assignees:
|
||||
# - "jonaharagon"
|
||||
# reviewers:
|
||||
# - "jonaharagon"
|
||||
# labels:
|
||||
# - "fix:python"
|
||||
116
.github/workflows/build-blog.yml
vendored
@@ -1,116 +0,0 @@
|
||||
name: 🛠️ Build Blog
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
ref:
|
||||
required: true
|
||||
type: string
|
||||
repo:
|
||||
required: true
|
||||
type: string
|
||||
context:
|
||||
type: string
|
||||
default: deploy-preview
|
||||
continue-on-error:
|
||||
type: boolean
|
||||
default: true
|
||||
privileged:
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: ${{ inputs.continue-on-error }}
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- name: Add GitHub Token to Environment
|
||||
run: |
|
||||
echo "GH_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Download Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ inputs.repo }}
|
||||
ref: ${{ inputs.ref }}
|
||||
persist-credentials: "false"
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download Submodules
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: repo-*
|
||||
path: modules
|
||||
|
||||
- name: Move mkdocs-material-insiders to mkdocs-material
|
||||
if: inputs.privileged
|
||||
run: |
|
||||
rmdir modules/mkdocs-material
|
||||
mv modules/repo-mkdocs-material-insiders modules/mkdocs-material
|
||||
|
||||
- name: Move brand submodule to theme/assets/brand
|
||||
run: |
|
||||
rmdir theme/assets/brand
|
||||
mv modules/repo-brand theme/assets/brand
|
||||
|
||||
- name: Install Python (pipenv)
|
||||
if: inputs.privileged
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
cache: "pipenv"
|
||||
|
||||
- name: Install Python (no pipenv)
|
||||
if: ${{ !inputs.privileged }}
|
||||
uses: actions/setup-python@v5
|
||||
|
||||
- name: Install Python Dependencies
|
||||
if: inputs.privileged
|
||||
run: |
|
||||
pip install pipenv
|
||||
pipenv install
|
||||
sudo apt install pngquant
|
||||
|
||||
- name: Install Python Dependencies (Unprivileged)
|
||||
if: ${{ !inputs.privileged }}
|
||||
run: |
|
||||
pip install mkdocs-material mkdocs-rss-plugin mkdocs-glightbox mkdocs-macros-plugin
|
||||
sudo apt install pngquant
|
||||
|
||||
- name: Set base navigation URLs for production build
|
||||
if: inputs.context == 'production'
|
||||
run: |
|
||||
{
|
||||
echo "MAIN_SITE_BASE_URL=https://www.privacyguides.org/en/"
|
||||
echo "MAIN_SITE_ABOUT_URL=https://www.privacyguides.org/en/about/"
|
||||
echo "MAIN_SITE_RECOMMENDATIONS_URL=https://www.privacyguides.org/en/tools/"
|
||||
echo "MAIN_SITE_KNOWLEDGE_BASE_URL=https://www.privacyguides.org/en/basics/why-privacy-matters/"
|
||||
echo "ARTICLES_SITE_BASE_URL=https://www.privacyguides.org/articles/"
|
||||
echo "VIDEOS_SITE_BASE_URL=https://www.privacyguides.org/videos/"
|
||||
} >> "$GITHUB_ENV"
|
||||
|
||||
- name: Build Website (Privileged)
|
||||
if: inputs.privileged
|
||||
run: |
|
||||
pipenv run mkdocs build --config-file mkdocs.blog.yml
|
||||
|
||||
- name: Build Website (Unprivileged)
|
||||
if: ${{ !inputs.privileged }}
|
||||
run: |
|
||||
BUILD_INSIDERS=false mkdocs build --config-file mkdocs.blog.yml
|
||||
|
||||
- name: Package Website
|
||||
run: |
|
||||
tar -czf site-build-blog.tar.gz site
|
||||
|
||||
- name: Upload Site
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: site-build-blog.tar.gz
|
||||
path: site-build-blog.tar.gz
|
||||
retention-days: 1
|
||||
17
.github/workflows/build-container.yml
vendored
@@ -1,7 +1,9 @@
|
||||
name: ☁️ Build Container
|
||||
|
||||
# Configures this workflow to run every release.
|
||||
# Configures this workflow to run every time a change is pushed to the branch called `release`.
|
||||
on:
|
||||
push:
|
||||
branches: ["main"]
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
@@ -53,7 +55,7 @@ jobs:
|
||||
|
||||
# Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@v3.3.0
|
||||
uses: docker/login-action@v3.1.0
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
@@ -73,25 +75,16 @@ jobs:
|
||||
flavor: |
|
||||
latest=${{ github.event_name == 'release' }}
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
# This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
|
||||
# It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
|
||||
# It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v6.9.0
|
||||
uses: docker/build-push-action@v5.3.0
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
platforms: linux/amd64,linux/arm64
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
cleanup:
|
||||
if: ${{ always() }}
|
||||
|
||||
47
.github/workflows/build-pr.yml
vendored
@@ -19,19 +19,12 @@ jobs:
|
||||
env:
|
||||
ACTIONS_SSH_KEY: ${{ secrets.ACTIONS_SSH_KEY }}
|
||||
steps:
|
||||
- name: Save PR metadata
|
||||
run: |
|
||||
mkdir -p ./metadata
|
||||
echo ${{ github.event.number }} > ./metadata/NR
|
||||
echo ${{ github.event.pull_request.head.sha }} > ./metadata/SHA
|
||||
|
||||
- name: Set submodules for fork
|
||||
if: env.ACTIONS_SSH_KEY == ''
|
||||
id: submodules-fork
|
||||
run: |
|
||||
echo 'submodules={"repo":["brand","i18n"]}' >> "$GITHUB_OUTPUT"
|
||||
echo "privileged=false" >> "$GITHUB_OUTPUT"
|
||||
echo "false" > ./metadata/PRIVILEGED
|
||||
|
||||
- name: Set submodules for main repo
|
||||
if: env.ACTIONS_SSH_KEY != ''
|
||||
@@ -39,7 +32,12 @@ jobs:
|
||||
run: |
|
||||
echo 'submodules={"repo":["brand","i18n","mkdocs-material-insiders"]}' >> "$GITHUB_OUTPUT"
|
||||
echo "privileged=true" >> "$GITHUB_OUTPUT"
|
||||
echo "true" > ./metadata/PRIVILEGED
|
||||
|
||||
- name: Save PR metadata
|
||||
run: |
|
||||
mkdir -p ./metadata
|
||||
echo ${{ github.event.number }} > ./metadata/NR
|
||||
echo ${{ github.event.pull_request.head.sha }} > ./metadata/SHA
|
||||
|
||||
- name: Upload metadata as artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
@@ -71,16 +69,13 @@ jobs:
|
||||
lang: en
|
||||
continue-on-error: false
|
||||
privileged: ${{ fromJSON(needs.metadata.outputs.privileged) }}
|
||||
strict: true
|
||||
secrets:
|
||||
RO_DISCOURSE_API_KEY: ${{ secrets.RO_DISCOURSE_API_KEY }}
|
||||
|
||||
build_i18n:
|
||||
if: ${{ contains(github.event.pull_request.labels.*.name, 'ci:build i18n') }}
|
||||
needs: [submodule, metadata]
|
||||
strategy:
|
||||
matrix:
|
||||
lang: [es, fr, he, it, nl, ru, zh-Hant, zh-TW]
|
||||
lang: [es, fr, he, it, nl, ru, zh-Hant]
|
||||
fail-fast: false
|
||||
uses: ./.github/workflows/build.yml
|
||||
with:
|
||||
@@ -89,35 +84,13 @@ jobs:
|
||||
lang: ${{ matrix.lang }}
|
||||
continue-on-error: true
|
||||
privileged: ${{ fromJSON(needs.metadata.outputs.privileged) }}
|
||||
strict: true
|
||||
|
||||
build_blog:
|
||||
if: ${{ contains(github.event.pull_request.labels.*.name, 'ci:build blog') }}
|
||||
needs: [submodule, metadata]
|
||||
uses: ./.github/workflows/build-blog.yml
|
||||
with:
|
||||
ref: ${{github.event.pull_request.head.ref}}
|
||||
repo: ${{github.event.pull_request.head.repo.full_name}}
|
||||
continue-on-error: true
|
||||
privileged: ${{ fromJSON(needs.metadata.outputs.privileged) }}
|
||||
|
||||
build_zimfile:
|
||||
if: ${{ contains(github.event.pull_request.labels.*.name, 'ci:build zimfile') }}
|
||||
needs: [submodule, metadata]
|
||||
uses: ./.github/workflows/build-zimfile.yml
|
||||
with:
|
||||
ref: ${{github.event.pull_request.head.ref}}
|
||||
repo: ${{github.event.pull_request.head.repo.full_name}}
|
||||
secrets:
|
||||
RO_DISCOURSE_API_KEY: ${{ secrets.RO_DISCOURSE_API_KEY }}
|
||||
|
||||
combine_build:
|
||||
needs: [build_english, build_i18n, build_blog]
|
||||
needs: [build_english, build_i18n]
|
||||
if: |
|
||||
(always() && !cancelled() && !failure()) &&
|
||||
needs.build_english.result == 'success' &&
|
||||
(needs.build_i18n.result == 'success' || needs.build_i18n.result == 'skipped') &&
|
||||
(needs.build_blog.result == 'success' || needs.build_blog.result == 'skipped')
|
||||
(needs.build_i18n.result == 'success' || needs.build_i18n.result == 'skipped')
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -139,5 +112,5 @@ jobs:
|
||||
|
||||
cleanup:
|
||||
if: ${{ always() }}
|
||||
needs: [build_english, build_i18n, build_blog, build_zimfile]
|
||||
needs: [build_english, build_i18n]
|
||||
uses: privacyguides/.github/.github/workflows/cleanup.yml@main
|
||||
|
||||
603
.github/workflows/build-zimfile.yml
vendored
@@ -1,603 +0,0 @@
|
||||
name: 🥝 Build Zimfile
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
ref:
|
||||
required: true
|
||||
type: string
|
||||
repo:
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
RO_DISCOURSE_API_KEY:
|
||||
required: false
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
VIDEOS_SITE_BASE_URL: https://www.privacyguides.org/videos/
|
||||
HOMEPAGE_CTA_ABOUT_LINK: about.html
|
||||
HOMEPAGE_CTA_DONATE_LINK: about/donate.html
|
||||
BUILD_OFFLINE: true
|
||||
PRODUCTION: true
|
||||
CARDS: false
|
||||
GITREVISIONDATE: false
|
||||
GITAUTHORS: false
|
||||
|
||||
jobs:
|
||||
package_eng:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
LANGUAGE_SWITCHER: false
|
||||
MAIN_SITE_BASE_URL: /en/index.html
|
||||
MAIN_SITE_ABOUT_URL: /en/about.html
|
||||
MAIN_SITE_RECOMMENDATIONS_URL: /en/tools.html
|
||||
MAIN_SITE_KNOWLEDGE_BASE_URL: /en/basics/why-privacy-matters.html
|
||||
ARTICLES_SITE_BASE_URL: /articles/index.html
|
||||
|
||||
steps:
|
||||
- name: Add GitHub Token to Environment
|
||||
run: |
|
||||
echo "GH_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Download Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ inputs.repo }}
|
||||
ref: ${{ inputs.ref }}
|
||||
persist-credentials: "false"
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download Submodules
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: repo-*
|
||||
path: modules
|
||||
|
||||
- name: Move mkdocs-material-insiders to mkdocs-material
|
||||
run: |
|
||||
rmdir modules/mkdocs-material
|
||||
mv modules/repo-mkdocs-material-insiders modules/mkdocs-material
|
||||
|
||||
- name: Move brand submodule to theme/assets/brand
|
||||
run: |
|
||||
rmdir theme/assets/brand
|
||||
mv modules/repo-brand theme/assets/brand
|
||||
|
||||
- name: Install Python (pipenv)
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
cache: "pipenv"
|
||||
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
pip install pipenv
|
||||
pipenv install
|
||||
sudo apt install pngquant
|
||||
|
||||
- name: Generate Donating Members List
|
||||
continue-on-error: true
|
||||
env:
|
||||
DISCOURSE_API_KEY: ${{ secrets.RO_DISCOURSE_API_KEY }}
|
||||
run: |
|
||||
pip install requests
|
||||
python tools/generate-members.py > includes/members.md
|
||||
|
||||
- name: Build English
|
||||
run: |
|
||||
./run.sh --build --production --insiders --offline --lang=en
|
||||
|
||||
- name: Delete Unreferenced Assets
|
||||
run: |
|
||||
bash tools/delete-unreferenced.sh
|
||||
env:
|
||||
ASSETS_DIR: site/en/assets
|
||||
SEARCH_DIR: site/en
|
||||
|
||||
- name: Run generate-topics.sh for top posts
|
||||
run: |
|
||||
bash tools/generate-topics.sh \
|
||||
--source='https://discuss.privacyguides.net/top.json?period=weekly' \
|
||||
--tag="top posts" \
|
||||
--destination="./site/en/index.html" \
|
||||
--count=3
|
||||
|
||||
- name: Run generate-topics.sh for latest posts
|
||||
run: |
|
||||
bash tools/generate-topics.sh \
|
||||
--source='https://discuss.privacyguides.net/latest.json' \
|
||||
--tag="latest posts" \
|
||||
--destination="./site/en/index.html" \
|
||||
--count=12
|
||||
|
||||
- name: Build Articles
|
||||
run: |
|
||||
pipenv run mkdocs build --config-file mkdocs.blog.yml
|
||||
|
||||
- name: Delete Unreferenced Assets
|
||||
run: |
|
||||
bash tools/delete-unreferenced.sh
|
||||
env:
|
||||
ASSETS_DIR: site/articles/assets
|
||||
SEARCH_DIR: site/articles
|
||||
|
||||
- name: Remove Duplicate Files
|
||||
run: |
|
||||
cd site && bash ../tools/symlink-duplicates.sh
|
||||
ln -s en/index.html index.html
|
||||
ln -s en/about/notices.html license
|
||||
cd ..
|
||||
|
||||
- name: Set zimfile name
|
||||
run: |
|
||||
echo "ZIMFILE_NAME=privacyguides.org_en_all_$(date +%Y)-$(date +%m).zim" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Create ZIM File
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/openzim/zim-tools:3.1.3
|
||||
options: -v ${{ github.workspace }}:/data
|
||||
run: |
|
||||
zimwriterfs \
|
||||
-w index.html \
|
||||
-I en/assets/brand/logos/png/square/pg-yellow.png \
|
||||
-l eng \
|
||||
-t "Privacy Guides" \
|
||||
-d "Your central privacy and security resource to protect yourself online." \
|
||||
-c "Privacy Guides" \
|
||||
-p "Privacy Guides" \
|
||||
-e "https://www.privacyguides.org" \
|
||||
-n "privacyguides.org_en_all" \
|
||||
/data/site/ /data/${{ env.ZIMFILE_NAME }}
|
||||
|
||||
- name: Upload ZIM File
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.ZIMFILE_NAME }}
|
||||
name: ${{ env.ZIMFILE_NAME }}
|
||||
compression-level: 0
|
||||
|
||||
- name: Run zimcheck
|
||||
uses: addnab/docker-run-action@v3
|
||||
continue-on-error: true
|
||||
with:
|
||||
image: ghcr.io/openzim/zim-tools:3.1.3
|
||||
options: -v ${{ github.workspace }}:/data
|
||||
run: |
|
||||
zimcheck /data/${{ env.ZIMFILE_NAME }}
|
||||
|
||||
package_eng_kb:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
LANGUAGE_SWITCHER: false
|
||||
ARTICLES_SITE_BASE_URL: https://www.privacyguides.org/articles/
|
||||
|
||||
steps:
|
||||
- name: Add GitHub Token to Environment
|
||||
run: |
|
||||
echo "GH_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Download Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ inputs.repo }}
|
||||
ref: ${{ inputs.ref }}
|
||||
persist-credentials: "false"
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download Submodules
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: repo-*
|
||||
path: modules
|
||||
|
||||
- name: Move mkdocs-material-insiders to mkdocs-material
|
||||
run: |
|
||||
rmdir modules/mkdocs-material
|
||||
mv modules/repo-mkdocs-material-insiders modules/mkdocs-material
|
||||
|
||||
- name: Move brand submodule to theme/assets/brand
|
||||
run: |
|
||||
rmdir theme/assets/brand
|
||||
mv modules/repo-brand theme/assets/brand
|
||||
|
||||
- name: Install Python (pipenv)
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
cache: "pipenv"
|
||||
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
pip install pipenv
|
||||
pipenv install
|
||||
sudo apt install pngquant
|
||||
|
||||
- name: Generate Donating Members List
|
||||
continue-on-error: true
|
||||
env:
|
||||
DISCOURSE_API_KEY: ${{ secrets.RO_DISCOURSE_API_KEY }}
|
||||
run: |
|
||||
pip install requests
|
||||
python tools/generate-members.py > includes/members.md
|
||||
|
||||
- name: Build English
|
||||
run: |
|
||||
./run.sh --build --production --insiders --offline --lang=en
|
||||
|
||||
- name: Run generate-topics.sh for top posts
|
||||
run: |
|
||||
bash tools/generate-topics.sh \
|
||||
--source='https://discuss.privacyguides.net/top.json?period=weekly' \
|
||||
--tag="top posts" \
|
||||
--destination="./site/en/index.html" \
|
||||
--count=3
|
||||
|
||||
- name: Run generate-topics.sh for latest posts
|
||||
run: |
|
||||
bash tools/generate-topics.sh \
|
||||
--source='https://discuss.privacyguides.net/latest.json' \
|
||||
--tag="latest posts" \
|
||||
--destination="./site/en/index.html" \
|
||||
--count=12
|
||||
|
||||
- name: Delete Unreferenced Assets
|
||||
run: |
|
||||
bash tools/delete-unreferenced.sh
|
||||
env:
|
||||
ASSETS_DIR: site/en/assets
|
||||
SEARCH_DIR: site/en
|
||||
|
||||
- name: Remove Duplicate Files
|
||||
run: |
|
||||
cd site && bash ../tools/symlink-duplicates.sh
|
||||
ln -s en/index.html index.html
|
||||
ln -s en/about/notices.html license
|
||||
cd ..
|
||||
|
||||
- name: Set zimfile name
|
||||
run: |
|
||||
echo "ZIMFILE_NAME=privacyguides.org_en_kb_$(date +%Y)-$(date +%m).zim" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Create ZIM File
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/openzim/zim-tools:3.1.3
|
||||
options: -v ${{ github.workspace }}:/data
|
||||
run: |
|
||||
zimwriterfs \
|
||||
-w index.html \
|
||||
-I en/assets/brand/logos/png/square/pg-yellow.png \
|
||||
-l eng \
|
||||
-t "Privacy Guides" \
|
||||
-d "Knowledge base articles and recommendations from Privacy Guides." \
|
||||
-c "Privacy Guides" \
|
||||
-p "Privacy Guides" \
|
||||
-e "https://www.privacyguides.org" \
|
||||
-n "privacyguides.org_en_kb" \
|
||||
/data/site/ /data/${{ env.ZIMFILE_NAME }}
|
||||
|
||||
- name: Upload ZIM File
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.ZIMFILE_NAME }}
|
||||
name: ${{ env.ZIMFILE_NAME }}
|
||||
compression-level: 0
|
||||
|
||||
- name: Run zimcheck
|
||||
uses: addnab/docker-run-action@v3
|
||||
continue-on-error: true
|
||||
with:
|
||||
image: ghcr.io/openzim/zim-tools:3.1.3
|
||||
options: -v ${{ github.workspace }}:/data
|
||||
run: |
|
||||
zimcheck /data/${{ env.ZIMFILE_NAME }}
|
||||
|
||||
package_eng_articles:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
MAIN_SITE_BASE_URL: https://www.privacyguides.org/en/
|
||||
MAIN_SITE_ABOUT_URL: https://www.privacyguides.org/en/about/
|
||||
MAIN_SITE_RECOMMENDATIONS_URL: https://www.privacyguides.org/en/tools/
|
||||
MAIN_SITE_KNOWLEDGE_BASE_URL: https://www.privacyguides.org/en/basics/
|
||||
|
||||
steps:
|
||||
- name: Add GitHub Token to Environment
|
||||
run: |
|
||||
echo "GH_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Download Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ inputs.repo }}
|
||||
ref: ${{ inputs.ref }}
|
||||
persist-credentials: "false"
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download Submodules
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: repo-*
|
||||
path: modules
|
||||
|
||||
- name: Move mkdocs-material-insiders to mkdocs-material
|
||||
run: |
|
||||
rmdir modules/mkdocs-material
|
||||
mv modules/repo-mkdocs-material-insiders modules/mkdocs-material
|
||||
|
||||
- name: Move brand submodule to theme/assets/brand
|
||||
run: |
|
||||
rmdir theme/assets/brand
|
||||
mv modules/repo-brand theme/assets/brand
|
||||
|
||||
- name: Install Python (pipenv)
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
cache: "pipenv"
|
||||
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
pip install pipenv
|
||||
pipenv install
|
||||
sudo apt install pngquant
|
||||
|
||||
- name: Build Articles
|
||||
run: |
|
||||
pipenv run mkdocs build --config-file mkdocs.blog.yml
|
||||
|
||||
- name: Delete Unreferenced Assets
|
||||
run: |
|
||||
bash tools/delete-unreferenced.sh
|
||||
env:
|
||||
ASSETS_DIR: site/articles/assets
|
||||
SEARCH_DIR: site/articles
|
||||
|
||||
- name: Remove Duplicate Files
|
||||
run: |
|
||||
cd site && bash ../tools/symlink-duplicates.sh
|
||||
ln -s articles/index.html index.html
|
||||
cd ..
|
||||
|
||||
- name: Set zimfile name
|
||||
run: |
|
||||
echo "ZIMFILE_NAME=privacyguides.org_en_articles_$(date +%Y)-$(date +%m).zim" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Create ZIM File
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/openzim/zim-tools:3.1.3
|
||||
options: -v ${{ github.workspace }}:/data
|
||||
run: |
|
||||
zimwriterfs \
|
||||
-w index.html \
|
||||
-I articles/assets/brand/logos/png/square/pg-yellow.png \
|
||||
-l eng \
|
||||
-t "Privacy Guides" \
|
||||
-d "Long-form articles from the Privacy Guides team and other contributors." \
|
||||
-c "Privacy Guides" \
|
||||
-p "Privacy Guides" \
|
||||
-e "https://www.privacyguides.org" \
|
||||
-n "privacyguides.org_en_articles" \
|
||||
/data/site/ /data/${{ env.ZIMFILE_NAME }}
|
||||
|
||||
- name: Upload ZIM File
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.ZIMFILE_NAME }}
|
||||
name: ${{ env.ZIMFILE_NAME }}
|
||||
compression-level: 0
|
||||
|
||||
- name: Run zimcheck
|
||||
uses: addnab/docker-run-action@v3
|
||||
continue-on-error: true
|
||||
with:
|
||||
image: ghcr.io/openzim/zim-tools:3.1.3
|
||||
options: -v ${{ github.workspace }}:/data
|
||||
run: |
|
||||
zimcheck /data/${{ env.ZIMFILE_NAME }}
|
||||
|
||||
build_mul:
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
MAIN_SITE_BASE_URL: /en/index.html
|
||||
MAIN_SITE_ABOUT_URL: /en/about.html
|
||||
MAIN_SITE_RECOMMENDATIONS_URL: /en/tools.html
|
||||
MAIN_SITE_KNOWLEDGE_BASE_URL: /en/basics/why-privacy-matters.html
|
||||
ARTICLES_SITE_BASE_URL: /articles/index.html
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
lang: [en, es, fr, he, it, nl, ru, zh-Hant]
|
||||
|
||||
steps:
|
||||
- name: Add GitHub Token to Environment
|
||||
run: |
|
||||
echo "GH_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Download Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ inputs.repo }}
|
||||
ref: ${{ inputs.ref }}
|
||||
persist-credentials: "false"
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download Submodules
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: repo-*
|
||||
path: modules
|
||||
|
||||
- name: Move mkdocs-material-insiders to mkdocs-material
|
||||
run: |
|
||||
rmdir modules/mkdocs-material
|
||||
mv modules/repo-mkdocs-material-insiders modules/mkdocs-material
|
||||
|
||||
- name: Move brand submodule to theme/assets/brand
|
||||
run: |
|
||||
rmdir theme/assets/brand
|
||||
mv modules/repo-brand theme/assets/brand
|
||||
|
||||
- name: Copy Translation Files
|
||||
if: matrix.lang != 'en'
|
||||
run: |
|
||||
cp -rl modules/repo-i18n/i18n .
|
||||
cp -rl modules/repo-i18n/includes .
|
||||
|
||||
- name: Install Python (pipenv)
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
cache: "pipenv"
|
||||
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
pip install pipenv
|
||||
pipenv install
|
||||
sudo apt install pngquant
|
||||
|
||||
- name: Generate Donating Members List
|
||||
continue-on-error: true
|
||||
env:
|
||||
DISCOURSE_API_KEY: ${{ secrets.RO_DISCOURSE_API_KEY }}
|
||||
run: |
|
||||
pip install requests
|
||||
python tools/generate-members.py > includes/members.md
|
||||
|
||||
- name: Build Website
|
||||
run: |
|
||||
./run.sh --build --production --insiders --offline --lang=${{ matrix.lang }}
|
||||
|
||||
- name: Run generate-topics.sh for top posts
|
||||
if: matrix.lang == 'en'
|
||||
run: |
|
||||
bash tools/generate-topics.sh \
|
||||
--source='https://discuss.privacyguides.net/top.json?period=weekly' \
|
||||
--tag="top posts" \
|
||||
--destination="./site/en/index.html" \
|
||||
--count=3
|
||||
|
||||
- name: Run generate-topics.sh for latest posts
|
||||
if: matrix.lang == 'en'
|
||||
run: |
|
||||
bash tools/generate-topics.sh \
|
||||
--source='https://discuss.privacyguides.net/latest.json' \
|
||||
--tag="latest posts" \
|
||||
--destination="./site/en/index.html" \
|
||||
--count=12
|
||||
|
||||
- name: Delete Unreferenced Assets
|
||||
run: |
|
||||
bash tools/delete-unreferenced.sh
|
||||
env:
|
||||
ASSETS_DIR: site/${{ matrix.lang }}/assets
|
||||
SEARCH_DIR: site/${{ matrix.lang }}
|
||||
|
||||
- name: Build Articles
|
||||
if: matrix.lang == 'en'
|
||||
run: |
|
||||
pipenv run mkdocs build --config-file mkdocs.blog.yml
|
||||
|
||||
- name: Delete Unreferenced Assets
|
||||
if: matrix.lang == 'en'
|
||||
run: |
|
||||
bash tools/delete-unreferenced.sh
|
||||
env:
|
||||
ASSETS_DIR: site/articles/assets
|
||||
SEARCH_DIR: site/articles
|
||||
|
||||
- name: Package Website
|
||||
run: |
|
||||
tar -czf site-zimready-${{ matrix.lang }}.tar.gz site
|
||||
|
||||
- name: Upload Site
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: site-zimready-${{ matrix.lang }}.tar.gz
|
||||
path: site-zimready-${{ matrix.lang }}.tar.gz
|
||||
retention-days: 1
|
||||
compression-level: 0
|
||||
|
||||
package_mul:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build_mul]
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- name: Download Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ inputs.repo }}
|
||||
ref: ${{ inputs.ref }}
|
||||
persist-credentials: "false"
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download All Sites
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: site-zimready-*
|
||||
merge-multiple: true
|
||||
|
||||
- name: List Files (for debugging)
|
||||
run: |
|
||||
for file in *.tar.gz; do tar -zxf "$file"; done
|
||||
ls -la site/
|
||||
|
||||
- name: Remove Duplicate Files
|
||||
run: |
|
||||
cd site && bash ../tools/symlink-duplicates.sh
|
||||
ln -s en/index.html index.html
|
||||
ln -s en/about/notices.html license
|
||||
cd ..
|
||||
|
||||
- name: Set zimfile name
|
||||
run: |
|
||||
echo "ZIMFILE_NAME=privacyguides.org_mul_all_$(date +%Y)-$(date +%m).zim" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Create ZIM File
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/openzim/zim-tools:3.1.3
|
||||
options: -v ${{ github.workspace }}:/data
|
||||
run: |
|
||||
zimwriterfs \
|
||||
-w index.html \
|
||||
-I en/assets/brand/logos/png/square/pg-yellow.png \
|
||||
-l mul \
|
||||
-t "Privacy Guides" \
|
||||
-d "Your central privacy and security resource to protect yourself online." \
|
||||
-c "Privacy Guides" \
|
||||
-p "Privacy Guides" \
|
||||
-e "https://www.privacyguides.org" \
|
||||
-n "privacyguides.org_mul_all" \
|
||||
/data/site/ /data/${{ env.ZIMFILE_NAME }}
|
||||
|
||||
- name: Upload ZIM File
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.ZIMFILE_NAME }}
|
||||
name: ${{ env.ZIMFILE_NAME }}
|
||||
compression-level: 0
|
||||
|
||||
- name: Run zimcheck
|
||||
uses: addnab/docker-run-action@v3
|
||||
continue-on-error: true
|
||||
with:
|
||||
image: ghcr.io/openzim/zim-tools:3.1.3
|
||||
options: -v ${{ github.workspace }}:/data
|
||||
run: |
|
||||
zimcheck /data/${{ env.ZIMFILE_NAME }}
|
||||
158
.github/workflows/build.yml
vendored
@@ -24,15 +24,6 @@ on:
|
||||
privileged:
|
||||
type: boolean
|
||||
default: true
|
||||
strict:
|
||||
type: boolean
|
||||
default: false
|
||||
cache:
|
||||
type: boolean
|
||||
default: true
|
||||
secrets:
|
||||
RO_DISCOURSE_API_KEY:
|
||||
required: false
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -57,30 +48,12 @@ jobs:
|
||||
echo "EXTRA_FLAGS=""$EXTRA_FLAGS" --production""
|
||||
} >> "$GITHUB_ENV"
|
||||
|
||||
- name: Set base navigation URLs for production build
|
||||
if: inputs.context == 'production'
|
||||
run: |
|
||||
{
|
||||
echo "MAIN_SITE_BASE_URL=https://www.privacyguides.org/en/"
|
||||
echo "MAIN_SITE_ABOUT_URL=https://www.privacyguides.org/en/about/"
|
||||
echo "MAIN_SITE_RECOMMENDATIONS_URL=https://www.privacyguides.org/en/tools/"
|
||||
echo "MAIN_SITE_KNOWLEDGE_BASE_URL=https://www.privacyguides.org/en/basics/why-privacy-matters/"
|
||||
echo "ARTICLES_SITE_BASE_URL=https://www.privacyguides.org/articles/"
|
||||
echo "VIDEOS_SITE_BASE_URL=https://www.privacyguides.org/videos/"
|
||||
} >> "$GITHUB_ENV"
|
||||
|
||||
- name: Set Metadata for Privileged Builds
|
||||
if: inputs.privileged
|
||||
run: |
|
||||
echo "BUILD_INSIDERS=true" >> "$GITHUB_ENV"
|
||||
echo "EXTRA_FLAGS=""$EXTRA_FLAGS" --insiders"" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Set Metadata for International Builds
|
||||
if: inputs.lang != 'en'
|
||||
run: |
|
||||
echo "GITREVISIONDATE=false" >> "$GITHUB_ENV"
|
||||
echo "GITAUTHORS=false" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Set Metadata for Offline Mode
|
||||
if: inputs.config == 'offline'
|
||||
run: |
|
||||
@@ -88,11 +61,6 @@ jobs:
|
||||
echo "EXTRA_FLAGS=""$EXTRA_FLAGS" --offline""
|
||||
} >> "$GITHUB_ENV"
|
||||
|
||||
- name: Set Metadata for Strict Mode
|
||||
if: inputs.strict
|
||||
run: |
|
||||
echo "EXTRA_FLAGS=""$EXTRA_FLAGS" --cmd_flags=--strict"" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Download Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -123,6 +91,7 @@ jobs:
|
||||
run: |
|
||||
cp -rl modules/repo-i18n/i18n .
|
||||
cp -rl modules/repo-i18n/includes .
|
||||
cp -rl modules/repo-i18n/theme .
|
||||
|
||||
- name: Install Python (pipenv)
|
||||
if: inputs.privileged
|
||||
@@ -135,9 +104,8 @@ jobs:
|
||||
uses: actions/setup-python@v5
|
||||
|
||||
- name: Restore Privacy Plugin Cache
|
||||
uses: actions/cache/restore@v4
|
||||
uses: actions/cache/restore@v4.0.2
|
||||
id: privacy_cache_restore
|
||||
if: inputs.cache
|
||||
with:
|
||||
key: privacy-cache-${{ inputs.repo }}-${{ hashfiles('.cache/plugin/privacy/**') }}
|
||||
path: |
|
||||
@@ -148,9 +116,8 @@ jobs:
|
||||
privacy-cache-
|
||||
|
||||
- name: Restore Social Plugin Cache
|
||||
uses: actions/cache/restore@v4
|
||||
uses: actions/cache/restore@v4.0.2
|
||||
id: social_cache_restore
|
||||
if: inputs.cache
|
||||
with:
|
||||
key: social-cache-${{ inputs.repo }}-${{ inputs.lang }}-${{ hashfiles('.cache/plugin/social/manifest.json') }}
|
||||
path: |
|
||||
@@ -160,6 +127,18 @@ jobs:
|
||||
social-cache-${{ inputs.repo }}-${{ inputs.lang }}-
|
||||
social-cache-privacyguides/privacyguides.org-${{ inputs.lang }}-
|
||||
|
||||
- name: Restore Optimize Plugin Cache
|
||||
uses: actions/cache/restore@v4.0.2
|
||||
id: optimize_cache_restore
|
||||
with:
|
||||
key: optimize-cache-${{ inputs.repo }}-${{ hashfiles('.cache/plugin/optimize/manifest.json') }}
|
||||
path: |
|
||||
.cache/plugin/optimize
|
||||
restore-keys: |
|
||||
optimize-cache-${{ inputs.repo }}-
|
||||
optimize-cache-privacyguides/privacyguides.org-
|
||||
optimize-cache-
|
||||
|
||||
- name: Install Python Dependencies
|
||||
if: inputs.privileged
|
||||
run: |
|
||||
@@ -174,43 +153,17 @@ jobs:
|
||||
sudo apt install pngquant
|
||||
echo "EXTRA_FLAGS=""$EXTRA_FLAGS" --cmd=mkdocs"" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Generate Donating Members List
|
||||
continue-on-error: true
|
||||
env:
|
||||
DISCOURSE_API_KEY: ${{ secrets.RO_DISCOURSE_API_KEY }}
|
||||
run: |
|
||||
pip install requests
|
||||
python tools/generate-members.py > includes/members.md
|
||||
|
||||
- name: Build Website
|
||||
run: |
|
||||
eval ./run.sh --build --lang=${{ inputs.lang }} "$EXTRA_FLAGS"
|
||||
|
||||
- name: Run generate-topics.sh for top posts
|
||||
if: inputs.lang == 'en'
|
||||
run: |
|
||||
bash tools/generate-topics.sh \
|
||||
--source='https://discuss.privacyguides.net/top.json?period=weekly' \
|
||||
--tag="top posts" \
|
||||
--destination="./site/en/index.html" \
|
||||
--count=3
|
||||
|
||||
- name: Run generate-topics.sh for latest posts
|
||||
if: inputs.lang == 'en'
|
||||
run: |
|
||||
bash tools/generate-topics.sh \
|
||||
--source='https://discuss.privacyguides.net/latest.json' \
|
||||
--tag="latest posts" \
|
||||
--destination="./site/en/index.html" \
|
||||
--count=12
|
||||
|
||||
- name: Package Website
|
||||
run: |
|
||||
tar -czf site-${{ inputs.config }}-${{ inputs.lang }}.tar.gz site
|
||||
|
||||
- name: Find Privacy Plugin Cache
|
||||
uses: actions/cache/restore@v4
|
||||
if: steps.privacy_cache_restore.outputs.cache-hit != 'true' && inputs.cache
|
||||
uses: actions/cache/restore@v4.0.2
|
||||
if: steps.privacy_cache_restore.outputs.cache-hit != 'true'
|
||||
id: privacy_cache_test
|
||||
with:
|
||||
key: privacy-cache-privacyguides/privacyguides.org-${{ hashfiles('.cache/plugin/privacy/**') }}
|
||||
@@ -219,8 +172,8 @@ jobs:
|
||||
.cache/plugin/privacy
|
||||
|
||||
- name: Find Social Plugin Cache
|
||||
uses: actions/cache/restore@v4
|
||||
if: steps.social_cache_restore.outputs.cache-hit != 'true' && inputs.cache
|
||||
uses: actions/cache/restore@v4.0.2
|
||||
if: steps.social_cache_restore.outputs.cache-hit != 'true'
|
||||
id: social_cache_test
|
||||
with:
|
||||
key: social-cache-privacyguides/privacyguides.org-${{ inputs.lang }}-${{ hashfiles('.cache/plugin/social/manifest.json') }}
|
||||
@@ -229,22 +182,39 @@ jobs:
|
||||
.cache/plugin/social/manifest.json
|
||||
.cache/plugin/social/assets
|
||||
|
||||
- name: Find Optimize Plugin Cache
|
||||
uses: actions/cache/restore@v4.0.2
|
||||
if: steps.optimize_cache_restore.outputs.cache-hit != 'true'
|
||||
id: optimize_cache_test
|
||||
with:
|
||||
key: optimize-cache-privacyguides/privacyguides.org-${{ hashfiles('.cache/plugin/optimize/manifest.json') }}
|
||||
lookup-only: true
|
||||
path: |
|
||||
.cache/plugin/optimize
|
||||
|
||||
- name: Save Privacy Plugin Cache
|
||||
uses: actions/cache/save@v4
|
||||
if: steps.privacy_cache_test.outputs.cache-hit != 'true' && inputs.cache
|
||||
uses: actions/cache/save@v4.0.2
|
||||
if: steps.privacy_cache_test.outputs.cache-hit != 'true'
|
||||
with:
|
||||
key: privacy-cache-${{ inputs.repo }}-${{ hashfiles('.cache/plugin/privacy/**') }}
|
||||
path: .cache/plugin/privacy
|
||||
|
||||
- name: Save Social Plugin Cache
|
||||
uses: actions/cache/save@v4
|
||||
if: steps.social_cache_test.outputs.cache-hit != 'true' && inputs.cache
|
||||
uses: actions/cache/save@v4.0.2
|
||||
if: steps.social_cache_test.outputs.cache-hit != 'true'
|
||||
with:
|
||||
key: social-cache-${{ inputs.repo }}-${{ inputs.lang }}-${{ hashfiles('.cache/plugin/social/manifest.json') }}
|
||||
path: |
|
||||
.cache/plugin/social/manifest.json
|
||||
.cache/plugin/social/assets
|
||||
|
||||
- name: Save Optimize Plugin Cache
|
||||
uses: actions/cache/save@v4.0.2
|
||||
if: steps.optimize_cache_test.outputs.cache-hit != 'true'
|
||||
with:
|
||||
key: optimize-cache-${{ inputs.repo }}-${{ hashfiles('.cache/plugin/optimize/manifest.json') }}
|
||||
path: .cache/plugin/optimize
|
||||
|
||||
- name: Upload Site
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
@@ -252,10 +222,46 @@ jobs:
|
||||
path: site-${{ inputs.config }}-${{ inputs.lang }}.tar.gz
|
||||
retention-days: 1
|
||||
|
||||
- name: Upload members list
|
||||
uses: actions/upload-artifact@v4
|
||||
if: inputs.config == 'build' && inputs.lang == 'en'
|
||||
offline_package:
|
||||
if: inputs.config == 'offline' && inputs.lang == 'en'
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: ${{ inputs.continue-on-error }}
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: members.md
|
||||
path: includes/members.md
|
||||
retention-days: 1
|
||||
name: site-offline-en.tar.gz
|
||||
|
||||
- run: |
|
||||
tar -xzf site-offline-en.tar.gz
|
||||
tar -czf offline.tar.gz site/en
|
||||
zip -r -q offline.zip site/en
|
||||
|
||||
- name: Upload tar.gz file
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: offline.tar.gz
|
||||
path: offline.tar.gz
|
||||
|
||||
- name: Upload zip file
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: offline.zip
|
||||
path: offline.zip
|
||||
|
||||
- name: Create ZIM File
|
||||
uses: addnab/docker-run-action@v3
|
||||
with:
|
||||
image: ghcr.io/openzim/zim-tools:3.1.3
|
||||
options: -v ${{ github.workspace }}:/data
|
||||
run: |
|
||||
zimwriterfs -w index.html -I assets/brand/logos/png/square/pg-yellow.png -l eng -t "Privacy Guides" -d "Your central privacy and security resource to protect yourself online." -c "Privacy Guides" -p "Jonah Aragon" -n "Privacy Guides" -e "https://github.com/privacyguides/privacyguides.org" /data/site/en /data/offline-privacy_guides.zim
|
||||
|
||||
- name: Upload ZIM file
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: offline-privacy_guides.zim
|
||||
path: offline-privacy_guides.zim
|
||||
|
||||
75
.github/workflows/publish-immediate.yml
vendored
@@ -1,75 +0,0 @@
|
||||
# Copyright (c) 2021-2025 Jonah Aragon <jonah@triplebit.net>
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
# IN THE SOFTWARE.
|
||||
|
||||
name: 📦 Immediate Releases
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- "main"
|
||||
paths:
|
||||
- "blog/**"
|
||||
|
||||
concurrency:
|
||||
group: release-deployment
|
||||
cancel-in-progress: false
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pages: write
|
||||
id-token: write
|
||||
deployments: write
|
||||
|
||||
jobs:
|
||||
submodule:
|
||||
strategy:
|
||||
matrix:
|
||||
repo: [mkdocs-material-insiders, brand]
|
||||
uses: privacyguides/.github/.github/workflows/download-repo.yml@main
|
||||
with:
|
||||
repo: ${{ matrix.repo }}
|
||||
secrets:
|
||||
ACTIONS_SSH_KEY: ${{ secrets.ACTIONS_SSH_KEY }}
|
||||
|
||||
build_blog:
|
||||
needs: submodule
|
||||
permissions:
|
||||
contents: read
|
||||
uses: ./.github/workflows/build-blog.yml
|
||||
with:
|
||||
repo: ${{ github.repository }}
|
||||
ref: ${{ github.ref }}
|
||||
continue-on-error: false
|
||||
context: production
|
||||
|
||||
deploy:
|
||||
needs: [build_blog]
|
||||
uses: privacyguides/webserver/.github/workflows/deploy-garage.yml@main
|
||||
with:
|
||||
environment: production
|
||||
secrets:
|
||||
PROD_GARAGE_KEY_ID: ${{ secrets.PROD_GARAGE_KEY_ID }}
|
||||
PROD_GARAGE_SECRET_KEY: ${{ secrets.PROD_GARAGE_SECRET_KEY }}
|
||||
|
||||
cleanup:
|
||||
if: ${{ always() }}
|
||||
needs: [build_blog]
|
||||
uses: privacyguides/.github/.github/workflows/cleanup.yml@main
|
||||
11
.github/workflows/publish-mirror.yml
vendored
@@ -51,3 +51,14 @@ jobs:
|
||||
with:
|
||||
source-repo: "git@github.com:privacyguides/privacyguides.org.git"
|
||||
destination-repo: "git@codeberg.org:privacyguides/privacyguides.org.git"
|
||||
|
||||
sourcehut:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Mirror to SourceHut
|
||||
uses: wearerequired/git-mirror-action@v1
|
||||
env:
|
||||
SSH_PRIVATE_KEY: ${{ secrets.ACTIONS_SSH_KEY }}
|
||||
with:
|
||||
source-repo: "git@github.com:privacyguides/privacyguides.org.git"
|
||||
destination-repo: "git@git.sr.ht:~jonaharagon/privacyguides.org"
|
||||
|
||||
34
.github/workflows/publish-pr.yml
vendored
@@ -22,7 +22,6 @@ jobs:
|
||||
outputs:
|
||||
pr_number: ${{ steps.metadata.outputs.pr_number }}
|
||||
sha: ${{ steps.metadata.outputs.sha }}
|
||||
privileged: ${{ steps.metadata.outputs.privileged }}
|
||||
|
||||
steps:
|
||||
- name: Download Website Build Artifact
|
||||
@@ -87,32 +86,28 @@ jobs:
|
||||
unzip metadata.zip -d metadata
|
||||
echo "pr_number=$(cat metadata/NR)" >> "$GITHUB_OUTPUT"
|
||||
echo "sha=$(cat metadata/SHA)" >> "$GITHUB_OUTPUT"
|
||||
echo "privileged=$(cat metadata/PRIVILEGED)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
deploy_garage:
|
||||
deploy:
|
||||
needs: metadata
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
uses: privacyguides/webserver/.github/workflows/deploy-garage-preview.yml@main
|
||||
uses: privacyguides/webserver/.github/workflows/deploy-netlify-preview.yml@main
|
||||
with:
|
||||
alias: ${{ needs.metadata.outputs.pr_number }}
|
||||
bucket: ${{ vars.PREVIEW_GARAGE_BUCKET }}
|
||||
hostname: ${{ vars.PREVIEW_GARAGE_HOSTNAME }}
|
||||
netlify_alias: ${{ needs.metadata.outputs.pr_number }}
|
||||
netlify_site_id: ${{ vars.NETLIFY_SITE }}
|
||||
secrets:
|
||||
PREVIEW_GARAGE_KEY_ID: ${{ secrets.PREVIEW_GARAGE_KEY_ID }}
|
||||
PREVIEW_GARAGE_SECRET_KEY: ${{ secrets.PREVIEW_GARAGE_SECRET_KEY }}
|
||||
NETLIFY_TOKEN: ${{ secrets.NETLIFY_TOKEN }}
|
||||
|
||||
comment:
|
||||
permissions:
|
||||
pull-requests: write
|
||||
needs: [deploy_garage, metadata]
|
||||
needs: [deploy, metadata]
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
address: ${{ needs.deploy_garage.outputs.address }}
|
||||
address: ${{ needs.deploy.outputs.address }}
|
||||
steps:
|
||||
- uses: thollander/actions-comment-pull-request@v2.5.0
|
||||
if: ${{ needs.metadata.outputs.privileged == 'true' }}
|
||||
with:
|
||||
pr_number: ${{ needs.metadata.outputs.pr_number }}
|
||||
message: |
|
||||
@@ -123,18 +118,3 @@ jobs:
|
||||
| <span aria-hidden="true">🔨</span> Latest commit | ${{ needs.metadata.outputs.sha }} |
|
||||
| <span aria-hidden="true">😎</span> Preview | ${{ env.address }} |
|
||||
comment_tag: deployment
|
||||
|
||||
- uses: thollander/actions-comment-pull-request@v2.5.0
|
||||
if: ${{ needs.metadata.outputs.privileged == 'false' }}
|
||||
with:
|
||||
pr_number: ${{ needs.metadata.outputs.pr_number }}
|
||||
message: |
|
||||
### <span aria-hidden="true">✅</span> Your preview is ready!
|
||||
|
||||
| Name | Link |
|
||||
| :---: | ---- |
|
||||
| <span aria-hidden="true">🔨</span> Latest commit | ${{ needs.metadata.outputs.sha }} |
|
||||
| <span aria-hidden="true">😎</span> Preview | ${{ env.address }} |
|
||||
|
||||
Please note that this preview was built from an untrusted source, so it was not granted access to all mkdocs-material features. Maintainers should ensure this PR has been reviewed locally with a full build before merging.
|
||||
comment_tag: deployment
|
||||
|
||||
42
.github/workflows/publish-release.yml
vendored
@@ -50,8 +50,8 @@ jobs:
|
||||
needs: submodule
|
||||
strategy:
|
||||
matrix:
|
||||
lang: [en, es, fr, he, it, nl, ru, zh-Hant, zh-TW]
|
||||
build: [build]
|
||||
lang: [en, es, fr, he, it, nl, ru, zh-Hant]
|
||||
build: [build, offline]
|
||||
permissions:
|
||||
contents: read
|
||||
uses: ./.github/workflows/build.yml
|
||||
@@ -62,35 +62,10 @@ jobs:
|
||||
lang: ${{ matrix.lang }}
|
||||
context: production
|
||||
continue-on-error: false
|
||||
cache: false
|
||||
secrets:
|
||||
RO_DISCOURSE_API_KEY: ${{ secrets.RO_DISCOURSE_API_KEY }}
|
||||
|
||||
build_blog:
|
||||
needs: submodule
|
||||
permissions:
|
||||
contents: read
|
||||
uses: ./.github/workflows/build-blog.yml
|
||||
with:
|
||||
repo: ${{ github.repository }}
|
||||
ref: ${{ github.ref }}
|
||||
continue-on-error: false
|
||||
context: production
|
||||
|
||||
build_zimfile:
|
||||
needs: submodule
|
||||
permissions:
|
||||
contents: read
|
||||
uses: ./.github/workflows/build-zimfile.yml
|
||||
with:
|
||||
repo: ${{ github.repository }}
|
||||
ref: ${{ github.ref }}
|
||||
secrets:
|
||||
RO_DISCOURSE_API_KEY: ${{ secrets.RO_DISCOURSE_API_KEY }}
|
||||
|
||||
release:
|
||||
name: Create release notes
|
||||
needs: [build, build_zimfile]
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
@@ -98,24 +73,23 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: "*.zim"
|
||||
pattern: offline*
|
||||
merge-multiple: true
|
||||
|
||||
- name: Create release notes
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
generateReleaseNotes: true
|
||||
artifacts: "*.zim"
|
||||
artifacts: "offline.zip,offline.tar.gz,offline-privacy_guides.zim"
|
||||
makeLatest: true
|
||||
|
||||
deploy:
|
||||
needs: [build, build_blog]
|
||||
needs: build
|
||||
uses: privacyguides/webserver/.github/workflows/deploy-all.yml@main
|
||||
secrets:
|
||||
NETLIFY_TOKEN: ${{ secrets.NETLIFY_TOKEN }}
|
||||
PROD_MINIO_KEY_ID: ${{ secrets.PROD_MINIO_KEY_ID }}
|
||||
PROD_MINIO_SECRET_KEY: ${{ secrets.PROD_MINIO_SECRET_KEY }}
|
||||
PROD_GARAGE_KEY_ID: ${{ secrets.PROD_GARAGE_KEY_ID }}
|
||||
PROD_GARAGE_SECRET_KEY: ${{ secrets.PROD_GARAGE_SECRET_KEY }}
|
||||
CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
|
||||
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
|
||||
CLUSTER_USERNAME: ${{ secrets.CLUSTER_USERNAME }}
|
||||
@@ -125,5 +99,5 @@ jobs:
|
||||
|
||||
cleanup:
|
||||
if: ${{ always() }}
|
||||
needs: [build, build_blog, build_zimfile]
|
||||
needs: build
|
||||
uses: privacyguides/.github/.github/workflows/cleanup.yml@main
|
||||
|
||||
2
.github/workflows/test-lint.yml
vendored
@@ -103,7 +103,7 @@ jobs:
|
||||
- id: ml
|
||||
# You can override MegaLinter flavor used to have faster performances
|
||||
# More info at https://megalinter.io/flavors/
|
||||
uses: oxsecurity/megalinter/flavors/documentation@v8.0.0
|
||||
uses: oxsecurity/megalinter/flavors/documentation@v7.10.0
|
||||
env:
|
||||
# All available variables are described in documentation
|
||||
# https://megalinter.io/configuration/
|
||||
|
||||
82
.github/workflows/update-discussions.yml
vendored
@@ -1,82 +0,0 @@
|
||||
# Copyright (c) 2024 Jonah Aragon <jonah@triplebit.net>
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
# IN THE SOFTWARE.
|
||||
|
||||
name: 🔄 Update Discussions
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "*/30 * * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
generate:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
environment:
|
||||
name: production
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: "false"
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Create site/en directory
|
||||
run: mkdir -p site/en
|
||||
|
||||
- name: Update Discussions
|
||||
uses: yakubique/minio-download@v1.1.1
|
||||
with:
|
||||
endpoint: https://${{ vars.PROD_GARAGE_HOSTNAME }}
|
||||
access_key: ${{ secrets.PROD_GARAGE_KEY_ID }}
|
||||
secret_key: ${{ secrets.PROD_GARAGE_SECRET_KEY }}
|
||||
bucket: ${{ vars.PROD_GARAGE_BUCKET }}
|
||||
source: /en/index.html
|
||||
target: ./site/en/
|
||||
|
||||
- name: Run generate-topics.sh for top posts
|
||||
run: |
|
||||
bash tools/generate-topics.sh \
|
||||
--source='https://discuss.privacyguides.net/top.json?period=weekly' \
|
||||
--tag="top posts" \
|
||||
--destination="./site/en/index.html" \
|
||||
--count=3
|
||||
|
||||
- name: Run generate-topics.sh for latest posts
|
||||
run: |
|
||||
bash tools/generate-topics.sh \
|
||||
--source='https://discuss.privacyguides.net/latest.json' \
|
||||
--tag="latest posts" \
|
||||
--destination="./site/en/index.html" \
|
||||
--count=12
|
||||
|
||||
- name: Upload modified index
|
||||
uses: yakubique/minio-upload@v1.1.3
|
||||
with:
|
||||
endpoint: https://${{ vars.PROD_GARAGE_HOSTNAME }}
|
||||
access_key: ${{ secrets.PROD_GARAGE_KEY_ID }}
|
||||
secret_key: ${{ secrets.PROD_GARAGE_SECRET_KEY }}
|
||||
bucket: ${{ vars.PROD_GARAGE_BUCKET }}
|
||||
source: ./site/en/index.html
|
||||
target: /en/index.html
|
||||
2
.github/workflows/upload-crowdin.yml
vendored
@@ -41,7 +41,7 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: crowdin action
|
||||
uses: crowdin/github-action@v2.2.0
|
||||
uses: crowdin/github-action@v1.20.2
|
||||
with:
|
||||
upload_sources: true
|
||||
upload_sources_args: "--auto-update --delete-obsolete"
|
||||
|
||||
5
.gitignore
vendored
@@ -1,6 +1,6 @@
|
||||
site
|
||||
/i18n/
|
||||
/includes/*.*.*
|
||||
/includes/*
|
||||
!/includes/*.en.*
|
||||
/static/i18n/
|
||||
/theme/overrides/*.*.*
|
||||
@@ -23,6 +23,3 @@ node_modules
|
||||
.venv
|
||||
.env
|
||||
.mkdocs-insiders-*
|
||||
|
||||
# Automatically generated
|
||||
includes/members.md
|
||||
|
||||
2
.gitmodules
vendored
@@ -3,4 +3,4 @@
|
||||
url = https://github.com/privacyguides/brand.git
|
||||
[submodule "modules/mkdocs-material"]
|
||||
path = modules/mkdocs-material
|
||||
url = https://github.com/privacyguides/mkdocs-material-insiders.git
|
||||
url = git@github.com:privacyguides/mkdocs-material-insiders.git
|
||||
|
||||
21
.mailmap
@@ -1,23 +1,16 @@
|
||||
# Please use this file to correct information in our git log.
|
||||
# Format: Proper Name <Proper Email> <Incorrect Email>
|
||||
#
|
||||
# Privacy Guides Team Members
|
||||
# ===========================
|
||||
Daniel Gray <dngray@privacyguides.org> <dng@disroot.org>
|
||||
Daniel Gray <dngray@privacyguides.org> <48640805+dngray@users.noreply.github.com>
|
||||
Daniel Gray <dngray@privacyguides.org> <dngray@privacytools.io>
|
||||
Daniel Gray <dngray@privacyguides.org>
|
||||
Em <em@privacyguides.org> <194856901+EmAtPrivacyGuides@users.noreply.github.com>
|
||||
Freddy <freddy@privacyguides.org> <freddy@decypher.pw>
|
||||
Freddy <freddy@privacyguides.org> <freddy@privacytools.io>
|
||||
fria <fria@privacyguides.org> <138676274+friadev@users.noreply.github.com>
|
||||
Jonah Aragon <jonah@privacyguides.org> <jonah@triplebit.net>
|
||||
Jonah Aragon <jonah@privacyguides.org> <jonah@privacytools.io>
|
||||
Jonah Aragon <jonah@privacyguides.org> <github@aragon.science>
|
||||
Jordan Warne <jordan@privacyguides.org> <jw@omg.lol>
|
||||
Jordan Warne <jordan@privacyguides.org> <contact@jordanwarne.net>
|
||||
Justin Ehrenhofer <justin.ehrenhofer@gmail.com> <12520755+SamsungGalaxyPlayer@users.noreply.github.com>
|
||||
Mare Polaris <ph00lt0@privacyguides.org> <15004290+ph00lt0@users.noreply.github.com>
|
||||
mfwmyfacewhen <mfw@privacyguides.org> <94880365+mfwmyfacewhen@users.noreply.github.com>
|
||||
mbananasynergy <mbananasynergy@privacyguides.org> <>
|
||||
mbananasynergy <mbananasynergy@privacyguides.org> <107055883+matchboxbananasynergy@users.noreply.github.com>
|
||||
rollsicecream <rollsicecream@proton.me> <153316540+rollsicecream@users.noreply.github.com>
|
||||
rollsicecream <rollsicecream@proton.me> <waterfallnet@proton.me>
|
||||
Freddy <freddy@privacyguides.org> <freddy@decypher.pw>
|
||||
Freddy <freddy@privacyguides.org> <freddy@privacytools.io>
|
||||
Niek de Wilde <niek@privacyguides.org> <github.ef27z@simplelogin.com>
|
||||
Niek de Wilde <niek@privacyguides.org> <blacklight447@privacytools.io>
|
||||
redoomed1 <redoomed1@privacyguides.org> <161974310+redoomed1@users.noreply.github.com>
|
||||
|
||||
@@ -27,6 +27,4 @@ code-block-style: false
|
||||
no-hard-tabs: true
|
||||
emphasis-style:
|
||||
style: "asterisk"
|
||||
no-trailing-punctuation: false
|
||||
no-duplicate-heading:
|
||||
siblings_only: true
|
||||
no-duplicate-header: false
|
||||
|
||||
12
.vscode/extensions.json
vendored
@@ -26,16 +26,6 @@
|
||||
"mikestead.dotenv",
|
||||
"redhat.vscode-yaml",
|
||||
"ecmel.vscode-html-css",
|
||||
"yzhang.markdown-all-in-one",
|
||||
"bierner.markdown-checkbox",
|
||||
"bierner.markdown-emoji",
|
||||
"bierner.markdown-footnotes",
|
||||
"bierner.markdown-preview-github-styles",
|
||||
"esbenp.prettier-vscode",
|
||||
"ltex-plus.vscode-ltex-plus",
|
||||
"ms-python.python",
|
||||
"github.vscode-github-actions",
|
||||
"ms-vscode-remote.remote-containers",
|
||||
"github.codespaces"
|
||||
"yzhang.markdown-all-in-one"
|
||||
]
|
||||
}
|
||||
|
||||
571
.vscode/ltex.dictionary.en-US.txt
vendored
@@ -1,571 +0,0 @@
|
||||
Kinect
|
||||
Scanalytics
|
||||
mmWave
|
||||
TODO
|
||||
MotionScore
|
||||
GaitMetrics
|
||||
Bayometric
|
||||
eSIM
|
||||
microSD
|
||||
Cellebrite
|
||||
GrapheneOS
|
||||
Gboard
|
||||
IMEs
|
||||
Briar
|
||||
Meshtastic
|
||||
Gizmodo
|
||||
Wickr
|
||||
Gizmodo
|
||||
Arel
|
||||
CryptPad
|
||||
itemprop
|
||||
md-button
|
||||
XWiki
|
||||
CryptDrive
|
||||
scrypt
|
||||
Anytype
|
||||
PeerTube
|
||||
Startpage
|
||||
PrivacyTools
|
||||
FedResults
|
||||
Brøgger
|
||||
EasyOptOuts
|
||||
Optery
|
||||
DeleteMe
|
||||
PeopleConnect
|
||||
dFPI
|
||||
Arkenfox
|
||||
LocalCDN
|
||||
fingerprintable
|
||||
NeatURLs
|
||||
ClearURLs
|
||||
Bromite
|
||||
GeckoView
|
||||
Thorin-Oakenpants
|
||||
customizability
|
||||
DoH
|
||||
DNSCrypt
|
||||
eSNI
|
||||
Mullvad
|
||||
CalyxOS
|
||||
microG
|
||||
DejaVu
|
||||
DroidGuard
|
||||
NewPipe
|
||||
WebView
|
||||
linux-hardened
|
||||
malloc
|
||||
Malloc
|
||||
ASLR
|
||||
Grindr
|
||||
USCCB
|
||||
USCCB-owned
|
||||
de-anonymize
|
||||
MkDocs
|
||||
privacyguides
|
||||
balenaEtcher
|
||||
img
|
||||
thumbsup
|
||||
KeePassXC
|
||||
OnionShare
|
||||
Exif
|
||||
ExifTool
|
||||
zsh
|
||||
ImageOptim
|
||||
SendTo
|
||||
Handoff
|
||||
Jailbreaking
|
||||
Flatpaks
|
||||
ChromeOS
|
||||
Flatseal
|
||||
dbus
|
||||
XWayland
|
||||
filesystem
|
||||
Firejail
|
||||
Whonix
|
||||
seccomp
|
||||
AppArmor
|
||||
MicroOS
|
||||
setuid
|
||||
Bubblewrap
|
||||
Krathalan
|
||||
noatsecure
|
||||
Seirdy
|
||||
Podman
|
||||
Kata
|
||||
Wonderfall
|
||||
Vaultwarden
|
||||
LinuxServer
|
||||
io
|
||||
daemonless
|
||||
gVisor
|
||||
syscalls
|
||||
Portmaster
|
||||
OpenSnitch
|
||||
firewalld
|
||||
Netfilter
|
||||
bypassable
|
||||
sysctl
|
||||
KickSecure
|
||||
fepitre
|
||||
QubesOS
|
||||
COPR
|
||||
GRSecurity
|
||||
Kicksecure
|
||||
umask
|
||||
SUID
|
||||
Umask
|
||||
Qubes-Whonix
|
||||
USBGuard
|
||||
initramfs
|
||||
dracut
|
||||
BadUSB
|
||||
chronyd
|
||||
swdate
|
||||
sysfs
|
||||
cgroups
|
||||
MathML
|
||||
WebAuthn
|
||||
BlockBlock
|
||||
HELLOTUX
|
||||
Véliz
|
||||
Poitras
|
||||
Anonym
|
||||
ISRG
|
||||
Orbot
|
||||
Qubes
|
||||
public‑interest
|
||||
Warne
|
||||
Pham
|
||||
material-youtube
|
||||
OpenCollective
|
||||
Monero
|
||||
CoinJoin
|
||||
Banxa
|
||||
@proton
|
||||
CashApp
|
||||
Samouri
|
||||
Coinjoin
|
||||
USDC
|
||||
Stablecoins
|
||||
stablecoins
|
||||
IWAs
|
||||
IWA
|
||||
Beens
|
||||
Techlore
|
||||
whitehouse
|
||||
ShredOS
|
||||
del
|
||||
OMEMO
|
||||
reglock
|
||||
nofollow
|
||||
SecureDrop
|
||||
Cwtch
|
||||
OTF
|
||||
SimpleX
|
||||
noyb
|
||||
darknet
|
||||
Surfshark
|
||||
ExpressVPN
|
||||
PerfectPrivacy
|
||||
IPVanish
|
||||
CyberGhost
|
||||
ibVPN
|
||||
SurfShark
|
||||
VPNArea
|
||||
ThatOnePrivacySite
|
||||
fluffily
|
||||
Huxleyan
|
||||
MPRs
|
||||
INVISV
|
||||
QUIC
|
||||
Fastly
|
||||
OHTTP
|
||||
Appelbaum
|
||||
md-button--primary
|
||||
Niek
|
||||
openpgp
|
||||
material-github
|
||||
Tweakers
|
||||
fontawesome-brands-creative-commons
|
||||
fontawesome-brands-creative-commons-by
|
||||
fontawesome-brands-creative-commons-sa
|
||||
Attribution-ShareAlike
|
||||
ChatGPT
|
||||
LLMs
|
||||
OLMoE
|
||||
MMLU-Pro
|
||||
OpenLLM
|
||||
GGUF
|
||||
Llamafile
|
||||
Ollama
|
||||
cpp
|
||||
fontawesome-brands-windows
|
||||
simple-linux
|
||||
LLaVA
|
||||
fontawesome-solid-desktop
|
||||
llamafiles
|
||||
simple-torbrowser
|
||||
simple-googleplay
|
||||
eepsites
|
||||
simple-firefoxbrowser
|
||||
simple-googlechrome
|
||||
fontawesome-brands-edge
|
||||
scriptlet
|
||||
Adguard
|
||||
simple-appstore
|
||||
Tuta
|
||||
simple-flathub
|
||||
Flathub
|
||||
Cryptomator
|
||||
Securitum
|
||||
Tresorit
|
||||
Computest
|
||||
Peergos
|
||||
InterPlanetary
|
||||
IPFS
|
||||
DocumentsProvider
|
||||
Modmail
|
||||
CipherTrace
|
||||
Monero-only
|
||||
Monerujo
|
||||
CEX
|
||||
RetoSwap
|
||||
Haveno-Reto
|
||||
Haveno
|
||||
Guardarian
|
||||
BeenVerified
|
||||
CheckPeople
|
||||
ClustrMaps
|
||||
Dataveria
|
||||
InfoTracer
|
||||
PeekYou
|
||||
PublicDataUSA
|
||||
Radaris
|
||||
USPhonebook
|
||||
Whitepages
|
||||
Grauer
|
||||
simple-github
|
||||
ExifEraser
|
||||
permissionless
|
||||
Accrescent
|
||||
ExtendedXMP
|
||||
IPTC
|
||||
NoScript
|
||||
cryptominers
|
||||
non-proxied
|
||||
Solana
|
||||
PipeWire
|
||||
Btrfs
|
||||
openQA
|
||||
NixOS
|
||||
Toolbx
|
||||
Nixpkgs
|
||||
ProxyVM
|
||||
deanonymized
|
||||
qubes
|
||||
Xen
|
||||
pg-viridian
|
||||
qube
|
||||
KingsPawn
|
||||
sysdiagnose
|
||||
iMazing
|
||||
keystore
|
||||
Cleartext
|
||||
DoT
|
||||
DoQ
|
||||
eu
|
||||
NextDNS
|
||||
RethinkDNS
|
||||
dnscrypt-proxy
|
||||
anycast
|
||||
geo-steering
|
||||
QNAME
|
||||
PII
|
||||
SimpleLogin
|
||||
twemoji
|
||||
addy
|
||||
material-apple-ios
|
||||
@addy
|
||||
ProxyStore
|
||||
@username
|
||||
backported
|
||||
FairEmail
|
||||
Kontact
|
||||
Mailvelope
|
||||
NeoMutt
|
||||
WKD
|
||||
BitPay
|
||||
paydirekt
|
||||
Sofortüberweisung
|
||||
YubiCloud
|
||||
@mailbox
|
||||
@secure
|
||||
ActiveSync
|
||||
non-Tuta
|
||||
SOGo
|
||||
Mailcow
|
||||
OpenSMTPD
|
||||
Rspamd
|
||||
Mbox
|
||||
JMAP
|
||||
Hardenize
|
||||
Subresource
|
||||
cryptolib
|
||||
cryptofs
|
||||
siv-mode
|
||||
cryptolib-swift
|
||||
cryptomator-objc-cryptor
|
||||
VeraCrypt
|
||||
TrueCrypt
|
||||
cryptoprocessor
|
||||
non-Bitlocker
|
||||
FileVault
|
||||
FDE
|
||||
udiskie
|
||||
Polkit
|
||||
Kryptor
|
||||
Minisign
|
||||
Intevation
|
||||
OpenKeychain
|
||||
ffsend
|
||||
FreedomBox
|
||||
Syncthing
|
||||
simple-freebsd
|
||||
MySudo
|
||||
Coincards
|
||||
Redlib
|
||||
ProxiTok
|
||||
Yattee
|
||||
eepsite
|
||||
proxying
|
||||
LibreTube
|
||||
FramaTube
|
||||
IVPN
|
||||
Cromite
|
||||
Adblock
|
||||
EasyList
|
||||
fontawesome-solid-ellipsis
|
||||
adblock
|
||||
LineageOS
|
||||
NitroPhone
|
||||
Nitrokey
|
||||
Ente
|
||||
Akregator
|
||||
NewsFlash
|
||||
Inoreader
|
||||
Miniflux
|
||||
NetNewsWire
|
||||
Newsboat
|
||||
Newsbeuter
|
||||
Notesnook
|
||||
Cryptee
|
||||
Psono
|
||||
KeePassX
|
||||
KeePassDX
|
||||
gopass
|
||||
Pastebins
|
||||
PrivateBin
|
||||
ZeroBin
|
||||
pastebin
|
||||
pastebins
|
||||
Stingle
|
||||
PhotoPrism
|
||||
UnifiedPush
|
||||
simple-fdroid
|
||||
Mollysocket
|
||||
Olm
|
||||
util-linux
|
||||
uClibc
|
||||
BusyBox
|
||||
OPNsense
|
||||
Netgate
|
||||
pfSense
|
||||
SearXNG
|
||||
SearX
|
||||
Yubico
|
||||
PIV-compatibile
|
||||
CCID
|
||||
PIV
|
||||
HOTP
|
||||
YubiKeys
|
||||
Nitrokeys
|
||||
Obtainium
|
||||
deanonymization
|
||||
VpnService
|
||||
torrenting
|
||||
AntiTracker
|
||||
VMess
|
||||
DAITA
|
||||
deanonymize
|
||||
OTPs
|
||||
SafetyNet
|
||||
IDEMIA
|
||||
backport
|
||||
Silverblue
|
||||
Šamalík
|
||||
PKGBUILDs
|
||||
PPAs
|
||||
Linux-libre
|
||||
Libre
|
||||
ConfinedUsers
|
||||
ZRAM
|
||||
Linux-libre-based
|
||||
Spectre
|
||||
SWAPGS
|
||||
DEs
|
||||
NetworkManager
|
||||
systemd-networkd
|
||||
rpm-ostree-countme
|
||||
countme
|
||||
Hackintoshes
|
||||
OCSP
|
||||
XProtect
|
||||
appVM
|
||||
inter-qube
|
||||
AppVM
|
||||
vchan
|
||||
qrexec
|
||||
Qube
|
||||
sys-net
|
||||
sys-firewall
|
||||
sys-proxyvm
|
||||
sys-whonix
|
||||
anon-whonix
|
||||
ProxyVMs
|
||||
NetVM
|
||||
Rutkowska
|
||||
AutoRun
|
||||
PINs
|
||||
OnTheHub
|
||||
DevContainers
|
||||
fullwidth
|
||||
Fullwidth
|
||||
OptiPNG
|
||||
cwebp
|
||||
Keyring
|
||||
JustDeleteMe
|
||||
NotPetya
|
||||
EternalBlue
|
||||
Technopolice
|
||||
Datalogix
|
||||
Cryptoprocessor
|
||||
TPMs
|
||||
Pluton
|
||||
Buskill
|
||||
BusKill
|
||||
diceware
|
||||
Diceware
|
||||
geo-restrictions
|
||||
ECH
|
||||
dVPNs
|
||||
dVPN
|
||||
Pseudonymity
|
||||
@Thorin-Oakenpants
|
||||
DocumentsUI
|
||||
CameraX
|
||||
AFWall
|
||||
AdAway
|
||||
TrackerControl
|
||||
loopback
|
||||
Aptoide
|
||||
APKPure
|
||||
simple-gitlab
|
||||
IzzyOnDroid
|
||||
Gadgetbridge
|
||||
tshark
|
||||
systemd
|
||||
systemd-resolved
|
||||
EDNS
|
||||
Chainalysis
|
||||
BadExit
|
||||
HSDir
|
||||
deanonymizing
|
||||
WebTunnel
|
||||
Computerphile
|
||||
namazso
|
||||
HelloTux
|
||||
wordmark
|
||||
Bagnard
|
||||
sublicensees
|
||||
BurungHantu
|
||||
privacytoolsIO
|
||||
privacytools
|
||||
trai
|
||||
PrivacyGuides
|
||||
@dngray
|
||||
simple-youtube
|
||||
simple-peertube
|
||||
simple-bluesky
|
||||
dngray
|
||||
bsky
|
||||
@freddy
|
||||
Memoji
|
||||
QuickType
|
||||
Freeform
|
||||
subprocessors
|
||||
Schrems
|
||||
Subprocessor
|
||||
Subprocessors
|
||||
Triplebit
|
||||
Fediverse
|
||||
Safing
|
||||
YubiHSM
|
||||
ykman
|
||||
material-linux
|
||||
yubico
|
||||
material-microsoft-windows
|
||||
HSMauth
|
||||
PUK
|
||||
TDES
|
||||
ModHex
|
||||
OATH-TOTPs
|
||||
OATH-HOTP
|
||||
OATH-HOTPs
|
||||
MODHEX
|
||||
HMAC-based
|
||||
subkeys
|
||||
subkey
|
||||
keysize
|
||||
Keygrip
|
||||
tessera
|
||||
Corbató
|
||||
NordPass
|
||||
Syncable
|
||||
fontawesome-solid-glasses
|
||||
CommonHealth
|
||||
Euki
|
||||
sympto-thermal
|
||||
OsmAnd
|
||||
Paaster
|
||||
material-check-decagram
|
||||
Bluesky
|
||||
Codeberg
|
||||
simple-codeberg
|
||||
simple-reddit
|
||||
fontawesome-brands-linkedin
|
||||
simple-keepassxc
|
||||
OnlyKey
|
||||
fontawesome-solid-unlock-keyhole
|
||||
KeeShare
|
||||
KeePassium
|
||||
MWEB
|
||||
Cyd
|
||||
Semiphemeral
|
||||
Dangerzone
|
||||
simple-activitypub
|
||||
ActivityPub
|
||||
pseudorandom
|
||||
Chaum
|
||||
unlinkability
|
||||
Kagi
|
||||
Secureblue
|
||||
pseudonymity
|
||||
TrueNAS
|
||||
Arti
|
||||
Tailscale
|
||||
allowlisted
|
||||
MyMonero
|
||||
Monero-LWS
|
||||
OkCupid
|
||||
Anom
|
||||
80
.vscode/ltex.hiddenFalsePositives.en-US.txt
vendored
@@ -1,80 +0,0 @@
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QImage Credit: Yipeng Lu\\E$"}
|
||||
{"rule":"CLOSE_SCRUTINY","sentence":"^\\QThis technology can work using only 2D footage and doesn't even require close proximity or high resolution sensors like other forms of biometrics.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QCompanies like TypingDNA claim to be able to identify users by how they type.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QImage Credit: Alireza Bilesan, Saeed Behzadipour, Teppei Tsujita, Shunsuke Komizunai, and Atsushi Konno\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QImage Credit: Yousef, R.N., Khalil, A.T., Samra, A.S. et al.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QImage Credit: clockit.io\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QExample of finger minutiae including forks (where one line splits into multiple lines), ends (where a line ends), islands (isolated dots), and inclosures (lines that split into two and then reconnect)\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QIllustration: Jonah Aragon / Privacy Guides | Photo: Jair Lázaro / Unsplash\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QIllustration: Jonah Aragon / Privacy Guides | Photo: Koshu Kunii / Unsplash\\E$"}
|
||||
{"rule":"COMMA_COMPOUND_SENTENCE","sentence":"^\\QYou should also make sure your mobile plan is topped up and you have enough mobile data prior to the event.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QA good rule of thumb is that unless a post from GrapheneOS is specifically talking about GrapheneOS-specific, privacy-related functionality and not about other projects/software/etc., it is probably off-topic here.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QIn an interview with Gizmodo, Christopher Soghoian, Principal Technologist and Senior Policy Analyst at the American Civil Liberties Union said that, \"There are many Telegram users who think they are communicating in an end-to-end encrypted way, when they're not because they don't realize that they have to turn on an additional setting,\" he continued to say that while he's happy they offer the encryption, it's not useful if it's turned off.\\E$"}
|
||||
{"rule":"ALL_MOST_SOME_OF_NOUN","sentence":"^\\QOpen source may be the most used phrase in all of privacy and security, and for good reason.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QIllustration: Jordan Warne / Privacy Guides | Photo: Christin Hume / Unsplash\\E$"}
|
||||
{"rule":"EN_UNPAIRED_BRACKETS","sentence":"^\\QIf you need to erase this history for safety but keep the document, you can go to \"File\" > \"Make a copy\", then go back to the original document with the history you need to erase, click on \"Access\", then \"Destroy\", then click again on \"Are you sure?\".\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QWe reached out to System1 CEO Ian Weingarten for an explanation.\\E$"}
|
||||
{"rule":"IF_THERE","sentence":"^\\QIn an interview with TechCrunch, Wire CEO Morten Brøgger said of privacy laws: “We are in Switzerland, which has the best privacy laws in the world” — it's subject to Europe's General Data Protection Regulation framework (GDPR) on top of its own local laws — “and Wire now belongs to a new group holding, but there no change in control.” sic\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\Qadvancedbackgroundchecks.com :white_check_mark: Removed :white_check_mark: Removed\nbeenverified.com :white_check_mark: Removed :warning: Found\ncheckpeople.com :white_check_mark: Removed :white_check_mark: Removed\nclustrmaps.com :white_check_mark: Removed :white_check_mark: Removed\ndataveria.com :white_check_mark: Removed :white_check_mark: Removed\ngladiknow.com :white_check_mark: Removed :white_check_mark: Removed\ninfotracer.com :white_check_mark: Removed :warning: Found\nintelius.com* :warning: Found :warning: Found\npeekyou.com* :warning: Found :warning: Found\npublicdatausa.com^1 :white_check_mark: Removed :white_check_mark: Removed\nradaris.com :white_check_mark: Removed :white_check_mark: Removed\nspokeo.com :white_check_mark: Removed ::white_check_mark: Removed\nthatsthem.com :white_check_mark: Removed :white_check_mark: Removed\nusphonebook.com :white_check_mark: Removed :white_check_mark: Removed\nspyfly.com :white_check_mark: Removed :white_check_mark: Removed\nRemaining Results 13% 23%\\E$"}
|
||||
{"rule":"WHITESPACE_RULE","sentence":"^\\QPerson A Person B\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QCalyxOS uses the default AOSP Scudo Malloc, which is generally less effective.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QIllustration: Jonah Aragon / Privacy Guides | Photo: Aleksander Dumała / Pexels\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QDisable the option \"Anonymously report errors and usage statistics to balena.io\", then click \"OK\".\\E$"}
|
||||
{"rule":"EN_UNPAIRED_BRACKETS","sentence":"^\\QThe button on the right is blue and labeled \"Flash!\".\\E$"}
|
||||
{"rule":"PREPOSITION_VERB","sentence":"^\\QAdd a Receive action and set it to receive Images from Share Sheet\\E$"}
|
||||
{"rule":"A_INFINITIVE","sentence":"^\\QWindows allows you to place files in a SendTo folder which then appear in the Send to context menu.\\E$"}
|
||||
{"rule":"A_INFINITIVE","sentence":"^\\QRight-click a supported file and choose ExifTool.bat within the Send to context menu.\\E$"}
|
||||
{"rule":"COMMA_COMPOUND_SENTENCE","sentence":"^\\QYour location data is not E2EE when your device is online and you use Find My iPhone remotely to locate your device.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QOther technologies that were disabled include WebGL, MathML, Gamepad API, Web Audio API, RTCDataChannel, and SVG Fonts.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QOnion Browser is an open-source app created by Mike Tigas, who has worked closely with Tor Project in the past and was previously an investigative journalist at ProPublica (he is currently an advisor at the FTC).\\E$"}
|
||||
{"rule":"MISSING_COMMA_AFTER_INTRODUCTORY_PHRASE","sentence":"^\\QBesides leaving it blank for the default, it comes with three built-in user agent strings you can choose from, or you can enter your own.\\E$"}
|
||||
{"rule":"COMMA_COMPOUND_SENTENCE_2","sentence":"^\\QStartpage CEO Robert Beens discusses the investment from Privacy One / System1\nWhat is Startpage's relationship with Privacy One/System1 and what does this mean for my privacy protections?\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QSelect :material-dots-vertical: > Settings > Privacy\n Turn off Show Calls in Recents\\E$"}
|
||||
{"rule":"COMMA_COMPOUND_SENTENCE","sentence":"^\\QWhile this change makes sense from the perspective of making it so you cannot \"hold a number hostage\" as long as you keep checking in, it is particularly important for people who've used disposable phone numbers to know this.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QPhoto: ev / Unsplash\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QEnter the-company formerly-known-as-Facebook's rival to the birdsite: Threads.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QThreads' naffness won't stop its success.\\E$"}
|
||||
{"rule":"EXTREME_ADJECTIVES","sentence":"^\\QIt feels really good.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QSam is an elearning designer and privacy advocate interested in free (libre) software and how it can protect civil liberties.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QThis article was originally published on my personal blog at samhowell.uk, on February 15th, 2019.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\Q:japanese_goblin:{ .lg .middle } Kevin Pham\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\Q2022: ISO/IEC 27001:2013^1 Compliance Certification by TÜV Rheinland InterCert Kft\n2021: Penetration Testing by Computest\nThis review assessed the security of the Tresorit web client, Android app, Windows app, and associated infrastructure.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\Q2022: ISO/IEC 27001:2013^1 Compliance Certification by TÜV Rheinland InterCert Kft\n2021: Penetration Testing by Computest\nThis review assessed the security of the Tresorit web client, Android app, Windows app, and associated infrastructure.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QFirefox sends data about your Firefox version and language; device operating system and hardware configuration; memory, basic information about crashes and errors; outcome of automated processes like updates, safebrowsing, and activation to us.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QNewPipe is a free and open-source Android application for YouTube, SoundCloud, media.ccc.de, Bandcamp, and PeerTube (1).\\E$"}
|
||||
{"rule":"ADD_AN_ADDITIONAL","sentence":"^\\QThis setting adds an additional Adblock Plus list that may increase the effectiveness of Cromite's content blocking.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QUncheck the autoupdate setting\\E$"}
|
||||
{"rule":"CLEAN_UP","sentence":"^\\QIf your device supports it, you can use the Clean Up feature to pixelate faces or remove objects from images.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QTurn off AutoPlay: Enabled\nDisallow Autoplay for nonvolume devices: Enabled\nSet the default behavior for AutoRun: Enabled\nDefault AutoRun Behavior: Do not execute any AutoRun commands\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QLorem ipsum dolor sit amet, consectetur adipiscing elit.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QNulla et euismod nulla.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QCurabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QThe name of the Subreddit is r/PrivacyGuides or the Privacy Guides Subreddit.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QTurn off Remove the XML declaration\nx Turn on Remove metadata\nx Turn on Remove comments\nx Turn on Embedded raster images\nx Turn on Enable viewboxing\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QSource: plainlanguage.gov\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QKathy McGinty offers tongue-in-cheek instructions for bulking up your simple, direct sentences:\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QIn France, you can take a look at the Technopolice website maintained by the non-profit association La Quadrature du Net.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QFIDO (Fast IDentity Online)\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QThe entropy per word in a diceware passphrase is calculated as log 2 ( WordsInList )\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QTo calculate the amount of possible passphrases, all we have to do is WordsInList WordsInPhrase\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QThey ultimately paid two companies (Chainalysis and Integra Fec) a combined $1.25 million to further develop tools to do so.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QWe also especially thank our dedicated community moderation team on Matrix and our forum: Austin Huang, namazso, hik, riley, and Valynor.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QPortions of this notice itself were adopted from opensource.guide on GitHub.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\Qr/redditrequest is Reddit's way of making sure communities have active moderators and is part of the Moderator Code of Conduct.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QIf you were removed as moderator from a Subreddit through Reddit request it is because your lack of response and lack of activity qualified the Subreddit for an r/redditrequest transfer.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QIf you were removed as moderator from a subreddit through Reddit request it is because your lack of response and lack of activity qualified the subreddit for an r/redditrequest transfer.\\E$"}
|
||||
{"rule":"IN_OR_WITH_REGARDS_TO_OF","sentence":"^\\QRetaliation from any moderator with regards to removal requests is disallowed.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QPhoto: Dimmis Vart / Unsplash\\E$"}
|
||||
{"rule":"SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA","sentence":"^\\QFurther develop an individual story or line of coverage.\\E$"}
|
||||
{"rule":"DOUBLE_PUNCTUATION","sentence":"^\\QOur readership is entitled to as much information as possible in order to judge the reliability of our sources themselves..\\E$"}
|
||||
{"rule":"DOUBLE_PUNCTUATION","sentence":"^\\QOur contributors should always question the motives behind a source requesting anonymity..\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QIllustration: Em / Privacy Guides | Photo: Edward Eyer / Pexels\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QOn February 7th this year, Joseph Menn reported from the Washington Post that officials in the United Kingdom had contacted Apple to demand the company allows them to access data from any iCloud user worldwide.\\E$"}
|
||||
{"rule":"DO_VBZ","sentence":"^\\QDoes Privacy Guides sell my personal information?\\E$"}
|
||||
{"rule":"DO_VBZ","sentence":"^\\QDoes Privacy Guides use personal information for marketing purposes?\\E$"}
|
||||
{"rule":"DO_VBZ","sentence":"^\\QWhere does Privacy Guides store data about me?\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QPrivacy Guides relies on the European Commission's standard contractual clauses for international transfers(SCCs) to legally transfer personal data out of the European Economic Area.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QIllustration: Jordan / Privacy Guides | Photo: Gowtham AGM / Unsplash\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QThunder was used specifically because it was difficult for Germans to pronounce, since the English \"th\" sound doesn't exist in German.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QAllan Scherr, a Ph.D. researcher at MIT, wanted more time for his detailed simulations.\\E$"}
|
||||
{"rule":"MORFOLOGIK_RULE_EN_US","sentence":"^\\QYou can test out passkeys at webauthn.io.\\E$"}
|
||||
73
.vscode/settings.json
vendored
@@ -20,75 +20,7 @@
|
||||
|
||||
{
|
||||
"git.ignoreLimitWarning": true,
|
||||
"ltex.diagnosticSeverity": {
|
||||
"COMMA_COMPOUND_SENTENCE": "information",
|
||||
"COMMA_COMPOUND_SENTENCE_2": "information",
|
||||
"MORFOLOGIK_RULE_EN_US": "warning",
|
||||
"HE_VERB_AGR": "hint",
|
||||
"WHETHER": "hint",
|
||||
"MAKE_SINCE": "information",
|
||||
"CLOSE_SCRUTINY": "information",
|
||||
"EN_COMPOUNDS": "warning",
|
||||
"ADMIT_ENJOY_VB": "hint",
|
||||
"ABOUT_WHO_TO": "warning",
|
||||
"MISSING_GENITIVE": "hint",
|
||||
"ENGLISH_WORD_REPEAT_BEGINNING_RULE": "hint",
|
||||
"EN_UNPAIRED_BRACKETS": "warning",
|
||||
"MISSING_ARTICLE": "warning",
|
||||
"SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA": "warning",
|
||||
"CONDITIONAL_CLAUSE": "hint",
|
||||
"DAMAGE_OF_TO": "hint",
|
||||
"ETC_PERIOD": "warning",
|
||||
"WHITESPACE_RULE": "hint",
|
||||
"UPPERCASE_SENTENCE_START": "hint",
|
||||
"LARGE_NUMBER_OF": "information",
|
||||
"ENGLISH_WORD_REPEAT_RULE": "hint",
|
||||
"SOME_OF_THE": "hint",
|
||||
"IF_OF": "warning",
|
||||
"THE_JJR_THE_MORE_COMMA": "warning",
|
||||
"POSSESSIVE_APOSTROPHE": "hint",
|
||||
"BY_DEFAULT_COMMA": "warning",
|
||||
"ADVERB_WORD_ORDER": "hint",
|
||||
"E_G": "warning",
|
||||
"YOUR_RE": "warning",
|
||||
"TOR_FOR": "hint",
|
||||
"COMMA_PARENTHESIS_WHITESPACE": "hint",
|
||||
"AGREEMENT_SENT_START": "hint",
|
||||
"SETUP_VERB": "warning",
|
||||
"MD_NO_VB": "warning",
|
||||
"CLICK_HYPHEN": "information",
|
||||
"NON3PRS_VERB": "hint",
|
||||
"SENTENCE_WHITESPACE": "hint",
|
||||
"BE_TO_VBG": "warning",
|
||||
"I_NOT_JJ": "warning",
|
||||
"PROFANITY": "hint",
|
||||
"AD_ADD": "hint",
|
||||
"THE_SUPERLATIVE": "hint",
|
||||
"PLURAL_VERB_AFTER_THIS": "hint",
|
||||
"LC_AFTER_PERIOD": "hint",
|
||||
"PREPOSITION_VERB": "hint",
|
||||
"OTHER_OTHERS": "hint",
|
||||
"ON_THE_NOVEL": "hint",
|
||||
"OUTSIDE_OF": "warning",
|
||||
"UNLIKELY_OPENING_PUNCTUATION": "hint",
|
||||
"SMALL_NUMBER_OF": "hint",
|
||||
"A_UNCOUNTABLE": "information",
|
||||
"AFFORD_VB": "hint",
|
||||
"AN_INVITE": "hint",
|
||||
"HAVE_PART_AGREEMENT": "hint",
|
||||
"PHRASE_REPETITION": "hint",
|
||||
"THIS_NNS_VB": "hint",
|
||||
"NNS_IN_NNP_VBZ": "hint",
|
||||
"APPLE_PRODUCTS": "warning",
|
||||
"OVER_TIME": "hint",
|
||||
"IN_THE_MOMENT": "hint",
|
||||
"ARROWS": "hint",
|
||||
"AUXILIARY_DO_WITH_INCORRECT_VERB_FORM": "hint",
|
||||
"MISSING_COMMA_AFTER_YEAR": "hint",
|
||||
"DO_VBZ": "hint",
|
||||
"NOUN_AROUND_IT": "hint",
|
||||
"default": "error"
|
||||
},
|
||||
"ltex.diagnosticSeverity": "hint",
|
||||
"editor.unicodeHighlight.ambiguousCharacters": true,
|
||||
"editor.unicodeHighlight.invisibleCharacters": true,
|
||||
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint",
|
||||
@@ -115,6 +47,5 @@
|
||||
"editor.formatOnSave": true,
|
||||
"[github-actions-workflow]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"python-envs.pythonProjects": []
|
||||
}
|
||||
}
|
||||
|
||||
10
CITATION.cff
@@ -32,11 +32,11 @@ authors:
|
||||
repository-code: "https://github.com/privacyguides/privacyguides.org"
|
||||
license:
|
||||
- MIT
|
||||
- CC-BY-SA-4.0
|
||||
- CC-BY-ND-4.0
|
||||
references:
|
||||
- authors:
|
||||
- family-names: Donath
|
||||
given-names: Martin
|
||||
- family-names: Donath
|
||||
given-names: Martin
|
||||
title: "mkdocs-material"
|
||||
type: software
|
||||
repository-code: "https://github.com/squidfunk/mkdocs-material"
|
||||
@@ -81,7 +81,7 @@ preferred-citation:
|
||||
- alias: samsepi0l
|
||||
website: "https://github.com/d4rklynk"
|
||||
- name: Privacy Guides Contributors
|
||||
website: "https://www.privacyguides.org/en/about/contributors/"
|
||||
website: "https://github.com/privacyguides/privacyguides.org/graphs/contributors"
|
||||
url: "https://www.privacyguides.org"
|
||||
abstract: >-
|
||||
Privacy Guides is a socially motivated website that
|
||||
@@ -95,4 +95,4 @@ preferred-citation:
|
||||
- encryption
|
||||
- website
|
||||
- markdown
|
||||
license: CC-BY-SA-4.0
|
||||
license: CC-BY-ND-4.0
|
||||
|
||||
114
Dockerfile
@@ -1,84 +1,72 @@
|
||||
FROM python:3.12-slim-bookworm AS base
|
||||
FROM python:3.12-alpine as base
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/privacyguides/privacyguides.org"
|
||||
|
||||
# Setup environment
|
||||
ENV LANG=C.UTF-8
|
||||
ENV LC_ALL=C.UTF-8
|
||||
ENV PYTHONDONTWRITEBYTECODE=1
|
||||
ENV PYTHONFAULTHANDLER=1
|
||||
# Setup env
|
||||
ENV LANG C.UTF-8
|
||||
ENV LC_ALL C.UTF-8
|
||||
ENV PYTHONDONTWRITEBYTECODE 1
|
||||
ENV PYTHONFAULTHANDLER 1
|
||||
|
||||
####################################################
|
||||
# Stage: python-deps
|
||||
# Install pipenv and compilation dependencies
|
||||
####################################################
|
||||
FROM base AS python-deps
|
||||
|
||||
# Install pipenv
|
||||
RUN pip install --no-cache-dir pipenv
|
||||
# Install pipenv and compilation dependencies
|
||||
RUN pip install pipenv
|
||||
RUN \
|
||||
apk upgrade --update-cache -a \
|
||||
&& \
|
||||
apk add --no-cache \
|
||||
gcc \
|
||||
libffi-dev \
|
||||
musl-dev
|
||||
|
||||
# Install build tools and libraries needed to compile any Python packages
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
gcc \
|
||||
libffi-dev \
|
||||
build-essential \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Copy Pipfile, Pipfile.lock, and any local modules needed for dependency resolution
|
||||
# Install python dependencies in /.venv
|
||||
COPY modules/mkdocs-material ./modules/mkdocs-material
|
||||
COPY Pipfile .
|
||||
COPY Pipfile.lock .
|
||||
|
||||
# Install all Python dependencies into a project‐local virtual environment at /.venv
|
||||
RUN PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy
|
||||
|
||||
####################################################
|
||||
# Stage: nodejs-deps
|
||||
# Install nodejs/npm and compilation dependencies
|
||||
####################################################
|
||||
FROM node:24-bookworm-slim AS nodejs-deps
|
||||
|
||||
RUN npm i -g all-contributors-cli
|
||||
RUN npm install -g pkg
|
||||
|
||||
RUN cd /usr/local/lib/node_modules/all-contributors-cli && \
|
||||
pkg dist/cli.js -t node18-linux -o /usr/local/bin/all-contributors-cli
|
||||
|
||||
####################################################
|
||||
# Stage: runtime
|
||||
# Install runtime dependencies and copy runtime artifacts
|
||||
####################################################
|
||||
FROM base AS runtime
|
||||
|
||||
# Install runtime packages (GTK/Cairo, image processing libraries, Git, etc.)
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
libcairo2-dev \
|
||||
libfreetype6-dev \
|
||||
git \
|
||||
libjpeg-dev \
|
||||
libpng-dev \
|
||||
openssh-client \
|
||||
pngquant \
|
||||
tini \
|
||||
zlib1g-dev \
|
||||
libffi-dev \
|
||||
bash \
|
||||
caddy \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
# Install runtime dependencies
|
||||
RUN \
|
||||
apk upgrade --update-cache -a \
|
||||
&& \
|
||||
apk add --no-cache \
|
||||
cairo \
|
||||
freetype-dev \
|
||||
git \
|
||||
git-fast-import \
|
||||
jpeg-dev \
|
||||
openssh \
|
||||
pngquant \
|
||||
tini \
|
||||
zlib-dev \
|
||||
libffi-dev \
|
||||
musl-dev \
|
||||
bash
|
||||
|
||||
# Copy virtual environment and local mkdocs-material module from python-deps stage
|
||||
# Copy virtual env from python-deps stage
|
||||
COPY --from=python-deps /.venv /.venv
|
||||
COPY --from=python-deps /modules/mkdocs-material /modules/mkdocs-material
|
||||
|
||||
# Copy all-contributors-cli from nodejs-deps stage
|
||||
COPY --from=nodejs-deps /usr/local/bin/all-contributors-cli /usr/local/bin/all-contributors-cli
|
||||
|
||||
# Ensure the virtual environment’s bin directory is first in PATH
|
||||
ENV PATH="/.venv/bin:$PATH"
|
||||
|
||||
# Create and switch to a new user
|
||||
RUN mkdir /site
|
||||
WORKDIR /site
|
||||
|
||||
COPY docs docs
|
||||
COPY theme theme
|
||||
COPY includes includes
|
||||
COPY *.yml .
|
||||
COPY .cache/plugin/social/fonts .cache/plugin/social/fonts
|
||||
COPY run.sh .
|
||||
|
||||
EXPOSE 8000
|
||||
|
||||
ENV MKDOCS_INHERIT mkdocs-production.yml
|
||||
|
||||
HEALTHCHECK NONE
|
||||
|
||||
# Entry point script and default cmd for running mkdocs
|
||||
ENTRYPOINT ["/bin/bash"]
|
||||
ENTRYPOINT ["./run.sh"]
|
||||
CMD ["--cmd=mkdocs", "--insiders", "--cmd_flags=--dev-addr=0.0.0.0:8000"]
|
||||
|
||||
103
LICENSE
@@ -1,4 +1,4 @@
|
||||
Attribution-ShareAlike 4.0 International
|
||||
Attribution-NoDerivatives 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
@@ -33,7 +33,7 @@ exhaustive, and do not form part of our licenses.
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
@@ -50,16 +50,17 @@ exhaustive, and do not form part of our licenses.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||
Creative Commons Attribution-NoDerivatives 4.0 International Public
|
||||
License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||
Attribution-NoDerivatives 4.0 International Public License ("Public
|
||||
License"). To the extent this Public License may be interpreted as a
|
||||
contract, You are granted the Licensed Rights in consideration of Your
|
||||
acceptance of these terms and conditions, and the Licensor grants You
|
||||
@@ -80,15 +81,7 @@ Section 1 -- Definitions.
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
b. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
@@ -96,33 +89,29 @@ Section 1 -- Definitions.
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
c. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
d. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
e. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
f. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
g. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. Share means to provide material to the public by any means or
|
||||
h. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
@@ -130,13 +119,13 @@ Section 1 -- Definitions.
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
l. Sui Generis Database Rights means rights other than copyright
|
||||
i. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
m. You means the individual or entity exercising the Licensed Rights
|
||||
j. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
@@ -152,7 +141,7 @@ Section 2 -- Scope.
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
b. produce and reproduce, but not Share, Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
@@ -182,13 +171,7 @@ Section 2 -- Scope.
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
b. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
@@ -230,8 +213,7 @@ following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
1. If You Share the Licensed Material, You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
@@ -259,6 +241,9 @@ following conditions.
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
For the avoidance of doubt, You do not have permission under
|
||||
this Public License to Share Adapted Material.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
@@ -270,25 +255,6 @@ following conditions.
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
@@ -297,13 +263,13 @@ apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
portion of the contents of the database, provided You do not Share
|
||||
Adapted Material;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
including for purposes of Section 3(b); and
|
||||
Rights (but not its individual contents) is Adapted Material; and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
@@ -404,24 +370,23 @@ Section 8 -- Interpretation.
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public licenses.
|
||||
Notwithstanding, Creative Commons may elect to apply one of its public
|
||||
licenses to material it publishes and in those instances will be
|
||||
considered the “Licensor.” The text of the Creative Commons public
|
||||
licenses is dedicated to the public domain under the CC0 Public Domain
|
||||
Dedication. Except for the limited purpose of indicating that material
|
||||
is shared under a Creative Commons public license or as otherwise
|
||||
permitted by the Creative Commons policies published at
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the public
|
||||
licenses.
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
|
||||
2
Pipfile
@@ -29,8 +29,6 @@ mkdocs-git-revision-date-localized-plugin = "~=1.2"
|
||||
mkdocs-git-authors-plugin = "~=0.8"
|
||||
mkdocs-macros-plugin = "~=1.0"
|
||||
jieba = "~=0.42"
|
||||
mkdocs-rss-plugin = "*"
|
||||
mkdocs-glightbox = "*"
|
||||
|
||||
[dev-packages]
|
||||
scour = "~=0.38"
|
||||
|
||||
1251
Pipfile.lock
generated
@@ -1,92 +0,0 @@
|
||||
authors:
|
||||
aprilfools:
|
||||
name: Anita Key
|
||||
description: Government Liaison
|
||||
avatar: https://github.com/privacyguides.png
|
||||
contributors:
|
||||
type: Organization
|
||||
name: Privacy Guides
|
||||
description: Various Authors
|
||||
avatar: https://github.com/privacyguides.png
|
||||
danarel:
|
||||
name: Dan Arel
|
||||
description: Former Team Member
|
||||
avatar: https://github.com/danarel.png
|
||||
dngray:
|
||||
name: Daniel Gray
|
||||
description: Team Member
|
||||
avatar: https://github.com/dngray.png
|
||||
em:
|
||||
name: Em
|
||||
description: Staff Writer
|
||||
avatar: https://github.com/EmAtPrivacyGuides.png
|
||||
mastodon:
|
||||
username: Em0nM4stodon
|
||||
instance: infosec.exchange
|
||||
kevpham:
|
||||
name: Kevin Pham
|
||||
description: News Intern
|
||||
avatar: https://github.com/kpham42.png
|
||||
freddy:
|
||||
name: Freddy
|
||||
description: Team Member
|
||||
avatar: https://github.com/freddy-m.png
|
||||
mastodon:
|
||||
username: freddy
|
||||
instance: social.lol
|
||||
twitter: m00ws
|
||||
bluesky: freddy.lol
|
||||
fria:
|
||||
name: fria
|
||||
description: Team Member
|
||||
avatar: https://github.com/friadev.png
|
||||
jordan:
|
||||
name: Jordan Warne
|
||||
description: Video Producer
|
||||
avatar: https://forum-cdn.privacyguides.net/user_avatar/discuss.privacyguides.net/jordan/288/7793_2.png
|
||||
mastodon:
|
||||
username: jw
|
||||
instance: social.lol
|
||||
jonah:
|
||||
name: Jonah Aragon
|
||||
description: Project Director
|
||||
avatar: https://github.com/jonaharagon.png
|
||||
mastodon:
|
||||
username: jonah
|
||||
instance: neat.computer
|
||||
twitter: jonaharagon
|
||||
bluesky: jonaharagon.com
|
||||
justin:
|
||||
name: Justin Ehrenhofer
|
||||
description: Guest Contributor
|
||||
avatar: https://github.com/SamsungGalaxyPlayer.png
|
||||
mastodon:
|
||||
username: sgp
|
||||
instance: neat.computer
|
||||
kaitebay:
|
||||
name: Kai Tebay
|
||||
description: Former Team Member
|
||||
avatar: https://github.com/kaitebay.png
|
||||
matchboxbananasynergy:
|
||||
name: mbananasynergy
|
||||
description: Former Team Member
|
||||
avatar: https://github.com/matchboxbananasynergy.png
|
||||
mfwmyfacewhen:
|
||||
name: mfwmyfacewhen
|
||||
description: Former Team Member
|
||||
avatar: https://github.com/ghost.png
|
||||
natebartram:
|
||||
name: Nate Bartram
|
||||
description: Guest Contributor
|
||||
avatar: https://gitlab.com/uploads/-/system/user/avatar/8993331/avatar.png
|
||||
niek-de-wilde:
|
||||
name: Niek de Wilde
|
||||
description: Team Member
|
||||
avatar: https://github.com/blacklight447.png
|
||||
mastodon:
|
||||
username: blacklight447
|
||||
instance: mastodon.social
|
||||
sam-howell:
|
||||
name: Sam Howell
|
||||
description: Guest Contributor
|
||||
avatar: https://gitlab.com/uploads/-/system/user/avatar/5349522/avatar.png
|
||||
@@ -1,5 +0,0 @@
|
||||
# 2019
|
||||
|
||||
!!! danger "Old Content"
|
||||
|
||||
These posts are 5 years old. They may not accurately reflect the current opinion of our team.
|
||||
@@ -1,5 +0,0 @@
|
||||
# 2020
|
||||
|
||||
!!! danger "Old Content"
|
||||
|
||||
These posts are 4 years old. They may not accurately reflect the current opinion of our team.
|
||||
@@ -1,5 +0,0 @@
|
||||
# 2021
|
||||
|
||||
!!! danger "Old Content"
|
||||
|
||||
These posts are 3 years old. They may not accurately reflect the current opinion of our team.
|
||||
@@ -1,5 +0,0 @@
|
||||
# 2022
|
||||
|
||||
!!! danger "Old Content"
|
||||
|
||||
These posts are 2 years old. They may not accurately reflect the current opinion of our team.
|
||||
|
Before Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 125 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 173 KiB |
|
Before Width: | Height: | Size: 214 KiB |
|
Before Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 317 KiB |
|
Before Width: | Height: | Size: 115 KiB |
|
Before Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 211 KiB |
|
Before Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 117 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 636 KiB |
|
Before Width: | Height: | Size: 246 KiB |
|
Before Width: | Height: | Size: 234 KiB |
|
Before Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 111 KiB |
|
Before Width: | Height: | Size: 115 KiB |
|
Before Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 260 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 148 KiB |
|
Before Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 147 KiB |