diff --git a/.devcontainer/Caddyfile b/.devcontainer/Caddyfile new file mode 100644 index 00000000..92000e0e --- /dev/null +++ b/.devcontainer/Caddyfile @@ -0,0 +1,6 @@ +:1337 { + reverse_proxy /articles/* http://127.0.0.1:8001 + reverse_proxy /videos/* http://127.0.0.1:8002 + reverse_proxy /en/* http://127.0.0.1:8000 + redir / /en/ +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4aab3714..2c128ea7 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,8 +1,131 @@ -// 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 +// For format details, see https://aka.ms/devcontainer.json. { - "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" + "name": "Privacy Guides", + "image": "ghcr.io/privacyguides/privacyguides.org:sha-750239d", + "overrideCommand": true, + "portsAttributes": { + "1337": { + "label": "Website Live Preview", + "onAutoForward": "notify" + }, + "8000": { + "label": "Main", + "onAutoForward": "silent" + }, + "8001": { + "label": "Articles", + "onAutoForward": "silent" + }, + "8002": { + "label": "Videos", + "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": "Videos", + "type": "shell", + "command": "mkdocs serve --config-file=mkdocs.videos.yml --dev-addr=localhost:8002", + "group": "test", + "runOptions": { + "runOn": "folderOpen" + }, + "presentation": { + "reveal": "always", + "panel": "dedicated", + "group": "Live server" + } + }, + { + "label": "Main", + "type": "shell", + "command": "./run.sh --cmd=mkdocs --insiders --production", + "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" + } + } + } + } + } } diff --git a/.devcontainer/team/devcontainer.json b/.devcontainer/team/devcontainer.json deleted file mode 100644 index d828e707..00000000 --- a/.devcontainer/team/devcontainer.json +++ /dev/null @@ -1,8 +0,0 @@ -// 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" -} diff --git a/.github/workflows/build-container.yml b/.github/workflows/build-container.yml index ebc1db61..04d30b5e 100644 --- a/.github/workflows/build-container.yml +++ b/.github/workflows/build-container.yml @@ -1,9 +1,7 @@ name: ☁️ Build Container -# Configures this workflow to run every time a change is pushed to the branch called `release`. +# Configures this workflow to run every release. on: - push: - branches: ["main"] release: types: [published] workflow_dispatch: @@ -75,6 +73,12 @@ 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. @@ -85,6 +89,9 @@ jobs: 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() }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9468eca8..be92650f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -57,6 +57,18 @@ 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: | diff --git a/.gitmodules b/.gitmodules index 4ce9522e..bc561bf9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,4 +3,4 @@ url = https://github.com/privacyguides/brand.git [submodule "modules/mkdocs-material"] path = modules/mkdocs-material - url = git@github.com:privacyguides/mkdocs-material-insiders.git + url = https://github.com/privacyguides/mkdocs-material-insiders.git diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 95992a2b..7d8a9d10 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -27,11 +27,15 @@ "redhat.vscode-yaml", "ecmel.vscode-html-css", "yzhang.markdown-all-in-one", - "valentjn.vscode-ltex", "bierner.markdown-checkbox", "bierner.markdown-emoji", "bierner.markdown-footnotes", "bierner.markdown-preview-github-styles", - "esbenp.prettier-vscode" + "esbenp.prettier-vscode", + "ltex-plus.vscode-ltex-plus", + "ms-python.python", + "github.vscode-github-actions", + "ms-vscode-remote.remote-containers", + "github.codespaces" ] } diff --git a/Dockerfile b/Dockerfile index d05c98d8..1d844b91 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,72 +1,69 @@ -FROM python:3.13-alpine as base +FROM python:3.12-bookworm AS base LABEL org.opencontainers.image.source="https://github.com/privacyguides/privacyguides.org" -# Setup env -ENV LANG C.UTF-8 -ENV LC_ALL C.UTF-8 -ENV PYTHONDONTWRITEBYTECODE 1 -ENV PYTHONFAULTHANDLER 1 +# Setup environment +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 and compilation dependencies -RUN pip install pipenv -RUN \ - apk upgrade --update-cache -a \ -&& \ - apk add --no-cache \ - gcc \ - libffi-dev \ - musl-dev +# Install pipenv +RUN pip install --no-cache-dir pipenv -# Install python dependencies in /.venv +# 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 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: runtime +# Install runtime dependencies and copy runtime artifacts +#################################################### FROM base AS runtime -# 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 +# 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/* -# Copy virtual env from python-deps stage +# Copy virtual environment and local mkdocs-material module from python-deps stage COPY --from=python-deps /.venv /.venv COPY --from=python-deps /modules/mkdocs-material /modules/mkdocs-material + +# 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 -ENTRYPOINT ["./run.sh"] -CMD ["--cmd=mkdocs", "--insiders", "--cmd_flags=--dev-addr=0.0.0.0:8000"] +# Entry point script and default cmd for running mkdocs +ENTRYPOINT ["/bin/bash"] diff --git a/Pipfile.lock b/Pipfile.lock index caa0de8e..98e22866 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -41,11 +41,11 @@ "filecache" ], "hashes": [ - "sha256:7d47d19f866409b98ff6025b6a0fca8e4c791fb31abbd95f622093894ce903a2", - "sha256:ebad2091bf12d0d200dfc2464330db638c5deb41d546f6d7aca079e87290f3b0" + "sha256:73e7efec4b06b20d9267b441c1f733664f989fb8688391b670ca812d70795d11", + "sha256:b35e44a3113f17d2a31c1e6b27b9de6d4405f84ae51baa8c1d3cc5b633010cae" ], - "markers": "python_version >= '3.8'", - "version": "==0.14.2" + "markers": "python_version >= '3.9'", + "version": "==0.14.3" }, "cairocffi": { "hashes": [ @@ -64,11 +64,11 @@ }, "certifi": { "hashes": [ - "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", - "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe" + "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6", + "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3" ], "markers": "python_version >= '3.6'", - "version": "==2025.1.31" + "version": "==2025.4.26" }, "cffi": { "hashes": [ @@ -145,109 +145,109 @@ }, "charset-normalizer": { "hashes": [ - "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", - "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", - "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", - "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", - "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", - "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", - "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", - "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", - "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", - "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", - "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", - "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", - "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", - "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", - "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", - "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", - "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", - "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", - "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", - "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", - "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", - "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", - "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", - "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", - "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", - "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", - "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", - "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", - "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", - "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", - "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", - "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", - "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", - "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", - "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", - "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", - "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", - "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", - "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", - "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", - "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", - "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", - "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", - "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", - "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", - "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", - "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", - "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", - "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", - "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", - "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", - "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", - "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", - "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", - "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", - "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", - "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", - "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", - "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", - "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", - "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", - "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", - "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", - "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", - "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", - "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", - "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", - "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", - "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", - "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", - "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", - "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", - "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", - "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", - "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", - "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", - "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", - "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", - "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", - "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", - "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", - "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", - "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", - "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", - "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", - "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", - "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", - "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", - "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", - "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", - "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", - "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" + "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4", + "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45", + "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", + "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", + "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", + "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d", + "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d", + "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", + "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184", + "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db", + "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b", + "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64", + "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", + "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", + "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", + "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344", + "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58", + "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", + "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471", + "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", + "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", + "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836", + "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", + "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", + "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c", + "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1", + "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01", + "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366", + "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58", + "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", + "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", + "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2", + "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a", + "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597", + "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", + "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5", + "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb", + "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f", + "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0", + "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941", + "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", + "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86", + "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7", + "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7", + "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455", + "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6", + "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4", + "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", + "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3", + "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", + "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6", + "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", + "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", + "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", + "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", + "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", + "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12", + "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa", + "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd", + "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef", + "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f", + "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", + "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", + "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5", + "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02", + "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", + "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", + "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e", + "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", + "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", + "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", + "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", + "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681", + "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba", + "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", + "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a", + "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", + "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", + "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", + "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a", + "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027", + "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7", + "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518", + "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", + "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", + "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", + "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", + "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da", + "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509", + "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f", + "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", + "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f" ], "markers": "python_version >= '3.7'", - "version": "==3.4.1" + "version": "==3.4.2" }, "click": { "hashes": [ - "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", - "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a" + "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", + "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b" ], - "markers": "python_version >= '3.7'", - "version": "==8.1.8" + "markers": "python_version >= '3.10'", + "version": "==8.2.1" }, "colorama": { "hashes": [ @@ -275,10 +275,11 @@ }, "filelock": { "hashes": [ - "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338", - "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e" + "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", + "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de" ], - "version": "==3.17.0" + "markers": "python_version >= '3.9'", + "version": "==3.18.0" }, "ghp-import": { "hashes": [ @@ -335,11 +336,11 @@ }, "markdown": { "hashes": [ - "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2", - "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803" + "sha256:794a929b79c5af141ef5ab0f2f642d0f7b1872981250230e72682346f7cc90dc", + "sha256:7df81e63f0df5c4b24b7d156eb81e4690595239b7d70937d0409f1b0de319c6f" ], - "markers": "python_version >= '3.8'", - "version": "==3.7" + "markers": "python_version >= '3.9'", + "version": "==3.8" }, "markupsafe": { "hashes": [ @@ -434,21 +435,21 @@ }, "mkdocs-git-authors-plugin": { "hashes": [ - "sha256:77f97c321e08a8757beb866293eb257070b11cd5a080976bc6696b249cbade4f", - "sha256:f6cefc4dc832865d26f7f9f944c0a8c7dc852742d79320f3800e0d97814e2a84" + "sha256:acdacc8452db90a94d9c395a230b16965a9f2f51e0a6eef182ac7d3e02e394fb", + "sha256:e19f0252ead3d626fd73e15bb56d6675704c3b62aa569ebc363f791291b8f60e" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==0.9.2" + "version": "==0.9.5" }, "mkdocs-git-revision-date-localized-plugin": { "hashes": [ - "sha256:364d7c4c45c4f333c750e34bc298ac685a7a8bf9b7b52890d52b2f90f1812c4b", - "sha256:bb1eca7f156e0c8a587167662923d76efed7f7e0c06b84471aa5ae72a744a434" + "sha256:056c0a90242409148f1dc94d5c9d2c25b5b8ddd8de45489fa38f7fa7ccad2bc4", + "sha256:10a49eff1e1c3cb766e054b9d8360c904ce4fe8c33ac3f6cc083ac6459c91953" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==1.4.1" + "version": "==1.4.7" }, "mkdocs-glightbox": { "hashes": [ @@ -484,12 +485,12 @@ }, "mkdocs-rss-plugin": { "hashes": [ - "sha256:9371d30afb0eda7288c946a89b419aa7a0b8e212d2219584c2dbd23ece93a991", - "sha256:ff81f0ece33befd5a0152c196132e15eb93b4b9f7f53644c6d3db8e9a529e186" + "sha256:0a5b3e03dd68cc6b94feb50fc2e47fd427d39c452affe0fc3135289da9810a6d", + "sha256:15b99c6b3370f50503fe189e814600b375e5a0d8f99d19f6d8d9b80c1aa56f5c" ], "index": "pypi", "markers": "python_version >= '3.9' and python_version < '4'", - "version": "==1.17.1" + "version": "==1.17.3" }, "msgpack": { "hashes": [ @@ -563,11 +564,11 @@ }, "packaging": { "hashes": [ - "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", - "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" + "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", + "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f" ], "markers": "python_version >= '3.8'", - "version": "==24.2" + "version": "==25.0" }, "paginate": { "hashes": [ @@ -671,11 +672,11 @@ }, "platformdirs": { "hashes": [ - "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", - "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb" + "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", + "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4" ], - "markers": "python_version >= '3.8'", - "version": "==4.3.6" + "markers": "python_version >= '3.9'", + "version": "==4.3.8" }, "pycparser": { "hashes": [ @@ -706,16 +707,15 @@ "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", "version": "==2.9.0.post0" }, "pytz": { "hashes": [ - "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57", - "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e" + "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", + "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" ], - "markers": "python_version < '3.9'", - "version": "==2025.1" + "version": "==2025.2" }, "pyyaml": { "hashes": [ @@ -778,11 +778,11 @@ }, "pyyaml-env-tag": { "hashes": [ - "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb", - "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069" + "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", + "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff" ], - "markers": "python_version >= '3.6'", - "version": "==0.1" + "markers": "python_version >= '3.9'", + "version": "==1.1" }, "requests": { "hashes": [ @@ -797,7 +797,7 @@ "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", "version": "==1.17.0" }, "smmap": { @@ -818,11 +818,11 @@ }, "termcolor": { "hashes": [ - "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8", - "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f" + "sha256:591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa", + "sha256:6a6dd7fbee581909eeec6a756cff1d7f7c376063b14e4a298dc4980309e55970" ], "markers": "python_version >= '3.9'", - "version": "==2.5.0" + "version": "==3.1.0" }, "tinycss2": { "hashes": [ @@ -834,11 +834,11 @@ }, "urllib3": { "hashes": [ - "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", - "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" + "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", + "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813" ], "markers": "python_version >= '3.9'", - "version": "==2.3.0" + "version": "==2.4.0" }, "watchdog": { "hashes": [ diff --git a/README.md b/README.md index 37b07ee5..e7f81258 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,8 @@ The current list of team members can be found [here](https://www.privacyguides.o ## Contributing +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/privacyguides/privacyguides.org?devcontainer_path=.devcontainer%2Fdevcontainer.json) + - 💬 [Start a discussion or suggest an idea](https://discuss.privacyguides.net) - 💖 [Sponsor the project](https://github.com/sponsors/privacyguides) - 🈴 [Help translate the site](https://crowdin.com/project/privacyguides) [[Matrix chat](https://matrix.to/#/#pg-i18n:aragon.sh)] @@ -72,18 +74,6 @@ All contributors to the site are listed [here](#contributors). If you have contr - **Tor/onion:** [xoe4vn5uwdztif6goazfbmogh6wh5jc4up35bqdflu6bkdc5cas5vjqd.onion](http://www.xoe4vn5uwdztif6goazfbmogh6wh5jc4up35bqdflu6bkdc5cas5vjqd.onion) -- **IPFS:** `/ipns/ipfs.privacyguides.org` (**not** anonymous) - - Please help us out by pinning a copy: [Learn more](https://github.com/privacyguides/webserver/blob/main/ipfs/README.md) - - via Cloudflare: [cloudflare-ipfs.com/ipns/ipfs.privacyguides.org](https://cloudflare-ipfs.com/ipns/ipfs.privacyguides.org/en/) - - via 4everland: [ipfs-privacyguides-org.ipns.4everland.io](https://ipfs-privacyguides-org.ipns.4everland.io/) - - via [@jonaharagon](https://github.com/jonaharagon): [ipfs.jonaharagon.net/ipns/ipfs.privacyguides.org](https://ipfs.jonaharagon.net/ipns/ipfs.privacyguides.org/en/) - - via [peer](https://docs.ipfs.tech/how-to/peering-with-content-providers/): `/dnsaddr/node-1.ipfs.jonaharagon.net/p2p/12D3KooWMwqzuApCKxYfo66zq5BrTjCoz9naJ1rrMEBCnwuGGqWB` - -- **I2P:** [privacyguides.i2p](http://privacyguides.i2p/?i2paddresshelper=fvbkmooriuqgssrjvbxu7nrwms5zyhf34r3uuppoakwwsm7ysv6q.b32.i2p) - -- **Yggdrasil:** [http://[200:f3a6:4922:e067:770d:ac57:fcb1:8dbf]](http://[200:f3a6:4922:e067:770d:ac57:fcb1:8dbf]/en/) (**not** anonymous) - - via public peer: `tcp://5.161.245.8:45454` - ### Git Mirrors [![GitHub](https://img.shields.io/static/v1?logo=github&label=&message=GitHub&color=000&style=for-the-badge)](https://github.com/privacyguides/privacyguides.org) @@ -110,42 +100,18 @@ When you contribute to this repository you are doing so under the above licenses ## Developing -[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/privacyguides/privacyguides.org?devcontainer_path=.devcontainer%2Fdevcontainer.json) +The only supported method of building and previewing this website locally is by running the automatic dev container. The easiest way to do this in your web browser without installing any software is to use [GitHub Codespaces](https://codespaces.new/privacyguides/privacyguides.org). To build the website locally, you will need the following software: + +- macOS/Windows: [Docker Desktop](https://www.docker.com/products/docker-desktop/) +- Linux: [Docker CE](https://docs.docker.com/get-started/get-docker/#supported-platforms) +- [VS Code](https://code.visualstudio.com/) +- [Dev Containers for VS Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension +- [GitHub Desktop](https://github.com/apps/desktop) (optional) + +You can technically use any IDE which supports [development containers](https://containers.dev/), but YMMV. Docker Desktop has an experimental Dev Environments option which allows you to use any text editor under Settings > Features in development. We are only testing with the combination of software above. Committing to this repository requires [signing your commits](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits) (`git config commit.gpgsign true`) unless you are making edits via the GitHub.com text editor interface. As of August 2022 the preferred signing method is [SSH commit signatures](https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification#ssh-commit-signature-verification), but GPG signing is also acceptable. You should add your signing key to your GitHub profile. -### With `mkdocs-material` - -1. Install required packages: `pip install mkdocs-material` -2. Run a local preview of the English site: `./run.sh --cmd=mkdocs` - -### With `mkdocs-material-insiders` - -This website uses [`mkdocs-material-insiders`](https://squidfunk.github.io/mkdocs-material/insiders) which offers additional functionality over the open-source `mkdocs-material` project. For obvious reasons we cannot distribute access to the insiders repository. - -**Team members** should clone the repository with `mkdocs-material-insiders` directly. This method is identical to production: - -1. Clone this repository and submodules: `git clone --recurse-submodules https://github.com/privacyguides/privacyguides.org.git` -2. Enable SSH commit verification with our local [`.allowed_signers`](/.allowed_signers) file: `git config gpg.ssh.allowedSignersFile .allowed_signers` -3. Install Python **3.12**. -4. Install **pipenv**: `pip install pipenv` -5. Install dependencies: `pipenv install --dev` (install [Pillow and CairoSVG](https://squidfunk.github.io/mkdocs-material/setup/setting-up-social-cards/#dependencies) as well to generate social cards) -6. Serve the site locally: `./run.sh --insiders` (set `CARDS=true` to generate social cards) - - The site will be available at `http://localhost:8000` - - You can build the site locally with `./run.sh --insiders --build` - - This version of the site should be identical to the live, production version - -If you commit to `main` with commits signed with your SSH key, you should add your SSH key to [`.allowed_signers`](/.allowed_signers) in this repo. - -### Local Translated Site Builds - -1. Install the [Crowdin CLI Tool](https://developer.crowdin.com/cli-tool) (`brew install crowdin`) -2. Set the `CROWDIN_PERSONAL_TOKEN` environment variable to your Crowdin personal access token -3. Run `crowdin download` in the root of this repo -4. Serve the site locally: `./run.sh --insiders --lang=fr` (replacing fr with the appropriate language in [/config](/config)) - -Translations downloaded from Crowdin are [.gitignore](/.gitignore)'d, so any local changes to the translated site cannot be committed to this repo. Actual modifications need to be made on Crowdin. As an alternative to steps 1-3, you can copy the folders from [privacyguides/i18n](https://github.com/privacyguides/i18n) to the root of this repo to obtain the translated files. - ## Releasing It is required to create a GitHub release to publish the current site to privacyguides.org. The current `main` branch can be previewed at [https://main.staging.privacyguides.dev](https://main.staging.privacyguides.dev) prior to release. diff --git a/mkdocs.blog.yml b/mkdocs.blog.yml index d049a0ed..70fbd9bf 100644 --- a/mkdocs.blog.yml +++ b/mkdocs.blog.yml @@ -47,7 +47,7 @@ extra: - fontawesome/brands/creative-commons - fontawesome/brands/creative-commons-by - fontawesome/brands/creative-commons-sa - homepage: https://www.privacyguides.org/en/ + homepage: !ENV [MAIN_SITE_BASE_URL, "https://www.privacyguides.org/en/"] generator: false context: !ENV [BUILD_CONTEXT, "production"] offline: !ENV [BUILD_OFFLINE, false] @@ -207,21 +207,23 @@ markdown_extensions: toc_depth: 3 nav: - - !ENV [NAV_HOME, "Home"]: /en/ - - !ENV [NAV_KNOWLEDGE_BASE, "Knowledge Base"]: /en/basics/why-privacy-matters/ - - !ENV [NAV_RECOMMENDATIONS, "Recommendations"]: /en/tools/ + - !ENV [NAV_HOME, "Home"]: !ENV [MAIN_SITE_BASE_URL, "/en/"] + - !ENV [NAV_KNOWLEDGE_BASE, "Knowledge Base"]: + !ENV [MAIN_SITE_KNOWLEDGE_BASE_URL, "/en/basics/why-privacy-matters/"] + - !ENV [NAV_RECOMMENDATIONS, "Recommendations"]: + !ENV [MAIN_SITE_RECOMMENDATIONS_URL, "/en/tools/"] - !ENV [NAV_BLOG, "Articles"]: - index.md - editorial.md - tags.md - - !ENV [NAV_VIDEOS, "Videos"]: /videos/ + - !ENV [NAV_VIDEOS, "Videos"]: !ENV [VIDEOS_SITE_BASE_URL, "/videos/"] - !ENV [NAV_FORUM, "Forum"]: "https://discuss.privacyguides.net/" - !ENV [NAV_WIKI, "Wiki"]: !ENV [ NAV_WIKI_LINK, "https://discuss.privacyguides.net/c/community-wiki/9411/none", ] - - !ENV [NAV_ABOUT, "About"]: /en/about/ + - !ENV [NAV_ABOUT, "About"]: !ENV [MAIN_SITE_ABOUT_URL, "/en/about/"] validation: nav: diff --git a/mkdocs.insiders.yml b/mkdocs.insiders.yml new file mode 100644 index 00000000..65525b5a --- /dev/null +++ b/mkdocs.insiders.yml @@ -0,0 +1,18 @@ +INHERIT: mkdocs.yml + +watch: + - theme + - includes + - mkdocs.yml + +markdown_extensions: + material.extensions.preview: + sources: + exclude: + - index.md + - tools.md + - about.md + - about/* + targets: + exclude: + - about/contributors.md diff --git a/mkdocs.net.yml b/mkdocs.net.yml deleted file mode 100644 index 3c502402..00000000 --- a/mkdocs.net.yml +++ /dev/null @@ -1,198 +0,0 @@ -# Copyright (c) 2022-2024 Jonah Aragon - -# 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. - -docs_dir: "net" -site_url: "https://www.privacyguides.net/" -site_dir: "site/net" - -site_name: Privacy Guides Community -site_description: "Discover privacy tools and resources, ask questions, and stay informed at the biggest digital rights and privacy tech community online." -edit_uri_template: blob/main/net/{path}?plain=1 - -extra: - privacy_guides: - footer: - intro: - !ENV [ - FOOTER_INTRO, - "Privacy Guides is a non-profit, socially motivated website that provides information for protecting your data security and privacy.", - ] - note: - !ENV [ - FOOTER_NOTE, - "We do not make money from recommending certain products, and we do not use affiliate links.", - ] - copyright: - author: - !ENV [FOOTER_COPYRIGHT_AUTHOR, "Privacy Guides and contributors."] - date: !ENV [FOOTER_COPYRIGHT_DATE, "2019-2025"] - license: - - fontawesome/brands/creative-commons - - fontawesome/brands/creative-commons-by - - fontawesome/brands/creative-commons-sa - homepage: https://www.privacyguides.org/en/ - generator: false - context: !ENV [BUILD_CONTEXT, "production"] - offline: !ENV [BUILD_OFFLINE, false] - deploy: !ENV DEPLOY_ID - social: - - icon: simple/mastodon - link: https://mastodon.neat.computer/@privacyguides - name: !ENV [SOCIAL_MASTODON, "Mastodon"] - - icon: simple/matrix - link: https://matrix.to/#/#privacyguides:matrix.org - name: !ENV [SOCIAL_MATRIX, "Matrix"] - - icon: simple/discourse - link: https://discuss.privacyguides.net/ - name: !ENV [SOCIAL_FORUM, "Forum"] - - icon: simple/github - link: https://github.com/privacyguides - name: !ENV [SOCIAL_GITHUB, "GitHub"] - - icon: simple/torbrowser - link: http://www.xoe4vn5uwdztif6goazfbmogh6wh5jc4up35bqdflu6bkdc5cas5vjqd.onion/ - name: !ENV [SOCIAL_TOR_SITE, "Hidden service"] - -repo_url: - !ENV [BUILD_REPO_URL, "https://github.com/privacyguides/privacyguides.org"] -repo_name: "" - -theme: - name: material - language: en - custom_dir: theme - font: - text: Public Sans - code: DM Mono - palette: - - media: "(prefers-color-scheme)" - scheme: default - accent: deep purple - toggle: - icon: material/brightness-auto - name: !ENV [THEME_DARK, "Switch to dark mode"] - - media: "(prefers-color-scheme: dark)" - scheme: slate - accent: amber - toggle: - icon: material/brightness-2 - name: !ENV [THEME_LIGHT, "Switch to light mode"] - - media: "(prefers-color-scheme: light)" - scheme: default - accent: deep purple - toggle: - icon: material/brightness-5 - name: !ENV [THEME_AUTO, "Switch to system theme"] - favicon: assets/brand/logos/png/favicon-32x32.png - icon: - repo: simple/github - features: - - announce.dismiss - - navigation.tracking - - navigation.tabs - - navigation.sections - - navigation.expand - - navigation.path - - navigation.indexes - - navigation.footer - - content.action.edit - - content.tabs.link - - content.tooltips - - search.highlight - -extra_css: - - assets/stylesheets/extra.css?v=20240829 - -watch: - - theme - - includes - -plugins: - tags: {} - privacy: - enabled: !ENV [BUILD_PRIVACY, true] - offline: - enabled: !ENV [BUILD_OFFLINE, false] - minify_html: {} - group: - enabled: !ENV [BUILD_INSIDERS, true] - plugins: - macros: {} - meta: {} - optimize: - enabled: !ENV [OPTIMIZE, PRODUCTION, NETLIFY, false] - typeset: {} - social: - cards: !ENV [CARDS, true] - cards_dir: assets/img/social - cards_layout_dir: theme/layouts - cards_layout: page - -markdown_extensions: - admonition: {} - pymdownx.details: {} - pymdownx.superfences: - custom_fences: - - name: mermaid - class: mermaid - format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.tabbed: - alternate_style: true - pymdownx.arithmatex: - generic: true - pymdownx.critic: {} - pymdownx.caret: {} - pymdownx.keys: {} - pymdownx.mark: {} - pymdownx.tilde: {} - pymdownx.snippets: - auto_append: - - !ENV [BUILD_ABBREVIATIONS, "includes/abbreviations.en.txt"] - pymdownx.tasklist: - custom_checkbox: true - attr_list: {} - def_list: {} - md_in_html: {} - meta: {} - abbr: {} - pymdownx.emoji: - emoji_index: !!python/name:material.extensions.emoji.twemoji - emoji_generator: !!python/name:material.extensions.emoji.to_svg - tables: {} - footnotes: {} - toc: - permalink: true - toc_depth: 4 - -nav: - - !ENV [NAV_HOME, "Home"]: https://www.privacyguides.org/en/ - - !ENV [NAV_KNOWLEDGE_BASE, "Knowledge Base"]: - https://www.privacyguides.org/en/basics/why-privacy-matters/ - - !ENV [NAV_RECOMMENDATIONS, "Recommendations"]: - https://www.privacyguides.org/en/tools/ - - !ENV [NAV_BLOG, "Articles"]: https://www.privacyguides.org/articles/ - - !ENV [NAV_ABOUT, "About"]: https://www.privacyguides.org/en/about/ - - "Donate": https://www.privacyguides.org/en/about/donate/ - - !ENV [NAV_CHANGELOG, "Changelog"]: - "https://github.com/privacyguides/privacyguides.org/releases" - - !ENV [NAV_FORUM, "Forum"]: "https://discuss.privacyguides.net/" - -validation: - nav: - not_found: info diff --git a/mkdocs.videos.yml b/mkdocs.videos.yml index 772cac45..2d766aaa 100644 --- a/mkdocs.videos.yml +++ b/mkdocs.videos.yml @@ -47,7 +47,7 @@ extra: - fontawesome/brands/creative-commons - fontawesome/brands/creative-commons-by - fontawesome/brands/creative-commons-sa - homepage: https://www.privacyguides.org/en/ + homepage: !ENV [MAIN_SITE_BASE_URL, "https://www.privacyguides.org/en/"] generator: false context: !ENV [BUILD_CONTEXT, "production"] offline: !ENV [BUILD_OFFLINE, false] @@ -198,10 +198,12 @@ markdown_extensions: toc_depth: 4 nav: - - !ENV [NAV_HOME, "Home"]: /en/ - - !ENV [NAV_KNOWLEDGE_BASE, "Knowledge Base"]: /en/basics/why-privacy-matters/ - - !ENV [NAV_RECOMMENDATIONS, "Recommendations"]: /en/tools/ - - !ENV [NAV_BLOG, "Articles"]: /articles/ + - !ENV [NAV_HOME, "Home"]: !ENV [MAIN_SITE_BASE_URL, "/en/"] + - !ENV [NAV_KNOWLEDGE_BASE, "Knowledge Base"]: + !ENV [MAIN_SITE_KNOWLEDGE_BASE_URL, "/en/basics/why-privacy-matters/"] + - !ENV [NAV_RECOMMENDATIONS, "Recommendations"]: + !ENV [MAIN_SITE_RECOMMENDATIONS_URL, "/en/tools/"] + - !ENV [NAV_BLOG, "Articles"]: !ENV [ARTICLES_SITE_BASE_URL, "/articles/"] - !ENV [NAV_VIDEOS, "Videos"]: - index.md - playlists.md @@ -211,7 +213,7 @@ nav: NAV_WIKI_LINK, "https://discuss.privacyguides.net/c/community-wiki/9411/none", ] - - !ENV [NAV_ABOUT, "About"]: /en/about/ + - !ENV [NAV_ABOUT, "About"]: !ENV [MAIN_SITE_ABOUT_URL, "/en/about/"] validation: nav: diff --git a/mkdocs.yml b/mkdocs.yml index 4de3534d..3726ad8d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -446,8 +446,8 @@ nav: - !ENV [NAV_ADVANCED, "Advanced"]: - "alternative-networks.md" - "device-integrity.md" - - !ENV [NAV_BLOG, "Articles"]: "/articles/" - - !ENV [NAV_VIDEOS, "Videos"]: /videos/ + - !ENV [NAV_BLOG, "Articles"]: !ENV [ARTICLES_SITE_BASE_URL, "/articles/"] + - !ENV [NAV_VIDEOS, "Videos"]: !ENV [VIDEOS_SITE_BASE_URL, "/videos/"] - !ENV [NAV_FORUM, "Forum"]: !ENV [NAV_FORUM_LINK, "https://discuss.privacyguides.net/"] - !ENV [NAV_WIKI, "Wiki"]: diff --git a/modules/mkdocs-material b/modules/mkdocs-material index 573ea60d..ce2cca8c 160000 --- a/modules/mkdocs-material +++ b/modules/mkdocs-material @@ -1 +1 @@ -Subproject commit 573ea60dc618719bff3897a4fdae22ab2cd725e8 +Subproject commit ce2cca8c5240ae520e09a67954de09949bd04efe diff --git a/net/index.md b/net/index.md deleted file mode 100644 index 24e271ab..00000000 --- a/net/index.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Weekly Discussions -meta_title: Privacy Guides Community -hide: - - footer - - toc - - navigation -schema: - - - "@context": https://schema.org - "@type": Organization - "@id": https://www.privacyguides.org/ - name: Privacy Guides - url: https://www.privacyguides.org/ - logo: https://www.privacyguides.org/en/assets/brand/logos/png/square/pg-yellow.png - sameAs: - - https://twitter.com/privacy_guides - - https://github.com/privacyguides - - https://www.wikidata.org/wiki/Q111710163 - - https://www.youtube.com/@privacyguides - - https://mastodon.neat.computer/@privacyguides - - - "@context": https://schema.org - "@type": WebSite - name: Privacy Guides - alternateName: ["Privacy Guides Community", "Privacy Guides Forum", "Privacy & Security Forum", "Privacy Discussions", "Privacy Community", "PG Community"] - url: "https://www.privacyguides.net/" - isPartOf: "https://www.privacyguides.org/" ---- - -Discover privacy tools and resources, ask questions, and stay informed at the biggest digital rights and privacy tech community online. - -[Open Forum](https://discuss.privacyguides.net){.md-button .md-button--primary} -[View Resources](https://www.privacyguides.org/en/tools/){.md-button} - -
- -
diff --git a/run.sh b/run.sh index 24702732..d24f3690 100755 --- a/run.sh +++ b/run.sh @@ -113,31 +113,8 @@ fi # Set theme if insiders if $insiders ; then - random_num=$RANDOM export BUILD_INSIDERS=true - cmd_flags+=("--config-file=$PWD/.mkdocs-insiders-$random_num.yml") - touch "$PWD/.mkdocs-insiders-$random_num.yml" - cat <> "$PWD/.mkdocs-insiders-$random_num.yml" -INHERIT: mkdocs.yml - -watch: - - theme - - includes - - mkdocs.yml - -markdown_extensions: - material.extensions.preview: - sources: - exclude: - - index.md - - tools.md - - about.md - - about/* - targets: - exclude: - - about/contributors.md -EOT - trap 'rm $PWD/.mkdocs-insiders-$random_num.yml' EXIT + cmd_flags+=("--config-file=$PWD/mkdocs.insiders.yml") fi # Run the command with the specified language