From fc57a080419793d2ef116883d9df4094d539fe89 Mon Sep 17 00:00:00 2001 From: Dave Anselmi Date: Thu, 26 Feb 2026 08:47:21 +0100 Subject: [PATCH 01/66] Fix typos in license page. (#755) Closes #752. Co-authored-by: David Anselmi Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/755 Reviewed-by: Robert Wolff Co-authored-by: Dave Anselmi Co-committed-by: Dave Anselmi --- content/getting-started/licensing.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/content/getting-started/licensing.md b/content/getting-started/licensing.md index 907a120..4a4cd23 100644 --- a/content/getting-started/licensing.md +++ b/content/getting-started/licensing.md @@ -10,20 +10,20 @@ Adding a license to a project is essential for making it reusable: In the absenc copyright law would otherwise forbid others from (re-)using and distributing your work. Moreover, a license can further specify other important properties, such as the temporary- or forever-openness of the code, the rights granted to the users (such as the [four fundamental software freedoms](https://www.gnu.org/philosophy/free-sw.html#four-freedoms)), -or the permission of using patents encoded in a program. +or the permission to use patents encoded in a program. ## Copyright: The mechanism behind most software licenses The international validity of most common licenses is guaranteed by copyright law, and in particular by the [Copyright Treaty](https://en.wikipedia.org/wiki/WIPO_Copyright_Treaty) of the United Nations' (UN) World Intellectual Property Organization (WIPO) adopted in 1996. This treaty sets a common denominator for all adhering countries, but individual countries can still extend domestically -the reach of copyright. The article 4 of the Copyright Treaty clarified once for all that computer programs are +the reach of copyright. Article 4 of the Copyright Treaty clarified once for all that computer programs are protected by copyright just as literary works. Unfortunately, however, copyright law does not protect hardware objects. [Copyright law is extremely powerful](https://www.gnu.org/philosophy/enforcing-gpl.en.html). In fact, it grants the author of a work exclusive rights to use or distribute their work. -An author can grant permission of using his/her work under arbitrary conditions; just for illustration, an author could +An author can grant permission to use his/her work under arbitrary conditions. Just for illustration, an author could invent for example a "coffee license" and impose that whoever uses his work has to offer the author a coffee. Similarly, forever-open licenses grant users the right to use the work provided that they will redistribute any derivative work using the same license again (copyleft). @@ -75,7 +75,7 @@ One of the major distinctions between licenses is between: 2. Licenses which permit to close the source, i.e. temporarily-open licenses. These licenses are usually known as permissive licenses. The MIT license or the Apache license belong to this category. - The term "permissive" often causes confusion, because it sounds fair and good to unexperienced people. + The term "permissive" often causes confusion, because it sounds fair and good to inexperienced people. People who contribute to the development of a program released with a permissive license must be aware that the program could become proprietary at any time. For example, when a company hires the original team of developers. @@ -89,10 +89,10 @@ copyleft licenses whenever possible. Free software licenses are licenses which respect the [four fundamental software freedoms](https://www.gnu.org/philosophy/free-sw.en.html#four-freedoms) defined by the Free Software Foundation. -Both copyleft and permissive license can, or cannot, be free licenses. For example, the [Modified BSD license](https://www.gnu.org/licenses/license-list.en.html#ModifiedBSD) +Both copyleft and permissive license may, or may not, be free licenses. For example, the [Modified BSD license](https://www.gnu.org/licenses/license-list.en.html#ModifiedBSD) is a permissive non-copyleft free software license. -In the context of licenses, the term "free" means free as in "freedom", not of gratis, but this has often been confused. +In the context of licenses, the term "free" means free as in "freedom", not as in gratis, but this has often been confused. Still, free software is often also gratis software. Gratis non-free software usually includes gratis proprietary programs (shareware), demonstration or trial versions, limited versions (crippleware), advertising-supported software (e.g. antivirus), and usually viruses and worms @@ -112,7 +112,7 @@ leave no trace. Even Google [avoided the use of the MIT license when developing Android](https://source.android.com/setup/start/licenses), presumably because of the missing patent provision. -For further information on "patents and free software", head over to [this wikipedia article](https://en.wikipedia.org/wiki/Software_patents_and_free_software). +For further information on "patents and free software", head over to [this Wikipedia article](https://en.wikipedia.org/wiki/Software_patents_and_free_software). ## Warnings @@ -141,7 +141,7 @@ The incompatibility between licenses is clearly a headache for every developer. recommend, is to use only mainstream licenses (as recommended in this page) and hence avoid [license proliferation](#license-proliferation). For more information on license compatibility, we recommend the commented [license list curated by the GNU project](https://www.gnu.org/licenses/license-list.html). -### Conflict-of-interests +### Conflicts-of-interest The open-source community is represented by a variety of groups with different, and sometimes opposite, interests. For example, the prominent websites [ChooseALicense.com](https://choosealicense.com) is curated by GitHub and can be From c8911bc862fbb371a8ae6923a4977c9e603e8c36 Mon Sep 17 00:00:00 2001 From: mahlzahn Date: Thu, 26 Feb 2026 14:43:49 +0100 Subject: [PATCH 02/66] fix: typo (#757) Closes: #752 Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/757 Co-authored-by: mahlzahn Co-committed-by: mahlzahn --- content/getting-started/licensing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/getting-started/licensing.md b/content/getting-started/licensing.md index 4a4cd23..0a76570 100644 --- a/content/getting-started/licensing.md +++ b/content/getting-started/licensing.md @@ -17,7 +17,7 @@ or the permission to use patents encoded in a program. The international validity of most common licenses is guaranteed by copyright law, and in particular by the [Copyright Treaty](https://en.wikipedia.org/wiki/WIPO_Copyright_Treaty) of the United Nations' (UN) World Intellectual Property Organization (WIPO) adopted in 1996. This treaty sets a common denominator for all adhering countries, but individual countries can still extend domestically -the reach of copyright. Article 4 of the Copyright Treaty clarified once for all that computer programs are +the reach of copyright. Article 4 of the Copyright Treaty clarified once and for all that computer programs are protected by copyright just as literary works. Unfortunately, however, copyright law does not protect hardware objects. From c1e74d7e582e6d2aaa14d075521433953cea3f42 Mon Sep 17 00:00:00 2001 From: Florian Lackner Date: Mon, 2 Mar 2026 02:22:25 +0100 Subject: [PATCH 03/66] Add a hint about dnssec to the custom domains doc (#758) I [ran](https://codeberg.org/Codeberg/Community/issues/2417) into this issue (originally reported [here](https://codeberg.org/Codeberg/Community/issues/1881)). This is my first contribution, so I apologize in advance if I didn't follow the process properly. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/758 Reviewed-by: Gusted Co-authored-by: Florian Lackner Co-committed-by: Florian Lackner --- content/codeberg-pages/using-custom-domain.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md index 41f5fe8..9b8ef89 100644 --- a/content/codeberg-pages/using-custom-domain.md +++ b/content/codeberg-pages/using-custom-domain.md @@ -29,6 +29,9 @@ If you have a [CAA record](https://en.wikipedia.org/wiki/DNS_Certification_Autho you must [explicitly allow Let's Encrypt in your CAA record](https://letsencrypt.org/docs/caa/). The value of the CAA record would look like `letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/292520050;validationmethods=tls-alpn-01,http-01`. +If you're using [DNSSec](https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions) on your custom domain, you might run into TLS certificate issues because `codeberg.page` doesn't use DNSSec at the moment. +In this case you must add `A` / `AAAA` / `TXT` records for all domains instead of `CNAME` records. You can use [this tool](https://dnssec-analyzer.verisignlabs.com) to verify your setup. + {% endadmonition %} For custom domains, two things are required: From 47bc63f6577d587daf91361bbfa5cc97b48adc4b Mon Sep 17 00:00:00 2001 From: mahlzahn Date: Mon, 2 Mar 2026 02:28:16 +0100 Subject: [PATCH 04/66] chore: replace outdated v9 links by redirects to latest version (#754) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/754 Reviewed-by: Gusted Co-authored-by: mahlzahn Co-committed-by: mahlzahn --- content/getting-started/first-repository.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/getting-started/first-repository.md b/content/getting-started/first-repository.md index a7949f8..fc23cc8 100644 --- a/content/getting-started/first-repository.md +++ b/content/getting-started/first-repository.md @@ -236,8 +236,8 @@ Codeberg does not provide an interface to add licence files, `.gitignore` or `RE so you should add at least the licence and `README.md` yourself. - To choose a licence, read [Codeberg's guidance](https://docs.codeberg.org/getting-started/licensing/). -- If you already know which licence you need, Codeberg has [copies](https://codeberg.org/Codeberg-Infrastructure/forgejo/src/branch/codeberg-9/options/license). -- [gitignores](https://codeberg.org/Codeberg-Infrastructure/forgejo/src/branch/codeberg-9/options/gitignore) +- If you already know which licence you need, Codeberg has [copies](https://codeberg.org/Codeberg-Infrastructure/forgejo/src/options/license). +- [gitignores](https://codeberg.org/Codeberg-Infrastructure/forgejo/src/options/gitignore) ## Making a commit From caaa1cde6165e7a7e9cc30967b57e6f6c8f001cc Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Thu, 12 Mar 2026 01:25:08 +0100 Subject: [PATCH 05/66] chore(deps): update node.js to e8e2e91 (#766) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/766 Reviewed-by: Gusted Co-authored-by: Dependency bot Co-committed-by: Dependency bot --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 661c957..f035415 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # The main purpose of this Dockerfile is to install the `pnpm` package manager in the official Node.js image # and use an init script as the entrypoint of a custom image to build and run the documentation site. -FROM node:lts-slim@sha256:bf22df20270b654c4e9da59d8d4a3516cce6ba2852e159b27288d645b7a7eedc +FROM node:lts-slim@sha256:e8e2e91b1378f83c5b2dd15f0247f34110e2fe895f6ca7719dbb780f929368eb EXPOSE 8080/tcp SHELL [ "bash", "-c" ] From f717140c07adec35b4c718430dfcfadef3bb49dc Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Thu, 12 Mar 2026 01:25:14 +0100 Subject: [PATCH 06/66] chore(deps): update dependency markdown-it to v14.1.1 [security] (#765) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/765 Reviewed-by: Gusted Co-authored-by: Dependency bot Co-committed-by: Dependency bot --- package.json | 2 +- pnpm-lock.yaml | 25 +++++++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 80a1d03..efd3aef 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@uncenter/eleventy-plugin-toc": "1.0.3", "cspell": "9.6.0", "halfmoon": "2.0.2", - "markdown-it": "14.1.0", + "markdown-it": "14.1.1", "markdown-it-anchor": "9.2.0", "markdownlint-cli2": "0.20.0", "pagefind": "1.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ab24e56..33d14b2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,11 +39,11 @@ importers: specifier: 2.0.2 version: 2.0.2 markdown-it: - specifier: 14.1.0 - version: 14.1.0 + specifier: 14.1.1 + version: 14.1.1 markdown-it-anchor: specifier: 9.2.0 - version: 9.2.0(@types/markdown-it@14.1.2)(markdown-it@14.1.0) + version: 9.2.0(@types/markdown-it@14.1.2)(markdown-it@14.1.1) markdownlint-cli2: specifier: 0.20.0 version: 0.20.0 @@ -1103,6 +1103,10 @@ packages: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true + markdown-it@14.1.1: + resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} + hasBin: true + markdownlint-cli2-formatter-default@0.0.6: resolution: {integrity: sha512-VVDGKsq9sgzu378swJ0fcHfSicUnMxnL8gnLm/Q4J/xsNJ4e5bA6lvAz7PCzIl0/No0lHyaWdqVD2jotxOSFMQ==} peerDependencies: @@ -1634,7 +1638,7 @@ snapshots: kleur: 4.1.5 liquidjs: 10.24.0 luxon: 3.7.2 - markdown-it: 14.1.0 + markdown-it: 14.1.1 minimist: 1.2.8 moo: 0.5.2 node-retrieve-globals: 6.0.1 @@ -2591,10 +2595,10 @@ snapshots: luxon@3.7.2: {} - markdown-it-anchor@9.2.0(@types/markdown-it@14.1.2)(markdown-it@14.1.0): + markdown-it-anchor@9.2.0(@types/markdown-it@14.1.2)(markdown-it@14.1.1): dependencies: '@types/markdown-it': 14.1.2 - markdown-it: 14.1.0 + markdown-it: 14.1.1 markdown-it@14.1.0: dependencies: @@ -2605,6 +2609,15 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 + markdown-it@14.1.1: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + markdownlint-cli2-formatter-default@0.0.6(markdownlint-cli2@0.20.0): dependencies: markdownlint-cli2: 0.20.0 From d5dbed89c4354499a0fa0fc11f78328d3f91cef4 Mon Sep 17 00:00:00 2001 From: Mathieu Fenniak Date: Thu, 26 Mar 2026 16:58:10 +0100 Subject: [PATCH 07/66] fix: reference latest docs for Forgejo Runner & Actions, not next (#771) "For the installation of the runner..." is currently pointing to a 404, https://forgejo.org/docs/next/admin/actions/runner-installation/, as this has page has been removed in https://codeberg.org/forgejo/docs/issues/1847. Reference latest instead of next, as latest represents Codeberg's state more accurately than next. A redirect is in progress (https://codeberg.org/forgejo/website/pulls/817) but hasn't been merged on the Forgejo website. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/771 Reviewed-by: Robert Wolff Co-authored-by: Mathieu Fenniak Co-committed-by: Mathieu Fenniak --- content/ci/actions.md | 2 +- content/codeberg-pages/forgejo-actions.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/ci/actions.md b/content/ci/actions.md index a8ee317..1a74d40 100644 --- a/content/ci/actions.md +++ b/content/ci/actions.md @@ -49,7 +49,7 @@ determine where your Runner will accept workflows from. ## Installing Forgejo Runner -For the installation of the runner, see the [Forgejo documentation](https://forgejo.org/docs/next/admin/actions/runner-installation/). +For the installation of the runner, see the [Forgejo documentation](https://forgejo.org/docs/latest/admin/actions/runner-installation/). ## References diff --git a/content/codeberg-pages/forgejo-actions.md b/content/codeberg-pages/forgejo-actions.md index fceb7c6..8be884c 100644 --- a/content/codeberg-pages/forgejo-actions.md +++ b/content/codeberg-pages/forgejo-actions.md @@ -44,7 +44,7 @@ The `token` will automatically be filled by Forgejo Actions with a secret token, If you use branches to test out new features, write draft blog posts, etc., you should either limit the whole workflow, or this step only, to pushes to a default branch (usually `main` or `master`) to ensure that only finalized content is published to your site. -To do this, either add a [`on.push.branches` list](https://forgejo.org/docs/next/user/actions/reference/#onpush) to the whole workflow, or add [an `if` condition to the step](https://forgejo.org/docs/next/user/actions/reference/#jobsjob_idstepsif-1) (or [to the whole job](https://forgejo.org/docs/next/user/actions/reference/#jobsjob_idif)) like this: +To do this, either add a [`on.push.branches` list](https://forgejo.org/docs/latest/user/actions/reference/#onpush) to the whole workflow, or add [an `if` condition to the step](https://forgejo.org/docs/latest/user/actions/reference/#jobsjob_idstepsif-1) (or [to the whole job](https://forgejo.org/docs/latest/user/actions/reference/#jobsjob_idif)) like this: {% raw %} From d11f27378f7212575b3b9243ad7cf056777eab84 Mon Sep 17 00:00:00 2001 From: spuzkov Date: Thu, 2 Apr 2026 03:59:09 +0200 Subject: [PATCH 08/66] Updated the way git signing commands are shown (#762) ### Description This fixes #761, more specifically the part (2) of their issue post. The issue was that it was not clear that the "." at the end of the command was meant to be excluded. Even if its clear to some, accidental copy and paste with the inclusion of "." have happened. Therefore, this PR is more of an improvement to the so called "quality of life". **The fix** Separating the commands in to code blocks and excluding the "." from the end. **Other additions** - The commands are also now described. - A new command that allows users to check their current configuration in order to verify that things are as they intended. This commands Source for both of these additions is: https://janik6n.net/posts/signing-git-commits-with-ssh-key/ Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/762 Co-authored-by: spuzkov Co-committed-by: spuzkov --- content/security/ssh-key.md | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/content/security/ssh-key.md b/content/security/ssh-key.md index 6536ee6..20dd28c 100644 --- a/content/security/ssh-key.md +++ b/content/security/ssh-key.md @@ -175,11 +175,25 @@ To update your version of Git,see the [Git](https://git-scm.com/downloads) websi {% endadmonition %} -1. Open your terminal. -2. Type `git config --global gpg.format ssh`. -3. Type `git config --global user.signingKey `, substituting `` with the - path to the public key you'd like to use, for example _~/.ssh/id_ed25519.pub_. -4. Type `git config --global commit.gpgSign true`. +In your terminal, run the following commands: + +1. Make git use SSH to sign commits and tags: + +```shell +git config --global gpg.format ssh +``` + +2. Set the SSH signing key to your public key: + +```shell +git config --global user.signingKey '~/.ssh/' +``` + +3. Sign commits by default: + +```shell +git config --global commit.gpgSign true +``` ## Avoid re-typing the passphrase From 2ace081a8dc423c822eb3cec5dcd36868b9f5789 Mon Sep 17 00:00:00 2001 From: Abdur-Rahman Mansoor Date: Fri, 3 Apr 2026 15:13:32 +0200 Subject: [PATCH 09/66] fix typo in using-custom-domain.md (#774) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/774 Reviewed-by: Robert Wolff Co-authored-by: Abdur-Rahman Mansoor Co-committed-by: Abdur-Rahman Mansoor --- content/codeberg-pages/using-custom-domain.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md index 9b8ef89..d036907 100644 --- a/content/codeberg-pages/using-custom-domain.md +++ b/content/codeberg-pages/using-custom-domain.md @@ -54,7 +54,7 @@ To understand how the Pages server serves content, you need to know that a user But the server might not know that it is responsible for `yourdomain.com` and it cannot just serve all domains in the world. So to find out if the server is responsible for `yourdomain.com` it will check the DNS entries of `yourdomain.com`. If it returns something with `codeberg.page` (according to the domain schemes mentioned below) then it knows which -respository to check for the `.domains` file and your content. +repository to check for the `.domains` file and your content. {% endadmonition %} From 047aa55ba0a97e752650abb49cb0367b0d650859 Mon Sep 17 00:00:00 2001 From: leeroyjankins Date: Thu, 9 Apr 2026 11:00:42 +0200 Subject: [PATCH 10/66] Recommend forgejo-cli instead of codeberg-cli in the section on CLI clients (#773) Since [codeberg-cli](https://codeberg.org/Aviac/codeberg-cli) has been discontinued, update the section on CLI clients to recommend forgejo-cli, which the codeberg-cli maintainer endorses. Given the endorsement, I presume that it's worth recommending in the docs, even though the project is relatively young. Having used it myself, I can vouch for it. I wrote a brief overview of forgejo-cli to contrast it slightly with `tea`. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/773 Reviewed-by: Gusted Reviewed-by: Robert Wolff Co-authored-by: leeroyjankins Co-committed-by: leeroyjankins --- content/git/clone-commit-via-cli.md | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/content/git/clone-commit-via-cli.md b/content/git/clone-commit-via-cli.md index a86696c..3825b54 100644 --- a/content/git/clone-commit-via-cli.md +++ b/content/git/clone-commit-via-cli.md @@ -116,7 +116,7 @@ It's even more important when you have collaborators on a project; they may chan pull these modifications before you start working. Because of this, it is recommended to pull before pushing. -## CLI clients `tea` and `berg` for other actions +## CLI clients `tea` and `fj` for other actions ### Gitea / Forgejo CLI `tea` @@ -125,15 +125,10 @@ and [Forgejo](https://forgejo.org). Since Codeberg runs on Forgejo, you can use This project is maintained by [the Gitea project](https://gitea.com). -### Codeberg CLI `berg` +### Forgejo CLI `fj` -The [codeberg-cli project](https://codeberg.org/RobWalt/codeberg-cli), aka. `berg`, is a CLI client that is tailored -for Codeberg. -The main difference compared to `tea` are: +The [forgejo-cli project](https://codeberg.org/forgejo-contrib/forgejo-cli), or `fj`, is a CLI client that can be used +with instances of Forgejo, including Codeberg. It is a younger project than `tea`, but its scope includes features +specific to Forgejo, such as browsing a repo's integrated wiki. -- extra features: `berg` provides some features that `tea` doesn't implement, like editing issues or pull requests -- active development: the `berg` repository is actively developed and maintained by a few community members -- modern UI: `berg` offers an interactive and modern looking user experience - -If you're interested, check out the [codeberg-cli wiki](https://codeberg.org/RobWalt/codeberg-cli/wiki), which contains -just about everything you need to know about it. +This project is maintained by contributors in the [Forgejo community](https://codeberg.org/forgejo-contrib). From 3d2f8779ba9425ec1babbfef30f264c8b691785a Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Sat, 18 Apr 2026 15:33:00 +0200 Subject: [PATCH 11/66] chore(deps): update dependency cspell to v9.8.0 (#770) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/770 Reviewed-by: Gusted Co-authored-by: Dependency bot Co-committed-by: Dependency bot --- package.json | 2 +- pnpm-lock.yaml | 511 ++++++++++++++++++++++++++----------------------- 2 files changed, 270 insertions(+), 243 deletions(-) diff --git a/package.json b/package.json index efd3aef..46320a0 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@fortawesome/free-solid-svg-icons": "7.1.0", "@toycode/markdown-it-class": "1.2.4", "@uncenter/eleventy-plugin-toc": "1.0.3", - "cspell": "9.6.0", + "cspell": "9.8.0", "halfmoon": "2.0.2", "markdown-it": "14.1.1", "markdown-it-anchor": "9.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 33d14b2..e64ee76 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,8 +33,8 @@ importers: specifier: 1.0.3 version: 1.0.3 cspell: - specifier: 9.6.0 - version: 9.6.0 + specifier: 9.8.0 + version: 9.8.0 halfmoon: specifier: 2.0.2 version: 2.0.2 @@ -106,30 +106,38 @@ packages: resolution: {integrity: sha512-174nFXxL/6KcYbLYpra+q3nDbfKxLxRTNVY1atq2M1pYYiPfHse++3IFNl8mjPFsd7y2qQjxLORzIjHMjL3NDQ==} engines: {node: '>=18'} - '@cspell/cspell-bundled-dicts@9.6.0': - resolution: {integrity: sha512-gLNe9bB+5gMsTEhR9YPE0Wt122HR2EV+Q1j9W+MbwbeBJmpTWrgAP1ZdpvHOg+6LF6x/bD/EC9HfWdd/om8wXA==} + '@cspell/cspell-bundled-dicts@9.8.0': + resolution: {integrity: sha512-MpXFpVyBPfJQ1YuVotljqUaGf6lWuf+fuWBBgs0PHFYTSjRPWuIxviAaCDnup/CJLLH60xQL4IlcQe4TOjzljw==} engines: {node: '>=20'} - '@cspell/cspell-json-reporter@9.6.0': - resolution: {integrity: sha512-5sY1lgAXS5xEOsjT5rREMADj7pHIt56XOL7xR80nNl0TwlpZbeBHhoB2aH5sirVTeodJFN5iraXNbVOYPPupPw==} + '@cspell/cspell-json-reporter@9.8.0': + resolution: {integrity: sha512-nqUaSo9T7l8KrE22gc7ZIs+zvP7ak1i7JqGdRs8sGvh2Ijqj43qYQLePgb1b/vm8a1bavnc51m+vf05hpd3g3Q==} engines: {node: '>=20'} - '@cspell/cspell-pipe@9.6.0': - resolution: {integrity: sha512-YNuY8NNXfE+8Qzknm2ps6QbrZLZu6rSZTZr3dYW3K6TK7+IFVlJ6e2Z9iKJTqp6aZ4AGU/r9QYGmNX4Oq4gZ0A==} + '@cspell/cspell-performance-monitor@9.8.0': + resolution: {integrity: sha512-IsrXYzn23yJICIQ915ACdf+2lNEcFNTu5BIQt3khHOsGVvZ9/AZYpu9Dk825vUyZG7RHg2Oi6dYNiJtULG4ouQ==} + engines: {node: '>=20.18'} + + '@cspell/cspell-pipe@9.8.0': + resolution: {integrity: sha512-ISEUD8PHYkd2Ktafc6hFfIXdGKYUvthA09NbwwZsWmOqYyk4wWKHZKqyyxD+BcrFwOyMOJcD8OEvIjkRQp2SJw==} engines: {node: '>=20'} - '@cspell/cspell-resolver@9.6.0': - resolution: {integrity: sha512-Gb2UWNmRpTOQGpYL4Q/LMw+b50KcRZcf/wJg6w0Yl3IT+F/uDNhNh1f5rHuTyGsbMsMxHJhsb2AoP+73GlbIfw==} + '@cspell/cspell-resolver@9.8.0': + resolution: {integrity: sha512-PZJj56BZpKfMxOzWkyt7b+aIXObe+8Ku/zLI4xDXPSuQPENbHBFHfPIZx68CyGEkanKxZ1ewKVx/FT1FUy+wDA==} engines: {node: '>=20'} - '@cspell/cspell-service-bus@9.6.0': - resolution: {integrity: sha512-DCuKKkySTEB8MPLTdoPMdmakYcx7XCsHz1YEMbzOcLqJCxXsRlRZg4qE9kRBee/2QY7eYA2kaYNgn/TDMooa4g==} + '@cspell/cspell-service-bus@9.8.0': + resolution: {integrity: sha512-P45sd2nqwcqhulBBbQnZB/JNcobecTrP4Ky3vmEq0cprsvavc+ZoHF9U2Ql5ghMSUzjrF2n1aNzZ8cH4IlsnKg==} engines: {node: '>=20'} - '@cspell/cspell-types@9.6.0': - resolution: {integrity: sha512-JTqrD47tV+rWc1y2W8T0NTfWLQMlSWX4OF64/Jf3WbsOD+4UXVIfjRlzPry7+1Zekm6pa38+23jkDBytYpu8yw==} + '@cspell/cspell-types@9.8.0': + resolution: {integrity: sha512-7Ge4UD6SCA49Tcc3+GTlz3Xn4cqVUAXtDO0u9IeHvJgkN3Me2Rw2GB/CtGmhKST3YeEeZMX7ww09TdHMUJlehw==} engines: {node: '>=20'} + '@cspell/cspell-worker@9.8.0': + resolution: {integrity: sha512-W8FLdE3MXPLbWtAXciILQhk9CHd6Mt+HRjZHM8m+dwE1Bc2TAjUai8kIxsdhHUq58p7gYY2ekr5sg1uYOUgTAA==} + engines: {node: '>=20.18'} + '@cspell/dict-ada@4.1.1': resolution: {integrity: sha512-E+0YW9RhZod/9Qy2gxfNZiHJjCYFlCdI69br1eviQQWB8yOTJX0JHXLs79kOYhSW0kINPVUdvddEBe6Lu6CjGQ==} @@ -142,8 +150,8 @@ packages: '@cspell/dict-bash@4.2.2': resolution: {integrity: sha512-kyWbwtX3TsCf5l49gGQIZkRLaB/P8g73GDRm41Zu8Mv51kjl2H7Au0TsEvHv7jzcsRLS6aUYaZv6Zsvk1fOz+Q==} - '@cspell/dict-companies@3.2.10': - resolution: {integrity: sha512-bJ1qnO1DkTn7JYGXvxp8FRQc4yq6tRXnrII+jbP8hHmq5TX5o1Wu+rdfpoUQaMWTl6balRvcMYiINDesnpR9Bw==} + '@cspell/dict-companies@3.2.11': + resolution: {integrity: sha512-0cmafbcz2pTHXLd59eLR1gvDvN6aWAOM0+cIL4LLF9GX9yB2iKDNrKsvs4tJRqutoaTdwNFBbV0FYv+6iCtebQ==} '@cspell/dict-cpp@7.0.2': resolution: {integrity: sha512-dfbeERiVNeqmo/npivdR6rDiBCqZi3QtjH2Z0HFcXwpdj6i97dX1xaKyK2GUsO/p4u1TOv63Dmj5Vm48haDpuA==} @@ -154,8 +162,8 @@ packages: '@cspell/dict-csharp@4.0.8': resolution: {integrity: sha512-qmk45pKFHSxckl5mSlbHxmDitSsGMlk/XzFgt7emeTJWLNSTUK//MbYAkBNRtfzB4uD7pAFiKgpKgtJrTMRnrQ==} - '@cspell/dict-css@4.0.19': - resolution: {integrity: sha512-VYHtPnZt/Zd/ATbW3rtexWpBnHUohUrQOHff/2JBhsVgxOrksAxJnLAO43Q1ayLJBJUUwNVo+RU0sx0aaysZfg==} + '@cspell/dict-css@4.1.1': + resolution: {integrity: sha512-y/Vgo6qY08e1t9OqR56qjoFLBCpi4QfWMf2qzD1l9omRZwvSMQGRPz4x0bxkkkU4oocMAeztjzCsmLew//c/8w==} '@cspell/dict-dart@2.3.2': resolution: {integrity: sha512-sUiLW56t9gfZcu8iR/5EUg+KYyRD83Cjl3yjDEA2ApVuJvK1HhX+vn4e4k4YfjpUQMag8XO2AaRhARE09+/rqw==} @@ -169,41 +177,41 @@ packages: '@cspell/dict-docker@1.1.17': resolution: {integrity: sha512-OcnVTIpHIYYKhztNTyK8ShAnXTfnqs43hVH6p0py0wlcwRIXe5uj4f12n7zPf2CeBI7JAlPjEsV0Rlf4hbz/xQ==} - '@cspell/dict-dotnet@5.0.11': - resolution: {integrity: sha512-LSVKhpFf/ASTWJcfYeS0Sykcl1gVMsv2Z5Eo0TnTMSTLV3738HH+66pIsjUTChqU6SF3gKPuCe6EOaRYqb/evA==} + '@cspell/dict-dotnet@5.0.13': + resolution: {integrity: sha512-xPp7jMnFpOri7tzmqmm/dXMolXz1t2bhNqxYkOyMqXhvs08oc7BFs+EsbDY0X7hqiISgeFZGNqn0dOCr+ncPYw==} '@cspell/dict-elixir@4.0.8': resolution: {integrity: sha512-CyfphrbMyl4Ms55Vzuj+mNmd693HjBFr9hvU+B2YbFEZprE5AG+EXLYTMRWrXbpds4AuZcvN3deM2XVB80BN/Q==} - '@cspell/dict-en-common-misspellings@2.1.11': - resolution: {integrity: sha512-2jcY494If1udvzd7MT2z/QH/RACUo/I02vIY4ttNdZhgYvUmRKhg8OBdrbzYo0lJOcc7XUb8rhIFQRHzxOSVeA==} + '@cspell/dict-en-common-misspellings@2.1.12': + resolution: {integrity: sha512-14Eu6QGqyksqOd4fYPuRb58lK1Va7FQK9XxFsRKnZU8LhL3N+kj7YKDW+7aIaAN/0WGEqslGP6lGbQzNti8Akw==} - '@cspell/dict-en-gb-mit@3.1.16': - resolution: {integrity: sha512-4PPdapCJslytxAVJu35Mv97qDyGmAQxtDE790T2bWNhcqN6gvRVAc/eTRaXkUIf21q1xCxxNNqpH4VfMup69rQ==} + '@cspell/dict-en-gb-mit@3.1.22': + resolution: {integrity: sha512-xE5Vg6gGdMkZ1Ep6z9SJMMioGkkT1GbxS5Mm0U3Ey1/H68P0G7cJcyiVr1CARxFbLqKE4QUpoV1o6jz1Z5Yl9Q==} - '@cspell/dict-en_us@4.4.27': - resolution: {integrity: sha512-0y4vH2i5cFmi8sxkc4OlD2IlnqDznOtKczm4h6jA288g5VVrm3bhkYK6vcB8b0CoRKtYWKet4VEmHBP1yI+Qfw==} + '@cspell/dict-en_us@4.4.33': + resolution: {integrity: sha512-zWftVqfUStDA37wO1ZNDN1qMJOfcxELa8ucHW8W8wBAZY3TK5Nb6deLogCK/IJi/Qljf30dwwuqqv84Qqle9Tw==} - '@cspell/dict-filetypes@3.0.15': - resolution: {integrity: sha512-uDMeqYlLlK476w/muEFQGBy9BdQWS0mQ7BJiy/iQv5XUWZxE2O54ZQd9nW8GyQMzAgoyg5SG4hf9l039Qt66oA==} + '@cspell/dict-filetypes@3.0.18': + resolution: {integrity: sha512-yU7RKD/x1IWmDLzWeiItMwgV+6bUcU/af23uS0+uGiFUbsY1qWV/D4rxlAAO6Z7no3J2z8aZOkYIOvUrJq0Rcw==} '@cspell/dict-flutter@1.1.1': resolution: {integrity: sha512-UlOzRcH2tNbFhZmHJN48Za/2/MEdRHl2BMkCWZBYs+30b91mWvBfzaN4IJQU7dUZtowKayVIF9FzvLZtZokc5A==} - '@cspell/dict-fonts@4.0.5': - resolution: {integrity: sha512-BbpkX10DUX/xzHs6lb7yzDf/LPjwYIBJHJlUXSBXDtK/1HaeS+Wqol4Mlm2+NAgZ7ikIE5DQMViTgBUY3ezNoQ==} + '@cspell/dict-fonts@4.0.6': + resolution: {integrity: sha512-aR/0csY01dNb0A1tw/UmN9rKgHruUxsYsvXu6YlSBJFu60s26SKr/k1o4LavpHTQ+lznlYMqAvuxGkE4Flliqw==} '@cspell/dict-fsharp@1.1.1': resolution: {integrity: sha512-imhs0u87wEA4/cYjgzS0tAyaJpwG7vwtC8UyMFbwpmtw+/bgss+osNfyqhYRyS/ehVCWL17Ewx2UPkexjKyaBA==} - '@cspell/dict-fullstack@3.2.7': - resolution: {integrity: sha512-IxEk2YAwAJKYCUEgEeOg3QvTL4XLlyArJElFuMQevU1dPgHgzWElFevN5lsTFnvMFA1riYsVinqJJX0BanCFEg==} + '@cspell/dict-fullstack@3.2.9': + resolution: {integrity: sha512-diZX+usW5aZ4/b2T0QM/H/Wl9aNMbdODa1Jq0ReBr/jazmNeWjd+PyqeVgzd1joEaHY+SAnjrf/i9CwKd2ZtWQ==} '@cspell/dict-gaming-terms@1.1.2': resolution: {integrity: sha512-9XnOvaoTBscq0xuD6KTEIkk9hhdfBkkvJAIsvw3JMcnp1214OCGW8+kako5RqQ2vTZR3Tnf3pc57o7VgkM0q1Q==} - '@cspell/dict-git@3.0.7': - resolution: {integrity: sha512-odOwVKgfxCQfiSb+nblQZc4ErXmnWEnv8XwkaI4sNJ7cNmojnvogYVeMqkXPjvfrgEcizEEA4URRD2Ms5PDk1w==} + '@cspell/dict-git@3.1.0': + resolution: {integrity: sha512-KEt9zGkxqGy2q1nwH4CbyqTSv5nadpn8BAlDnzlRcnL0Xb3LX9xTgSGShKvzb0bw35lHoYyLWN2ZKAqbC4pgGQ==} '@cspell/dict-golang@6.0.26': resolution: {integrity: sha512-YKA7Xm5KeOd14v5SQ4ll6afe9VSy3a2DWM7L9uBq4u3lXToRBQ1W5PRa+/Q9udd+DTURyVVnQ+7b9cnOlNxaRg==} @@ -217,8 +225,8 @@ packages: '@cspell/dict-html-symbol-entities@4.0.5': resolution: {integrity: sha512-429alTD4cE0FIwpMucvSN35Ld87HCyuM8mF731KU5Rm4Je2SG6hmVx7nkBsLyrmH3sQukTcr1GaiZsiEg8svPA==} - '@cspell/dict-html@4.0.14': - resolution: {integrity: sha512-2bf7n+kS92g+cMKV0wr9o/Oq9n8JzU7CcrB96gIh2GHgnF+0xDOqO2W/1KeFAqOfqosoOVE48t+4dnEMkkoJ2Q==} + '@cspell/dict-html@4.0.15': + resolution: {integrity: sha512-GJYnYKoD9fmo2OI0aySEGZOjThnx3upSUvV7mmqUu8oG+mGgzqm82P/f7OqsuvTaInZZwZbo+PwJQd/yHcyFIw==} '@cspell/dict-java@5.0.12': resolution: {integrity: sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A==} @@ -232,8 +240,8 @@ packages: '@cspell/dict-kotlin@1.1.1': resolution: {integrity: sha512-J3NzzfgmxRvEeOe3qUXnSJQCd38i/dpF9/t3quuWh6gXM+krsAXP75dY1CzDmS8mrJAlBdVBeAW5eAZTD8g86Q==} - '@cspell/dict-latex@4.0.4': - resolution: {integrity: sha512-YdTQhnTINEEm/LZgTzr9Voz4mzdOXH7YX+bSFs3hnkUHCUUtX/mhKgf1CFvZ0YNM2afjhQcmLaR9bDQVyYBvpA==} + '@cspell/dict-latex@5.1.0': + resolution: {integrity: sha512-qxT4guhysyBt0gzoliXYEBYinkAdEtR2M7goRaUH0a7ltCsoqqAeEV8aXYRIdZGcV77gYSobvu3jJL038tlPAw==} '@cspell/dict-lorem-ipsum@4.0.5': resolution: {integrity: sha512-9a4TJYRcPWPBKkQAJ/whCu4uCAEgv/O2xAaZEI0n4y1/l18Yyx8pBKoIX5QuVXjjmKEkK7hi5SxyIsH7pFEK9Q==} @@ -244,22 +252,22 @@ packages: '@cspell/dict-makefile@1.0.5': resolution: {integrity: sha512-4vrVt7bGiK8Rx98tfRbYo42Xo2IstJkAF4tLLDMNQLkQ86msDlYSKG1ZCk8Abg+EdNcFAjNhXIiNO+w4KflGAQ==} - '@cspell/dict-markdown@2.0.14': - resolution: {integrity: sha512-uLKPNJsUcumMQTsZZgAK9RgDLyQhUz/uvbQTEkvF/Q4XfC1i/BnA8XrOrd0+Vp6+tPOKyA+omI5LRWfMu5K/Lw==} + '@cspell/dict-markdown@2.0.16': + resolution: {integrity: sha512-976RRqKv6cwhrxdFCQP2DdnBVB86BF57oQtPHy4Zbf4jF/i2Oy29MCrxirnOBalS1W6KQeto7NdfDXRAwkK4PQ==} peerDependencies: - '@cspell/dict-css': ^4.0.19 - '@cspell/dict-html': ^4.0.14 + '@cspell/dict-css': ^4.1.1 + '@cspell/dict-html': ^4.0.15 '@cspell/dict-html-symbol-entities': ^4.0.5 '@cspell/dict-typescript': ^3.2.3 '@cspell/dict-monkeyc@1.0.12': resolution: {integrity: sha512-MN7Vs11TdP5mbdNFQP5x2Ac8zOBm97ARg6zM5Sb53YQt/eMvXOMvrep7+/+8NJXs0jkp70bBzjqU4APcqBFNAw==} - '@cspell/dict-node@5.0.8': - resolution: {integrity: sha512-AirZcN2i84ynev3p2/1NCPEhnNsHKMz9zciTngGoqpdItUb2bDt1nJBjwlsrFI78GZRph/VaqTVFwYikmncpXg==} + '@cspell/dict-node@5.0.9': + resolution: {integrity: sha512-hO+ga+uYZ/WA4OtiMEyKt5rDUlUyu3nXMf8KVEeqq2msYvAPdldKBGH7lGONg6R/rPhv53Rb+0Y1SLdoK1+7wQ==} - '@cspell/dict-npm@5.2.29': - resolution: {integrity: sha512-ZAef8JpYmbuHFT1zekj/YyImLPvZevjECw663EmG5GPePyNo4AfH8Dd2fFhaOyQ3P5I5LrkAhGwypnOfUxcssw==} + '@cspell/dict-npm@5.2.38': + resolution: {integrity: sha512-21ucGRPYYhr91C2cDBoMPTrcIOStQv33xOqJB0JLoC5LAs2Sfj9EoPGhGb+gIFVHz6Ia7JQWE2SJsOVFJD1wmg==} '@cspell/dict-php@4.1.1': resolution: {integrity: sha512-EXelI+4AftmdIGtA8HL8kr4WlUE11OqCSVlnIgZekmTkEGSZdYnkFdiJ5IANSALtlQ1mghKjz+OFqVs6yowgWA==} @@ -267,20 +275,20 @@ packages: '@cspell/dict-powershell@5.0.15': resolution: {integrity: sha512-l4S5PAcvCFcVDMJShrYD0X6Huv9dcsQPlsVsBGbH38wvuN7gS7+GxZFAjTNxDmTY1wrNi1cCatSg6Pu2BW4rgg==} - '@cspell/dict-public-licenses@2.0.15': - resolution: {integrity: sha512-cJEOs901H13Pfy0fl4dCD1U+xpWIMaEPq8MeYU83FfDZvellAuSo4GqWCripfIqlhns/L6+UZEIJSOZnjgy7Wg==} + '@cspell/dict-public-licenses@2.0.16': + resolution: {integrity: sha512-EQRrPvEOmwhwWezV+W7LjXbIBjiy6y/shrET6Qcpnk3XANTzfvWflf9PnJ5kId/oKWvihFy0za0AV1JHd03pSQ==} - '@cspell/dict-python@4.2.25': - resolution: {integrity: sha512-hDdN0YhKgpbtZVRjQ2c8jk+n0wQdidAKj1Fk8w7KEHb3YlY5uPJ0mAKJk7AJKPNLOlILoUmN+HAVJz+cfSbWYg==} + '@cspell/dict-python@4.2.26': + resolution: {integrity: sha512-hbjN6BjlSgZOG2dA2DtvYNGBM5Aq0i0dHaZjMOI9K/9vRicVvKbcCiBSSrR3b+jwjhQL5ff7HwG5xFaaci0GQA==} '@cspell/dict-r@2.1.1': resolution: {integrity: sha512-71Ka+yKfG4ZHEMEmDxc6+blFkeTTvgKbKAbwiwQAuKl3zpqs1Y0vUtwW2N4b3LgmSPhV3ODVY0y4m5ofqDuKMw==} - '@cspell/dict-ruby@5.1.0': - resolution: {integrity: sha512-9PJQB3cfkBULrMLp5kSAcFPpzf8oz9vFN+QYZABhQwWkGbuzCIXSorHrmWSASlx4yejt3brjaWS57zZ/YL5ZQQ==} + '@cspell/dict-ruby@5.1.1': + resolution: {integrity: sha512-LHrp84oEV6q1ZxPPyj4z+FdKyq1XAKYPtmGptrd+uwHbrF/Ns5+fy6gtSi7pS+uc0zk3JdO9w/tPK+8N1/7WUA==} - '@cspell/dict-rust@4.1.1': - resolution: {integrity: sha512-fXiXnZH0wOaEVTKFRNaz6TsUGhuB8dAT0ubYkDNzRQCaV5JGSOebGb1v2x5ZrOSVp+moxWM/vdBfiNU6KOEaFQ==} + '@cspell/dict-rust@4.1.2': + resolution: {integrity: sha512-O1FHrumYcO+HZti3dHfBPUdnDFkI+nbYK3pxYmiM1sr+G0ebOd6qchmswS0Wsc6ZdEVNiPYJY/gZQR6jfW3uOg==} '@cspell/dict-scala@5.0.9': resolution: {integrity: sha512-AjVcVAELgllybr1zk93CJ5wSUNu/Zb5kIubymR/GAYkMyBdYFCZ3Zbwn4Zz8GJlFFAbazABGOu0JPVbeY59vGg==} @@ -288,8 +296,8 @@ packages: '@cspell/dict-shell@1.1.2': resolution: {integrity: sha512-WqOUvnwcHK1X61wAfwyXq04cn7KYyskg90j4lLg3sGGKMW9Sq13hs91pqrjC44Q+lQLgCobrTkMDw9Wyl9nRFA==} - '@cspell/dict-software-terms@5.1.20': - resolution: {integrity: sha512-TEk1xHvetTI4pv7Vzje1D322m6QEjaH2P6ucOOf6q7EJCppQIdC0lZSXkgHJAFU5HGSvEXSzvnVeW2RHW86ziQ==} + '@cspell/dict-software-terms@5.2.2': + resolution: {integrity: sha512-0CaYd6TAsKtEoA7tNswm1iptEblTzEe3UG8beG2cpSTHk7afWIVMtJLgXDv0f/Li67Lf3Z1Jf3JeXR7GsJ2TRw==} '@cspell/dict-sql@2.2.1': resolution: {integrity: sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg==} @@ -312,20 +320,24 @@ packages: '@cspell/dict-zig@1.0.0': resolution: {integrity: sha512-XibBIxBlVosU06+M6uHWkFeT0/pW5WajDRYdXG2CgHnq85b0TI/Ks0FuBJykmsgi2CAD3Qtx8UHFEtl/DSFnAQ==} - '@cspell/dynamic-import@9.6.0': - resolution: {integrity: sha512-Lkn82wyGj2ltxeYfH2bEjshdes1fx3ouYUZxeW5i6SBBvEVJoSmr43AygI8A317UMIQxVj59qVBorrtGYcRI1w==} + '@cspell/dynamic-import@9.8.0': + resolution: {integrity: sha512-wMgb32lqG9g6lCipUQsY9Bk5idXPDz7wvzOqEsU1M2HmNYmdE1wfPoRpfQfsVL965iG3+6h8QLr2+8FKpweFEQ==} engines: {node: '>=20'} - '@cspell/filetypes@9.6.0': - resolution: {integrity: sha512-CaWyk5j20H6sr+HCArtUY95jUQb7A/6W0GC4B4umnqoWvgqwR72duowLFa+w1K2C7tZg3GoV4Wf2cUn9jjt5FA==} + '@cspell/filetypes@9.8.0': + resolution: {integrity: sha512-yHvtYn9qt6zykua77sNzTcf7HrG/dpo/+2pCMGSrfSrQypSNT6FUFvMS04W7kwhP86U1GkCjppNykXuoH3cqug==} engines: {node: '>=20'} - '@cspell/strong-weak-map@9.6.0': - resolution: {integrity: sha512-9g8LCLv/2RrprGeGnFAaBETWq7ESnBcoMbvgNu+vZE58iF+pbFvP0qGgKvVeKEEpc2LZhNuHLsUH37MUS6DOQg==} + '@cspell/rpc@9.8.0': + resolution: {integrity: sha512-t4lHEa254W+PePXNQ1noW7QhQxz/mhsJ9X8LEt0ILzBbPWCJzN+JuaM7EiolIPiwxtfxpMwKx9482kt4eTja7A==} + engines: {node: '>=20.18'} + + '@cspell/strong-weak-map@9.8.0': + resolution: {integrity: sha512-HocksAqZ0JcWA5oWO7TIlOCftXVGkPGzbeFlCRRrjJpZmYQH+4NdeEXyQC6T89NGocp45td/CgyBcAaFMy1N9w==} engines: {node: '>=20'} - '@cspell/url@9.6.0': - resolution: {integrity: sha512-257WOxh9vOYHAVgBNXRCdLEd+ldzlVbzcc9u+6DYoCDCNGe0OvOWOGsAfnUbMc9xEw48XgBlDYgOlPbjWGLOTg==} + '@cspell/url@9.8.0': + resolution: {integrity: sha512-LY1lFiZLTQF/ma1ilfKmRmFmEOw0RfYhyl0UMhY7/d93b+kiDMhxP/9Qir4+5LyiRncaE3++ZcWno9Hya+ssRg==} engines: {node: '>=20'} '@emnapi/runtime@1.7.0': @@ -686,8 +698,8 @@ packages: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} - commander@14.0.2: - resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} commander@5.1.0: @@ -698,55 +710,52 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - comment-json@4.5.1: - resolution: {integrity: sha512-taEtr3ozUmOB7it68Jll7s0Pwm+aoiHyXKrEC8SEodL4rNpdfDLqa7PfBlrgFoCNNdR8ImL+muti5IGvktJAAg==} + comment-json@4.6.2: + resolution: {integrity: sha512-R2rze/hDX30uul4NZoIZ76ImSJLFxn/1/ZxtKC1L77y2X1k+yYu1joKbAtMA2Fg3hZrTOiw0I5mwVMo0cf250w==} engines: {node: '>= 6'} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - - cspell-config-lib@9.6.0: - resolution: {integrity: sha512-5ztvheawkmFXNHGN82iOOntU3T5mmlQBP/plgoKdBZ6+lSYrOJLkOyqxYyi7MrUBDtWrXPzFllkBrPNRDlbX/A==} + cspell-config-lib@9.8.0: + resolution: {integrity: sha512-gMJBAgYPvvO+uDFLUcGWaTu6/e+r8mm4GD4rQfWa/yV4F9fj+yOYLIMZqLWRvT1moHZX1FxyVvUbJcmZ1gfebg==} engines: {node: '>=20'} - cspell-dictionary@9.6.0: - resolution: {integrity: sha512-wW0m1kLrbK6bRY/GrLUGKUUJ1Z4ZUgIb8LD4zNaECcvGviv9V7VcR3mEwUip3ZjoHa3ClzEoWgQ9gXrtac80Wg==} + cspell-dictionary@9.8.0: + resolution: {integrity: sha512-QW4hdkWcrxZA1QNqi26U0S/U3/V+tKCm7JaaesEJW2F6Ao+23AbHVwidyAVtXaEhGkn6PxB+epKrrAa6nE69qA==} engines: {node: '>=20'} - cspell-gitignore@9.6.0: - resolution: {integrity: sha512-8GfmJuRBBvibyPHnNE2wYJAiQ/ceDYLD1X1sUQaCyj6hPMR7ChJiVhFPtS11hMqkjZ46OBMYTMGWqO792L9fEQ==} + cspell-gitignore@9.8.0: + resolution: {integrity: sha512-SDUa1DmSfT20+JH7XtyzcEL9KfurneoR/XbmlrtPQZP/LUHXh3yz4x/0vFIkEFXNWdSckY0QdWTz8DaxClCf4Q==} engines: {node: '>=20'} hasBin: true - cspell-glob@9.6.0: - resolution: {integrity: sha512-KmEbKN0qdEamsEYbkFu7zjLYfw3hMmn9kmeh94IHr2kq6vWq5vNP5l1BuqmrUeFZlbNd07vj08IKAZHYsoGheQ==} + cspell-glob@9.8.0: + resolution: {integrity: sha512-Uvj/iHXs+jpsJyIEnhEoJTWXb1GVyZ9T05L5JFtZfsQNXrh8SRDQPscjxbg4okKr63N7WevfioQum/snHNYvmw==} engines: {node: '>=20'} - cspell-grammar@9.6.0: - resolution: {integrity: sha512-jZVIM5/3eB9rWURDq+VXdYip+DmPuFzO+bqaRtzqT8w6YoOIGYbiIxdwvyyA9xdH7SmW8uqHJP5x4pzZju1lNQ==} + cspell-grammar@9.8.0: + resolution: {integrity: sha512-01XMq2vhPS0Gvxnfed9uvOwH+3cXddHYxW0PwCE+SZdcC6TN8yM6glByuLt1qFustAmQVE5GSr7uAY9o4pZQRg==} engines: {node: '>=20'} hasBin: true - cspell-io@9.6.0: - resolution: {integrity: sha512-wZuZzKOYIb698kVEINYjGaNFQu+AFZ945TORM3hapmPjez+vsHwl8m/pPpCHeGMpQtHMEDkX84AbQ7R55MRIwg==} + cspell-io@9.8.0: + resolution: {integrity: sha512-JINaEWQEzR4f2upwdZOFcft+nBvQgizJfrOLszxG3p+BIzljnGklqE/nUtLFZpBu0oMJvuM/Fd+GsWor0yP7Xw==} engines: {node: '>=20'} - cspell-lib@9.6.0: - resolution: {integrity: sha512-m9rIv8hkQ3Dio4s80HQbM9cdxENcd6pS8j2AHWL50OSjJf3Xhw6/wMrIAGbwLHP15K6QZVU2eJ/abCzIJwjA4w==} + cspell-lib@9.8.0: + resolution: {integrity: sha512-G2TtPcye5QE5ev3YgWq42UOJLpTZ6naO/47oIm+jmeSYbgnbcOSThnEE7uMycx+TTNOz/vJVFpZmQyt0bWCftw==} engines: {node: '>=20'} - cspell-trie-lib@9.6.0: - resolution: {integrity: sha512-L7GSff5F9cF60QT78WsebVlb3sppi6jbvTHwsw7WF1jUN/ioAo7OzBYtYB7xkYeejcdVEpqfvf/ZOXPDp8x2Wg==} + cspell-trie-lib@9.8.0: + resolution: {integrity: sha512-GXIyqxya8QLp6SjKsAN9w3apvt1Ww7GKcZvTBaP76OfLoyb1QC6unwmObY2cZs1manCntGwHrgU6vFNuXnTzpw==} engines: {node: '>=20'} peerDependencies: - '@cspell/cspell-types': 9.6.0 + '@cspell/cspell-types': 9.8.0 - cspell@9.6.0: - resolution: {integrity: sha512-Mpf0oT2KAHTIb3YPAXWhW64/4CZKW5Lka4j1YxCLK3jM3nenmIsY/ocrJvqCMF4+1eejRF0N55sT3XmrijI5YQ==} - engines: {node: '>=20'} + cspell@9.8.0: + resolution: {integrity: sha512-qL0VErMSn8BDxaPxcV+9uenffgjPS+5Jfz+m4rCsvYjzLwr7AaaJBWWSV2UiAe/4cturae8n8qzxiGnbbazkRw==} + engines: {node: '>=20.18'} hasBin: true css-select@5.2.2: @@ -856,9 +865,9 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} - env-paths@3.0.0: - resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + env-paths@4.0.0: + resolution: {integrity: sha512-pxP8eL2SwwaTRi/KHYwLYXinDs7gL3jxFcBYmEdYfZmZXbaVDvdppd0XBU8qVz03rDfKZMXg1omHCbsJjZrMsw==} + engines: {node: '>=20'} errno@1.0.0: resolution: {integrity: sha512-3zV5mFS1E8/1bPxt/B0xxzI1snsg3uSCIh6Zo1qKg6iMw93hzPANk9oBFzSFBFrwuVoQuE3rLoouAUfwOAj1wQ==} @@ -933,8 +942,8 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} fresh@2.0.0: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} @@ -957,9 +966,9 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} - engines: {node: '>=18'} + global-directory@5.0.0: + resolution: {integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==} + engines: {node: '>=20'} globby@15.0.0: resolution: {integrity: sha512-oB4vkQGqlMl682wL1IlWd02tXCbquGWM4voPEI85QmNKCaw8zGTm1f1rubFgkg3Eli2PtKlFgrnmUqasbQWlkw==} @@ -1005,9 +1014,9 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} @@ -1047,6 +1056,10 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-safe-filename@0.1.1: + resolution: {integrity: sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g==} + engines: {node: '>=20'} + iso-639-1@3.1.5: resolution: {integrity: sha512-gXkz5+KN7HrG0Q5UGqSMO2qB9AsbEeyLP54kF1YrMsIxmu+g4BdB7rflReZTSTZGpfj8wywu6pfPBCylPIzGQA==} engines: {node: '>=6.0'} @@ -1329,8 +1342,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} please-upgrade-node@3.2.0: @@ -1415,8 +1428,8 @@ packages: semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} hasBin: true @@ -1446,8 +1459,8 @@ packages: resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} engines: {node: '>=8.0.0'} - smol-toml@1.6.0: - resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==} + smol-toml@1.6.1: + resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==} engines: {node: '>= 18'} source-map-js@1.2.1: @@ -1536,8 +1549,8 @@ packages: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} hasBin: true @@ -1578,7 +1591,7 @@ snapshots: '@11ty/eleventy-utils': 2.0.7 '@rgrove/parse-xml': 4.2.0 debug: 4.4.3 - flatted: 3.3.3 + flatted: 3.4.2 p-queue: 6.6.2 transitivePeerDependencies: - supports-color @@ -1643,11 +1656,11 @@ snapshots: moo: 0.5.2 node-retrieve-globals: 6.0.1 nunjucks: 3.2.4(chokidar@3.6.0) - picomatch: 4.0.3 + picomatch: 4.0.4 please-upgrade-node: 3.2.0 posthtml: 0.16.7 posthtml-match-helper: 2.0.3(posthtml@0.16.7) - semver: 7.7.3 + semver: 7.7.4 slugify: 1.6.6 tinyglobby: 0.2.15 transitivePeerDependencies: @@ -1671,60 +1684,60 @@ snapshots: maximatch: 0.1.0 slash: 3.0.0 - '@cspell/cspell-bundled-dicts@9.6.0': + '@cspell/cspell-bundled-dicts@9.8.0': dependencies: '@cspell/dict-ada': 4.1.1 '@cspell/dict-al': 1.1.1 '@cspell/dict-aws': 4.0.17 '@cspell/dict-bash': 4.2.2 - '@cspell/dict-companies': 3.2.10 + '@cspell/dict-companies': 3.2.11 '@cspell/dict-cpp': 7.0.2 '@cspell/dict-cryptocurrencies': 5.0.5 '@cspell/dict-csharp': 4.0.8 - '@cspell/dict-css': 4.0.19 + '@cspell/dict-css': 4.1.1 '@cspell/dict-dart': 2.3.2 '@cspell/dict-data-science': 2.0.13 '@cspell/dict-django': 4.1.6 '@cspell/dict-docker': 1.1.17 - '@cspell/dict-dotnet': 5.0.11 + '@cspell/dict-dotnet': 5.0.13 '@cspell/dict-elixir': 4.0.8 - '@cspell/dict-en-common-misspellings': 2.1.11 - '@cspell/dict-en-gb-mit': 3.1.16 - '@cspell/dict-en_us': 4.4.27 - '@cspell/dict-filetypes': 3.0.15 + '@cspell/dict-en-common-misspellings': 2.1.12 + '@cspell/dict-en-gb-mit': 3.1.22 + '@cspell/dict-en_us': 4.4.33 + '@cspell/dict-filetypes': 3.0.18 '@cspell/dict-flutter': 1.1.1 - '@cspell/dict-fonts': 4.0.5 + '@cspell/dict-fonts': 4.0.6 '@cspell/dict-fsharp': 1.1.1 - '@cspell/dict-fullstack': 3.2.7 + '@cspell/dict-fullstack': 3.2.9 '@cspell/dict-gaming-terms': 1.1.2 - '@cspell/dict-git': 3.0.7 + '@cspell/dict-git': 3.1.0 '@cspell/dict-golang': 6.0.26 '@cspell/dict-google': 1.0.9 '@cspell/dict-haskell': 4.0.6 - '@cspell/dict-html': 4.0.14 + '@cspell/dict-html': 4.0.15 '@cspell/dict-html-symbol-entities': 4.0.5 '@cspell/dict-java': 5.0.12 '@cspell/dict-julia': 1.1.1 '@cspell/dict-k8s': 1.0.12 '@cspell/dict-kotlin': 1.1.1 - '@cspell/dict-latex': 4.0.4 + '@cspell/dict-latex': 5.1.0 '@cspell/dict-lorem-ipsum': 4.0.5 '@cspell/dict-lua': 4.0.8 '@cspell/dict-makefile': 1.0.5 - '@cspell/dict-markdown': 2.0.14(@cspell/dict-css@4.0.19)(@cspell/dict-html-symbol-entities@4.0.5)(@cspell/dict-html@4.0.14)(@cspell/dict-typescript@3.2.3) + '@cspell/dict-markdown': 2.0.16(@cspell/dict-css@4.1.1)(@cspell/dict-html-symbol-entities@4.0.5)(@cspell/dict-html@4.0.15)(@cspell/dict-typescript@3.2.3) '@cspell/dict-monkeyc': 1.0.12 - '@cspell/dict-node': 5.0.8 - '@cspell/dict-npm': 5.2.29 + '@cspell/dict-node': 5.0.9 + '@cspell/dict-npm': 5.2.38 '@cspell/dict-php': 4.1.1 '@cspell/dict-powershell': 5.0.15 - '@cspell/dict-public-licenses': 2.0.15 - '@cspell/dict-python': 4.2.25 + '@cspell/dict-public-licenses': 2.0.16 + '@cspell/dict-python': 4.2.26 '@cspell/dict-r': 2.1.1 - '@cspell/dict-ruby': 5.1.0 - '@cspell/dict-rust': 4.1.1 + '@cspell/dict-ruby': 5.1.1 + '@cspell/dict-rust': 4.1.2 '@cspell/dict-scala': 5.0.9 '@cspell/dict-shell': 1.1.2 - '@cspell/dict-software-terms': 5.1.20 + '@cspell/dict-software-terms': 5.2.2 '@cspell/dict-sql': 2.2.1 '@cspell/dict-svelte': 1.0.7 '@cspell/dict-swift': 2.0.6 @@ -1733,19 +1746,25 @@ snapshots: '@cspell/dict-vue': 3.0.5 '@cspell/dict-zig': 1.0.0 - '@cspell/cspell-json-reporter@9.6.0': + '@cspell/cspell-json-reporter@9.8.0': dependencies: - '@cspell/cspell-types': 9.6.0 + '@cspell/cspell-types': 9.8.0 - '@cspell/cspell-pipe@9.6.0': {} + '@cspell/cspell-performance-monitor@9.8.0': {} - '@cspell/cspell-resolver@9.6.0': + '@cspell/cspell-pipe@9.8.0': {} + + '@cspell/cspell-resolver@9.8.0': dependencies: - global-directory: 4.0.1 + global-directory: 5.0.0 - '@cspell/cspell-service-bus@9.6.0': {} + '@cspell/cspell-service-bus@9.8.0': {} - '@cspell/cspell-types@9.6.0': {} + '@cspell/cspell-types@9.8.0': {} + + '@cspell/cspell-worker@9.8.0': + dependencies: + cspell-lib: 9.8.0 '@cspell/dict-ada@4.1.1': {} @@ -1757,7 +1776,7 @@ snapshots: dependencies: '@cspell/dict-shell': 1.1.2 - '@cspell/dict-companies@3.2.10': {} + '@cspell/dict-companies@3.2.11': {} '@cspell/dict-cpp@7.0.2': {} @@ -1765,7 +1784,7 @@ snapshots: '@cspell/dict-csharp@4.0.8': {} - '@cspell/dict-css@4.0.19': {} + '@cspell/dict-css@4.1.1': {} '@cspell/dict-dart@2.3.2': {} @@ -1775,29 +1794,29 @@ snapshots: '@cspell/dict-docker@1.1.17': {} - '@cspell/dict-dotnet@5.0.11': {} + '@cspell/dict-dotnet@5.0.13': {} '@cspell/dict-elixir@4.0.8': {} - '@cspell/dict-en-common-misspellings@2.1.11': {} + '@cspell/dict-en-common-misspellings@2.1.12': {} - '@cspell/dict-en-gb-mit@3.1.16': {} + '@cspell/dict-en-gb-mit@3.1.22': {} - '@cspell/dict-en_us@4.4.27': {} + '@cspell/dict-en_us@4.4.33': {} - '@cspell/dict-filetypes@3.0.15': {} + '@cspell/dict-filetypes@3.0.18': {} '@cspell/dict-flutter@1.1.1': {} - '@cspell/dict-fonts@4.0.5': {} + '@cspell/dict-fonts@4.0.6': {} '@cspell/dict-fsharp@1.1.1': {} - '@cspell/dict-fullstack@3.2.7': {} + '@cspell/dict-fullstack@3.2.9': {} '@cspell/dict-gaming-terms@1.1.2': {} - '@cspell/dict-git@3.0.7': {} + '@cspell/dict-git@3.1.0': {} '@cspell/dict-golang@6.0.26': {} @@ -1807,7 +1826,7 @@ snapshots: '@cspell/dict-html-symbol-entities@4.0.5': {} - '@cspell/dict-html@4.0.14': {} + '@cspell/dict-html@4.0.15': {} '@cspell/dict-java@5.0.12': {} @@ -1817,7 +1836,7 @@ snapshots: '@cspell/dict-kotlin@1.1.1': {} - '@cspell/dict-latex@4.0.4': {} + '@cspell/dict-latex@5.1.0': {} '@cspell/dict-lorem-ipsum@4.0.5': {} @@ -1825,40 +1844,40 @@ snapshots: '@cspell/dict-makefile@1.0.5': {} - '@cspell/dict-markdown@2.0.14(@cspell/dict-css@4.0.19)(@cspell/dict-html-symbol-entities@4.0.5)(@cspell/dict-html@4.0.14)(@cspell/dict-typescript@3.2.3)': + '@cspell/dict-markdown@2.0.16(@cspell/dict-css@4.1.1)(@cspell/dict-html-symbol-entities@4.0.5)(@cspell/dict-html@4.0.15)(@cspell/dict-typescript@3.2.3)': dependencies: - '@cspell/dict-css': 4.0.19 - '@cspell/dict-html': 4.0.14 + '@cspell/dict-css': 4.1.1 + '@cspell/dict-html': 4.0.15 '@cspell/dict-html-symbol-entities': 4.0.5 '@cspell/dict-typescript': 3.2.3 '@cspell/dict-monkeyc@1.0.12': {} - '@cspell/dict-node@5.0.8': {} + '@cspell/dict-node@5.0.9': {} - '@cspell/dict-npm@5.2.29': {} + '@cspell/dict-npm@5.2.38': {} '@cspell/dict-php@4.1.1': {} '@cspell/dict-powershell@5.0.15': {} - '@cspell/dict-public-licenses@2.0.15': {} + '@cspell/dict-public-licenses@2.0.16': {} - '@cspell/dict-python@4.2.25': + '@cspell/dict-python@4.2.26': dependencies: '@cspell/dict-data-science': 2.0.13 '@cspell/dict-r@2.1.1': {} - '@cspell/dict-ruby@5.1.0': {} + '@cspell/dict-ruby@5.1.1': {} - '@cspell/dict-rust@4.1.1': {} + '@cspell/dict-rust@4.1.2': {} '@cspell/dict-scala@5.0.9': {} '@cspell/dict-shell@1.1.2': {} - '@cspell/dict-software-terms@5.1.20': {} + '@cspell/dict-software-terms@5.2.2': {} '@cspell/dict-sql@2.2.1': {} @@ -1874,16 +1893,18 @@ snapshots: '@cspell/dict-zig@1.0.0': {} - '@cspell/dynamic-import@9.6.0': + '@cspell/dynamic-import@9.8.0': dependencies: - '@cspell/url': 9.6.0 + '@cspell/url': 9.8.0 import-meta-resolve: 4.2.0 - '@cspell/filetypes@9.6.0': {} + '@cspell/filetypes@9.8.0': {} - '@cspell/strong-weak-map@9.6.0': {} + '@cspell/rpc@9.8.0': {} - '@cspell/url@9.6.0': {} + '@cspell/strong-weak-map@9.8.0': {} + + '@cspell/url@9.8.0': {} '@emnapi/runtime@1.7.0': dependencies: @@ -2184,75 +2205,75 @@ snapshots: commander@10.0.1: {} - commander@14.0.2: {} + commander@14.0.3: {} commander@5.1.0: {} commander@8.3.0: {} - comment-json@4.5.1: + comment-json@4.6.2: dependencies: array-timsort: 1.0.3 - core-util-is: 1.0.3 esprima: 4.0.1 concat-map@0.0.1: {} - core-util-is@1.0.3: {} - - cspell-config-lib@9.6.0: + cspell-config-lib@9.8.0: dependencies: - '@cspell/cspell-types': 9.6.0 - comment-json: 4.5.1 - smol-toml: 1.6.0 - yaml: 2.8.2 + '@cspell/cspell-types': 9.8.0 + comment-json: 4.6.2 + smol-toml: 1.6.1 + yaml: 2.8.3 - cspell-dictionary@9.6.0: + cspell-dictionary@9.8.0: dependencies: - '@cspell/cspell-pipe': 9.6.0 - '@cspell/cspell-types': 9.6.0 - cspell-trie-lib: 9.6.0(@cspell/cspell-types@9.6.0) + '@cspell/cspell-performance-monitor': 9.8.0 + '@cspell/cspell-pipe': 9.8.0 + '@cspell/cspell-types': 9.8.0 + cspell-trie-lib: 9.8.0(@cspell/cspell-types@9.8.0) fast-equals: 6.0.0 - cspell-gitignore@9.6.0: + cspell-gitignore@9.8.0: dependencies: - '@cspell/url': 9.6.0 - cspell-glob: 9.6.0 - cspell-io: 9.6.0 + '@cspell/url': 9.8.0 + cspell-glob: 9.8.0 + cspell-io: 9.8.0 - cspell-glob@9.6.0: + cspell-glob@9.8.0: dependencies: - '@cspell/url': 9.6.0 - picomatch: 4.0.3 + '@cspell/url': 9.8.0 + picomatch: 4.0.4 - cspell-grammar@9.6.0: + cspell-grammar@9.8.0: dependencies: - '@cspell/cspell-pipe': 9.6.0 - '@cspell/cspell-types': 9.6.0 + '@cspell/cspell-pipe': 9.8.0 + '@cspell/cspell-types': 9.8.0 - cspell-io@9.6.0: + cspell-io@9.8.0: dependencies: - '@cspell/cspell-service-bus': 9.6.0 - '@cspell/url': 9.6.0 + '@cspell/cspell-service-bus': 9.8.0 + '@cspell/url': 9.8.0 - cspell-lib@9.6.0: + cspell-lib@9.8.0: dependencies: - '@cspell/cspell-bundled-dicts': 9.6.0 - '@cspell/cspell-pipe': 9.6.0 - '@cspell/cspell-resolver': 9.6.0 - '@cspell/cspell-types': 9.6.0 - '@cspell/dynamic-import': 9.6.0 - '@cspell/filetypes': 9.6.0 - '@cspell/strong-weak-map': 9.6.0 - '@cspell/url': 9.6.0 + '@cspell/cspell-bundled-dicts': 9.8.0 + '@cspell/cspell-performance-monitor': 9.8.0 + '@cspell/cspell-pipe': 9.8.0 + '@cspell/cspell-resolver': 9.8.0 + '@cspell/cspell-types': 9.8.0 + '@cspell/dynamic-import': 9.8.0 + '@cspell/filetypes': 9.8.0 + '@cspell/rpc': 9.8.0 + '@cspell/strong-weak-map': 9.8.0 + '@cspell/url': 9.8.0 clear-module: 4.1.2 - cspell-config-lib: 9.6.0 - cspell-dictionary: 9.6.0 - cspell-glob: 9.6.0 - cspell-grammar: 9.6.0 - cspell-io: 9.6.0 - cspell-trie-lib: 9.6.0(@cspell/cspell-types@9.6.0) - env-paths: 3.0.0 + cspell-config-lib: 9.8.0 + cspell-dictionary: 9.8.0 + cspell-glob: 9.8.0 + cspell-grammar: 9.8.0 + cspell-io: 9.8.0 + cspell-trie-lib: 9.8.0(@cspell/cspell-types@9.8.0) + env-paths: 4.0.0 gensequence: 8.0.8 import-fresh: 3.3.1 resolve-from: 5.0.0 @@ -2260,30 +2281,32 @@ snapshots: vscode-uri: 3.1.0 xdg-basedir: 5.1.0 - cspell-trie-lib@9.6.0(@cspell/cspell-types@9.6.0): + cspell-trie-lib@9.8.0(@cspell/cspell-types@9.8.0): dependencies: - '@cspell/cspell-types': 9.6.0 + '@cspell/cspell-types': 9.8.0 - cspell@9.6.0: + cspell@9.8.0: dependencies: - '@cspell/cspell-json-reporter': 9.6.0 - '@cspell/cspell-pipe': 9.6.0 - '@cspell/cspell-types': 9.6.0 - '@cspell/dynamic-import': 9.6.0 - '@cspell/url': 9.6.0 + '@cspell/cspell-json-reporter': 9.8.0 + '@cspell/cspell-performance-monitor': 9.8.0 + '@cspell/cspell-pipe': 9.8.0 + '@cspell/cspell-types': 9.8.0 + '@cspell/cspell-worker': 9.8.0 + '@cspell/dynamic-import': 9.8.0 + '@cspell/url': 9.8.0 ansi-regex: 6.2.2 chalk: 5.6.2 chalk-template: 1.1.2 - commander: 14.0.2 - cspell-config-lib: 9.6.0 - cspell-dictionary: 9.6.0 - cspell-gitignore: 9.6.0 - cspell-glob: 9.6.0 - cspell-io: 9.6.0 - cspell-lib: 9.6.0 + commander: 14.0.3 + cspell-config-lib: 9.8.0 + cspell-dictionary: 9.8.0 + cspell-gitignore: 9.8.0 + cspell-glob: 9.8.0 + cspell-io: 9.8.0 + cspell-lib: 9.8.0 fast-json-stable-stringify: 2.1.0 - flatted: 3.3.3 - semver: 7.7.3 + flatted: 3.4.2 + semver: 7.7.4 tinyglobby: 0.2.15 css-select@5.2.2: @@ -2384,7 +2407,9 @@ snapshots: entities@6.0.1: {} - env-paths@3.0.0: {} + env-paths@4.0.0: + dependencies: + is-safe-filename: 0.1.1 errno@1.0.0: dependencies: @@ -2428,9 +2453,9 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 filesize@10.1.6: {} @@ -2450,7 +2475,7 @@ snapshots: transitivePeerDependencies: - supports-color - flatted@3.3.3: {} + flatted@3.4.2: {} fresh@2.0.0: {} @@ -2465,9 +2490,9 @@ snapshots: dependencies: is-glob: 4.0.3 - global-directory@4.0.1: + global-directory@5.0.0: dependencies: - ini: 4.1.1 + ini: 6.0.0 globby@15.0.0: dependencies: @@ -2529,7 +2554,7 @@ snapshots: inherits@2.0.4: {} - ini@4.1.1: {} + ini@6.0.0: {} is-alphabetical@2.0.1: {} @@ -2560,6 +2585,8 @@ snapshots: is-number@7.0.0: {} + is-safe-filename@0.1.1: {} + iso-639-1@3.1.5: {} js-yaml@3.14.1: @@ -2945,7 +2972,7 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.3: {} + picomatch@4.0.4: {} please-upgrade-node@3.2.0: dependencies: @@ -3018,7 +3045,7 @@ snapshots: semver-compare@1.0.0: {} - semver@7.7.3: {} + semver@7.7.4: {} send@1.2.0: dependencies: @@ -3042,7 +3069,7 @@ snapshots: dependencies: color: 4.2.3 detect-libc: 2.1.2 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 '@img/sharp-darwin-x64': 0.33.5 @@ -3074,7 +3101,7 @@ snapshots: slugify@1.6.6: {} - smol-toml@1.6.0: {} + smol-toml@1.6.1: {} source-map-js@1.2.1: {} @@ -3103,8 +3130,8 @@ snapshots: tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 to-regex-range@5.0.1: dependencies: @@ -3131,4 +3158,4 @@ snapshots: xdg-basedir@5.1.0: {} - yaml@2.8.2: {} + yaml@2.8.3: {} From c99ae24d803a0a3b546694a6d6da698e3ea45539 Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Sat, 18 Apr 2026 15:34:16 +0200 Subject: [PATCH 12/66] chore(deps): update mstruebing/editorconfig-checker docker tag to v3.6.1 (#769) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/769 Reviewed-by: Gusted Co-authored-by: Dependency bot Co-committed-by: Dependency bot --- .woodpecker/lint.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/lint.yaml b/.woodpecker/lint.yaml index 934f32f..e9ea1df 100644 --- a/.woodpecker/lint.yaml +++ b/.woodpecker/lint.yaml @@ -14,7 +14,7 @@ steps: include: ['.woodpecker/*.yaml', '*.{md,markdown}'] editor-config: - image: mstruebing/editorconfig-checker:v3.6.0 + image: mstruebing/editorconfig-checker:v3.6.1 depends_on: [] prettier: From c2652bb941b7ea3dff7200fcbd329b6f73b33bb9 Mon Sep 17 00:00:00 2001 From: kairusds Date: Sat, 18 Apr 2026 15:39:21 +0200 Subject: [PATCH 13/66] Add version constraint for woodpeckerci/woodpecker-agent Docker image (#777) * Add 443 port for WOODPECKER_SERVER environment variable to fix edge cases of SSL errors occuring Signed-off-by: kairusds Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/777 Reviewed-by: Gusted Co-authored-by: kairusds Co-committed-by: kairusds --- content/ci/agents.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/ci/agents.md b/content/ci/agents.md index 1256872..b43b98c 100644 --- a/content/ci/agents.md +++ b/content/ci/agents.md @@ -70,14 +70,14 @@ Tokens are added as the `WOODPECKER_AGENT_SECRET` environment variable to avoid ```yaml services: woodpecker-agent: - image: woodpeckerci/woodpecker-agent:v3 + image: woodpeckerci/woodpecker-agent:v3.13.0 command: agent restart: always volumes: - woodpecker-agent-config:/etc/woodpecker - /var/run/docker.sock:/var/run/docker.sock environment: - - WOODPECKER_SERVER=grpc.ci.codeberg.org + - WOODPECKER_SERVER=grpc.ci.codeberg.org:443 - WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET} - WOODPECKER_GRPC_SECURE=true From 2695431962d35ea1a36fd6f05b570ad941ed7154 Mon Sep 17 00:00:00 2001 From: RurPet Date: Tue, 21 Apr 2026 23:35:59 +0200 Subject: [PATCH 14/66] fix: added comma because the phrasing might be confusing without (#779) SourceHut: A minimum-GUI Free Software based service at first read as "minimum and GUI free and it's software based", which might be confusing for some people and is not intended Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/779 Reviewed-by: Gusted --- content/getting-started/what-is-codeberg.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/getting-started/what-is-codeberg.md b/content/getting-started/what-is-codeberg.md index 236a5d0..30877e0 100644 --- a/content/getting-started/what-is-codeberg.md +++ b/content/getting-started/what-is-codeberg.md @@ -92,7 +92,7 @@ Here are a few options: They do offer much more than Forgejo, so check them out in any case. - [other public Forgejo instances](https://codeberg.org/forgejo-contrib/delightful-forgejo#user-content-public-instances) - Self-Hosting [Forgejo](https://forgejo.org), the software that powers Codeberg. -- [SourceHut](https://sourcehut.org): A minimum-GUI Free Software based service, available as hosted version by a +- [SourceHut](https://sourcehut.org): A minimum-GUI, Free Software based service, available as hosted version by a transparent for-profit. Self-Hostable. --- From 8215c254bc357fe6b84c5c900fd88369d36c1511 Mon Sep 17 00:00:00 2001 From: Dave Anselmi Date: Mon, 27 Apr 2026 14:36:08 +0200 Subject: [PATCH 15/66] Move duplicate article list snippets to shortcode. (#780) Closes #335. This is my first attempt coding for eleventy/liquid so I'd be happy to get feedback on making the code cleaner or more idiomatic, or just more like the Codeberg style. Co-authored-by: David Anselmi Co-authored-by: Gusted Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/780 Reviewed-by: Gusted --- content/advanced/index.md | 21 +---- content/codeberg-pages/index.md | 21 +---- content/codeberg-translate/index.md | 21 +---- content/collaborating/index.md | 21 +---- content/getting-started/index.md | 21 +---- content/git/index.md | 21 +---- content/improving-documentation/index.md | 21 +---- content/integrations/index.md | 21 +---- content/markdown/index.md | 21 +---- content/security/index.md | 21 +---- eleventy.config.mjs | 22 +++++ package.json | 2 +- pnpm-lock.yaml | 103 ++++++++--------------- 13 files changed, 66 insertions(+), 271 deletions(-) diff --git a/content/advanced/index.md b/content/advanced/index.md index d2d5af2..7000595 100644 --- a/content/advanced/index.md +++ b/content/advanced/index.md @@ -12,23 +12,4 @@ the more advanced features of Codeberg. See also the [documentation of Forgejo](https://forgejo.org/docs/), the software which Codeberg is based on. -{% assign navPages = collections.all | eleventyNavigation %} -{%- for entry in navPages %} -{% if entry.url == page.url %} -{%- if entry.children.length -%} - - - - - - - {%- for child in entry.children %} - - - - {%- endfor %} - -
Find out more in this section:
{{ child.title }}
-{% endif %} -{% endif %} -{%- endfor %} +{% sectionNav collections %} diff --git a/content/codeberg-pages/index.md b/content/codeberg-pages/index.md index 4dd54c1..34a59a4 100644 --- a/content/codeberg-pages/index.md +++ b/content/codeberg-pages/index.md @@ -34,26 +34,7 @@ See also: - [codeberg.page](https://codeberg.page) - [Troubleshooting (Codeberg Documentation)](troubleshooting) -{% assign navPages = collections.all | eleventyNavigation %} -{%- for entry in navPages %} -{% if entry.url == page.url %} -{%- if entry.children.length -%} - - - - - - - {%- for child in entry.children %} - - - - {%- endfor %} - -
Find out more in this section:
{{ child.title }}
-{% endif %} -{% endif %} -{%- endfor %} +{% sectionNav collections %} ## Getting started with a `codeberg.page` URL diff --git a/content/codeberg-translate/index.md b/content/codeberg-translate/index.md index 94c4652..37a9912 100644 --- a/content/codeberg-translate/index.md +++ b/content/codeberg-translate/index.md @@ -9,23 +9,4 @@ description: These articles shows you how to use Codeberg Translate These documentation pages contain information on how you can use [Codeberg Translate](https://translate.codeberg.org) -{% assign navPages = collections.all | eleventyNavigation %} -{%- for entry in navPages %} -{% if entry.url == page.url %} -{%- if entry.children.length -%} - - - - - - - {%- for child in entry.children %} - - - - {%- endfor %} - -
Find out more in this section:
{{ child.title }}
-{% endif %} -{% endif %} -{%- endfor %} +{% sectionNav collections %} diff --git a/content/collaborating/index.md b/content/collaborating/index.md index cac985c..e6f3bda 100644 --- a/content/collaborating/index.md +++ b/content/collaborating/index.md @@ -13,23 +13,4 @@ If you're new to Codeberg or software forges in general, please also have a look our [Getting Started Guide](/getting-started) which will teach you the basics of issue tracking and wikis on Codeberg. -{% assign navPages = collections.all | eleventyNavigation %} -{%- for entry in navPages %} -{% if entry.url == page.url %} -{%- if entry.children.length -%} - - - - - - - {%- for child in entry.children %} - - - - {%- endfor %} - -
Find out more in this section:
{{ child.title }}
-{% endif %} -{% endif %} -{%- endfor %} +{% sectionNav collections %} diff --git a/content/getting-started/index.md b/content/getting-started/index.md index 0b9b815..5ddf655 100644 --- a/content/getting-started/index.md +++ b/content/getting-started/index.md @@ -24,23 +24,4 @@ You can start with [finding out more about Codeberg](/getting-started/what-is-co Welcome to Codeberg! 😊 -{% assign navPages = collections.all | eleventyNavigation %} -{%- for entry in navPages %} -{% if entry.url == page.url %} -{%- if entry.children.length -%} - - - - - - - {%- for child in entry.children %} - - - - {%- endfor %} - -
Find out more in this section:
{{ child.title }}
-{% endif %} -{% endif %} -{%- endfor %} +{% sectionNav collections %} diff --git a/content/git/index.md b/content/git/index.md index c9e3b41..dad8ca0 100644 --- a/content/git/index.md +++ b/content/git/index.md @@ -19,23 +19,4 @@ We recommend the use of the [SSH protocol](https://en.wikipedia.org/wiki/Secure_ It offers improved security through key-based access (stronger protection than a regular password) and better ease of use (no need to provide credentials on every push). -{% assign navPages = collections.all | eleventyNavigation %} -{%- for entry in navPages %} -{% if entry.url == page.url %} -{%- if entry.children.length -%} - - - - - - - {%- for child in entry.children %} - - - - {%- endfor %} - -
Find out more in this section:
{{ child.title }}
-{% endif %} -{% endif %} -{%- endfor %} +{% sectionNav collections %} diff --git a/content/improving-documentation/index.md b/content/improving-documentation/index.md index 546a5e1..b97a82f 100644 --- a/content/improving-documentation/index.md +++ b/content/improving-documentation/index.md @@ -8,26 +8,7 @@ eleventyNavigation: We're very happy you're considering to contribute to Codeberg Documentation! -{% assign navPages = collections.all | eleventyNavigation %} -{%- for entry in navPages %} -{% if entry.url == page.url %} -{%- if entry.children.length -%} - - - - - - - {%- for child in entry.children %} - - - - {%- endfor %} - -
Find out more in this section:
{{ child.title }}
-{% endif %} -{% endif %} -{%- endfor %} +{% sectionNav collections %} ## How do I contribute to Codeberg Documentation? diff --git a/content/integrations/index.md b/content/integrations/index.md index 9436791..18fa300 100644 --- a/content/integrations/index.md +++ b/content/integrations/index.md @@ -13,23 +13,4 @@ ecosystem of Forgejo instances. Can can also see [awesome-gitea](https://gitea.com/gitea/awesome-gitea/src/README.md), most of the Gitea-specific solutions should work with our Forgejo instance, too. -{% assign navPages = collections.all | eleventyNavigation %} -{%- for entry in navPages %} -{% if entry.url == page.url %} -{%- if entry.children.length -%} - - - - - - - {%- for child in entry.children %} - - - - {%- endfor %} - -
Find out more in this section:
{{ child.title }}
-{% endif %} -{% endif %} -{%- endfor %} +{% sectionNav collections %} diff --git a/content/markdown/index.md b/content/markdown/index.md index d522113..b353dfa 100644 --- a/content/markdown/index.md +++ b/content/markdown/index.md @@ -23,23 +23,4 @@ look them up and learn more about Markdown. - [English Wikipedia article on Markdown](https://en.wikipedia.org/wiki/Markdown) - [The Markdown Guide](https://www.markdownguide.org/) -{% assign navPages = collections.all | eleventyNavigation %} -{%- for entry in navPages %} -{% if entry.url == page.url %} -{%- if entry.children.length -%} - - - - - - - {%- for child in entry.children %} - - - - {%- endfor %} - -
Find out more in this section:
{{ child.title }}
-{% endif %} -{% endif %} -{%- endfor %} +{% sectionNav collections %} diff --git a/content/security/index.md b/content/security/index.md index 418e236..3535c6f 100644 --- a/content/security/index.md +++ b/content/security/index.md @@ -8,23 +8,4 @@ eleventyNavigation: This section contains information on how to securely use Codeberg. -{% assign navPages = collections.all | eleventyNavigation %} -{%- for entry in navPages %} -{% if entry.url == page.url %} -{%- if entry.children.length -%} - - - - - - - {%- for child in entry.children %} - - - - {%- endfor %} - -
Find out more in this section:
{{ child.title }}
-{% endif %} -{% endif %} -{%- endfor %} +{% sectionNav collections %} diff --git a/eleventy.config.mjs b/eleventy.config.mjs index c46e94c..b7b3fe3 100644 --- a/eleventy.config.mjs +++ b/eleventy.config.mjs @@ -82,6 +82,28 @@ export default function (eleventyConfig) { }, }); + // the article list navigation for section index pages + eleventyConfig.addShortcode('sectionNav', function (collections) { + const navFilter = eleventyConfig.getFilter('eleventyNavigation'); + + // from the nav tree, find the current page's entry + const entry = navFilter(collections.all).find(page => page.url == this.page.url); + + // if the current page has children, create a nav table with a link for each + if (entry.children.length) { + const rows = entry.children.map(child => + `${ child.title }` + ).join(''); + + return ` + + + + ${rows} +
Find out more in this section:
`; + } + }); + eleventyConfig.on('eleventy.after', () => { execSync(`npx pagefind`, { encoding: 'utf-8' }); }); diff --git a/package.json b/package.json index 46320a0..2bf807a 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "lint-spellcheck": "cspell lint --no-progress --gitignore '{**,.*}/{*,.*}'" }, "devDependencies": { - "@11ty/eleventy": "3.1.2", + "@11ty/eleventy": "3.1.5", "@11ty/eleventy-img": "6.0.4", "@11ty/eleventy-navigation": "1.0.5", "@11ty/eleventy-plugin-syntaxhighlight": "5.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e64ee76..c937a91 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: devDependencies: '@11ty/eleventy': - specifier: 3.1.2 - version: 3.1.2 + specifier: 3.1.5 + version: 3.1.5 '@11ty/eleventy-img': specifier: 6.0.4 version: 6.0.4 @@ -56,11 +56,11 @@ importers: packages: - '@11ty/dependency-tree-esm@2.0.2': - resolution: {integrity: sha512-kSTmXneksQLBhwsfqjxiSi9ecRKENXmRtT5RG95rFoWSI8kkwLcGlYpoXsPkCD9uQwSU1rmDzXBDnqUJlWaIyw==} + '@11ty/dependency-tree-esm@2.0.4': + resolution: {integrity: sha512-MYKC0Ac77ILr1HnRJalzKDlb9Z8To3kXQCltx299pUXXUFtJ1RIONtULlknknqW8cLe19DLVgmxVCtjEFm7h0A==} - '@11ty/dependency-tree@4.0.0': - resolution: {integrity: sha512-PTOnwM8Xt+GdJmwRKg4pZ8EKAgGoK7pedZBfNSOChXu8MYk2FdEsxdJYecX4t62owpGw3xK60q9TQv/5JI59jw==} + '@11ty/dependency-tree@4.0.2': + resolution: {integrity: sha512-RTF6VTZHatYf7fSZBUN3RKwiUeJh5dhWV61gDPrHhQF2/gzruAkYz8yXuvGLx3w3ZBKreGrR+MfYpSVkdbdbLA==} '@11ty/eleventy-dev-server@2.0.8': resolution: {integrity: sha512-15oC5M1DQlCaOMUq4limKRYmWiGecDaGwryr7fTE/oM9Ix8siqMvWi+I8VjsfrGr+iViDvWcH/TVI6D12d93mA==} @@ -89,8 +89,8 @@ packages: resolution: {integrity: sha512-6QE+duqSQ0GY9rENXYb4iPR4AYGdrFpqnmi59tFp9VrleOl0QSh8VlBr2yd6dlhkdtj7904poZW5PvGr9cMiJQ==} engines: {node: '>=18'} - '@11ty/eleventy@3.1.2': - resolution: {integrity: sha512-IcsDlbXnBf8cHzbM1YBv3JcTyLB35EK88QexmVyFdVJVgUU6bh9g687rpxryJirHzo06PuwnYaEEdVZQfIgRGg==} + '@11ty/eleventy@3.1.5': + resolution: {integrity: sha512-hZ0g6MwZyRxCqXsPm82gIM304LraKbUz3ZmezOSjsqxttZG6cHTib3Qq8QkESJoKwnr+yX1eyfOkPC5/mEgZnQ==} engines: {node: '>=18'} hasBin: true @@ -98,12 +98,12 @@ packages: resolution: {integrity: sha512-Mqt6im1xpb1Ykn3nbcCovWXK3ggywRJa+IXIdoz4wIIK+cvozADH63lexcuPpGS/gJ6/m2JxyyXDyupkMr5DHw==} engines: {node: '>=14'} - '@11ty/posthtml-urls@1.0.1': - resolution: {integrity: sha512-6EFN/yYSxC/OzYXpq4gXDyDMlX/W+2MgCvvoxf11X1z76bqkqFJ8eep5RiBWfGT5j0323a1pwpelcJJdR46MCw==} + '@11ty/posthtml-urls@1.0.3': + resolution: {integrity: sha512-1YvhnkaNlFnnJic1rBMWmTC2adbuy+JQiBfl1Hecr1Wjjik1pQZmGyk/eC9zKX/FQv52s2Nht1Gi/UwhYqrBeg==} engines: {node: '>= 6'} - '@11ty/recursive-copy@4.0.2': - resolution: {integrity: sha512-174nFXxL/6KcYbLYpra+q3nDbfKxLxRTNVY1atq2M1pYYiPfHse++3IFNl8mjPFsd7y2qQjxLORzIjHMjL3NDQ==} + '@11ty/recursive-copy@4.0.4': + resolution: {integrity: sha512-oI7m8pa7/IAU/3lqRU9vjBbs20iKFo7x+1K9kT3aVira6scc1X9MjBdgLCHzLJeJ7iB6wydioA+kr9/qPnvmlQ==} engines: {node: '>=18'} '@cspell/cspell-bundled-dicts@9.8.0': @@ -588,25 +588,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-differ@1.0.0: - resolution: {integrity: sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==} - engines: {node: '>=0.10.0'} - array-timsort@1.0.3: resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} - array-union@1.0.2: - resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} - engines: {node: '>=0.10.0'} - - array-uniq@1.0.3: - resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} - engines: {node: '>=0.10.0'} - - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -1094,8 +1078,8 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - liquidjs@10.24.0: - resolution: {integrity: sha512-TAUNAdgwaAXjjcUFuYVJm9kOVH7zc0mTKxsG9t9Lu4qdWjB2BEblyVIYpjWcmJLMGgiYqnGNJjpNMHx0gp/46A==} + liquidjs@10.25.7: + resolution: {integrity: sha512-rPCjJLiD4eDhQjvv964AeXFC+HbeYBbZrd7Z82Q6hqv1lX7G+5w4SJcKLn9CAAAwHI4aS3dTdo083UB79K3pDA==} engines: {node: '>=16'} hasBin: true @@ -1134,10 +1118,6 @@ packages: resolution: {integrity: sha512-UKybllYNheWac61Ia7T6fzuQNDZimFIpCg2w6hHjgV1Qu0w1TV0LlSgryUGzM0bkKQCBhy2FDhEELB73Kb0kAg==} engines: {node: '>=20'} - maximatch@0.1.0: - resolution: {integrity: sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A==} - engines: {node: '>=0.10.0'} - mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -1240,8 +1220,8 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -1455,8 +1435,8 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} - slugify@1.6.6: - resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} + slugify@1.6.9: + resolution: {integrity: sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==} engines: {node: '>=8.0.0'} smol-toml@1.6.1: @@ -1556,14 +1536,14 @@ packages: snapshots: - '@11ty/dependency-tree-esm@2.0.2': + '@11ty/dependency-tree-esm@2.0.4': dependencies: '@11ty/eleventy-utils': 2.0.7 acorn: 8.15.0 dependency-graph: 1.0.0 normalize-path: 3.0.0 - '@11ty/dependency-tree@4.0.0': + '@11ty/dependency-tree@4.0.2': dependencies: '@11ty/eleventy-utils': 2.0.7 @@ -1628,16 +1608,16 @@ snapshots: '@11ty/eleventy-utils@2.0.7': {} - '@11ty/eleventy@3.1.2': + '@11ty/eleventy@3.1.5': dependencies: - '@11ty/dependency-tree': 4.0.0 - '@11ty/dependency-tree-esm': 2.0.2 + '@11ty/dependency-tree': 4.0.2 + '@11ty/dependency-tree-esm': 2.0.4 '@11ty/eleventy-dev-server': 2.0.8 '@11ty/eleventy-plugin-bundle': 3.0.7(posthtml@0.16.7) '@11ty/eleventy-utils': 2.0.7 '@11ty/lodash-custom': 4.17.21 - '@11ty/posthtml-urls': 1.0.1 - '@11ty/recursive-copy': 4.0.2 + '@11ty/posthtml-urls': 1.0.3 + '@11ty/recursive-copy': 4.0.4 '@sindresorhus/slugify': 2.2.1 bcp-47-normalize: 2.3.0 chokidar: 3.6.0 @@ -1649,7 +1629,7 @@ snapshots: iso-639-1: 3.1.5 js-yaml: 4.1.1 kleur: 4.1.5 - liquidjs: 10.24.0 + liquidjs: 10.25.7 luxon: 3.7.2 markdown-it: 14.1.1 minimist: 1.2.8 @@ -1661,7 +1641,7 @@ snapshots: posthtml: 0.16.7 posthtml-match-helper: 2.0.3(posthtml@0.16.7) semver: 7.7.4 - slugify: 1.6.6 + slugify: 1.6.9 tinyglobby: 0.2.15 transitivePeerDependencies: - bufferutil @@ -1670,18 +1650,18 @@ snapshots: '@11ty/lodash-custom@4.17.21': {} - '@11ty/posthtml-urls@1.0.1': + '@11ty/posthtml-urls@1.0.3': dependencies: evaluate-value: 2.0.0 http-equiv-refresh: 2.0.1 list-to-array: 1.1.0 parse-srcset: 1.0.2 - '@11ty/recursive-copy@4.0.2': + '@11ty/recursive-copy@4.0.4': dependencies: errno: 1.0.0 junk: 3.1.0 - maximatch: 0.1.0 + minimatch: 3.1.5 slash: 3.0.0 '@cspell/cspell-bundled-dicts@9.8.0': @@ -2087,18 +2067,8 @@ snapshots: argparse@2.0.1: {} - array-differ@1.0.0: {} - array-timsort@1.0.3: {} - array-union@1.0.2: - dependencies: - array-uniq: 1.0.3 - - array-uniq@1.0.3: {} - - arrify@1.0.1: {} - asap@2.0.6: {} balanced-match@1.0.2: {} @@ -2614,7 +2584,7 @@ snapshots: dependencies: uc.micro: 2.1.0 - liquidjs@10.24.0: + liquidjs@10.25.7: dependencies: commander: 10.0.1 @@ -2675,13 +2645,6 @@ snapshots: transitivePeerDependencies: - supports-color - maximatch@0.1.0: - dependencies: - array-differ: 1.0.0 - array-union: 1.0.2 - arrify: 1.0.1 - minimatch: 3.1.2 - mdn-data@2.0.28: {} mdurl@2.0.0: {} @@ -2873,7 +2836,7 @@ snapshots: mime@3.0.0: {} - minimatch@3.1.2: + minimatch@3.1.5: dependencies: brace-expansion: 1.1.12 @@ -3099,7 +3062,7 @@ snapshots: slash@5.1.0: {} - slugify@1.6.6: {} + slugify@1.6.9: {} smol-toml@1.6.1: {} From 5b48c54304ab393337195426e125930017713cb8 Mon Sep 17 00:00:00 2001 From: Robert Wolff Date: Tue, 28 Apr 2026 12:04:20 +0200 Subject: [PATCH 16/66] fix(ci): make prettier, lychee and cspell happy (#782) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/782 --- content/codeberg-pages/advanced-usage.md | 1 + content/codeberg-pages/forgejo-actions.md | 6 +++--- content/codeberg-pages/index.md | 6 +++--- content/codeberg-pages/migrating-from-pages-v2.md | 13 +++++++------ content/codeberg-pages/pushing-output.md | 2 +- content/codeberg-pages/using-custom-domain.md | 1 + eleventy.config.mjs | 8 ++++---- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/content/codeberg-pages/advanced-usage.md b/content/codeberg-pages/advanced-usage.md index 51c9682..461a1dd 100644 --- a/content/codeberg-pages/advanced-usage.md +++ b/content/codeberg-pages/advanced-usage.md @@ -5,6 +5,7 @@ eleventyNavigation: parent: CodebergPages order: 999 --- + ## Custom error page for 404s You can replace the default 404 error page that Codeberg Pages will show for missing pages with your own version if you prefer. diff --git a/content/codeberg-pages/forgejo-actions.md b/content/codeberg-pages/forgejo-actions.md index 8be884c..b93f4ef 100644 --- a/content/codeberg-pages/forgejo-actions.md +++ b/content/codeberg-pages/forgejo-actions.md @@ -5,6 +5,7 @@ eleventyNavigation: parent: CodebergPages order: 100 --- + {% admonition "Warning" %} The following instructions depend on the new git-pages server for Codeberg Pages and can currently only be used on sites which are hosted under our `codeberg.page` domain, and not with sites that should be served from custom domains. @@ -25,7 +26,7 @@ To use it, simply add it as a final step to your workflow: ```yaml - uses: https://codeberg.org/git-pages/action@v2 with: - site: "https://${{ forge.repository_owner }}.codeberg.page/repository-name/" + site: 'https://${{ forge.repository_owner }}.codeberg.page/repository-name/' token: ${{ forge.token }} source: _site/ ``` @@ -36,7 +37,7 @@ Replace `repository-name` in the `site` parameter with the name of your reposito If your repository is also called `pages`, you can also omit the repository name and deploy directly to the site `https://username.codeberg.page/`. The `source` parameter should point to the directory (relative to the root, after all previous steps in your workflow) where your site generator has put the generated version of your site. -This directory can also contain the `404.html` and `_redirects` files to customize your site’s behaviour, as described in the [advanced documentation](/codeberg-pages/advanced-usage/). +This directory can also contain the `404.html` and `_redirects` files to customize your site’s behavior, as described in the [advanced documentation](/codeberg-pages/advanced-usage/). The `token` will automatically be filled by Forgejo Actions with a secret token, which in turn will automatically be recognized by git-pages as authorizing this workflow to publish to this site. @@ -57,4 +58,3 @@ if: ${{ forge.ref == 'refs/heads/main'}} This will limit deploys so they only happen when CI is triggered by a push to the `main` branch. {% endadmonition %} - diff --git a/content/codeberg-pages/index.md b/content/codeberg-pages/index.md index 34a59a4..33f5df3 100644 --- a/content/codeberg-pages/index.md +++ b/content/codeberg-pages/index.md @@ -49,7 +49,7 @@ This page documents the first method. See the [separate page on using Forgejo Ac 1. Create a repository called `pages` under your own username or under the organization you want to create a website for - The website will be published from a branch also called `pages`. You can also set this as the default branch, if you prefer. + The website will be published from a branch also called `pages`. You can also set this as the default branch, if you prefer. 2. Go to **Settings** at the top right of your repository page. @@ -57,7 +57,7 @@ This page documents the first method. See the [separate page on using Forgejo Ac 4. Click the **Add webhook** button in the top right corner of the webhook settings page. - Select **Forgejo** from the drop-down list of webhook types. + Select **Forgejo** from the drop-down list of webhook types. 5. Enter `https://username.codeberg.page/` as the **Target URL**, replacing the `username` with your Codeberg username or organization name. This is the URL your website will be available from. @@ -75,7 +75,7 @@ This page documents the first method. See the [separate page on using Forgejo Ac 3. Click the **Add webhook** button in the top right corner of the webhook settings page. - Select **Forgejo** from the drop-down list of webhook types. + Select **Forgejo** from the drop-down list of webhook types. 4. Enter `https://username.codeberg.page/repository-name/` as the **Target URL**, replacing the `username` with your Codeberg username or organization name, and `repository-name` with the name of your repository. This is the URL your website will be available from. diff --git a/content/codeberg-pages/migrating-from-pages-v2.md b/content/codeberg-pages/migrating-from-pages-v2.md index abe4bc7..03fa9b6 100644 --- a/content/codeberg-pages/migrating-from-pages-v2.md +++ b/content/codeberg-pages/migrating-from-pages-v2.md @@ -5,6 +5,7 @@ eleventyNavigation: parent: CodebergPages order: 120 --- + {% admonition "Warning" %} Codeberg Pages is currently migrating from the legacy v2 codebase to the newer [git-pages](https://git-pages.org/) codebase. @@ -27,10 +28,10 @@ It improves performance and stability, and fixes various design issues from the Please be aware of the following changes and deprecated features. -* The recommended way to deploy websites is by directly uploading them to git-pages. -* Content is no longer fetched automatically. You need to use a method that informs git-pages about changes. -* `raw.codeberg.page` is no longer available. CORS headers are now directly set on your page and this workaround is no longer necessary. -* Direct access to repos and branches is no longer possible. You can no longer use the `/repository/@branch` access. `git-pages` restricts you to the website you explicitly deployed. Serving arbitrary resources from Codeberg was a common abuse vector and is going to be deprecated. +- The recommended way to deploy websites is by directly uploading them to git-pages. +- Content is no longer fetched automatically. You need to use a method that informs git-pages about changes. +- `raw.codeberg.page` is no longer available. CORS headers are now directly set on your page and this workaround is no longer necessary. +- Direct access to repos and branches is no longer possible. You can no longer use the `/repository/@branch` access. `git-pages` restricts you to the website you explicitly deployed. Serving arbitrary resources from Codeberg was a common abuse vector and is going to be deprecated. ## The first push @@ -66,11 +67,11 @@ To do this: 3. Click the **Add webhook** button in the top right corner of the webhook settings page. - Select **Forgejo** from the drop-down list of webhook types. + Select **Forgejo** from the drop-down list of webhook types. 4. Enter `https://username.codeberg.page/repository-name/` as the **Target URL**, replacing the `username` with your Codeberg username or organization name, and `repository-name` with the name of your repository. This is the URL your website will be available from. - If your repository *and* your branch are both called `pages`, you can omit the `repository-name` and just push to `https://username.codeberg.page/` directly. + If your repository _and_ your branch are both called `pages`, you can omit the `repository-name` and just push to `https://username.codeberg.page/` directly. 5. Set the **Branch filter** to `pages`. diff --git a/content/codeberg-pages/pushing-output.md b/content/codeberg-pages/pushing-output.md index 009f55c..d4b2ee7 100644 --- a/content/codeberg-pages/pushing-output.md +++ b/content/codeberg-pages/pushing-output.md @@ -6,6 +6,7 @@ eleventyNavigation: author: Fayçal Alami Hassani - https://codeberg.org/ka2in order: 110 --- + {% admonition "Warning" %} Codeberg Pages is currently migrating from the legacy v2 codebase to the newer [git-pages](https://git-pages.org/) codebase. @@ -36,7 +37,6 @@ To begin with, we will have two separate repositories, both locally and on Codeb - A main repository for the source files, i.e. where the source files related to your main project will be located. We will refer to this repository as the `source` repository. - This repository is the one associated with your [mydocs](/codeberg-pages/examples/docs-as-code/#mydocs) folder. - A second repository for Codeberg pages that we will call the `pages` repository. This repository will only contain the files available in the `html` folder located under docs/build/html. diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md index d036907..98b464e 100644 --- a/content/codeberg-pages/using-custom-domain.md +++ b/content/codeberg-pages/using-custom-domain.md @@ -5,6 +5,7 @@ eleventyNavigation: parent: CodebergPages order: 10 --- + {% admonition "Warning" %} Codeberg Pages is currently migrating from the legacy v2 codebase to the newer [git-pages](https://git-pages.org/) codebase. diff --git a/eleventy.config.mjs b/eleventy.config.mjs index b7b3fe3..694b0db 100644 --- a/eleventy.config.mjs +++ b/eleventy.config.mjs @@ -87,13 +87,13 @@ export default function (eleventyConfig) { const navFilter = eleventyConfig.getFilter('eleventyNavigation'); // from the nav tree, find the current page's entry - const entry = navFilter(collections.all).find(page => page.url == this.page.url); + const entry = navFilter(collections.all).find((page) => page.url == this.page.url); // if the current page has children, create a nav table with a link for each if (entry.children.length) { - const rows = entry.children.map(child => - `${ child.title }` - ).join(''); + const rows = entry.children + .map((child) => `${child.title}`) + .join(''); return ` From 64e97c119019001082ce6fd10b1f61bb29c00825 Mon Sep 17 00:00:00 2001 From: mukunda katta Date: Tue, 5 May 2026 10:41:45 +0200 Subject: [PATCH 17/66] docs: clarify HTTPS auth with 2FA (#784) ## Summary - clarify that HTTPS Git auth should use an access token as the password when 2FA is enabled - update both the first repository guide and the CLI clone/commit guide for consistency Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/784 Reviewed-by: Gusted --- content/getting-started/first-repository.md | 3 ++- content/git/clone-commit-via-cli.md | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/content/getting-started/first-repository.md b/content/getting-started/first-repository.md index fc23cc8..5bf8afe 100644 --- a/content/getting-started/first-repository.md +++ b/content/getting-started/first-repository.md @@ -366,7 +366,8 @@ The `-u` option sets the upstream remote, which we want to be Codeberg.org, as c The `main` argument sets the name of the branch onto which shall be pushed upstream. For this example, it should be the same branch name that you specified when creating the repository. -When connecting via HTTPS, Git will ask you for your username and password, which you can enter interactively. +When connecting via HTTPS, Git will ask you for your username and password. +If you have enabled Two-Factor Authentication, use your generated [access token](/advanced/access-token/) as the password instead. After refreshing the repository page, you should now see something similar to this: diff --git a/content/git/clone-commit-via-cli.md b/content/git/clone-commit-via-cli.md index 3825b54..deb60b5 100644 --- a/content/git/clone-commit-via-cli.md +++ b/content/git/clone-commit-via-cli.md @@ -92,8 +92,9 @@ Here's an explanation of the command flags used here: The last step is to synchronize (_push_) the commit from the local repository to the remote one on Codeberg. -If you are using HTTPS, you will be asked for your Codeberg username and password. If you want to avoid entering your -password every time, consider [using SSH](/security/ssh-key) instead. +If you are using HTTPS, you will be asked for your Codeberg username and password. +If you have enabled Two-Factor Authentication, use your generated [access token](/advanced/access-token/) as the password instead. +If you want to avoid entering your password every time, consider [using SSH](/security/ssh-key) instead. ```shell ~/examples$ git push From 16b319a3d831e96e65c1b889ccdbf604e41e49dd Mon Sep 17 00:00:00 2001 From: litekin Date: Tue, 5 May 2026 10:50:19 +0200 Subject: [PATCH 18/66] an website -> a website (#785) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/785 Reviewed-by: Robert Wolff --- content/codeberg-pages/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/codeberg-pages/index.md b/content/codeberg-pages/index.md index 33f5df3..6e4c938 100644 --- a/content/codeberg-pages/index.md +++ b/content/codeberg-pages/index.md @@ -22,7 +22,7 @@ The new documentation is work in progress, and we appreciate your feedback. Plea {% endadmonition %} Codeberg Pages allows you to easily publish static websites with a human-friendly address (`{username}.codeberg.page`) or your custom domain on Codeberg. -You can publish an website for your user or organization, as well as websites for each repository. +You can publish a website for your user or organization, as well as websites for each repository. Codeberg Pages are served using a deployment of [git-pages](https://git-pages.org/), which itself is [developed on Codeberg](https://codeberg.org/git-pages/git-pages). It is free/libre open source software. From 003a0cb1cea5f2f7851eb62ccce1b60f531e3cc6 Mon Sep 17 00:00:00 2001 From: "Panagiotis \"Ivory\" Vasilopoulos" Date: Mon, 11 May 2026 09:09:25 +0200 Subject: [PATCH 19/66] Add Merch section (#788) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/788 Reviewed-by: Bastian Greshake Tzovaras --- content/improving-codeberg/merch.md | 43 +++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 content/improving-codeberg/merch.md diff --git a/content/improving-codeberg/merch.md b/content/improving-codeberg/merch.md new file mode 100644 index 0000000..c1bc1f9 --- /dev/null +++ b/content/improving-codeberg/merch.md @@ -0,0 +1,43 @@ +--- +eleventyNavigation: + key: Merch + title: Codeberg Merch + parent: ImprovingCodeberg + order: 60 +--- + +As Codeberg's profile is increasing, so does the demand for merchandise. +Codeberg e.V. neither produces nor sells merch. +Following the [Debian Project's approach](https://www.debian.org/events/merchandise), we aim to provide a list of providers selling merchandise containing Codeberg's logos as a favor to those requesting it. +The ordering is purely alphabetical and no ranking of endorsement of a specific vendor. +The logos, available on [Codeberg's Design repository](https://codeberg.org/codeberg/design), have a [public domain dedication](https://codeberg.org/Codeberg/Design/src/branch/main/LICENSE). + +Codeberg does not receive any money (e.g. in the form of a commission) from sales done through these suppliers. + +We have explicitly indicated vendors that have been reviewed by Codeberg contributors and/or community members for e.g. their adherence to the spirit of the [Design guidelines](https://codeberg.org/Codeberg/Design). + +--- + +**FreeWear.org** +**URL:** https://www.freewear.org/Codeberg +**Products:** T-shirts, polo shirts, mugs, tote bags +**Last Updated:** May 10th, 2026 +**Available lagnuages:** English +**Original country:** Spain +**International delivery:** Yes +**Reviewed by contributors/community:** Yes + +--- + +**HELLOTUX** +**URL:** https://www.hellotux.com/codeberg +**Products:** T-shirts, polo shirts, sweatshirts, towels, bags, zip jackets +**Last Updated:** May 10th, 2026 +**Available languages:** English +**Original country:** Hungary +**International delivery:** Yes +**Reviewed by contributors/community:** Yes + +--- + +If you would like to be listed on this page, send an email to [merch@codeberg.org](mailto:merch@codeberg.org). Please provide us with the information listed above. From db67c0260af2e6cdfd8d6bddfd3c489f381a35b1 Mon Sep 17 00:00:00 2001 From: "Panagiotis \"Ivory\" Vasilopoulos" Date: Mon, 11 May 2026 09:50:00 +0200 Subject: [PATCH 20/66] Merch: Fix typos, CI failure Sorry! --- .cspell.json | 5 ++++- content/improving-codeberg/merch.md | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.cspell.json b/.cspell.json index 22b3838..60d511e 100644 --- a/.cspell.json +++ b/.cspell.json @@ -119,7 +119,10 @@ "getent", "sealioning", "DNSSEC", - "Arminiusstraße" + "Arminiusstraße", + "HELLOTUX", + "Merch", + "merch" ], "ignorePaths": [ "**/node_modules/**/*", diff --git a/content/improving-codeberg/merch.md b/content/improving-codeberg/merch.md index c1bc1f9..3fc7d04 100644 --- a/content/improving-codeberg/merch.md +++ b/content/improving-codeberg/merch.md @@ -22,7 +22,7 @@ We have explicitly indicated vendors that have been reviewed by Codeberg contrib **URL:** https://www.freewear.org/Codeberg **Products:** T-shirts, polo shirts, mugs, tote bags **Last Updated:** May 10th, 2026 -**Available lagnuages:** English +**Available languages:** English **Original country:** Spain **International delivery:** Yes **Reviewed by contributors/community:** Yes From 0829806f6a00b2877c734ccd78643bbbcfb7a260 Mon Sep 17 00:00:00 2001 From: "Panagiotis \"Ivory\" Vasilopoulos" Date: Tue, 12 May 2026 00:28:46 +0200 Subject: [PATCH 21/66] Merch: Improve Markdown formatting --- .cspell.json | 3 ++- content/improving-codeberg/merch.md | 30 +++++++++++++++-------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/.cspell.json b/.cspell.json index 60d511e..a266b05 100644 --- a/.cspell.json +++ b/.cspell.json @@ -122,7 +122,8 @@ "Arminiusstraße", "HELLOTUX", "Merch", - "merch" + "merch", + "freewear" ], "ignorePaths": [ "**/node_modules/**/*", diff --git a/content/improving-codeberg/merch.md b/content/improving-codeberg/merch.md index 3fc7d04..665bdc7 100644 --- a/content/improving-codeberg/merch.md +++ b/content/improving-codeberg/merch.md @@ -19,24 +19,26 @@ We have explicitly indicated vendors that have been reviewed by Codeberg contrib --- **FreeWear.org** -**URL:** https://www.freewear.org/Codeberg -**Products:** T-shirts, polo shirts, mugs, tote bags -**Last Updated:** May 10th, 2026 -**Available languages:** English -**Original country:** Spain -**International delivery:** Yes -**Reviewed by contributors/community:** Yes + +- **URL:** [freewear.org/Codeberg](https://freewear.org/Codeberg) +- **Products:** T-shirts, polo shirts, mugs, tote bags +- **Last Updated:** May 10th, 2026 +- **Available languages:** English +- **Original country:** Spain +- **International delivery:** Yes +- **Reviewed by contributors/community:** Yes --- **HELLOTUX** -**URL:** https://www.hellotux.com/codeberg -**Products:** T-shirts, polo shirts, sweatshirts, towels, bags, zip jackets -**Last Updated:** May 10th, 2026 -**Available languages:** English -**Original country:** Hungary -**International delivery:** Yes -**Reviewed by contributors/community:** Yes + +- **URL:** [hellotux.com/Codeberg](https://hellotux.com/Codeberg) +- **Products:** T-shirts, polo shirts, sweatshirts, towels, bags, zip jackets +- **Last Updated:** May 10th, 2026 +- **Available languages:** English +- **Original country:** Hungary +- **International delivery:** Yes +- **Reviewed by contributors/community:** Yes --- From e0fe2eaa6651f3b3434a09f195500c5dff391a04 Mon Sep 17 00:00:00 2001 From: wetneb Date: Thu, 21 May 2026 20:39:45 +0200 Subject: [PATCH 22/66] Remove docs of org members management (#772) Integrates the changes of forgejo/forgejo#11848. This would also deserve new screenshots, I'm considering how best to refresh them (see discussion in the PR). This probably shouldn't be merged before Codeberg updates to Forgejo 15, since users will still be confronted to the old UI in the meantime. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/772 Reviewed-by: Otto Reviewed-by: Robert Wolff --- content/collaborating/create-organization.md | 24 +----------------- .../create-organization/people.png | Bin 58172 -> 0 bytes .../create-organization/profile.png | Bin 100980 -> 0 bytes 3 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 content/images/collaborating/create-organization/people.png delete mode 100644 content/images/collaborating/create-organization/profile.png diff --git a/content/collaborating/create-organization.md b/content/collaborating/create-organization.md index 14a21c8..f77ec34 100644 --- a/content/collaborating/create-organization.md +++ b/content/collaborating/create-organization.md @@ -70,8 +70,7 @@ You can also delete your organization, and access more advanced settings like or orga-settings -The `Name` of the organization is the name that will define the URLs of the organization and of all its repositories; -it is recommended to keep it short. This name will also appear on the member's profiles (see [People](#people)). +The `Name` of the organization is the name that will define the URLs of the organization and of all its repositories. On the other hand, the `Full Name` is the name that will appear on the organization's home page. In the `Labels` tab, you can create labels that will be used across all repositories of this organization. @@ -117,27 +116,6 @@ It is also possible to invite people by email. This also works for email addresses not associated with any Codeberg account, in which case they will be prompted to create an account first. -## People - -On the `People` tab, you can get an overview of all the people who belong to your organization: - -people - -Somewhat counter-intuitively, this is not where you can add members; -this is done in the `Teams` tab (see [Teams](#teams) above). -However, you can remove members from the `People` tab. - -The visibility of the members can also be edited here; `Hidden` means that the members' memberships will not be shown on -their profiles, while `Visible` makes the avatar of the organization appear in the info card on their profile, -as shown in the screenshot below. Note that your membership will always be visible to you on your profile; -this visibility setting is for other users only. - -profile - -Shown here is also whether or not each member has activated two-factor authentication (2FA, see [Setting up Two-factor Authentication](/security/2fa)). - -Finally, from here you can choose to leave the organization. - ## Access rights An overview of the repository permissions is given in the article [Repository Permissions](/collaborating/repo-permissions). diff --git a/content/images/collaborating/create-organization/people.png b/content/images/collaborating/create-organization/people.png deleted file mode 100644 index 9a21b94f9da6ad171eeb10a05b0a885c52a0c2fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58172 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

Ein}A<96Pw%FM9JYFL`Z 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


(ScGSxbi%lPbF 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 OQop99nx|s^^nU<&3Ph{` From d7889e5ad636946c3b233eaad567010920a8982f Mon Sep 17 00:00:00 2001 From: 0ko <0ko@noreply.codeberg.org> Date: Sun, 31 May 2026 14:50:19 +0200 Subject: [PATCH 23/66] fix: serve halfmoon css through addPassthroughCopy (#799) Serve halfmoon CSS files through eleventry's addPassthroughCopy instead of template file, avoiding serving additional HTML bloat. Network usage wise, this changes from one 423 KiB uncompressed response to two responses 380 KiB total Followup to https://codeberg.org/Codeberg/Documentation/pulls/655 Solves https://codeberg.org/Codeberg/Documentation/pulls/655#issuecomment-7361962 Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/799 Reviewed-by: Gusted --- content/_includes/default_layout.njk | 3 ++- content/halfmoon.njk | 5 ----- eleventy.config.mjs | 1 + 3 files changed, 3 insertions(+), 6 deletions(-) delete mode 100644 content/halfmoon.njk diff --git a/content/_includes/default_layout.njk b/content/_includes/default_layout.njk index 5711a8b..e250482 100644 --- a/content/_includes/default_layout.njk +++ b/content/_includes/default_layout.njk @@ -20,7 +20,8 @@ - + + diff --git a/content/halfmoon.njk b/content/halfmoon.njk deleted file mode 100644 index b9b4452..0000000 --- a/content/halfmoon.njk +++ /dev/null @@ -1,5 +0,0 @@ ---- -permalink: halfmoon.css ---- -{% include "../node_modules/halfmoon/css/halfmoon.min.css" %} -{% include "../node_modules/halfmoon/css/cores/halfmoon.modern.css" %} diff --git a/eleventy.config.mjs b/eleventy.config.mjs index 694b0db..6b63c9b 100644 --- a/eleventy.config.mjs +++ b/eleventy.config.mjs @@ -23,6 +23,7 @@ export default function (eleventyConfig) { }); eleventyConfig.addPassthroughCopy('assets'); + eleventyConfig.addPassthroughCopy({ 'node_modules/halfmoon/css': '/assets/css/halfmoon' }); eleventyConfig.addPassthroughCopy('fonts'); // Font Awesome Icons From af57efaef180ca6c71b5259ea170fb5cea811369 Mon Sep 17 00:00:00 2001 From: Octavia Togami Date: Sun, 7 Jun 2026 20:46:44 +0200 Subject: [PATCH 24/66] Change his/her & his to their in licensing.md (#801) This is consistent with the rest of the document and is more inclusive. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/801 Reviewed-by: Robert Wolff --- content/getting-started/licensing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/getting-started/licensing.md b/content/getting-started/licensing.md index 0a76570..085b973 100644 --- a/content/getting-started/licensing.md +++ b/content/getting-started/licensing.md @@ -23,8 +23,8 @@ Unfortunately, however, copyright law does not protect hardware objects. [Copyright law is extremely powerful](https://www.gnu.org/philosophy/enforcing-gpl.en.html). In fact, it grants the author of a work exclusive rights to use or distribute their work. -An author can grant permission to use his/her work under arbitrary conditions. Just for illustration, an author could -invent for example a "coffee license" and impose that whoever uses his work has to offer the author a coffee. +An author can grant permission to use their work under arbitrary conditions. Just for illustration, an author could +invent for example a "coffee license" and impose that whoever uses their work has to offer the author a coffee. Similarly, forever-open licenses grant users the right to use the work provided that they will redistribute any derivative work using the same license again (copyleft). From d3328f739a306841ddb163495c239d3680585bf6 Mon Sep 17 00:00:00 2001 From: David Anselmi Date: Fri, 19 Jun 2026 08:12:30 +0200 Subject: [PATCH 25/66] Add translation section to improving-codeberg. (#808) @n0toose [said](https://matrix.to/#/!uoDMoeuJJrVWEaCpSV:matrix.tu-berlin.de/$TwrNcEd59lymjoFYvCsFvlLuIlLO0bdvraAm713N3sc?via=freeyourgadget.org&via=matrix.org&via=tchncs.de) we could use this so here it is. Please suggest how it could be better. Thanks! Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/808 Reviewed-by: Panagiotis "Ivory" Vasilopoulos --- content/improving-codeberg/index.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/content/improving-codeberg/index.md b/content/improving-codeberg/index.md index 115b839..dec2e5d 100644 --- a/content/improving-codeberg/index.md +++ b/content/improving-codeberg/index.md @@ -51,6 +51,14 @@ If you have questions, always feel free to ask in the Issue Trackers or on the M Even tiny patches or suggestions, even if you are not a skilled developer, will be considered and are part of the community-maintenance mission of Codeberg. +## Translations + +Translators are always needed for our fork of Forgejo. Our [translation docs](/codeberg-translate) are a good place to +start and you can also join our [Matrix](https://matrix.org/) room: [#codeberg-translate](https://matrix.to/#/#codeberg-translate:bubu1.eu) + +The Codeberg [translation service](https://translate.codeberg.org) also hosts translation projects for [Forgejo](https://forgejo.org/) +upstream and many other OSS projects. + ## Reporting issues If you experience an issue on some of the projects provided by Codeberg, please report it on Codeberg first so people From c44af653ff5acc6ffe8eaa9a0da3ecaf1e40bb51 Mon Sep 17 00:00:00 2001 From: Daphne Preston-Kendal Date: Thu, 25 Jun 2026 09:15:27 +0200 Subject: [PATCH 26/66] Update Codeberg Pages docs for git-pages custom domain support (#796) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/796 Reviewed-by: Catherine --- content/codeberg-pages/index.md | 8 +- content/codeberg-pages/pushing-output.md | 127 ------- content/codeberg-pages/using-custom-domain.md | 335 ++++++------------ 3 files changed, 104 insertions(+), 366 deletions(-) delete mode 100644 content/codeberg-pages/pushing-output.md diff --git a/content/codeberg-pages/index.md b/content/codeberg-pages/index.md index 6e4c938..3b55b10 100644 --- a/content/codeberg-pages/index.md +++ b/content/codeberg-pages/index.md @@ -8,14 +8,12 @@ eleventyNavigation: {% admonition "Warning" %} -Codeberg Pages is currently migrating from the legacy v2 codebase to the newer [git-pages](https://git-pages.org/) codebase. +Codeberg Pages has recently migrated from the legacy v2 codebase to the newer [git-pages](https://git-pages.org/) codebase. -Currently, websites that use custom domains can only be deployed using the old method, but we are working to fix this. -Such websites will keep working indefinitely. -You will be able to seamlessly migrate to the new version of Pages once it is supported. Take note of some minor [changes and deprecations](/codeberg-pages/migrating-from-pages-v2/#breaking-changes-and-deprecations). -Websites hosted under the `codeberg.page` domain can already use the new git-pages method. +If you have not yet [migrated your own site to the new server,](/codeberg-pages/migrating-from-pages-v2/) we encourage you to do so. +We do not currently have any concrete plans to disable Pages Server v2. The new documentation is work in progress, and we appreciate your feedback. Please let us know in case you find yourself confused. diff --git a/content/codeberg-pages/pushing-output.md b/content/codeberg-pages/pushing-output.md deleted file mode 100644 index d4b2ee7..0000000 --- a/content/codeberg-pages/pushing-output.md +++ /dev/null @@ -1,127 +0,0 @@ ---- -eleventyNavigation: - key: PushingOutput - title: Pushing output from SSGs into Codeberg Pages - parent: CodebergPages - author: Fayçal Alami Hassani - https://codeberg.org/ka2in - order: 110 ---- - -{% admonition "Warning" %} - -Codeberg Pages is currently migrating from the legacy v2 codebase to the newer [git-pages](https://git-pages.org/) codebase. - -Currently, websites that use custom domains can only be deployed using the old method, but we are working to fix this. -Such websites will keep working indefinitely. -You will be able to seamlessly migrate to the new version of Pages once it is supported. -Take note of some minor [changes and deprecations](/codeberg-pages/migrating-from-pages-v2/#breaking-changes-and-deprecations). - -Websites hosted under the `codeberg.page` domain can already use the new git-pages method. - -**This page documents the method used for legacy v2 Pages sites.** -You should be able to adapt the directions for git-pages (assuming you are not using a custom domain) using, for example, the [instructions on using Forgejo Actions with git-pages](/codeberg-pages/forgejo-actions/). - -The new documentation is work in progress. -We hope to update this page with information on how to use the new server directly with static side generators soon. -In the meanwhile, we appreciate your feedback. -Please let us know in case you find yourself confused. - -{% endadmonition %} - -If you are using a static site generator (SSG) and are satisfied with the result of your project on your local development -environment, you can push the files to your Codeberg Pages repository. - -## Manual pushing - -To begin with, we will have two separate repositories, both locally and on Codeberg: - -- A main repository for the source files, i.e. where the source files related to your main project will be located. - We will refer to this repository as the `source` repository. - -- A second repository for Codeberg pages that we will call the `pages` repository. - This repository will only contain the files available in the `html` folder located under docs/build/html. - -{% admonition "warning" %} - -The `pages` repository **must** be public, as Codeberg Pages will directly fetch the files from the repository, -just like an ordinary user would. - -{% endadmonition %} - -{% admonition "info" %} - -For the purpose of this guide, we have chosen to use two separate folders/repositories. -However, you may want to have a different setup that involves creating a [submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules) -instead of having folders and repositories in separate locations. With a submodule, your configuration may look like so: - -```bash -├── sources --> This is a git repo -│ ├── build -│ │ └── html -│ │ └── pages --> This is a separate git repo -│ └── content -``` - -{% endadmonition %} - -To copy the content of the `html` folder to your new `pages` folder, run the command: - -```bash -(.venv) $ cp -R docs/build/html/ pages -``` - -We will now initialize an empty repository inside the pages folder. To do this, type the command: - -```bash -git init -``` - -To check the status of your project’s files, type the command: - -```bash -git status -``` - -To add all the files that are available in your directory to Git, run the command: - -```bash -git add -A -``` - -Now we will commit: - -```bash -git commit -m "Example commit message" -``` - -Repeat these steps in your `source` folder, then push your local commits to the remote repository with the command: - -```bash -git push origin HEAD:your-remote-branch-name -``` - -{% admonition "info" "Note" %} - -Replace `your-remote-branch-name` with the name of your remote branch. It is recommended to initially push your commits -to a branch other than the default branch. Once you have made sure everything went smoothly, you can then make a pull -request to merge it into the default branch. To learn more about pull requests, read the article -[Pull requests and Git flow](https://docs.codeberg.org/collaborating/pull-requests-and-git-flow/). - -{% endadmonition %} - -You should now be able to access your content by visiting https://{username}.codeberg.page. -You can find more information in the [Codeberg Pages](/codeberg-pages/) section. - -## Using a CI - -Both the [Woodpecker CI](/ci/#using-codeberg's-instance-of-woodpecker-ci) and the [hosted Forgejo Actions](/ci/actions/) -can be used to automate the build and deployment of your static website. - -For the Woodpecker CI, you can see the [existing example workflows in the `Codeberg-CI/examples` repo](https://codeberg.org/Codeberg-CI/examples), -which provides examples for Jekyll, Hugo, Zola and many other popular SSG. - -Currently, we do not have any examples for the Forgejo Actions yet, but individual SSG tools might -have details in their own documentation. - -Note that if you use Forgejo Actions to publish the website, you should make sure that `.domains` -file will be preserved in the root directory of the **output** branch or repository. diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md index 98b464e..35285ca 100644 --- a/content/codeberg-pages/using-custom-domain.md +++ b/content/codeberg-pages/using-custom-domain.md @@ -8,6 +8,19 @@ eleventyNavigation: {% admonition "Warning" %} +Codeberg Pages has recently migrated from the legacy v2 codebase to the newer [git-pages](https://git-pages.org/) codebase. + +Take note of some minor [changes and deprecations](/codeberg-pages/migrating-from-pages-v2/#breaking-changes-and-deprecations). + +If you have not yet [migrated your own site to the new server,](/codeberg-pages/migrating-from-pages-v2/) we encourage you to do so. +We do not currently have any concrete plans to disable Pages Server v2. + +The new documentation is work in progress, and we appreciate your feedback. Please let us know in case you find yourself confused. + +{% endadmonition %} + +{% admonition "Warning" %} + Codeberg Pages is currently migrating from the legacy v2 codebase to the newer [git-pages](https://git-pages.org/) codebase. Currently, websites that use custom domains can only be deployed using the old method, but we are working to fix this. @@ -35,87 +48,6 @@ In this case you must add `A` / `AAAA` / `TXT` records for all domains instead o {% endadmonition %} -For custom domains, two things are required: - -- a `.domains` file in the repository and branch where your files reside which you want to publish via Codeberg Pages. - The file should contain a list of all external domains that shall be usable to access that repository, - according to the following rules: - - One domain per line, you can leave lines empty and comment out lines with `#`. - - The first domain is the main domain, all other domains in the file will be redirected to the first one. - -- a [DNS record](https://en.wikipedia.org/wiki/Domain_Name_System#Address_resolution_mechanism) pointing to one of the - following targets, depending on where your static files reside: - -
- -{% admonition "question" "Why do I need all of these DNS records?" %} - -To understand how the Pages server serves content, you need to know that a user browsing your custom domain just sends -"Hey, I want to see `yourdomain.com`" to the server. -But the server might not know that it is responsible for `yourdomain.com` and it cannot just serve all domains in the world. -So to find out if the server is responsible for `yourdomain.com` it will check the DNS entries of `yourdomain.com`. -If it returns something with `codeberg.page` (according to the domain schemes mentioned below) then it knows which -repository to check for the `.domains` file and your content. - -{% endadmonition %} - -## Setting the DNS record - -There are several ways DNS records for your website can be setup in order to tell the Pages server your repository location. -For all of the options it is important that the Pages server knows where to look for the `.domains` file and your content. -Depending on from where you want to serve your files, there is a naming scheme for the domain: - -
- - - - - - - - - - - - - - - - - - -
Domain SchemePages URL
- username.codeberg.page - - https://username.codeberg.page
which will serve codeberg.org/username/pages -
- reponame.username.codeberg.page - - https://username.codeberg.page/reponame
which will serve codeberg.org/username/reponame -
- branchname.reponame.username.codeberg.page - - https://username.codeberg.page/reponame/@branchname/
- which will serve codeberg.org/username/reponame/src/branch/branchname -
- -{% admonition "warning" "Repository names with dots are not supported" %} - -Repository names containing dots (`.`) are **not supported** for custom domains. -The Pages server uses dots as delimiters to parse the repository name, branch, and owner from DNS records. - -For example, if your repository is named `my.project`, the TXT record `my.project.username.codeberg.page` -will be incorrectly parsed as: - -- Branch: `my` -- Repository: `project` -- Owner: `username` - -**Solution:** If you need to use a custom domain, rename your repository to use hyphens (`-`) or -underscores (`_`) instead of dots. For example, rename `my.project` to `my-project`. - -{% endadmonition %} - _We assume for the following description, that you want to serve your website with and without www in front. If you are on a subdomain already (like myproject.yourdomain.com), you can skip the `www.yourdomain.com` CNAME entry._ @@ -131,7 +63,7 @@ Therefore, in this guide, you may need to replace references to just your domain {% endadmonition %} -### Option 1: CNAME record +### Step 1: CNAME, ALIAS, or A/AAAA record The easiest and recommended way is to just setup a CNAME record for your domain, pointing to the mentioned above locations. In the end, it should look like this: @@ -146,18 +78,16 @@ In the end, it should look like this: - + - +
yourdomain.com CNAMEreponame.username.codeberg.pagecodeberg.page.
www.yourdomain.com CNAMEreponame.username.codeberg.pagecodeberg.page.
-
- {% admonition "Warning" %} With a CNAME record everything on this domain is delegated to `codeberg.page`, which means you cannot setup your own @@ -167,18 +97,8 @@ If you need email or others services, you have to use one of the remaining optio {% endadmonition %} -### Option 2: ALIAS record - -If you cannot use a CNAME record to configure the target you can use this method, which needs two entries instead of one. - -- First you need to specify which server should be serving your website. Similar to CNAME you can use an `ALIAS record`. - The [difference](https://www.ecosia.org/search?q=cname%20vs%20alias%20record) between an CNAME record is, - that the DNS server directly responds with the ip address and not the `codeberg.page` domain. - Therefore you need to add a second entry, so that the pages server knows what to serve under this domain. -- Second, you need to setup a `TXT record` which contains the information from the `CNAME entry` which is your repository - location as mentioned above. For example `[[branch.]repo.]user.codeberg.page`. - -In the end it should look like this: +If you have an apex domain you will not be able to use a CNAME record. +In this case, many DNS providers support an ALIAS record which will work instead. @@ -188,29 +108,23 @@ In the end it should look like this: - + + + - - - - + + +
yourdomain.comALIAScodeberg.pageyourdomain.comALIAScodeberg.page.
yourdomain.comTXTreponame.username.codeberg.page
www.yourdomain.comCNAMEreponame.username.codeberg.pagewww.yourdomain.comALIAScodeberg.page.
-### Option 3: A/AAAA record +If you cannot use a CNAME nor an ALIAS record, +you will need to set up the A and AAAA records to point to Codeberg’s IP addresses directly. -If your service provider does not support `ALIAS records` you can also use `A records` and `AAAA records` instead. - -- First you need to specify which server should be serving your website. You can do this by setting an `A record` for IPv4 - and an `AAAA record` for IPv6 which contains the ip address of the Codeberg Pages server. The servers' ip addresses are: - - `A record` which contains the IPv4 value `217.197.84.141` - - `AAAA record` which contains the IPv6 value `2a0a:4580:103f:c0de::2` -- Second, you need to setup a `TXT record` which contains the information of your repository - location as mentioned above. For example `[[branch.]repo.]user.codeberg.page`. - -In the end, it should look like this: +It is possible these IP addresses will change in future, +so keep an eye on Codeberg updates to check. @@ -229,138 +143,91 @@ In the end, it should look like this: + +
AAAA 2a0a:4580:103f:c0de::2
+ +### Step 2: Configure Git-pages authorization + +{% admonition "question" "Why do I need all these extra DNS records?" %} + +When someone tries to deploy a website to your domain, +Codeberg Pages needs to know which repository is responsible for the content, +and that the content actually comes from that repository. + +When the webhook or Forgejo Action are triggered, +the server receives a token letting it know that the repository’s policies allowed the deploy. +The DNS records in turn ensure that the domain owner authorizes that repository to be deployed to that domain. + +{% endadmonition %} + +**If you deploy from a webhook,** +set a TXT record on the `_git-pages-repository` subdomain of your domain with the HTTPS Git clone URL for your repository. + + + + + + + + - + - + + + + + +
DomainTypeData
yourdomain.com_git-pages-repository.yourdomain.com TXTreponame.username.codeberg.pagehttps://codeberg.org/username/repository.git
_git-pages-repository.www.yourdomain.comTXThttps://codeberg.org/username/repository.git
-## Examples +**If you deploy from Forgejo Actions,** +set a TXT record on the `_git-pages-forge-allowlist` subdomain of your domain with the HTTPS Git clone URL for your repository. -The following sub-sections include a few examples of the different alternatives, assuming the following: + + + + + + + + + + + + + + + + + + +
DomainTypeData
_git-pages-forge-allowlist.yourdomain.comTXThttps://codeberg.org/username/repository.git
_git-pages-forge-allowlist.www.yourdomain.comTXThttps://codeberg.org/username/repository.git
-- we can add/modify DNS records in domain `example.com`. -- Our Codeberg username is `frida`, and we want to publish pages for: - - `frida/pages`, with a _Personal_ static site inside branch `pages`; - - `frida/colormix`, with a _Project_ site (again, inside branch `pages`). +### Step 3: Set your webhook or Forgejo Actions deploy target -All considerations regarding a _Personal_ site also apply to an _Organization_ site, so these two cases will be -addressed together. +**If you deploy from a webhook,** +the webhook **Target URL** should be set to the domain you want to deploy your website to. -### Personal (or Organization) site, subdomain +**If you deploy from Forgejo Actions,** +the `site` parameter to the Git-pages action should be set to the URL of your custom domain. -In this case, we want our _Personal_ pages available at the URL `https://myself.example.com`. +### Deploying to versions of your domain both with and without `www.` -The `.domains` file contains the following: +If you would like to serve your website at versions with and without a `www.` prefix, +you should choose one of them to be the ‘canonical’ URL, +add a [`_redirects` file](/codeberg-pages/advanced-usage/) to your site redirecting from one version to the other, +and deploy your website to both domains. (I.e. set up two separate webhooks, or use two separate deploy actions.) -```text -myself.example.com +For example, to redirect people from www.yourdomain.com to yourdomain.com, +use this `_redirects` file: + +``` +//www.yourdomain.com/* https://yourdomain.com/:splat 302! ``` -For the DNS configuration: - -- if the domain is not the apex of the zone and does not have other services such as email, - you should always use a CNAME record: - - name `myself.example.com`, type `CNAME`, data `frida.codeberg.page` - -- otherwise, if ALIAS can be used, two DNS records will be needed: - - name `myself.example.com`, type `ALIAS`, data `codeberg.page` - - name `myself.example.com`, type `TXT`, data `frida.codeberg.page` - -- otherwise, A/AAAA records must be used, together with one TXT record: - - name `myself.example.com`, type `A`, data `217.197.84.141` - - name `myself.example.com`, type `AAAA`, data `2a0a:4580:103f:c0de::2` - - name `myself.example.com`, type `TXT`, data `frida.codeberg.page` - -### Personal/Organization site, apex domain - -In this case, we want our _Personal_/_Organization_ pages available at the URL `https://example.com`. -We also want the URL `https://www.example.com` to redirect to the apex domain. - -The `.domains` file contains the following: - -```text -example.com -www.example.com -``` - -_You may also put the `www` subdomain on the first line if you wish to use it as the canonical URL_ -_and redirect the apex domain instead._ - -For the DNS configuration, CNAME records CANNOT be used for the apex domain, so: - -- if ALIAS can be used, three DNS records will be needed: - - name `example.com`, type `ALIAS`, data `codeberg.page` - - name `example.com`, type `TXT`, data `frida.codeberg.page` - - name `www.example.com`, type `CNAME`, data `frida.codeberg.page` - -_Note that ALIAS records are not real DNS records and are typically incompatible with DNSSEC signed zones._ - -- otherwise, A/AAAA records must be used, together with a TXT record: - - name `example.com`, type `A`, data `217.197.84.141` - - name `example.com`, type `AAAA`, data `2a0a:4580:103f:c0de::2` - - name `example.com`, type `TXT`, data `frida.codeberg.page` - - name `www.example.com`, type `CNAME`, data `frida.codeberg.page` - -### Project site, subdomain - -In this case, we want our _Project_ pages available at the URL `https://colormix-app.example.com`. - -The `.domains` file contains the following: - -```text -colormix-app.example.com -``` - -For the DNS configuration: - -- if the domain is not the apex of the zone and does not have other services such as email, - you should always use a CNAME record: - - name `colormix-app.example.com`, type `CNAME`, data `colormix.frida.codeberg.page` - -- otherwise, if ALIAS can be used, two DNS records will be needed: - - name `colormix-app.example.com`, type `ALIAS`, data `codeberg.page` - - name `colormix-app.example.com`, type `TXT`, data `colormix.frida.codeberg.page` - -- otherwise, A/AAAA records must be used, together with one TXT record: - - name `colormix-app.example.com`, type `A`, data `217.197.84.141` - - name `colormix-app.example.com`, type `AAAA`, data `2a0a:4580:103f:c0de::2` - - name `colormix-app.example.com`, type `TXT`, data `colormix.frida.codeberg.page` - -### Project site, apex domain - -In this case, we want our _Project_ pages available at the URL `https://example.com`. - -{% admonition "info" "Note" %} - -This would be incompatible with using the apex `example.com` for other purposes, e.g. for the _Personal_/_Organization_ -example discussed before. - -{% endadmonition %} - -The `.domains` file contains the following: - -```text -example.com -www.example.com -``` - -_You may also put the `www` subdomain on the first line if you wish to use it as the canonical URL_ -_and redirect the apex domain instead._ - -For the DNS configuration, CNAME records CANNOT be used for the apex domain, so: - -- if ALIAS can be used, three DNS records will be needed: - - name `example.com`, type `ALIAS`, data `codeberg.page` - - name `example.com`, type `TXT`, data `colormix.frida.codeberg.page` - - name `www.example.com`, type `CNAME`, data `colormix.frida.codeberg.page` - -_Note that ALIAS records are not real DNS records and are typically incompatible with DNSSEC signed zones._ - -- otherwise, A/AAAA records must be used, together with one TXT record: - - name `example.com`, type `A`, data `217.197.84.141` - - name `example.com`, type `AAAA`, data `2a0a:4580:103f:c0de::2` - - name `example.com`, type `TXT`, data `colormix.frida.codeberg.page` - - name `www.example.com`, type `CNAME`, data `colormix.frida.codeberg.page` +For the redirect to work, +you should be sure that the code (here `302!`) includes an `!` at the end. +Otherwise, the redirect will only work on pages which are otherwise not found. From 1da2b7f99c099e3d9e011ed2c2b4e393ae748566 Mon Sep 17 00:00:00 2001 From: Robert Wolff Date: Thu, 25 Jun 2026 09:23:13 +0200 Subject: [PATCH 27/66] fix(ci): resolve some links, replace other (#809) Follow-up of https://codeberg.org/Codeberg/Documentation/pulls/808#issuecomment-17711441 Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/809 --- content/integrations/read-the-docs.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/content/integrations/read-the-docs.md b/content/integrations/read-the-docs.md index 9d792b4..5ba37e2 100644 --- a/content/integrations/read-the-docs.md +++ b/content/integrations/read-the-docs.md @@ -5,9 +5,9 @@ eleventyNavigation: parent: Integrations --- -This article will guide you through integrating Codeberg with [Read the Docs](https://readthedocs.org/) to allow +This article will guide you through integrating Codeberg with [Read the Docs](https://about.readthedocs.org/) to allow automatic build of your documentation. It will show you how to connect Read the Docs to a Git repository hosted on Codeberg. -To learn how Read the Docs works, take a look at the [official Documentation](https://docs.readthedocs.io). +To learn how Read the Docs works, take a look at the [official Documentation](https://docs.readthedocs.com/platform/stable/). {% admonition "warning" %} @@ -17,15 +17,14 @@ Forgejo is currently not official supported by Read the Docs, so this may break ## Registration -If you do not have an account yet, you must sign up with [readthedocs first](https://readthedocs.org/accounts/signup/). - -After sign-up you need to login with your user to access your [dashboard](https://readthedocs.org/dashboard/). +If you do not have an account yet, you first must [sign up with Read the Docs](https://app.readthedocs.org/). +After sign-up you need to login with your user to access your [dashboard](https://app.readthedocs.org/dashboard/). ## Create new Project This steps shows how to create a new project on Read the Docs -1. On the [Read the Docs dashboard](https://readthedocs.org/dashboard/) click "Import a Project" +1. On the [Read the Docs dashboard](https://app.readthedocs.org/dashboard/) click "Import a Project" 2. If you have connected Read the Docs with some provider e.g. GitHub, you see a list of your repos at that provider. Ignore it and click "Import Manually". You should see this screen: From c6790fce9a5efa19bd5c3e54c92eeeb7bd5474bb Mon Sep 17 00:00:00 2001 From: lukaesque Date: Thu, 25 Jun 2026 09:52:24 +0200 Subject: [PATCH 28/66] Clarifying who can see private repositories (#803) I think that for someone just reading through the docs seeing "If you do not want **anyone** (apart from your fellow collaborators) to see your repositories" can very much sound like they're stored with "zero-knowledge", while finding the details in Codeberg's privacy policy is quite simple, there's no harm in making it clear in the docs as well. Co-authored-by: Robert Wolff Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/803 Reviewed-by: Robert Wolff --- content/collaborating/repo-permissions.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/content/collaborating/repo-permissions.md b/content/collaborating/repo-permissions.md index ea4dec9..8fbf745 100644 --- a/content/collaborating/repo-permissions.md +++ b/content/collaborating/repo-permissions.md @@ -17,11 +17,13 @@ You can assign teams different levels of permission for each unit (e.g. issues, The visibility of your repositories will depend on the visibility of your profile, as well as whether you have marked a repository as private. Let's break down what this means: -- If your profile's visibility is set to "Limited", _all_ of your non-private repositories will only be visible to logged +- If your profile's visibility is set to "**Limited**", _all_ of your non-private repositories will only be visible to logged in users. -- If your profile's visibility is set to "Public", _all_ of your non-private repositories will be shown to everyone. +- If your profile's visibility is set to "**Public**", _all_ of your non-private repositories will be shown to everyone. - If you do not want anyone (apart from [your fellow collaborators](https://docs.codeberg.org/collaborating/invite-collaborators/)) - to see your repositories, mark your repository as "Private". + to see your repositories, mark your repository as "**Private**". + However, Codeberg's Moderation Team and infrastructure administrators can access private profiles and repositories as per the + [Privacy Policy](https://codeberg.org/Codeberg/org/src/branch/main/PrivacyPolicy.md#4-data-handling-by-association-bodies-third-parties). The visibility of your profile can be changed in the [Privacy settings](https://codeberg.org/user/settings). Be careful when you set your profile's visibility to "Limited"; Even if a repository is public, users that are From 0c98b55b39805b19262554be6271b8e9bca2823e Mon Sep 17 00:00:00 2001 From: Daeraxa Date: Thu, 25 Jun 2026 11:09:23 +0200 Subject: [PATCH 29/66] Add web interface fork sync section (#791) This came from the fact that on GitHub I'm used to seeing the option to sync a forked repo all the time. But whilst looking for the same thing on Codeberg I couldn't find it and searching the docs for `sync` didn't return anything either. The additions in this PR are fairly conservative. Rather than rewording anything I've just added a section about how to accomplish the same thing as above but via the web interface instead of via git. The other small change is an update to an image for making a PR from a branch which I'm assuming is older version of the UI as I couldn't even find the button that looked like that. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/791 Reviewed-by: Gusted Reviewed-by: Robert Wolff --- .../pull-requests-and-git-flow.md | 16 ++++++++++++++++ .../pull-request-button.png | Bin 8522 -> 6516 bytes .../sync-button.png | Bin 0 -> 6929 bytes 3 files changed, 16 insertions(+) create mode 100644 content/images/collaborating/pull-requests-and-git-flow/sync-button.png diff --git a/content/collaborating/pull-requests-and-git-flow.md b/content/collaborating/pull-requests-and-git-flow.md index b288f40..b2726a8 100644 --- a/content/collaborating/pull-requests-and-git-flow.md +++ b/content/collaborating/pull-requests-and-git-flow.md @@ -80,6 +80,22 @@ git pull That's it. You can now push your changes, and create the pull request as usual by clicking on the "New Pull Request" button. +#### Via the web interface + +Another way of keeping up-to-date is to sync your fork via the web interface. + +If your branch is behind in commits from the repository and branch it is tracking, you will automatically be shown how far +behind it is and given the option to `sync`. This will bring your Codeberg fork up-to-date with the upstream project branch. + +![Syncing a fork](/images/collaborating/pull-requests-and-git-flow/sync-button.png) + +If you now need to pull those changes to your local repository you can do so as before but now from `origin` e.g. + +```shell +git pull --rebase origin main +git pull +``` + ## A friendly note on owner rights, and force push permissions Please keep in mind that project owners can do _everything_, including editing and rewriting the history using `force-push`. diff --git a/content/images/collaborating/pull-requests-and-git-flow/pull-request-button.png b/content/images/collaborating/pull-requests-and-git-flow/pull-request-button.png index 0c939aa37c4b538998eb98852ff884bb77b13988..8467c7fbfb01a4715947db17a0031075e83d0594 100644 GIT binary patch literal 6516 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 c<^Ch;hv7uQ>>Tgjr;h_pF diff --git a/content/images/collaborating/pull-requests-and-git-flow/sync-button.png b/content/images/collaborating/pull-requests-and-git-flow/sync-button.png new file mode 100644 index 0000000000000000000000000000000000000000..8855d73f36cdfe0356d30272c5f92199e5c3ebb6 GIT binary patch literal 6929 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 Q)G7iM1x@)fIrE_Z0nhw@_y7O^ literal 0 HcmV?d00001 From e5f59881ed2c274188be56deb6984ea1659563e1 Mon Sep 17 00:00:00 2001 From: emholt1 Date: Thu, 25 Jun 2026 11:27:00 +0200 Subject: [PATCH 30/66] Fix some difficult to read text in the section on generating SSH keys (#764) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I’ve largely put down the torch of software development, but I use Codeberg for Nix and it feels wrong to use it without at least helping in some way. Some language in the SSH key section can be easily misrepresented by skimming (e.g. the command to generate the key twice can lead newbies to maybe think they’d have to generate a public and private key seperately.) Co-authored-by: Robert Wolff Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/764 Reviewed-by: Gusted --- .cspell.json | 1 + content/security/ssh-key.md | 23 +++++++++-------------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/.cspell.json b/.cspell.json index a266b05..98e6207 100644 --- a/.cspell.json +++ b/.cspell.json @@ -112,6 +112,7 @@ "mstruebing", "davidanson", "pipelinecomponents", + "passwordless", "corepack", "letsencrypt.org", "accounturi", diff --git a/content/security/ssh-key.md b/content/security/ssh-key.md index 20dd28c..e8ec3b9 100644 --- a/content/security/ssh-key.md +++ b/content/security/ssh-key.md @@ -6,6 +6,7 @@ eleventyNavigation: order: 20 --- +In comparison to using HTTPS, SSH keys provide a safer and passwordless way to authenticate with Codeberg. It is recommended to use one key per client. This means that if you access your Codeberg repository from your home PC, your laptop and your office PC you should generate separate keys for each machine. @@ -22,6 +23,8 @@ your laptop and your office PC you should generate separate keys for each machin This will generate a new SSH key. You can also add a comment to help you identify the client with `-C "comment here"`. + The program may also ask for a name and email address to associate with the key. While it is recommended to fill in something identifiable here, if you don't wish to, it may safely be left blank. These fields are for organizational purposes. + ```shell > Generating public/private ed25519 key pair. ``` @@ -36,13 +39,7 @@ your laptop and your office PC you should generate separate keys for each machin If you see that `/home/knut/.ssh/id_ed25519 already exists`, follow these steps: 1. When prompted to overwrite the existing file, type n to choose not to overwrite. - 2. Afterward, re-run the same command: - - ```shell - ssh-keygen -t ed25519 -a 100 - ``` - - 3. This time, enter a new filepath when prompted (e.g., `/home/knut/.ssh/id_ed25519_codeberg`) to avoid overwriting the + 2. Afterward, re-run the same command. This time, enter a new filepath when prompted (e.g., `/home/knut/.ssh/id_ed25519_codeberg`) to avoid overwriting the existing key. 4. You will be asked for a passphrase; enter one if you'd like, or leave the prompt empty. @@ -76,8 +73,9 @@ be prompted to touch it to continue. 1. Copy the SSH key to your clipboard. You must only copy the public key not the private one. You can identify it by the `.pub` suffix. By default, you can find the public key in `$HOME/.ssh/id_ed25519.pub`. - On Linux, assuming you are using Wayland, you can use `wl-copy` on the command line. - You may need to install `wl-clipboard` from your package manager. + The key can be opened with any text editor and copied from there. However, there are other ways to copy the key from the terminal. + + On Linux with Wayland, use the `wl-copy` utility. (This may require an installation of the `wl-clipboard` package): ```shell wl-copy -t text/plain < ~/.ssh/id_ed25519.pub @@ -101,12 +99,9 @@ be prompted to touch it to continue. pbcopy < ~/.ssh/id_ed25519.pub ``` - These commands will copy the contents of id_ed25519.pub (your SSH public key) to your clipboard. + These commands will copy the contents of `id_ed25519.pub` (your SSH public key) to your clipboard. - > Alternatively you can locate the hidden .ssh folder, open the file in your favorite text editor, and copy it to - > your clipboard. - -2. Navigate to your [user settings](https://codeberg.org/user/settings) +2. Navigate to your [user settings](https://codeberg.org/user/settings). User Settings From 3fabaf196c02d57658b083ad572ad5bd44c05a99 Mon Sep 17 00:00:00 2001 From: Robert Wolff Date: Thu, 25 Jun 2026 12:12:36 +0200 Subject: [PATCH 31/66] feat: use git-pages for pull request previews (#810) Follow-up of Codeberg/Documentation!713 Co-authored-by: Gusted Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/810 Reviewed-by: Gusted --- .cspell.json | 3 ++- .woodpecker/deploy-preview.yaml | 37 ++++++++++++++++++++------------- eleventy.config.mjs | 3 +++ 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/.cspell.json b/.cspell.json index 98e6207..f08db37 100644 --- a/.cspell.json +++ b/.cspell.json @@ -124,7 +124,8 @@ "HELLOTUX", "Merch", "merch", - "freewear" + "freewear", + "gedankenstuecke" ], "ignorePaths": [ "**/node_modules/**/*", diff --git a/.woodpecker/deploy-preview.yaml b/.woodpecker/deploy-preview.yaml index b47b9dc..1a03dc6 100644 --- a/.woodpecker/deploy-preview.yaml +++ b/.woodpecker/deploy-preview.yaml @@ -1,7 +1,13 @@ when: - - event: [pull_request, pull_request_closed] + - event: pull_request steps: + change-path: + image: alpine + commands: + - | + sed -i.orig -e "s~pathPrefix: '/'~pathPrefix: '/documentation/pull_${CI_COMMIT_PULL_REQUEST}/'~" eleventy.config.mjs + build: image: codeberg.org/woodpecker-plugins/node-pm settings: @@ -11,19 +17,20 @@ steps: ignore_node_modules: true deploy-preview: - image: docker.io/woodpeckerci/plugin-surge-preview:1.4.2 + image: codeberg.org/gedankenstuecke/git-pages-woodpecker-plugin:v2 settings: - path: '_site/' - forge_type: gitea - forge_url: https://codeberg.org - surge_token: - from_secret: surge_token - forge_repo_token: + SITE_URL: https://codeberg.codeberg.page/documentation + PATH: pull_${CI_COMMIT_PULL_REQUEST} + TOKEN: from_secret: surge_forge_token - failure: ignore - when: - event: [pull_request, pull_request_closed] - path: - - content/** - - assets/** - - .eleventy.js + UPLOAD_DIR: _site + EXPIRES: 30 + + comment: + image: mcs94/gitea-comment + settings: + gitea_address: https://codeberg.org + gitea_token: + from_secret: surge_forge_token + comment: 'Preview ready: https://codeberg.codeberg.page/documentation/pull_${CI_COMMIT_PULL_REQUEST} (expires in 30 days)' + depends_on: deploy-preview diff --git a/eleventy.config.mjs b/eleventy.config.mjs index 6b63c9b..99cd6d0 100644 --- a/eleventy.config.mjs +++ b/eleventy.config.mjs @@ -1,5 +1,6 @@ import navigationPlugin from '@11ty/eleventy-navigation'; import syntaxHighlightingPlugin from '@11ty/eleventy-plugin-syntaxhighlight'; +import { HtmlBasePlugin } from '@11ty/eleventy'; import { eleventyImageTransformPlugin } from '@11ty/eleventy-img'; import markdownIt from 'markdown-it'; import tableOfContentsPlugin from '@uncenter/eleventy-plugin-toc'; @@ -10,6 +11,7 @@ import { fas } from '@fortawesome/free-solid-svg-icons'; import { execSync } from 'child_process'; export default function (eleventyConfig) { + eleventyConfig.addPlugin(HtmlBasePlugin); eleventyConfig.addPlugin(navigationPlugin); eleventyConfig.addPlugin(syntaxHighlightingPlugin); eleventyConfig.addPlugin(eleventyImageTransformPlugin, { @@ -114,4 +116,5 @@ export const config = { dir: { input: 'content', }, + pathPrefix: '/', }; From e9fee7f0146007a9beb2e1c10448efc4fdb1d078 Mon Sep 17 00:00:00 2001 From: Robert Wolff Date: Thu, 25 Jun 2026 13:32:41 +0200 Subject: [PATCH 32/66] fix(ci): publish preview only when build done, save CI: don't build twice, remove not working expiration (#812) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/812 --- .woodpecker/build.yaml | 1 - .woodpecker/deploy-preview.yaml | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml index 9b51a62..2ab5a76 100644 --- a/.woodpecker/build.yaml +++ b/.woodpecker/build.yaml @@ -1,5 +1,4 @@ when: - - event: [pull_request] - event: push branch: - ${CI_REPO_DEFAULT_BRANCH} diff --git a/.woodpecker/deploy-preview.yaml b/.woodpecker/deploy-preview.yaml index 1a03dc6..8db1b9f 100644 --- a/.woodpecker/deploy-preview.yaml +++ b/.woodpecker/deploy-preview.yaml @@ -15,6 +15,7 @@ steps: with: pnpm frozen_lockfile: true ignore_node_modules: true + depends_on: change-path deploy-preview: image: codeberg.org/gedankenstuecke/git-pages-woodpecker-plugin:v2 @@ -24,7 +25,7 @@ steps: TOKEN: from_secret: surge_forge_token UPLOAD_DIR: _site - EXPIRES: 30 + depends_on: build comment: image: mcs94/gitea-comment @@ -32,5 +33,5 @@ steps: gitea_address: https://codeberg.org gitea_token: from_secret: surge_forge_token - comment: 'Preview ready: https://codeberg.codeberg.page/documentation/pull_${CI_COMMIT_PULL_REQUEST} (expires in 30 days)' + comment: 'Preview ready: https://codeberg.codeberg.page/documentation/pull_${CI_COMMIT_PULL_REQUEST}' depends_on: deploy-preview From 18cbfe76e8ac23e249dfac82e7dd687bc0a79cf4 Mon Sep 17 00:00:00 2001 From: Kevin Ernst Date: Thu, 25 Jun 2026 14:03:45 +0200 Subject: [PATCH 33/66] Add more complete examples to Markdown preformatted text sections (#805) Inline `code spans` are now mentioned alongsize bold and italics where it makes the most sense to have them, and the preformatted text document has been updated to show the raw Markdown for each example. Each of these documents also cross-references the other, as an aid to the reader. Several sections in `preformatted-text.md` have been renamed for clarity, with `
` anchors such that inbound links with [fragment identifiers](https://en.wikipedia.org/wiki/URI_fragment#Basics) (direct section links) should not break as a result. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/805 Reviewed-by: Robert Wolff --- content/markdown/introduction-to-markdown.md | 19 ++++ content/markdown/preformatted-text.md | 101 +++++++++++++++---- 2 files changed, 101 insertions(+), 19 deletions(-) diff --git a/content/markdown/introduction-to-markdown.md b/content/markdown/introduction-to-markdown.md index 55aa03c..ff8db4f 100644 --- a/content/markdown/introduction-to-markdown.md +++ b/content/markdown/introduction-to-markdown.md @@ -95,6 +95,25 @@ is rendered as This is ~~strikethrough text~~. +### Monospaced font (code) + +_For preformatted code blocks, see "[Preformatted Text](/markdown/preformatted-text)."_ + +It is a common convention in technical writing to use a monospaced or +fixed-width font to indicate code, literal text to be typed at a command +prompt, or program output. + +To create a span of inline text with a monospaced font, wrap the text in +backtick (\`) characters, like so: + +```markdown +This text contains an `inline code` span. +``` + +which renders as + +This text contains an `inline code` span. + ### Footnotes To add footnotes use the syntax `[^name]` inline, and define them with:
diff --git a/content/markdown/preformatted-text.md b/content/markdown/preformatted-text.md index a490474..d9d5a9d 100644 --- a/content/markdown/preformatted-text.md +++ b/content/markdown/preformatted-text.md @@ -6,29 +6,71 @@ eleventyNavigation: order: 50 --- -There are two ways to use monospace preformatted text within your Markdown document: +In technical writing, code blocks, commands to be typed verbatim, or program +output are commonly represented by monospaced or fixed-width fonts. These +blocks are considered _preformatted_, because internal whitespace is to be +preserved. -- Using indentation -- Using one or more backticks at the beginning and the end of a preformatted section +There are three ways to use preformatted text within your Markdown documents: -## Using indentation +- [Indenting](#indented-blocks) each line of a block of text by 4 or more spaces, or a tab character. +- Beginning and ending a block of text with a row of 3 or more backtick (\`) or + tilde (~) characters, referred to as a ["fenced" code block](#fenced-code-blocks). +- Wrapping HTML `
` tags around a block of text.
 
-You can preformat a section of text or code by indenting the code with 4 or more spaces, or a tab.
+Fenced code blocks can optionally
+[specify a rendering hint](<#rendering-hints-(syntax-highlighting)>)
+to apply syntax highlighting to the block.
 
-Using indentation, it's not possible to add a rendering hint. It's also not possible to preformat text within a line
-using this syntax.
+ 
+
+## Indented blocks
+
+You can preformat a block of text or code by indenting the code with **4 or more spaces, or a tab character**.
+
+Example:
+
+```
+    This block of text
+    will be preformatted
+         and internal whitespace will be preserved.
+```
+
+Result:
+
+```
+This block of text
+will be preformatted
+     and internal whitespace will be preserved.
+```
+
+Using indentation, it's not possible to add a rendering hint, so the block will not be syntax-highlighted.
 
 Indentation-based preformatting sometimes causes false positives where text is
-preformatted that isn't supposed to. For this reason, it is disabled in some
+unintentionally preformatted; for this reason, it is disabled in some
 Markdown renderers, including in Codeberg Documentation.
 
-## Using backticks
+ 
 
-A better way of preformatting a section of text is by starting a section of text with one or more backtick characters.
+## Fenced code blocks
 
-Here, we use 3 backtick characters on its own line, then our text, then another line containing 3 more backticks.
+As an alternative, you can create blocks of preformatted text by starting and ending the block with a row of 3 or more backtick (\`) or tilde (~) characters. There should be an equal number of these characters at both start and end.
 
-```markdown
+Here, we use 3 backtick characters (\`\`\`) on their own line, then our text, then another line containing another 3 backticks.
+
+````
+```
+this
+is
+displayed
+as
+preformatted
+```
+````
+
+The result:
+
+```
 this
 is
 displayed
@@ -36,16 +78,23 @@ as
 preformatted
 ```
 
-You can also preformat a section of text within a line using backtick syntax.
-The following text is for example `preformatted` by using the backtick syntax.
+ 
 
-### Rendering hints
+### Rendering hints (syntax highlighting)
 
 Sometime renderers use hints to syntax highlight the code in a preformatted section.
 
-To provide a hint, simply add the language name at the end of the introductory backtick(s).
+To provide a hint, simply add the language name at the end of the introductory backtick(s). For example, using `shell` as the hint will tell the renderer that the given code should be highlighted as a shell script:
 
-For example, using `shell` as the hint will tell the renderer that the given code should be highlighted as a shell script:
+````
+```shell
+#!/bin/bash
+
+echo "Hello world"
+```
+````
+
+The result:
 
 ```shell
 #!/bin/bash
@@ -53,10 +102,24 @@ For example, using `shell` as the hint will tell the renderer that the given cod
 echo "Hello world"
 ```
 
-The same thing would be rendered without syntax highlighting if the hint is not given:
+If the hint is omitted, the section will be rendered without syntax highlighting:
 
-```text
+````
+```
 #!/bin/bash
 
 echo "Hello world"
 ```
+````
+
+The result:
+
+```
+#!/bin/bash
+
+echo "Hello world"
+```
+
+## See also
+
+- [Introduction to Markdown § Monospaced font (code)]().

From 6b473d4a0f838440c53c58372e4a029de0f2c308 Mon Sep 17 00:00:00 2001
From: Robert Wolff 
Date: Thu, 25 Jun 2026 16:44:09 +0200
Subject: [PATCH 34/66] feat(ci): pin docker images to SHA256 checksum (#814)

Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/814
---
 .woodpecker/deploy-preview.yaml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.woodpecker/deploy-preview.yaml b/.woodpecker/deploy-preview.yaml
index 8db1b9f..a0218ab 100644
--- a/.woodpecker/deploy-preview.yaml
+++ b/.woodpecker/deploy-preview.yaml
@@ -9,7 +9,7 @@ steps:
         sed -i.orig -e "s~pathPrefix: '/'~pathPrefix: '/documentation/pull_${CI_COMMIT_PULL_REQUEST}/'~" eleventy.config.mjs
 
   build:
-    image: codeberg.org/woodpecker-plugins/node-pm
+    image: codeberg.org/woodpecker-plugins/node-pm@sha256:bff3ee2d7492e89a0dfbe6ee4c7d5ce636108cd973c0c355269f681e8dd8a196
     settings:
       run: build
       with: pnpm
@@ -18,7 +18,7 @@ steps:
     depends_on: change-path
 
   deploy-preview:
-    image: codeberg.org/gedankenstuecke/git-pages-woodpecker-plugin:v2
+    image: codeberg.org/gedankenstuecke/git-pages-woodpecker-plugin@sha256:76091e8189842f8d620fb5d1ab048ed449fe3516521ef0acc7f8c5a608c01e59
     settings:
       SITE_URL: https://codeberg.codeberg.page/documentation
       PATH: pull_${CI_COMMIT_PULL_REQUEST}
@@ -28,7 +28,7 @@ steps:
     depends_on: build
 
   comment:
-    image: mcs94/gitea-comment
+    image: mcs94/gitea-comment@sha256:f1a06366bfa34ff7594f369ebf81cbadd2d4410b7d51c9aa59c0c0264aa5fbd9
     settings:
       gitea_address: https://codeberg.org
       gitea_token:

From e8045ed1b0b43b865eadc489f5d724cdea3e7b4b Mon Sep 17 00:00:00 2001
From: Gusted 
Date: Thu, 25 Jun 2026 16:49:01 +0200
Subject: [PATCH 35/66] Update Apple store link to Authenticator (#815)

Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/815
Reviewed-by: Bastian Greshake Tzovaras 
Reviewed-by: Robert Wolff 
---
 content/security/2fa.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/content/security/2fa.md b/content/security/2fa.md
index e959ee4..c39cecf 100644
--- a/content/security/2fa.md
+++ b/content/security/2fa.md
@@ -27,7 +27,7 @@ You will need an authenticator app installed on your phone.
 If you don't already have an authenticator app and you're not sure which app to use, have a look at
 Aegis Authenticator ([F-Droid](https://f-droid.org/de/packages/com.beemdevelopment.aegis/) |
 [Google Play Store](https://play.google.com/store/apps/details?id=com.beemdevelopment.aegis&hl=en_US)),
-Authenticator ([App Store](https://itunes.apple.com/app/authenticator/id766157276))
+Authenticator ([App Store](https://apps.apple.com/app/authenticator/id766157276))
 or Ente Auth ([F-Droid](https://f-droid.org/packages/io.ente.auth/) |
 [Google Play Store](https://play.google.com/store/apps/details?id=io.ente.auth) |
 [App Store](https://apps.apple.com/app/ente-auth-2fa-authenticator/id6444121398)).

From 1ef2d6fae7fb32b7c7ac2530d7cc27eade9671df Mon Sep 17 00:00:00 2001
From: jarrodlovas 
Date: Thu, 25 Jun 2026 21:31:22 +0200
Subject: [PATCH 36/66] docs: Updated git config command examples, outlining
 those commands have changed and also added a warning for users to consider
 migrating to the new command syntax (#802)

Updated git config syntax and added a warning for users that it's recommended to migrate to the new syntax.
This was suggested in issue #756.

Closes: #756
Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/802
Reviewed-by: Robert Wolff 
---
 content/git/configuring-git.md | 14 +++++++++++---
 content/git/reduce-size.md     |  2 +-
 content/security/2fa.md        |  2 +-
 content/security/gpg-key.md    | 12 ++++++++++--
 content/security/ssh-key.md    | 14 +++++++++++---
 5 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/content/git/configuring-git.md b/content/git/configuring-git.md
index 083048a..7a3aaee 100644
--- a/content/git/configuring-git.md
+++ b/content/git/configuring-git.md
@@ -8,9 +8,17 @@ eleventyNavigation:
 Once you've managed to get Git up and running, the first thing you must do before you can use your fresh installation of
 Git is to tell Git your name and email address. You only have to do this once; this is easily done with:
 
+{% admonition "warning" %}
+
+Starting from git version 2.46, multiple `git config` commands have changed and it's recommended to migrate to the new command syntax. The command examples below have been updated to the new command syntax.
+
+A complete list of deprecated commands can be found on the official [Git documentation](https://git-scm.com/docs/git-config#_deprecated_modes).
+
+{% endadmonition %}
+
 ```bash
-git config --global user.name 'knut'
-git config --global user.email 'knut@example.com'
+git config set --global user.name 'knut'
+git config set --global user.email 'knut@example.com'
 ```
 
 The username can be anything, but it is important that the email is the same as the one you use on Codeberg.
@@ -18,7 +26,7 @@ This is because the email address will later be used to assign your commits to y
 To verify that you've set up everything properly, run:
 
 ```bash
-git config --global --list
+git config list --global
 ```
 
 {% admonition "tip" %}
diff --git a/content/git/reduce-size.md b/content/git/reduce-size.md
index ecb1336..2f1e915 100644
--- a/content/git/reduce-size.md
+++ b/content/git/reduce-size.md
@@ -128,7 +128,7 @@ to undo in case anything goes wrong.
 1. Turn off the mirror flag and carry out force pushes to your remote
 
    ```shell
-   git config --unset remote.origin.mirror
+   git config unset remote.origin.mirror
    git push origin --force 'refs/heads/*'
    git push origin --force 'refs/tags/*'
    git push origin --force 'refs/replace/*'
diff --git a/content/security/2fa.md b/content/security/2fa.md
index c39cecf..3376f66 100644
--- a/content/security/2fa.md
+++ b/content/security/2fa.md
@@ -142,7 +142,7 @@ If you want to permanently save your generated access token you can use the foll
 your computer:
 
 ```bash
-git config --global credential.helper cache
+git config set --global credential.helper cache
 ```
 
 ## Troubleshooting
diff --git a/content/security/gpg-key.md b/content/security/gpg-key.md
index fc83b9c..13c3536 100644
--- a/content/security/gpg-key.md
+++ b/content/security/gpg-key.md
@@ -85,9 +85,17 @@ you can sign the provided message. If the signed message is valid, Codeberg can
 
 You will need to tell Git about your key and have it sign new commits for you.
 
+{% admonition "warning" %}
+
+Starting from git version 2.46, multiple `git config` commands have changed and it's recommended to migrate to the new command syntax. The command examples below have been updated to the new command syntax.
+
+A complete list of deprecated commands can be found on the official [Git documentation](https://git-scm.com/docs/git-config#_deprecated_modes).
+
+{% endadmonition %}
+
 1. Open your terminal
-2. Type `git config --global user.signingkey `
-3. Type `git config --global commit.gpgsign true`
+2. Type `git config set --global user.signingkey `
+3. Type `git config set --global commit.gpgsign true`
 
 {% admonition "note" %}
 
diff --git a/content/security/ssh-key.md b/content/security/ssh-key.md
index e8ec3b9..ee68715 100644
--- a/content/security/ssh-key.md
+++ b/content/security/ssh-key.md
@@ -170,24 +170,32 @@ To update your version of Git,see the [Git](https://git-scm.com/downloads) websi
 
 {% endadmonition %}
 
+{% admonition "warning" %}
+
+Starting from git version 2.46, multiple `git config` commands have changed and it's recommended to migrate to the new command syntax. The command examples below have been updated to the new command syntax.
+
+A complete list of deprecated commands can be found on the official [Git documentation](https://git-scm.com/docs/git-config#_deprecated_modes).
+
+{% endadmonition %}
+
 In your terminal, run the following commands:
 
 1. Make git use SSH to sign commits and tags:
 
 ```shell
-git config --global gpg.format ssh
+git config set --global gpg.format ssh
 ```
 
 2. Set the SSH signing key to your public key:
 
 ```shell
-git config --global user.signingKey '~/.ssh/'
+git config set --global user.signingKey '~/.ssh/'
 ```
 
 3. Sign commits by default:
 
 ```shell
-git config --global commit.gpgSign true
+git config set --global commit.gpgSign true
 ```
 
 ## Avoid re-typing the passphrase

From b11b3c8463775e318301d5b86b062ddab46e9bef Mon Sep 17 00:00:00 2001
From: Robert Wolff 
Date: Fri, 26 Jun 2026 11:32:22 +0200
Subject: [PATCH 37/66] feat(ci): delete preview on closing a pull request,
 update plugin (#816)

Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/816
---
 .woodpecker/delete-preview.yaml | 21 +++++++++++++++++++++
 .woodpecker/deploy-preview.yaml |  2 +-
 2 files changed, 22 insertions(+), 1 deletion(-)
 create mode 100644 .woodpecker/delete-preview.yaml

diff --git a/.woodpecker/delete-preview.yaml b/.woodpecker/delete-preview.yaml
new file mode 100644
index 0000000..878cc47
--- /dev/null
+++ b/.woodpecker/delete-preview.yaml
@@ -0,0 +1,21 @@
+when:
+  - event: pull_request_close
+
+steps:
+  delete-preview:
+    image: codeberg.org/gedankenstuecke/git-pages-woodpecker-plugin@sha256:5257561a95054104f7499838817f3b447049a1edc14e87b99156b1302e0bce36
+    settings:
+      SITE_URL: https://codeberg.codeberg.page/documentation
+      PATH: pull_${CI_COMMIT_PULL_REQUEST}
+      TOKEN:
+        from_secret: surge_forge_token
+      DELETE: true
+
+  comment:
+    image: mcs94/gitea-comment@sha256:f1a06366bfa34ff7594f369ebf81cbadd2d4410b7d51c9aa59c0c0264aa5fbd9
+    settings:
+      gitea_address: https://codeberg.org
+      gitea_token:
+        from_secret: surge_forge_token
+      comment: 'Preview deleted.'
+    depends_on: delete-preview
diff --git a/.woodpecker/deploy-preview.yaml b/.woodpecker/deploy-preview.yaml
index a0218ab..af6c34b 100644
--- a/.woodpecker/deploy-preview.yaml
+++ b/.woodpecker/deploy-preview.yaml
@@ -18,7 +18,7 @@ steps:
     depends_on: change-path
 
   deploy-preview:
-    image: codeberg.org/gedankenstuecke/git-pages-woodpecker-plugin@sha256:76091e8189842f8d620fb5d1ab048ed449fe3516521ef0acc7f8c5a608c01e59
+    image: codeberg.org/gedankenstuecke/git-pages-woodpecker-plugin@sha256:5257561a95054104f7499838817f3b447049a1edc14e87b99156b1302e0bce36
     settings:
       SITE_URL: https://codeberg.codeberg.page/documentation
       PATH: pull_${CI_COMMIT_PULL_REQUEST}

From 372d3aa75eb6a880e3495923f50767d19389b578 Mon Sep 17 00:00:00 2001
From: Robert Wolff 
Date: Fri, 26 Jun 2026 11:36:47 +0200
Subject: [PATCH 38/66] fix(ci): typo (#817)

Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/817
---
 .woodpecker/delete-preview.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.woodpecker/delete-preview.yaml b/.woodpecker/delete-preview.yaml
index 878cc47..18ab5dc 100644
--- a/.woodpecker/delete-preview.yaml
+++ b/.woodpecker/delete-preview.yaml
@@ -1,5 +1,5 @@
 when:
-  - event: pull_request_close
+  - event: pull_request_closed
 
 steps:
   delete-preview:

From 9ef2d7113b19ef7caa97329a0e4bbf5b2c9c6364 Mon Sep 17 00:00:00 2001
From: crystal 
Date: Fri, 26 Jun 2026 20:09:04 +0200
Subject: [PATCH 39/66] Clarify stuff about custom domains across pages docs
 (#819)

Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/819
Reviewed-by: Robert Wolff 
Reviewed-by: Catherine 
---
 content/codeberg-pages/forgejo-actions.md     |  8 ---
 content/codeberg-pages/index.md               | 17 +-----
 .../codeberg-pages/migrating-from-pages-v2.md | 11 ++--
 content/codeberg-pages/using-custom-domain.md | 55 ++++++++++---------
 4 files changed, 37 insertions(+), 54 deletions(-)

diff --git a/content/codeberg-pages/forgejo-actions.md b/content/codeberg-pages/forgejo-actions.md
index b93f4ef..80580de 100644
--- a/content/codeberg-pages/forgejo-actions.md
+++ b/content/codeberg-pages/forgejo-actions.md
@@ -6,14 +6,6 @@ eleventyNavigation:
   order: 100
 ---
 
-{% admonition "Warning" %}
-
-The following instructions depend on the new git-pages server for Codeberg Pages and can currently only be used on sites which are hosted under our `codeberg.page` domain, and not with sites that should be served from custom domains.
-
-Follow the [old instructions for legacy v2 sites](/codeberg-pages/) if you would like to deploy to a custom domain.
-
-{% endadmonition %}
-
 Git-pages has an [associated Forgejo Action](https://codeberg.org/git-pages/action) that can be used to automatically deploy your website from a static site generation tool.
 You can use any such tool you like: git-pages does not privilege any particular publishing system over others.
 
diff --git a/content/codeberg-pages/index.md b/content/codeberg-pages/index.md
index 3b55b10..6ec5242 100644
--- a/content/codeberg-pages/index.md
+++ b/content/codeberg-pages/index.md
@@ -13,7 +13,7 @@ Codeberg Pages has recently migrated from the legacy v2 codebase to the newer [g
 Take note of some minor [changes and deprecations](/codeberg-pages/migrating-from-pages-v2/#breaking-changes-and-deprecations).
 
 If you have not yet [migrated your own site to the new server,](/codeberg-pages/migrating-from-pages-v2/) we encourage you to do so.
-We do not currently have any concrete plans to disable Pages Server v2.
+Pages Server v2 has already been disabled for new users due to abuse, however it is still working for users and organizations that already existed prior to the service being discontinued. We apologize for any inconvenience this has caused.
 
 The new documentation is work in progress, and we appreciate your feedback. Please let us know in case you find yourself confused.
 
@@ -85,20 +85,7 @@ This page documents the first method. See the [separate page on using Forgejo Ac
 
 ## Getting started with a custom domain
 
-{% admonition "warning" %}
-
-You can only use the ‘legacy’ v2 Pages deployment method at the moment if you want to serve your site with a custom domain.
-
-Websites deployed this way will keep working indefinitely.
-You will be able to seamlessly migrate to the new version of Pages once it is supported.
-
-{% endadmonition %}
-
-There are two steps to getting started with a custom domain: configuration on Codeberg’s side, and configuration on the side of your DNS.
-
-To set up your website for publication on a custom domain on the Codeberg side, simply upload your content to a branch of a repository called `pages`. You then also need to create a plain text file called `.domains` listing the domains your website should be available at.
-
-You then need to set up DNS records to point to Codeberg. Instructions on how to do this are available on the [documentation page about using custom domains](/codeberg-pages/using-custom-domain/).
+You can now deploy custom domains using git-pages! Please see the [documentation page about using custom domains](/codeberg-pages/using-custom-domain/) for details.
 
 ## Having problems?
 
diff --git a/content/codeberg-pages/migrating-from-pages-v2.md b/content/codeberg-pages/migrating-from-pages-v2.md
index 03fa9b6..4a8fbd3 100644
--- a/content/codeberg-pages/migrating-from-pages-v2.md
+++ b/content/codeberg-pages/migrating-from-pages-v2.md
@@ -10,17 +10,18 @@ eleventyNavigation:
 
 Codeberg Pages is currently migrating from the legacy v2 codebase to the newer [git-pages](https://git-pages.org/) codebase.
 
-Currently, websites that use custom domains can only be deployed using the old method, but we are working to fix this.
-Such websites will keep working indefinitely.
-You will be able to seamlessly migrate to the new version of Pages once it is supported.
 Take note of some minor [changes and deprecations](/codeberg-pages/migrating-from-pages-v2/#breaking-changes-and-deprecations).
 
-Websites hosted under the `codeberg.page` domain can already use the new git-pages method.
-
 The new documentation is work in progress, and we appreciate your feedback. Please let us know in case you find yourself confused.
 
 {% endadmonition %}
 
+{% admonition "info" "Notice" %}
+
+Custom domains are now supported by the new git-pages server! Please refer to [the updated custom domain setup guide](/codeberg-pages/using-custom-domain/) for details on how to properly replace your old DNS records before proceeding.
+
+{% endadmonition %}
+
 Since December 2025, Codeberg offers a new Pages service based on [git-pages](https://codeberg.org/git-pages/git-pages).
 It improves performance and stability, and fixes various design issues from the current [Pages Server v2](https://codeberg.org/Codeberg/pages-server). Unfortunately, these fixed design issues require some migration and deprecation of features.
 
diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md
index 35285ca..af1aab8 100644
--- a/content/codeberg-pages/using-custom-domain.md
+++ b/content/codeberg-pages/using-custom-domain.md
@@ -13,22 +13,7 @@ Codeberg Pages has recently migrated from the legacy v2 codebase to the newer [g
 Take note of some minor [changes and deprecations](/codeberg-pages/migrating-from-pages-v2/#breaking-changes-and-deprecations).
 
 If you have not yet [migrated your own site to the new server,](/codeberg-pages/migrating-from-pages-v2/) we encourage you to do so.
-We do not currently have any concrete plans to disable Pages Server v2.
-
-The new documentation is work in progress, and we appreciate your feedback. Please let us know in case you find yourself confused.
-
-{% endadmonition %}
-
-{% admonition "Warning" %}
-
-Codeberg Pages is currently migrating from the legacy v2 codebase to the newer [git-pages](https://git-pages.org/) codebase.
-
-Currently, websites that use custom domains can only be deployed using the old method, but we are working to fix this.
-Such websites will keep working indefinitely.
-You will be able to seamlessly migrate to the new version of Pages once it is supported.
-Take note of some minor [changes and deprecations](/codeberg-pages/migrating-from-pages-v2/#breaking-changes-and-deprecations).
-
-Websites hosted under the `codeberg.page` domain can already use the new git-pages method.
+Pages Server v2 has already been disabled for new users due to abuse, however it is still working for users and organizations that already existed prior to the service being discontinued. We apologize for any inconvenience this has caused.
 
 The new documentation is work in progress, and we appreciate your feedback. Please let us know in case you find yourself confused.
 
@@ -75,11 +60,6 @@ In the end, it should look like this:
   Data
  
  
-  
-   yourdomain.com
-   CNAME
-   codeberg.page.
-  
   
    www.yourdomain.com
    CNAME
@@ -90,15 +70,22 @@ In the end, it should look like this:
 
 {% admonition "Warning" %}
 
-With a CNAME record everything on this domain is delegated to `codeberg.page`, which means you cannot setup your own
-email address with this method.
+The `codeberg.page` zone is not currently DNSSEC signed, which may cause unexpected behavior with your domain if your domain's zone is signed and a client is using a DNSSEC validating resolver.
 
-If you need email or others services, you have to use one of the remaining options.
+If you have DNSSEC enabled, you should use A/AAAA records for now.
 
 {% endadmonition %}
 
-If you have an apex domain you will not be able to use a CNAME record.
-In this case, many DNS providers support an ALIAS record which will work instead.
+{% admonition "Warning" %}
+
+With a CNAME record, everything on this subdomain is delegated to `codeberg.page`, which means you cannot setup other types of DNS records for other services on the same subdomain.
+
+If you need to setup other records for other services, such as MX records for email, on the same subdomain, you must use one of the remaining options.
+
+{% endadmonition %}
+
+If the domain you wish to use is the apex of the zone or has other existing DNS records, you will not be able to use a CNAME record.
+In this case, some DNS providers support an ALIAS record, which will work instead. Some DNS providers (such as Cloudflare) only allow setting "flattened" CNAME records at the apex, which works the same way as an ALIAS record.
 
 
@@ -120,6 +107,14 @@ In this case, many DNS providers support an ALIAS record which will work instead
  
+{% admonition "Warning" %} + +This type of record is not supported in conjunction with DNSSEC signed zones, which may cause unexpected behavior with your domain if your domain's zone is signed and a client is using a DNSSEC validating resolver. + +If you have DNSSEC enabled, you should use A/AAAA records for now. + +{% endadmonition %} + If you cannot use a CNAME nor an ALIAS record, you will need to set up the A and AAAA records to point to Codeberg’s IP addresses directly. @@ -160,6 +155,14 @@ The DNS records in turn ensure that the domain owner authorizes that repository {% endadmonition %} +{% admonition "info" "Notice" %} + +Since the new git-pages server uses these DNS records as an authorization method, it is no longer necessary to have a `.domains` file in your repository. You may remove it if you are migrating your website from the old Pages Server v2. + +If you were relying on the old server's multi-domain redirection implementation, it may still be used if you only deploy your site to one of your domains on git-pages. See [the last section of this document](/codeberg-pages/migrating-from-pages-v2/#deploying-to-versions-of-your-domain-both-with-and-without-www.) for detailed instructions on setting up similar redirects on git-pages. + +{% endadmonition %} + **If you deploy from a webhook,** set a TXT record on the `_git-pages-repository` subdomain of your domain with the HTTPS Git clone URL for your repository. From 9868a2e1509308f8c3bfe0ed725d0ed6b93f73fb Mon Sep 17 00:00:00 2001 From: David Anselmi Date: Sun, 28 Jun 2026 00:11:20 +0200 Subject: [PATCH 40/66] Clarify ssh-keygen use. (#807) Closes #411. I don't think a larger change is warranted here. The directions provided by settings/keys could be better but that's a separate issue (probably for Forgejo). Thanks! Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/807 Reviewed-by: Gusted --- content/security/ssh-key.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/security/ssh-key.md b/content/security/ssh-key.md index ee68715..42ee878 100644 --- a/content/security/ssh-key.md +++ b/content/security/ssh-key.md @@ -155,7 +155,7 @@ added key is yours. 1. Go to the [SSH/GPG Keys tab](https://codeberg.org/user/settings/keys) in your Codeberg settings. 2. Click on the **Verify** button next to the SSH key you would like to verify. 3. Codeberg will show a token. Under its text box copy the command, and replace `/path_to_your_private_key` with the - correct path of your private key. + correct path of your private (or public) key. (Either key works, ssh-keygen will do the right thing.) 4. Copy the output, beginning with `-----BEGIN SSH SIGNATURE-----` and ending with `-----END SSH SIGNATURE-----`. 5. Paste it into the large textbox and click the **Verify** button. From 5a28ff377f59d4cb982ba55135594d839cda2419 Mon Sep 17 00:00:00 2001 From: Gusted Date: Tue, 30 Jun 2026 00:46:57 +0200 Subject: [PATCH 41/66] Extra detail in custom domains deployment via webhooks First deployment needs to happen over HTTP. --- content/codeberg-pages/using-custom-domain.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md index af1aab8..817e1a3 100644 --- a/content/codeberg-pages/using-custom-domain.md +++ b/content/codeberg-pages/using-custom-domain.md @@ -213,6 +213,8 @@ set a TXT record on the `_git-pages-forge-allowlist` subdomain of your domain wi **If you deploy from a webhook,** the webhook **Target URL** should be set to the domain you want to deploy your website to. +For technical reasons, the first deployment needs to go over HTTP and you need to specify the `http://` scheme. +After the first succesful deployment you can change it to the `https://` scheme. **If you deploy from Forgejo Actions,** the `site` parameter to the Git-pages action should be set to the URL of your custom domain. From 05b677d374c67e42ac27b054922722b5b9d3d3e2 Mon Sep 17 00:00:00 2001 From: Gusted Date: Tue, 30 Jun 2026 00:49:06 +0200 Subject: [PATCH 42/66] Spelling --- content/codeberg-pages/using-custom-domain.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md index 817e1a3..48f3bd6 100644 --- a/content/codeberg-pages/using-custom-domain.md +++ b/content/codeberg-pages/using-custom-domain.md @@ -214,7 +214,7 @@ set a TXT record on the `_git-pages-forge-allowlist` subdomain of your domain wi **If you deploy from a webhook,** the webhook **Target URL** should be set to the domain you want to deploy your website to. For technical reasons, the first deployment needs to go over HTTP and you need to specify the `http://` scheme. -After the first succesful deployment you can change it to the `https://` scheme. +After the first successful deployment you can change it to the `https://` scheme. **If you deploy from Forgejo Actions,** the `site` parameter to the Git-pages action should be set to the URL of your custom domain. From a76b5753399b05a196eca7f20e577537226dd7ae Mon Sep 17 00:00:00 2001 From: Gusted Date: Tue, 30 Jun 2026 00:49:18 +0200 Subject: [PATCH 43/66] Update CAA recommendation (#822) Caddy will first try against staging, so this also requires a CAA record. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/822 --- content/codeberg-pages/using-custom-domain.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md index 48f3bd6..3eed61d 100644 --- a/content/codeberg-pages/using-custom-domain.md +++ b/content/codeberg-pages/using-custom-domain.md @@ -25,8 +25,10 @@ and configure it to serve content from Codeberg Pages. {% admonition "warning" "Known pitfalls for failed certificate errors" %} If you have a [CAA record](https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization#Record) configured, -you must [explicitly allow Let's Encrypt in your CAA record](https://letsencrypt.org/docs/caa/). -The value of the CAA record would look like `letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/292520050;validationmethods=tls-alpn-01,http-01`. +you must [explicitly allow Let's Encrypt (staging) in your CAA record](https://letsencrypt.org/docs/caa/). +This means you need to add two extra CAA records. +The first record has a value of `letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/292520050;validationmethods=tls-alpn-01,http-01`. +The second record has a value of `letsencrypt.org;accounturi=https://acme-staging-v02.api.letsencrypt.org/acme/acct/272029763;validationmethods=tls-alpn-01,http-01`. If you're using [DNSSec](https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions) on your custom domain, you might run into TLS certificate issues because `codeberg.page` doesn't use DNSSec at the moment. In this case you must add `A` / `AAAA` / `TXT` records for all domains instead of `CNAME` records. You can use [this tool](https://dnssec-analyzer.verisignlabs.com) to verify your setup. From bcda6d99c5d4c563921d6cff3d4873409b1408f2 Mon Sep 17 00:00:00 2001 From: Thomas JOUANNOT Date: Tue, 30 Jun 2026 00:52:16 +0200 Subject: [PATCH 44/66] feat(lfs): added troubleshooting section with some help regarding ssh (#820) Today i encountered an issue while trying to push some lfs files to Codeberg: it would systematically fail. After looking around I found this issue on Github: https://github.com/git-lfs/git-lfs/issues/6043 And I thought it would be nice to have it mentioned in the documentation :) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/820 Reviewed-by: Gusted --- content/git/using-lfs.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/content/git/using-lfs.md b/content/git/using-lfs.md index 9400591..f0f445a 100644 --- a/content/git/using-lfs.md +++ b/content/git/using-lfs.md @@ -150,6 +150,12 @@ This disables LFS for all files ending with .rnd in your repository. The man page of [git-lfs-migrate(1)][git-lfs-migrate] further explains how to export files in order to disable tracking them by LFS. +## Troubleshooting + +If you connect to Git through SSH, you may encounter errors using LFS (such as `Connection closed`). +This is because the latest versions of Git LFS are now also using SSH by default in that case, but not all servers allow it. +Configuring Git with `git config lfs.sshTransfer never` will switch back to using HTTPS and should solve your problem. + ## Further reading - [Git LFS Website][git-lfs] From 33094726bb6b7e017a6cd35653c3f5f985b06ce0 Mon Sep 17 00:00:00 2001 From: whitequark Date: Sat, 4 Jul 2026 22:07:53 +0200 Subject: [PATCH 45/66] Add `server: codeberg.page` to Forgejo Actions Pages deployment example (#825) This should reduce support load for first-deployment TLS issues. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/825 Reviewed-by: Bastian Greshake Tzovaras --- content/codeberg-pages/forgejo-actions.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/codeberg-pages/forgejo-actions.md b/content/codeberg-pages/forgejo-actions.md index 80580de..3f1cb31 100644 --- a/content/codeberg-pages/forgejo-actions.md +++ b/content/codeberg-pages/forgejo-actions.md @@ -19,6 +19,7 @@ To use it, simply add it as a final step to your workflow: - uses: https://codeberg.org/git-pages/action@v2 with: site: 'https://${{ forge.repository_owner }}.codeberg.page/repository-name/' + server: codeberg.page token: ${{ forge.token }} source: _site/ ``` From 9b655b9b370041dbcd20cc0f059f084bde752f4f Mon Sep 17 00:00:00 2001 From: Catherine Date: Sun, 5 Jul 2026 02:33:49 +0200 Subject: [PATCH 46/66] Add more explanation for git-pages/action `server:` option. (#826) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/826 Reviewed-by: crystal Reviewed-by: Bastian Greshake Tzovaras --- content/codeberg-pages/forgejo-actions.md | 39 +++++++++++++++++-- content/codeberg-pages/using-custom-domain.md | 8 ++-- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/content/codeberg-pages/forgejo-actions.md b/content/codeberg-pages/forgejo-actions.md index 3f1cb31..117568d 100644 --- a/content/codeberg-pages/forgejo-actions.md +++ b/content/codeberg-pages/forgejo-actions.md @@ -11,14 +11,44 @@ You can use any such tool you like: git-pages does not privilege any particular If you already use a static site generator and/or already use Forgejo Actions, using the pre-made Forgejo Action is by far the simplest and most efficient way to publish your site to Codeberg Pages. -To use it, simply add it as a final step to your workflow: +**If you use a `*.codeberg.page` subdomain,** +add the following step at the end of your workflow after replacing `repository-name` in the `site` parameter with the name of your repository: {% raw %} ```yaml - uses: https://codeberg.org/git-pages/action@v2 with: - site: 'https://${{ forge.repository_owner }}.codeberg.page/repository-name/' + site: https://${{ forge.repository_owner }}.codeberg.page/repository-name/ + token: ${{ forge.token }} + source: _site/ +``` + +{% endraw %} + +To publish a site to the root of your subdomain, `https://username.codeberg.page/`, ensure your repository is called `pages`, and add the following step instead: + +{% raw %} + +```yaml +- uses: https://codeberg.org/git-pages/action@v2 + with: + site: https://${{ forge.repository_owner }}.codeberg.page/ + token: ${{ forge.token }} + source: _site/ +``` + +{% endraw %} + +**If you use a custom domain,** +add the following step at the end of your workflow after replacing `yourdomain.com` with your custom domain: + +{% raw %} + +```yaml +- uses: https://codeberg.org/git-pages/action@v2 + with: + site: https://yourdomain.com/ server: codeberg.page token: ${{ forge.token }} source: _site/ @@ -26,8 +56,9 @@ To use it, simply add it as a final step to your workflow: {% endraw %} -Replace `repository-name` in the `site` parameter with the name of your repository. -If your repository is also called `pages`, you can also omit the repository name and deploy directly to the site `https://username.codeberg.page/`. +The `server` parameter directs the Action to upload your site to a specific git-pages server instead of resolving the A/AAAA records DNS records specified in the `site` parameter. It may be specified as `codeberg.page` anytime a site is published to Codeberg Pages, but is **required** for publishing a site on a custom domain for the first time. + +This is caused by a circular dependency: git-pages will not issue a TLS certificate unless a site exists on that domain, but contacting it over HTTPS is not possible unless a TLS certificate is obtained. When the `site` parameter is specified, the HTTPS connection is established with the specified server (`codeberg.page` in this case), and the custom domain is passed in the `Host:` header instead, breaking this loop. The `source` parameter should point to the directory (relative to the root, after all previous steps in your workflow) where your site generator has put the generated version of your site. This directory can also contain the `404.html` and `_redirects` files to customize your site’s behavior, as described in the [advanced documentation](/codeberg-pages/advanced-usage/). diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md index 3eed61d..77a58f2 100644 --- a/content/codeberg-pages/using-custom-domain.md +++ b/content/codeberg-pages/using-custom-domain.md @@ -26,8 +26,8 @@ and configure it to serve content from Codeberg Pages. If you have a [CAA record](https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization#Record) configured, you must [explicitly allow Let's Encrypt (staging) in your CAA record](https://letsencrypt.org/docs/caa/). -This means you need to add two extra CAA records. -The first record has a value of `letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/292520050;validationmethods=tls-alpn-01,http-01`. +This means you need to add two extra CAA records. +The first record has a value of `letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/292520050;validationmethods=tls-alpn-01,http-01`. The second record has a value of `letsencrypt.org;accounturi=https://acme-staging-v02.api.letsencrypt.org/acme/acct/272029763;validationmethods=tls-alpn-01,http-01`. If you're using [DNSSec](https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions) on your custom domain, you might run into TLS certificate issues because `codeberg.page` doesn't use DNSSec at the moment. @@ -143,7 +143,7 @@ so keep an eye on Codeberg updates to check. -### Step 2: Configure Git-pages authorization +### Step 2: Configure git-pages authorization {% admonition "question" "Why do I need all these extra DNS records?" %} @@ -219,7 +219,7 @@ For technical reasons, the first deployment needs to go over HTTP and you need t After the first successful deployment you can change it to the `https://` scheme. **If you deploy from Forgejo Actions,** -the `site` parameter to the Git-pages action should be set to the URL of your custom domain. +the `site` parameter to the git-pages action should be set to the URL of your custom domain, and the `server` parameter should be set to `codeberg.page`. The [Forgejo Actions guide](/codeberg-pages/forgejo-actions/) includes example workflows and more information. ### Deploying to versions of your domain both with and without `www.` From 25f21f69ffffb09f3d9b617a0003b4a20d9f7420 Mon Sep 17 00:00:00 2001 From: timcl Date: Tue, 7 Jul 2026 13:47:08 +0200 Subject: [PATCH 47/66] SSH-Key clip recommendations do not work with powershell (#824) [https://docs.codeberg.org/security/ssh-key/](https://docs.codeberg.org/security/ssh-key/) currently recommends this: `clip < ~/.ssh/id_ed25519.pub` for copying on windows. This however breaks with pwsh (which is becoming more and more the default on windows) with: *The '<' operator is reserved for future use.* This pr adresses this by proposing `gc ~/.ssh/id_ed25519.pub | clip` for pwsh. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/824 Reviewed-by: Robert Wolff --- content/security/ssh-key.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/security/ssh-key.md b/content/security/ssh-key.md index 42ee878..0d6acf8 100644 --- a/content/security/ssh-key.md +++ b/content/security/ssh-key.md @@ -87,10 +87,10 @@ be prompted to touch it to continue. xclip -selection clipboard < ~/.ssh/id_ed25519.pub ``` - On Windows you can use `clip`. + On Windows you can use `clip` (powershell) ```shell - clip < ~/.ssh/id_ed25519.pub + gc ~/.ssh/id_ed25519.pub | clip ``` On macOS you can use `pbcopy`. From 0b1180bafd33a6d777086a20e451fb472644daf4 Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Wed, 8 Jul 2026 16:54:43 +0200 Subject: [PATCH 48/66] chore(deps): update dependency pnpm to v11 [security] (#829) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/829 Reviewed-by: Gusted --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index f035415..7277991 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ ENTRYPOINT [ "./container-init.sh" ] ENV CI="true" # renovate: datasource=npm depName=pnpm -ENV PNPM_VERSION="10.28.2" +ENV PNPM_VERSION="11.5.3" RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get --assume-yes upgrade \ From bd6a8cbbc08645e858be09885ab958f402c90089 Mon Sep 17 00:00:00 2001 From: Catherine Date: Wed, 8 Jul 2026 16:55:45 +0200 Subject: [PATCH 49/66] Fix syntax of `ALIAS` DNS records. (#827) These do not have @ automatically appended, so no need for a trailing dot. Closes: Codeberg/Community#2833 Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/827 Reviewed-by: Robert Wolff --- content/codeberg-pages/using-custom-domain.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md index 77a58f2..9cb8cb3 100644 --- a/content/codeberg-pages/using-custom-domain.md +++ b/content/codeberg-pages/using-custom-domain.md @@ -99,12 +99,12 @@ In this case, some DNS providers support an ALIAS record, which will work instea yourdomain.com ALIAS - codeberg.page. + codeberg.page www.yourdomain.com ALIAS - codeberg.page. + codeberg.page From 275d959b8b0869d9f859bd8137fd8cef4fef077b Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Wed, 8 Jul 2026 17:05:12 +0200 Subject: [PATCH 50/66] chore(deps): update dependency markdown-it to v14.2.0 [security] (#828) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/828 Reviewed-by: Gusted --- package.json | 2 +- pnpm-lock.yaml | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 2bf807a..ca1809d 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@uncenter/eleventy-plugin-toc": "1.0.3", "cspell": "9.8.0", "halfmoon": "2.0.2", - "markdown-it": "14.1.1", + "markdown-it": "14.2.0", "markdown-it-anchor": "9.2.0", "markdownlint-cli2": "0.20.0", "pagefind": "1.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c937a91..57270e5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,11 +39,11 @@ importers: specifier: 2.0.2 version: 2.0.2 markdown-it: - specifier: 14.1.1 - version: 14.1.1 + specifier: 14.2.0 + version: 14.2.0 markdown-it-anchor: specifier: 9.2.0 - version: 9.2.0(@types/markdown-it@14.1.2)(markdown-it@14.1.1) + version: 9.2.0(@types/markdown-it@14.1.2)(markdown-it@14.2.0) markdownlint-cli2: specifier: 0.20.0 version: 0.20.0 @@ -1075,8 +1075,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + linkify-it@5.0.2: + resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} liquidjs@10.25.7: resolution: {integrity: sha512-rPCjJLiD4eDhQjvv964AeXFC+HbeYBbZrd7Z82Q6hqv1lX7G+5w4SJcKLn9CAAAwHI4aS3dTdo083UB79K3pDA==} @@ -1100,8 +1100,8 @@ packages: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true - markdown-it@14.1.1: - resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} + markdown-it@14.2.0: + resolution: {integrity: sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==} hasBin: true markdownlint-cli2-formatter-default@0.0.6: @@ -1631,7 +1631,7 @@ snapshots: kleur: 4.1.5 liquidjs: 10.25.7 luxon: 3.7.2 - markdown-it: 14.1.1 + markdown-it: 14.2.0 minimist: 1.2.8 moo: 0.5.2 node-retrieve-globals: 6.0.1 @@ -2580,7 +2580,7 @@ snapshots: kleur@4.1.5: {} - linkify-it@5.0.0: + linkify-it@5.0.2: dependencies: uc.micro: 2.1.0 @@ -2592,25 +2592,25 @@ snapshots: luxon@3.7.2: {} - markdown-it-anchor@9.2.0(@types/markdown-it@14.1.2)(markdown-it@14.1.1): + markdown-it-anchor@9.2.0(@types/markdown-it@14.1.2)(markdown-it@14.2.0): dependencies: '@types/markdown-it': 14.1.2 - markdown-it: 14.1.1 + markdown-it: 14.2.0 markdown-it@14.1.0: dependencies: argparse: 2.0.1 entities: 4.5.0 - linkify-it: 5.0.0 + linkify-it: 5.0.2 mdurl: 2.0.0 punycode.js: 2.3.1 uc.micro: 2.1.0 - markdown-it@14.1.1: + markdown-it@14.2.0: dependencies: argparse: 2.0.1 entities: 4.5.0 - linkify-it: 5.0.0 + linkify-it: 5.0.2 mdurl: 2.0.0 punycode.js: 2.3.1 uc.micro: 2.1.0 From 93003332aa647f1568aa8d34e22a02fce72e3c65 Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Wed, 8 Jul 2026 18:16:37 +0200 Subject: [PATCH 51/66] chore(deps): update dependency @uncenter/eleventy-plugin-toc to v2 (#830) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/830 Reviewed-by: Gusted --- package.json | 2 +- pnpm-lock.yaml | 115 ++++++++++++++++++++++++------------------------- 2 files changed, 58 insertions(+), 59 deletions(-) diff --git a/package.json b/package.json index ca1809d..96a928b 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "@fortawesome/fontawesome-svg-core": "7.1.0", "@fortawesome/free-solid-svg-icons": "7.1.0", "@toycode/markdown-it-class": "1.2.4", - "@uncenter/eleventy-plugin-toc": "1.0.3", + "@uncenter/eleventy-plugin-toc": "2.1.2", "cspell": "9.8.0", "halfmoon": "2.0.2", "markdown-it": "14.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 57270e5..4e7ebbe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ importers: specifier: 1.2.4 version: 1.2.4 '@uncenter/eleventy-plugin-toc': - specifier: 1.0.3 - version: 1.0.3 + specifier: 2.1.2 + version: 2.1.2 cspell: specifier: 9.8.0 version: 9.8.0 @@ -554,9 +554,9 @@ packages: '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - '@uncenter/eleventy-plugin-toc@1.0.3': - resolution: {integrity: sha512-cKWlG3lnd9WcFwHfq0gKLPrbe0FYlVlkvxIId/8YD/zyZZdQMTlskjLDw27p9m6x9pL+nCwX2R/Ha2uTgsdrvQ==} - engines: {node: '>=16.0.0'} + '@uncenter/eleventy-plugin-toc@2.1.2': + resolution: {integrity: sha512-5wXmwJad4C4qy3RU9ulzPXG7M/84Zc4aWuJfJSS5OONcWCz1H4nOPgv044jzKM864dcKKxHxtjwn8LGjcQp0Xg==} + engines: {node: '>=18'} a-sync-waterfall@1.0.1: resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} @@ -645,13 +645,6 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.0.0-rc.12: - resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} - engines: {node: '>= 6'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -762,6 +755,9 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + cssom@0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -849,6 +845,10 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-paths@4.0.0: resolution: {integrity: sha512-pxP8eL2SwwaTRi/KHYwLYXinDs7gL3jxFcBYmEdYfZmZXbaVDvdppd0XBU8qVz03rDfKZMXg1omHCbsJjZrMsw==} engines: {node: '>=20'} @@ -965,12 +965,15 @@ packages: halfmoon@2.0.2: resolution: {integrity: sha512-9IZ+OccqINrD5Eu5RgEgdK0c3CvDRIkL/ePMx+PFXwK1LZB0fI9HniKbd6MrMRsL0j7/OnvS0nGDgoaZvqeGkg==} + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + htmlparser2@7.2.0: resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} - htmlparser2@8.0.2: - resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} - http-equiv-refresh@2.0.1: resolution: {integrity: sha512-XJpDL/MLkV3dKwLzHwr2dY05dYNfBNlyPu4STQ8WvKCFdc6vC5tPXuq28of663+gHVg03C+16pHHs/+FmmDjcw==} engines: {node: '>= 6'} @@ -1075,6 +1078,15 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + linkedom@0.18.12: + resolution: {integrity: sha512-jalJsOwIKuQJSeTvsgzPe9iJzyfVaEJiEXl+25EkKevsULHvMJzpNqwvj1jOESWdmgKDiXObyjOYwlUqG7wo1Q==} + engines: {node: '>=16'} + peerDependencies: + canvas: '>= 2' + peerDependenciesMeta: + canvas: + optional: true + linkify-it@5.0.2: resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} @@ -1301,12 +1313,6 @@ packages: parse-srcset@1.0.2: resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -1496,6 +1502,9 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + uhyphen@0.2.0: + resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -2040,9 +2049,11 @@ snapshots: '@types/unist@2.0.11': {} - '@uncenter/eleventy-plugin-toc@1.0.3': + '@uncenter/eleventy-plugin-toc@2.1.2': dependencies: - cheerio: 1.0.0-rc.12 + linkedom: 0.18.12 + transitivePeerDependencies: + - canvas a-sync-waterfall@1.0.1: {} @@ -2117,25 +2128,6 @@ snapshots: character-reference-invalid@2.0.1: {} - cheerio-select@2.1.0: - dependencies: - boolbase: 1.0.0 - css-select: 5.2.2 - css-what: 6.2.2 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - - cheerio@1.0.0-rc.12: - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.2.2 - htmlparser2: 8.0.2 - parse5: 7.3.0 - parse5-htmlparser2-tree-adapter: 7.1.0 - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -2305,6 +2297,8 @@ snapshots: dependencies: css-tree: 2.2.1 + cssom@0.5.0: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -2377,6 +2371,8 @@ snapshots: entities@6.0.1: {} + entities@7.0.1: {} + env-paths@4.0.0: dependencies: is-safe-filename: 0.1.1 @@ -2485,6 +2481,15 @@ snapshots: csso-cli: 4.0.2 rtlcss: 4.3.0 + html-escaper@3.0.3: {} + + htmlparser2@10.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 7.0.1 + htmlparser2@7.2.0: dependencies: domelementtype: 2.3.0 @@ -2492,13 +2497,6 @@ snapshots: domutils: 2.8.0 entities: 3.0.1 - htmlparser2@8.0.2: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 4.5.0 - http-equiv-refresh@2.0.1: {} http-errors@2.0.0: @@ -2580,6 +2578,14 @@ snapshots: kleur@4.1.5: {} + linkedom@0.18.12: + dependencies: + css-select: 5.2.2 + cssom: 0.5.0 + html-escaper: 3.0.3 + htmlparser2: 10.1.0 + uhyphen: 0.2.0 + linkify-it@5.0.2: dependencies: uc.micro: 2.1.0 @@ -2918,15 +2924,6 @@ snapshots: parse-srcset@1.0.2: {} - parse5-htmlparser2-tree-adapter@7.1.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.3.0 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - parseurl@1.3.3: {} path-type@6.0.0: {} @@ -3107,6 +3104,8 @@ snapshots: uc.micro@2.1.0: {} + uhyphen@0.2.0: {} + unicorn-magic@0.3.0: {} unpipe@1.0.0: {} From 3c1f8948e55204f5ccbbc80aa0d04511bef3b425 Mon Sep 17 00:00:00 2001 From: Gusted Date: Thu, 9 Jul 2026 15:46:01 +0200 Subject: [PATCH 52/66] Blue navbar (#833) Part of the identity. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/833 Reviewed-by: Robert Wolff --- assets/css/codeberg-docs.css | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/assets/css/codeberg-docs.css b/assets/css/codeberg-docs.css index bbe2a4c..b431e9a 100644 --- a/assets/css/codeberg-docs.css +++ b/assets/css/codeberg-docs.css @@ -20,6 +20,19 @@ --admonition-icon-dimension: 20px; --pagefind-ui-text: var(--bs-link-color) !important; + + --color-nav-bg: #2185d0; +} + +.sidebar, +.navbar-brand { + --bs-sidebar-brand-color: var(--bs-white); + --bs-navbar-brand-color: var(--bs-white); +} + +.btn-close { + filter: var(--bs-btn-close-white-filter); + --bs-btn-close-opacity: 1; } .content :not(img, pre) { @@ -218,6 +231,7 @@ a.show-on-focus:focus { .docs-navbar { min-height: 55px; border-bottom: var(--bs-border-width) solid var(--bs-content-border-color); + background-color: var(--color-nav-bg); } .filter-docs { @@ -238,11 +252,6 @@ a.show-on-focus:focus { color: hsla(var(--bs-emphasis-color-hsl), 0.9); } -[data-bs-theme='light'] .sidebar-brand img, -[data-bs-theme='light'] .navbar-brand img { - content: url(https://design.codeberg.org/logo-kit/icon.svg); -} - .alert-heading { margin-bottom: 0.5rem; } From 1fb1c234f44b62b5ee0f51d823a316a229d7879d Mon Sep 17 00:00:00 2001 From: mahlzahn Date: Thu, 9 Jul 2026 19:07:03 +0200 Subject: [PATCH 53/66] fix(ci): temporary workaround for preview deletion (#834) Related: Codeberg/Documentation#818, git-pages/git-pages-cli#44 May be reverted once the upstream issue is fixed. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/834 Reviewed-by: Gusted --- .woodpecker/delete-preview.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.woodpecker/delete-preview.yaml b/.woodpecker/delete-preview.yaml index 18ab5dc..7d2cd10 100644 --- a/.woodpecker/delete-preview.yaml +++ b/.woodpecker/delete-preview.yaml @@ -2,6 +2,11 @@ when: - event: pull_request_closed steps: + create-empty-dir: + image: alpine + commands: + - mkdir _empty + delete-preview: image: codeberg.org/gedankenstuecke/git-pages-woodpecker-plugin@sha256:5257561a95054104f7499838817f3b447049a1edc14e87b99156b1302e0bce36 settings: @@ -9,7 +14,8 @@ steps: PATH: pull_${CI_COMMIT_PULL_REQUEST} TOKEN: from_secret: surge_forge_token - DELETE: true + UPLOAD_DIR: _empty + depends_on: create-empty-dir comment: image: mcs94/gitea-comment@sha256:f1a06366bfa34ff7594f369ebf81cbadd2d4410b7d51c9aa59c0c0264aa5fbd9 From c5873b5010710c78cbe693c7101c3c0b07ceecb4 Mon Sep 17 00:00:00 2001 From: mahlzahn Date: Thu, 9 Jul 2026 20:46:50 +0200 Subject: [PATCH 54/66] fix: make linters happy (#835) Missed in !834 Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/835 --- .woodpecker/delete-preview.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/delete-preview.yaml b/.woodpecker/delete-preview.yaml index 7d2cd10..3fd48f6 100644 --- a/.woodpecker/delete-preview.yaml +++ b/.woodpecker/delete-preview.yaml @@ -6,7 +6,7 @@ steps: image: alpine commands: - mkdir _empty - + delete-preview: image: codeberg.org/gedankenstuecke/git-pages-woodpecker-plugin@sha256:5257561a95054104f7499838817f3b447049a1edc14e87b99156b1302e0bce36 settings: From 7e937e2088d777a7c11f35f5451c8cc965edb40a Mon Sep 17 00:00:00 2001 From: Dave Anselmi Date: Thu, 9 Jul 2026 22:48:06 +0200 Subject: [PATCH 55/66] Fix incorrect license recommendation. Closes #468 (#746) See https://spdx.org/licenses/BSD-3-Clause-Clear.html and https://opensource.stackexchange.com/questions/7559/patent-rights-bsd-3-clause-clear-vs-bsd-3-clause. Co-authored-by: David Anselmi Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/746 Reviewed-by: Gusted --- content/getting-started/licensing.md | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/content/getting-started/licensing.md b/content/getting-started/licensing.md index 085b973..4594d88 100644 --- a/content/getting-started/licensing.md +++ b/content/getting-started/licensing.md @@ -47,7 +47,7 @@ project to remain small (e.g. less than 300 lines)? - Yes --> we recommend using the **LGPL-3.0-or-later** license - Yes --> Do you want to be able to sue users of your code for [patent infringement](#patent-usage) implemented in the code? - No --> We recommend using the **Apache-2.0** license - - Yes --> We recommend using the **MIT** license + - Yes --> We recommend using the **BSD 3-Clause Clear** license ## Correctly applying a license @@ -74,8 +74,9 @@ One of the major distinctions between licenses is between: the code include contractual law, but that is rarely used for software licenses. 2. Licenses which permit to close the source, i.e. temporarily-open licenses. - These licenses are usually known as permissive licenses. The MIT license or the Apache license belong to this category. - The term "permissive" often causes confusion, because it sounds fair and good to inexperienced people. + These licenses are usually known as permissive licenses. The MIT license, the BSD license, or the Apache license belong to + this category. + The term "permissive" often causes confusion, because it sounds fair and good to unexperienced people. People who contribute to the development of a program released with a permissive license must be aware that the program could become proprietary at any time. For example, when a company hires the original team of developers. @@ -100,17 +101,11 @@ limited versions (crippleware), advertising-supported software (e.g. antivirus), ### Patent usage -Some permissive/temporarily-open licenses like the MIT license do not contain a patent provision granting the users the -right to use their patents. -For example, the code might be licensed under the MIT license, but implements an algorithm which is protected by a patent. -In this case, the license might allow to copy, modify and distribute the code but at the same time does not guarantee -the right to use the patented algorithm. -It is a common argument in favour of the MIT license to claim that no public lawsuit has ever been conducted yet. -Still, the threat to be sued remains, and it can be used to exert pressure. Some, if not most, license disputes moreover -are settled even [before reaching the court](https://www.gnu.org/philosophy/enforcing-gpl.en.html) and could therefore -leave no trace. -Even Google [avoided the use of the MIT license when developing Android](https://source.android.com/setup/start/licenses), -presumably because of the missing patent provision. +Some permissive/temporarily-open licenses like the Apache-2.0 license contain a patent provision explicitly granting the +users the right to use their patents. Some, like the BSD 3-Clause Clear license explicitly do not grant the right to use +their patents. And some, like the MIT license, do not mention patents, making it arguable that they [implicitly grant](https://opensource.com/article/18/3/patent-grant-mit-license) +patent rights, or that they [do not](https://web.archive.org/web/20190312190935/http://stlr.org/2018/10/15/the-truth-about-oss-frand-by-all-indications-compatible-models-in-standards-settings/). +We recommend that you use a license with a clear statement so your users know your specific intent. For further information on "patents and free software", head over to [this Wikipedia article](https://en.wikipedia.org/wiki/Software_patents_and_free_software). From f350065a74f1accc694810d7a9129f43bb779319 Mon Sep 17 00:00:00 2001 From: crystal Date: Fri, 10 Jul 2026 19:50:03 +0200 Subject: [PATCH 56/66] codeberg.page zone is now signed (#836) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/836 Reviewed-by: Gusted --- content/codeberg-pages/using-custom-domain.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md index 9cb8cb3..590a8c3 100644 --- a/content/codeberg-pages/using-custom-domain.md +++ b/content/codeberg-pages/using-custom-domain.md @@ -70,11 +70,9 @@ In the end, it should look like this: -{% admonition "Warning" %} +{% admonition "info" "Notice" %} -The `codeberg.page` zone is not currently DNSSEC signed, which may cause unexpected behavior with your domain if your domain's zone is signed and a client is using a DNSSEC validating resolver. - -If you have DNSSEC enabled, you should use A/AAAA records for now. +DNSSEC has now been enabled for `codeberg.page`, try using a CNAME record if your zone is signed! {% endadmonition %} From a973f58c317e27bdbb902530c33093a0b30e0cbc Mon Sep 17 00:00:00 2001 From: crystal Date: Sun, 12 Jul 2026 01:23:29 +0200 Subject: [PATCH 57/66] DNSSEC clarifications (#837) Missed a spot in #836 because DNSSEC was spelled weird. Also moved the useful link to the DNSSEC verification tool to more relevant secions. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/837 Reviewed-by: Gusted --- content/codeberg-pages/using-custom-domain.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md index 590a8c3..c4b4678 100644 --- a/content/codeberg-pages/using-custom-domain.md +++ b/content/codeberg-pages/using-custom-domain.md @@ -30,9 +30,6 @@ This means you need to add two extra CAA records. The first record has a value of `letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/292520050;validationmethods=tls-alpn-01,http-01`. The second record has a value of `letsencrypt.org;accounturi=https://acme-staging-v02.api.letsencrypt.org/acme/acct/272029763;validationmethods=tls-alpn-01,http-01`. -If you're using [DNSSec](https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions) on your custom domain, you might run into TLS certificate issues because `codeberg.page` doesn't use DNSSec at the moment. -In this case you must add `A` / `AAAA` / `TXT` records for all domains instead of `CNAME` records. You can use [this tool](https://dnssec-analyzer.verisignlabs.com) to verify your setup. - {% endadmonition %} _We assume for the following description, that you want to serve your website with and without www in front. @@ -72,7 +69,7 @@ In the end, it should look like this: {% admonition "info" "Notice" %} -DNSSEC has now been enabled for `codeberg.page`, try using a CNAME record if your zone is signed! +DNSSEC has now been enabled for `codeberg.page`, try using a CNAME record if your zone is signed! You can verify that your DNSSEC setup works properly using [this tool](https://dnssec-analyzer.verisignlabs.com). {% endadmonition %} @@ -111,7 +108,7 @@ In this case, some DNS providers support an ALIAS record, which will work instea This type of record is not supported in conjunction with DNSSEC signed zones, which may cause unexpected behavior with your domain if your domain's zone is signed and a client is using a DNSSEC validating resolver. -If you have DNSSEC enabled, you should use A/AAAA records for now. +If you have DNSSEC enabled, you should use A/AAAA records for now. You can verify that your DNSSEC setup works properly using [this tool](https://dnssec-analyzer.verisignlabs.com). {% endadmonition %} From 963a352dc7a503ff276d848143031a8f6ccf5086 Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Sun, 12 Jul 2026 02:14:26 +0200 Subject: [PATCH 58/66] chore(deps): lock file maintenance (#776) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/776 Reviewed-by: Gusted --- pnpm-lock.yaml | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4e7ebbe..8972b65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -653,8 +653,8 @@ packages: resolution: {integrity: sha512-vp42956Ax06WwaaheYEqEOgXZ3VKJxgccZ0gJL0HpyiupkIS9RVJFo5eDU1BPeQAOqz+cclndZg4DCqG1sJReQ==} engines: {node: ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - clear-module@4.1.2: - resolution: {integrity: sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==} + clear-module@4.1.3: + resolution: {integrity: sha512-XdLrg7BnbXKntyrbs2dNjDN9CVoTQ+WV0i7jT5/r9ahzAaSDSzC9e2OVZB/QVwbxBb1/1AeObzjlxsYk5HFvww==} engines: {node: '>=8'} color-convert@2.0.1: @@ -1414,8 +1414,8 @@ packages: semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true @@ -1484,8 +1484,8 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} to-regex-range@5.0.1: @@ -1538,8 +1538,8 @@ packages: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true @@ -1649,9 +1649,9 @@ snapshots: please-upgrade-node: 3.2.0 posthtml: 0.16.7 posthtml-match-helper: 2.0.3(posthtml@0.16.7) - semver: 7.7.4 + semver: 7.8.5 slugify: 1.6.9 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 transitivePeerDependencies: - bufferutil - supports-color @@ -2144,7 +2144,7 @@ snapshots: dependencies: ansi-colors: 4.1.3 - clear-module@4.1.2: + clear-module@4.1.3: dependencies: parent-module: 2.0.0 resolve-from: 5.0.0 @@ -2185,7 +2185,7 @@ snapshots: '@cspell/cspell-types': 9.8.0 comment-json: 4.6.2 smol-toml: 1.6.1 - yaml: 2.8.3 + yaml: 2.9.0 cspell-dictionary@9.8.0: dependencies: @@ -2228,7 +2228,7 @@ snapshots: '@cspell/rpc': 9.8.0 '@cspell/strong-weak-map': 9.8.0 '@cspell/url': 9.8.0 - clear-module: 4.1.2 + clear-module: 4.1.3 cspell-config-lib: 9.8.0 cspell-dictionary: 9.8.0 cspell-glob: 9.8.0 @@ -2268,8 +2268,8 @@ snapshots: cspell-lib: 9.8.0 fast-json-stable-stringify: 2.1.0 flatted: 3.4.2 - semver: 7.7.4 - tinyglobby: 0.2.15 + semver: 7.8.5 + tinyglobby: 0.2.17 css-select@5.2.2: dependencies: @@ -3005,7 +3005,7 @@ snapshots: semver-compare@1.0.0: {} - semver@7.7.4: {} + semver@7.8.5: {} send@1.2.0: dependencies: @@ -3029,7 +3029,7 @@ snapshots: dependencies: color: 4.2.3 detect-libc: 2.1.2 - semver: 7.7.4 + semver: 7.8.5 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 '@img/sharp-darwin-x64': 0.33.5 @@ -3088,7 +3088,7 @@ snapshots: strip-json-comments@3.1.1: {} - tinyglobby@0.2.15: + tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 @@ -3120,4 +3120,4 @@ snapshots: xdg-basedir@5.1.0: {} - yaml@2.8.3: {} + yaml@2.9.0: {} From 7f3958fe8058a311a523a94bd36b9b3285056eea Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Sun, 12 Jul 2026 03:01:07 +0200 Subject: [PATCH 59/66] chore(deps): update dependency pagefind to v1.5.2 (#840) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/840 --- package.json | 2 +- pnpm-lock.yaml | 67 ++++++++++++++++++++++++++++---------------------- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index 96a928b..099cbce 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "markdown-it": "14.2.0", "markdown-it-anchor": "9.2.0", "markdownlint-cli2": "0.20.0", - "pagefind": "1.4.0", + "pagefind": "1.5.2", "prettier": "3.8.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8972b65..4b23952 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,8 +48,8 @@ importers: specifier: 0.20.0 version: 0.20.0 pagefind: - specifier: 1.4.0 - version: 1.4.0 + specifier: 1.5.2 + version: 1.5.2 prettier: specifier: 3.8.1 version: 3.8.1 @@ -484,33 +484,38 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@pagefind/darwin-arm64@1.4.0': - resolution: {integrity: sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==} + '@pagefind/darwin-arm64@1.5.2': + resolution: {integrity: sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==} cpu: [arm64] os: [darwin] - '@pagefind/darwin-x64@1.4.0': - resolution: {integrity: sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==} + '@pagefind/darwin-x64@1.5.2': + resolution: {integrity: sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw==} cpu: [x64] os: [darwin] - '@pagefind/freebsd-x64@1.4.0': - resolution: {integrity: sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==} + '@pagefind/freebsd-x64@1.5.2': + resolution: {integrity: sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA==} cpu: [x64] os: [freebsd] - '@pagefind/linux-arm64@1.4.0': - resolution: {integrity: sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==} + '@pagefind/linux-arm64@1.5.2': + resolution: {integrity: sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw==} cpu: [arm64] os: [linux] - '@pagefind/linux-x64@1.4.0': - resolution: {integrity: sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==} + '@pagefind/linux-x64@1.5.2': + resolution: {integrity: sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA==} cpu: [x64] os: [linux] - '@pagefind/windows-x64@1.4.0': - resolution: {integrity: sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==} + '@pagefind/windows-arm64@1.5.2': + resolution: {integrity: sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g==} + cpu: [arm64] + os: [win32] + + '@pagefind/windows-x64@1.5.2': + resolution: {integrity: sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg==} cpu: [x64] os: [win32] @@ -1295,8 +1300,8 @@ packages: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} - pagefind@1.4.0: - resolution: {integrity: sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==} + pagefind@1.5.2: + resolution: {integrity: sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==} hasBin: true parent-module@1.0.1: @@ -1997,22 +2002,25 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@pagefind/darwin-arm64@1.4.0': + '@pagefind/darwin-arm64@1.5.2': optional: true - '@pagefind/darwin-x64@1.4.0': + '@pagefind/darwin-x64@1.5.2': optional: true - '@pagefind/freebsd-x64@1.4.0': + '@pagefind/freebsd-x64@1.5.2': optional: true - '@pagefind/linux-arm64@1.4.0': + '@pagefind/linux-arm64@1.5.2': optional: true - '@pagefind/linux-x64@1.4.0': + '@pagefind/linux-x64@1.5.2': optional: true - '@pagefind/windows-x64@1.4.0': + '@pagefind/windows-arm64@1.5.2': + optional: true + + '@pagefind/windows-x64@1.5.2': optional: true '@rgrove/parse-xml@4.2.0': {} @@ -2895,14 +2903,15 @@ snapshots: dependencies: p-finally: 1.0.0 - pagefind@1.4.0: + pagefind@1.5.2: optionalDependencies: - '@pagefind/darwin-arm64': 1.4.0 - '@pagefind/darwin-x64': 1.4.0 - '@pagefind/freebsd-x64': 1.4.0 - '@pagefind/linux-arm64': 1.4.0 - '@pagefind/linux-x64': 1.4.0 - '@pagefind/windows-x64': 1.4.0 + '@pagefind/darwin-arm64': 1.5.2 + '@pagefind/darwin-x64': 1.5.2 + '@pagefind/freebsd-x64': 1.5.2 + '@pagefind/linux-arm64': 1.5.2 + '@pagefind/linux-x64': 1.5.2 + '@pagefind/windows-arm64': 1.5.2 + '@pagefind/windows-x64': 1.5.2 parent-module@1.0.1: dependencies: From a8f296562d99eb2af69121f68e4bb33a24c001c2 Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Mon, 13 Jul 2026 00:45:22 +0200 Subject: [PATCH 60/66] chore(deps): update dependency prettier to v3.9.4 (#841) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/841 Reviewed-by: Gusted --- .woodpecker/lint.yaml | 2 +- content/markdown/introduction-to-markdown.md | 1 + content/markdown/using-links.md | 4 ++++ package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.woodpecker/lint.yaml b/.woodpecker/lint.yaml index e9ea1df..2a4c928 100644 --- a/.woodpecker/lint.yaml +++ b/.woodpecker/lint.yaml @@ -22,7 +22,7 @@ steps: depends_on: [] settings: # renovate: datasource=npm depName=prettier - version: 3.8.1 + version: 3.9.4 links: image: lycheeverse/lychee:0.22.0 diff --git a/content/markdown/introduction-to-markdown.md b/content/markdown/introduction-to-markdown.md index ff8db4f..75f3801 100644 --- a/content/markdown/introduction-to-markdown.md +++ b/content/markdown/introduction-to-markdown.md @@ -121,6 +121,7 @@ To add footnotes use the syntax `[^name]` inline, and define them with:
```markdown Text with a footnote.[^1] + [^1]: A footnote. ``` diff --git a/content/markdown/using-links.md b/content/markdown/using-links.md index 274eb47..85f3e68 100644 --- a/content/markdown/using-links.md +++ b/content/markdown/using-links.md @@ -78,17 +78,21 @@ This is rendered as: The link parser used in Forgejo can also work with the _double square brackets_ syntax in issues and other places where markdown is rendered: + ```markdown [[https://codeberg.org/]] ``` + will get rendered as . You can also give a link description, as with the regular markdown syntax: + ```markdown [[This is a link to Codeberg|https://codeberg.org]] ``` + will be rendered as [This is a link to Codeberg](https://codeberg.org). diff --git a/package.json b/package.json index 099cbce..c4f1a58 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,6 @@ "markdown-it-anchor": "9.2.0", "markdownlint-cli2": "0.20.0", "pagefind": "1.5.2", - "prettier": "3.8.1" + "prettier": "3.9.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b23952..cca68c3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,8 +51,8 @@ importers: specifier: 1.5.2 version: 1.5.2 prettier: - specifier: 3.8.1 - version: 3.8.1 + specifier: 3.9.4 + version: 3.9.4 packages: @@ -1362,8 +1362,8 @@ packages: resolution: {integrity: sha512-7Hc+IvlQ7hlaIfQFZnxlRl0jnpWq2qwibORBhQYIb0QbNtuicc5ZxvKkVT71HJ4Py1wSZ/3VR1r8LfkCtoCzhw==} engines: {node: '>=12.0.0'} - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} + prettier@3.9.4: + resolution: {integrity: sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==} engines: {node: '>=14'} hasBin: true @@ -2970,7 +2970,7 @@ snapshots: posthtml-parser: 0.11.0 posthtml-render: 3.0.0 - prettier@3.8.1: {} + prettier@3.9.4: {} prismjs@1.30.0: {} From 5f75a85132bb564501f0e727b4cf40ea26ffb300 Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Mon, 13 Jul 2026 05:54:52 +0200 Subject: [PATCH 61/66] chore(deps): update dependency @11ty/eleventy to v3.1.6 (#844) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@11ty/eleventy](https://www.11ty.dev/) ([source](https://github.com/11ty/eleventy)) | [`3.1.5` → `3.1.6`](https://renovatebot.com/diffs/npm/@11ty%2feleventy/3.1.5/3.1.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@11ty%2feleventy/3.1.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@11ty%2feleventy/3.1.5/3.1.6?slim=true) | --- ### Release Notes
11ty/eleventy (@​11ty/eleventy) ### [`v3.1.6`](https://github.com/11ty/buildawesome/releases/tag/v3.1.6): Eleventy v3.1.6: Everybody wants to do Maintenance [Compare Source](https://github.com/11ty/eleventy/compare/v3.1.5...v3.1.6) - Fixes Node 26 `module.register` deprecation warning shown in console [#​4283](https://github.com/11ty/eleventy/issues/4283) (fixed in v4 alphas in [#​4271](https://github.com/11ty/eleventy/issues/4271)) - Minor dependency upgrades for `npm audit` fixes - `liquidjs` upgrade from `1.25.0` to `1.27.0` - `markdown-it` upgrade from `14.1.1` to `14.2.0` - Adds Node 26 to CI for v3 branch - Opt out of package manager cache for GitHub Actions CI release workflow (hardening security) **Milestone**: **Full Changelog**:
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - Only on Sunday and Saturday (`* * * * 0,6`) - Automerge - Between 12:00 AM and 03:59 AM (`* 0-3 * * *`) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). Co-authored-by: woodpecker-bot Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/844 --- package.json | 2 +- pnpm-lock.yaml | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index c4f1a58..dd8dcbf 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "lint-spellcheck": "cspell lint --no-progress --gitignore '{**,.*}/{*,.*}'" }, "devDependencies": { - "@11ty/eleventy": "3.1.5", + "@11ty/eleventy": "3.1.6", "@11ty/eleventy-img": "6.0.4", "@11ty/eleventy-navigation": "1.0.5", "@11ty/eleventy-plugin-syntaxhighlight": "5.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cca68c3..e3f43f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: devDependencies: '@11ty/eleventy': - specifier: 3.1.5 - version: 3.1.5 + specifier: 3.1.6 + version: 3.1.6 '@11ty/eleventy-img': specifier: 6.0.4 version: 6.0.4 @@ -89,8 +89,8 @@ packages: resolution: {integrity: sha512-6QE+duqSQ0GY9rENXYb4iPR4AYGdrFpqnmi59tFp9VrleOl0QSh8VlBr2yd6dlhkdtj7904poZW5PvGr9cMiJQ==} engines: {node: '>=18'} - '@11ty/eleventy@3.1.5': - resolution: {integrity: sha512-hZ0g6MwZyRxCqXsPm82gIM304LraKbUz3ZmezOSjsqxttZG6cHTib3Qq8QkESJoKwnr+yX1eyfOkPC5/mEgZnQ==} + '@11ty/eleventy@3.1.6': + resolution: {integrity: sha512-ZlSiR1PLdS2lv7TelBgWAhcvMiLNZkPBlLEb+lh7kGYZ+Mk0bo9qcYgVsewvw9W7Em0RH3wd01h5fAstNDh0zA==} engines: {node: '>=18'} hasBin: true @@ -1095,8 +1095,8 @@ packages: linkify-it@5.0.2: resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} - liquidjs@10.25.7: - resolution: {integrity: sha512-rPCjJLiD4eDhQjvv964AeXFC+HbeYBbZrd7Z82Q6hqv1lX7G+5w4SJcKLn9CAAAwHI4aS3dTdo083UB79K3pDA==} + liquidjs@10.27.2: + resolution: {integrity: sha512-kvknfAEtOHjHkAAv7GxLEJh8ghpMQm3Fc4uWVyF7hERSTsSRsdC7saWs0p5aDG7GDcWsu5o+T4232O+8KZO55w==} engines: {node: '>=16'} hasBin: true @@ -1622,7 +1622,7 @@ snapshots: '@11ty/eleventy-utils@2.0.7': {} - '@11ty/eleventy@3.1.5': + '@11ty/eleventy@3.1.6': dependencies: '@11ty/dependency-tree': 4.0.2 '@11ty/dependency-tree-esm': 2.0.4 @@ -1643,7 +1643,7 @@ snapshots: iso-639-1: 3.1.5 js-yaml: 4.1.1 kleur: 4.1.5 - liquidjs: 10.25.7 + liquidjs: 10.27.2 luxon: 3.7.2 markdown-it: 14.2.0 minimist: 1.2.8 @@ -2598,7 +2598,7 @@ snapshots: dependencies: uc.micro: 2.1.0 - liquidjs@10.25.7: + liquidjs@10.27.2: dependencies: commander: 10.0.1 From 039a9117a8ad5636b67bd294acd3908071b6f28b Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Mon, 13 Jul 2026 05:55:33 +0200 Subject: [PATCH 62/66] chore(deps): update pipelinecomponents/yamllint docker tag to v0.35.13 (#845) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/845 Reviewed-by: Gusted --- .woodpecker/lint.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/lint.yaml b/.woodpecker/lint.yaml index 2a4c928..c170a7a 100644 --- a/.woodpecker/lint.yaml +++ b/.woodpecker/lint.yaml @@ -31,7 +31,7 @@ steps: - lychee -v -t 40 --root-dir $(pwd)/content --fallback-extensions md . lint-yaml: - image: pipelinecomponents/yamllint:0.35.9 + image: pipelinecomponents/yamllint:0.35.13 depends_on: [] commands: - yamllint --strict . From 0c940b7eca71d2c32a68a0cbfb519dea8f7db329 Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Mon, 13 Jul 2026 05:56:36 +0200 Subject: [PATCH 63/66] chore(deps): update font awesome to v7.3.0 (#846) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/846 Reviewed-by: Gusted --- package.json | 4 ++-- pnpm-lock.yaml | 30 +++++++++++++++--------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index dd8dcbf..86bfb15 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "@11ty/eleventy-img": "6.0.4", "@11ty/eleventy-navigation": "1.0.5", "@11ty/eleventy-plugin-syntaxhighlight": "5.0.2", - "@fortawesome/fontawesome-svg-core": "7.1.0", - "@fortawesome/free-solid-svg-icons": "7.1.0", + "@fortawesome/fontawesome-svg-core": "7.3.0", + "@fortawesome/free-solid-svg-icons": "7.3.0", "@toycode/markdown-it-class": "1.2.4", "@uncenter/eleventy-plugin-toc": "2.1.2", "cspell": "9.8.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e3f43f6..1635463 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,11 +21,11 @@ importers: specifier: 5.0.2 version: 5.0.2 '@fortawesome/fontawesome-svg-core': - specifier: 7.1.0 - version: 7.1.0 + specifier: 7.3.0 + version: 7.3.0 '@fortawesome/free-solid-svg-icons': - specifier: 7.1.0 - version: 7.1.0 + specifier: 7.3.0 + version: 7.3.0 '@toycode/markdown-it-class': specifier: 1.2.4 version: 1.2.4 @@ -343,16 +343,16 @@ packages: '@emnapi/runtime@1.7.0': resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==} - '@fortawesome/fontawesome-common-types@7.1.0': - resolution: {integrity: sha512-l/BQM7fYntsCI//du+6sEnHOP6a74UixFyOYUyz2DLMXKx+6DEhfR3F2NYGE45XH1JJuIamacb4IZs9S0ZOWLA==} + '@fortawesome/fontawesome-common-types@7.3.0': + resolution: {integrity: sha512-X/vND0Y1l9fVJ9O79UgtZnXSpz4aNF3bXlDxiJAEAm6kgeSftp9wjjBPgqzazJV8YlmxfRoeXNfSCJ48sf/Hhw==} engines: {node: '>=6'} - '@fortawesome/fontawesome-svg-core@7.1.0': - resolution: {integrity: sha512-fNxRUk1KhjSbnbuBxlWSnBLKLBNun52ZBTcs22H/xEEzM6Ap81ZFTQ4bZBxVQGQgVY0xugKGoRcCbaKjLQ3XZA==} + '@fortawesome/fontawesome-svg-core@7.3.0': + resolution: {integrity: sha512-MFbTNLDWkLJwbozDvHOZ7hwyDjQcBMBattlcOQ6ZmV5YD9bBrqdl1rNtmVjQ/lzqveXXX3sMz2Ew6fAgXoxmkw==} engines: {node: '>=6'} - '@fortawesome/free-solid-svg-icons@7.1.0': - resolution: {integrity: sha512-Udu3K7SzAo9N013qt7qmm22/wo2hADdheXtBfxFTecp+ogsc0caQNRKEb7pkvvagUGOpG9wJC1ViH6WXs8oXIA==} + '@fortawesome/free-solid-svg-icons@7.3.0': + resolution: {integrity: sha512-YxI/CuwWeI3nPIoYU//vkDS+3ige/67DPZ6XwMATpYEFESzO9L8zfJOKllGRgIlpT/uebrZCcvAzp3peD7GmTw==} engines: {node: '>=6'} '@img/sharp-darwin-arm64@0.33.5': @@ -1905,15 +1905,15 @@ snapshots: tslib: 2.8.1 optional: true - '@fortawesome/fontawesome-common-types@7.1.0': {} + '@fortawesome/fontawesome-common-types@7.3.0': {} - '@fortawesome/fontawesome-svg-core@7.1.0': + '@fortawesome/fontawesome-svg-core@7.3.0': dependencies: - '@fortawesome/fontawesome-common-types': 7.1.0 + '@fortawesome/fontawesome-common-types': 7.3.0 - '@fortawesome/free-solid-svg-icons@7.1.0': + '@fortawesome/free-solid-svg-icons@7.3.0': dependencies: - '@fortawesome/fontawesome-common-types': 7.1.0 + '@fortawesome/fontawesome-common-types': 7.3.0 '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: From b66be2d324a811185b1a9eab4bad703cd32af227 Mon Sep 17 00:00:00 2001 From: Dependency bot Date: Mon, 13 Jul 2026 05:56:48 +0200 Subject: [PATCH 64/66] chore(deps): update dependency cspell to v10 (#847) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/847 Reviewed-by: Gusted --- package.json | 2 +- pnpm-lock.yaml | 333 ++++++++++++++++++++++--------------------------- 2 files changed, 147 insertions(+), 188 deletions(-) diff --git a/package.json b/package.json index 86bfb15..edf6b7a 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@fortawesome/free-solid-svg-icons": "7.3.0", "@toycode/markdown-it-class": "1.2.4", "@uncenter/eleventy-plugin-toc": "2.1.2", - "cspell": "9.8.0", + "cspell": "10.0.1", "halfmoon": "2.0.2", "markdown-it": "14.2.0", "markdown-it-anchor": "9.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1635463..7188df7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,8 +33,8 @@ importers: specifier: 2.1.2 version: 2.1.2 cspell: - specifier: 9.8.0 - version: 9.8.0 + specifier: 10.0.1 + version: 10.0.1 halfmoon: specifier: 2.0.2 version: 2.0.2 @@ -106,37 +106,37 @@ packages: resolution: {integrity: sha512-oI7m8pa7/IAU/3lqRU9vjBbs20iKFo7x+1K9kT3aVira6scc1X9MjBdgLCHzLJeJ7iB6wydioA+kr9/qPnvmlQ==} engines: {node: '>=18'} - '@cspell/cspell-bundled-dicts@9.8.0': - resolution: {integrity: sha512-MpXFpVyBPfJQ1YuVotljqUaGf6lWuf+fuWBBgs0PHFYTSjRPWuIxviAaCDnup/CJLLH60xQL4IlcQe4TOjzljw==} - engines: {node: '>=20'} + '@cspell/cspell-bundled-dicts@10.0.1': + resolution: {integrity: sha512-WvkSDNX4Uyyj/ZgbPO6L38iFNMfK1EqsH1FteRiI2qLz6QZMXRFrIt12OqiWIplzZDDaVpBH9FCJOPJll0fjCQ==} + engines: {node: '>=22.18.0'} - '@cspell/cspell-json-reporter@9.8.0': - resolution: {integrity: sha512-nqUaSo9T7l8KrE22gc7ZIs+zvP7ak1i7JqGdRs8sGvh2Ijqj43qYQLePgb1b/vm8a1bavnc51m+vf05hpd3g3Q==} - engines: {node: '>=20'} + '@cspell/cspell-json-reporter@10.0.1': + resolution: {integrity: sha512-/nes1RGILec3WCBcoMOd0byNTBtnJuPaVz/+ZzqYkLtY7x58VMcBG5kyP6hPyN8cIwjRADE/SR43gwdXuqk/FA==} + engines: {node: '>=22.18.0'} - '@cspell/cspell-performance-monitor@9.8.0': - resolution: {integrity: sha512-IsrXYzn23yJICIQ915ACdf+2lNEcFNTu5BIQt3khHOsGVvZ9/AZYpu9Dk825vUyZG7RHg2Oi6dYNiJtULG4ouQ==} - engines: {node: '>=20.18'} + '@cspell/cspell-performance-monitor@10.0.1': + resolution: {integrity: sha512-9tVcHXwRnbazUv4WSG0h3MqV4+LgmLNgSALAQUflPPW0EMxTf7C4Dmv9cgxJyCEQrdnVKCr58nPPaahhz9LJUg==} + engines: {node: '>=22.18.0'} - '@cspell/cspell-pipe@9.8.0': - resolution: {integrity: sha512-ISEUD8PHYkd2Ktafc6hFfIXdGKYUvthA09NbwwZsWmOqYyk4wWKHZKqyyxD+BcrFwOyMOJcD8OEvIjkRQp2SJw==} - engines: {node: '>=20'} + '@cspell/cspell-pipe@10.0.1': + resolution: {integrity: sha512-HPeXMD9AZ3V/qPkvQaPcak+C7cJ2z7JTHN8smd6J8L2aThLRky2cHc2OyeaHPSHB7WA47b4z2n5u5nawZhv5VQ==} + engines: {node: '>=22.18.0'} - '@cspell/cspell-resolver@9.8.0': - resolution: {integrity: sha512-PZJj56BZpKfMxOzWkyt7b+aIXObe+8Ku/zLI4xDXPSuQPENbHBFHfPIZx68CyGEkanKxZ1ewKVx/FT1FUy+wDA==} - engines: {node: '>=20'} + '@cspell/cspell-resolver@10.0.1': + resolution: {integrity: sha512-PIzkZHD1fGUQx1XteK2d1iQ0Mzq/maYcoB4jkvAiiR6WqP3MWYNKFdI9z+R5pOq5KgMfW+5Ig1q0oSR6h8irlA==} + engines: {node: '>=22.18.0'} - '@cspell/cspell-service-bus@9.8.0': - resolution: {integrity: sha512-P45sd2nqwcqhulBBbQnZB/JNcobecTrP4Ky3vmEq0cprsvavc+ZoHF9U2Ql5ghMSUzjrF2n1aNzZ8cH4IlsnKg==} - engines: {node: '>=20'} + '@cspell/cspell-service-bus@10.0.1': + resolution: {integrity: sha512-y6NcIGP2IdXaBL4PVH8vxsr7K27wzz3Ech87UtUtrDSXAiVEOvXgAIknEOUVp59rTlUE8Rn4IRURC6f/hgMyfw==} + engines: {node: '>=22.18.0'} - '@cspell/cspell-types@9.8.0': - resolution: {integrity: sha512-7Ge4UD6SCA49Tcc3+GTlz3Xn4cqVUAXtDO0u9IeHvJgkN3Me2Rw2GB/CtGmhKST3YeEeZMX7ww09TdHMUJlehw==} - engines: {node: '>=20'} + '@cspell/cspell-types@10.0.1': + resolution: {integrity: sha512-kLgLShnWADDVreKC63pBrWkcvxgZzFIfO34Jhx/SWfuOIA3cD8AXT+HjyuLfoGJ7mUb58hv2kUziKzEy4INb1w==} + engines: {node: '>=22.18.0'} - '@cspell/cspell-worker@9.8.0': - resolution: {integrity: sha512-W8FLdE3MXPLbWtAXciILQhk9CHd6Mt+HRjZHM8m+dwE1Bc2TAjUai8kIxsdhHUq58p7gYY2ekr5sg1uYOUgTAA==} - engines: {node: '>=20.18'} + '@cspell/cspell-worker@10.0.1': + resolution: {integrity: sha512-L2bJerfuYOls2wEknm8FmynLtj/G7O4UqX9I/HznRggEW6i2yZIxagDetpVDNowpyavNHJ3SJtUFiyMiZc16Sw==} + engines: {node: '>=22.18.0'} '@cspell/dict-ada@4.1.1': resolution: {integrity: sha512-E+0YW9RhZod/9Qy2gxfNZiHJjCYFlCdI69br1eviQQWB8yOTJX0JHXLs79kOYhSW0kINPVUdvddEBe6Lu6CjGQ==} @@ -320,25 +320,25 @@ packages: '@cspell/dict-zig@1.0.0': resolution: {integrity: sha512-XibBIxBlVosU06+M6uHWkFeT0/pW5WajDRYdXG2CgHnq85b0TI/Ks0FuBJykmsgi2CAD3Qtx8UHFEtl/DSFnAQ==} - '@cspell/dynamic-import@9.8.0': - resolution: {integrity: sha512-wMgb32lqG9g6lCipUQsY9Bk5idXPDz7wvzOqEsU1M2HmNYmdE1wfPoRpfQfsVL965iG3+6h8QLr2+8FKpweFEQ==} - engines: {node: '>=20'} + '@cspell/dynamic-import@10.0.1': + resolution: {integrity: sha512-mP1gdq00aIcH8HxNMqnH11X6BKxLcneDtFgl/ecjIKnaGKwi44m8AndP5Kr4ODaYdl8UUw9O3dJh7KaQXnLHZQ==} + engines: {node: '>=22.18.0'} - '@cspell/filetypes@9.8.0': - resolution: {integrity: sha512-yHvtYn9qt6zykua77sNzTcf7HrG/dpo/+2pCMGSrfSrQypSNT6FUFvMS04W7kwhP86U1GkCjppNykXuoH3cqug==} - engines: {node: '>=20'} + '@cspell/filetypes@10.0.1': + resolution: {integrity: sha512-Z5S35giU5IW49fBBq6BksUbE8PC4IYPfaKuwl5Nl9jkf/OkAKiBmCowKX45NzRUQInwK/GSqqIUifrNeI6LdLw==} + engines: {node: '>=22.18.0'} - '@cspell/rpc@9.8.0': - resolution: {integrity: sha512-t4lHEa254W+PePXNQ1noW7QhQxz/mhsJ9X8LEt0ILzBbPWCJzN+JuaM7EiolIPiwxtfxpMwKx9482kt4eTja7A==} - engines: {node: '>=20.18'} + '@cspell/rpc@10.0.1': + resolution: {integrity: sha512-axSRKv3zEAmBm66iD/FV/MPmE4/Yf7c3PZiwTW894Yd3iEhtn3KPKeTrqQ2/tDrhB1Z2qTsap/Hue0MK4o5WXg==} + engines: {node: '>=22.18.0'} - '@cspell/strong-weak-map@9.8.0': - resolution: {integrity: sha512-HocksAqZ0JcWA5oWO7TIlOCftXVGkPGzbeFlCRRrjJpZmYQH+4NdeEXyQC6T89NGocp45td/CgyBcAaFMy1N9w==} - engines: {node: '>=20'} + '@cspell/strong-weak-map@10.0.1': + resolution: {integrity: sha512-lenN1DVyPi8nJLSMSJJ670ddTjyiruLueuSZO1qLcxBqUhgxDt/mALu9N/1m6WdOVcg6m/5cLiZVg2KOo2UzRw==} + engines: {node: '>=22.18.0'} - '@cspell/url@9.8.0': - resolution: {integrity: sha512-LY1lFiZLTQF/ma1ilfKmRmFmEOw0RfYhyl0UMhY7/d93b+kiDMhxP/9Qir4+5LyiRncaE3++ZcWno9Hya+ssRg==} - engines: {node: '>=20'} + '@cspell/url@10.0.1': + resolution: {integrity: sha512-abYYgI29wJhWIfWTYrYuzRYDcHQUQ1N5ylnhxYn1NJnIQMqUWGLbDmt12JABtZ+R6h6UNatQrS7rhP86etvJyQ==} + engines: {node: '>=22.18.0'} '@emnapi/runtime@1.7.0': resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==} @@ -629,10 +629,6 @@ packages: resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==} engines: {node: '>= 10.16.0'} - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - chalk-template@1.1.2: resolution: {integrity: sha512-2bxTP2yUH7AJj/VAXfcA+4IcWGdQ87HwBANLt5XxGTeomo8yG0y95N1um9i5StvhT/Bl0/2cARA5v1PpPXUxUA==} engines: {node: '>=14.16'} @@ -658,10 +654,6 @@ packages: resolution: {integrity: sha512-vp42956Ax06WwaaheYEqEOgXZ3VKJxgccZ0gJL0HpyiupkIS9RVJFo5eDU1BPeQAOqz+cclndZg4DCqG1sJReQ==} engines: {node: ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - clear-module@4.1.3: - resolution: {integrity: sha512-XdLrg7BnbXKntyrbs2dNjDN9CVoTQ+WV0i7jT5/r9ahzAaSDSzC9e2OVZB/QVwbxBb1/1AeObzjlxsYk5HFvww==} - engines: {node: '>=8'} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -692,52 +684,52 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - comment-json@4.6.2: - resolution: {integrity: sha512-R2rze/hDX30uul4NZoIZ76ImSJLFxn/1/ZxtKC1L77y2X1k+yYu1joKbAtMA2Fg3hZrTOiw0I5mwVMo0cf250w==} + comment-json@5.0.0: + resolution: {integrity: sha512-uiqLcOiVDJtBP8WGkZHEP+FZIhTzP1dxvn59EfoYUi9gqupjrBWVQkO2atDrbnKPwLeotFYDsuNb26uBMqB+hw==} engines: {node: '>= 6'} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - cspell-config-lib@9.8.0: - resolution: {integrity: sha512-gMJBAgYPvvO+uDFLUcGWaTu6/e+r8mm4GD4rQfWa/yV4F9fj+yOYLIMZqLWRvT1moHZX1FxyVvUbJcmZ1gfebg==} - engines: {node: '>=20'} + cspell-config-lib@10.0.1: + resolution: {integrity: sha512-hMpo/0j6k7pbiqrLDOLJKD2IGP9XwhjKf2miiM6p84Xeo4nyuFZaxxDCQ68R851HSYFrrdltgpoipMbj1h2Tnw==} + engines: {node: '>=22.18.0'} - cspell-dictionary@9.8.0: - resolution: {integrity: sha512-QW4hdkWcrxZA1QNqi26U0S/U3/V+tKCm7JaaesEJW2F6Ao+23AbHVwidyAVtXaEhGkn6PxB+epKrrAa6nE69qA==} - engines: {node: '>=20'} + cspell-dictionary@10.0.1: + resolution: {integrity: sha512-3cZ659vgsZWkzGQJR/sNqGDVt/OnvTSieLKI76V++4t1bHJfochb9ZrrwsuMsb1VPGiyqClUP1/O6WrefF/FVg==} + engines: {node: '>=22.18.0'} - cspell-gitignore@9.8.0: - resolution: {integrity: sha512-SDUa1DmSfT20+JH7XtyzcEL9KfurneoR/XbmlrtPQZP/LUHXh3yz4x/0vFIkEFXNWdSckY0QdWTz8DaxClCf4Q==} - engines: {node: '>=20'} + cspell-gitignore@10.0.1: + resolution: {integrity: sha512-wN23U61Mx6qPJN3CesOmBU9vnbJ0jQm/ylK0iaVui3CcnO7Zzl5qLu5mPHUzGQGm8yso6qjyxqo16Ho7LpZGOQ==} + engines: {node: '>=22.18.0'} hasBin: true - cspell-glob@9.8.0: - resolution: {integrity: sha512-Uvj/iHXs+jpsJyIEnhEoJTWXb1GVyZ9T05L5JFtZfsQNXrh8SRDQPscjxbg4okKr63N7WevfioQum/snHNYvmw==} - engines: {node: '>=20'} + cspell-glob@10.0.1: + resolution: {integrity: sha512-7bII9J3aSSpZDwhx7w+zfQXbMxHZQ3be0ilUp5bHrsjz6o07v/NqOHMGcwKdPn1sw2dxDz9sv057xE5pqXnSdw==} + engines: {node: '>=22.18.0'} - cspell-grammar@9.8.0: - resolution: {integrity: sha512-01XMq2vhPS0Gvxnfed9uvOwH+3cXddHYxW0PwCE+SZdcC6TN8yM6glByuLt1qFustAmQVE5GSr7uAY9o4pZQRg==} - engines: {node: '>=20'} + cspell-grammar@10.0.1: + resolution: {integrity: sha512-xC9AFYmaI9wsO//a7S5tdDGKGJVD5UEEsTg+Up2fi7lPfXIryisYmV6tePNL1SEg0idYss4ja8LUZ3Mib09BjQ==} + engines: {node: '>=22.18.0'} hasBin: true - cspell-io@9.8.0: - resolution: {integrity: sha512-JINaEWQEzR4f2upwdZOFcft+nBvQgizJfrOLszxG3p+BIzljnGklqE/nUtLFZpBu0oMJvuM/Fd+GsWor0yP7Xw==} - engines: {node: '>=20'} + cspell-io@10.0.1: + resolution: {integrity: sha512-8C2ka07faxflnaqEBO3pektS21XViE/SEHT7F5ZD1ou7FyMR5u3xawTBJSczClfsxLt/WYeztBYrpmGAjmjksw==} + engines: {node: '>=22.18.0'} - cspell-lib@9.8.0: - resolution: {integrity: sha512-G2TtPcye5QE5ev3YgWq42UOJLpTZ6naO/47oIm+jmeSYbgnbcOSThnEE7uMycx+TTNOz/vJVFpZmQyt0bWCftw==} - engines: {node: '>=20'} + cspell-lib@10.0.1: + resolution: {integrity: sha512-RpsIPiLzc4/YMW8BMRKpyJ81x439qjYWcqgdKeXnMkbKM88J9PexzutfFf/4v97v96KzfNitEzMpbI0uj8OeUg==} + engines: {node: '>=22.18.0'} - cspell-trie-lib@9.8.0: - resolution: {integrity: sha512-GXIyqxya8QLp6SjKsAN9w3apvt1Ww7GKcZvTBaP76OfLoyb1QC6unwmObY2cZs1manCntGwHrgU6vFNuXnTzpw==} - engines: {node: '>=20'} + cspell-trie-lib@10.0.1: + resolution: {integrity: sha512-BFvhalSkRQFjKrZ//FKK7fRGrZFpifnxB5AwCkzsIsBZqicsfafcQ1xP21qpb0QqyV/IomjNgviG+tRJs+0rMw==} + engines: {node: '>=22.18.0'} peerDependencies: - '@cspell/cspell-types': 9.8.0 + '@cspell/cspell-types': 10.0.1 - cspell@9.8.0: - resolution: {integrity: sha512-qL0VErMSn8BDxaPxcV+9uenffgjPS+5Jfz+m4rCsvYjzLwr7AaaJBWWSV2UiAe/4cturae8n8qzxiGnbbazkRw==} - engines: {node: '>=20.18'} + cspell@10.0.1: + resolution: {integrity: sha512-Gg6w/flT3fKfl3la62hfTnhtNnDQ+9mU7kUhVqw/axl/Ms4oENw0oJMkWFIoj4f6nL/SDPz7KcPXd2XbkKFNmQ==} + engines: {node: '>=22.18.0'} hasBin: true css-select@5.2.2: @@ -996,9 +988,9 @@ packages: engines: {node: '>=16.x'} hasBin: true - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} + import-fresh@4.0.0: + resolution: {integrity: sha512-Fpi660c7VPDM3fPKYovStd9IP1CPOikf6v/dGxJJMmHPcwYQIMJ4W7kO1avBYEpMqkCh+Dx3Ln6H7VYqgztLjw==} + engines: {node: '>=22.15'} import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} @@ -1304,14 +1296,6 @@ packages: resolution: {integrity: sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==} hasBin: true - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parent-module@2.0.0: - resolution: {integrity: sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==} - engines: {node: '>=8'} - parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} @@ -1392,10 +1376,6 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -1678,7 +1658,7 @@ snapshots: minimatch: 3.1.5 slash: 3.0.0 - '@cspell/cspell-bundled-dicts@9.8.0': + '@cspell/cspell-bundled-dicts@10.0.1': dependencies: '@cspell/dict-ada': 4.1.1 '@cspell/dict-al': 1.1.1 @@ -1740,25 +1720,25 @@ snapshots: '@cspell/dict-vue': 3.0.5 '@cspell/dict-zig': 1.0.0 - '@cspell/cspell-json-reporter@9.8.0': + '@cspell/cspell-json-reporter@10.0.1': dependencies: - '@cspell/cspell-types': 9.8.0 + '@cspell/cspell-types': 10.0.1 - '@cspell/cspell-performance-monitor@9.8.0': {} + '@cspell/cspell-performance-monitor@10.0.1': {} - '@cspell/cspell-pipe@9.8.0': {} + '@cspell/cspell-pipe@10.0.1': {} - '@cspell/cspell-resolver@9.8.0': + '@cspell/cspell-resolver@10.0.1': dependencies: global-directory: 5.0.0 - '@cspell/cspell-service-bus@9.8.0': {} + '@cspell/cspell-service-bus@10.0.1': {} - '@cspell/cspell-types@9.8.0': {} + '@cspell/cspell-types@10.0.1': {} - '@cspell/cspell-worker@9.8.0': + '@cspell/cspell-worker@10.0.1': dependencies: - cspell-lib: 9.8.0 + cspell-lib: 10.0.1 '@cspell/dict-ada@4.1.1': {} @@ -1887,18 +1867,18 @@ snapshots: '@cspell/dict-zig@1.0.0': {} - '@cspell/dynamic-import@9.8.0': + '@cspell/dynamic-import@10.0.1': dependencies: - '@cspell/url': 9.8.0 + '@cspell/url': 10.0.1 import-meta-resolve: 4.2.0 - '@cspell/filetypes@9.8.0': {} + '@cspell/filetypes@10.0.1': {} - '@cspell/rpc@9.8.0': {} + '@cspell/rpc@10.0.1': {} - '@cspell/strong-weak-map@9.8.0': {} + '@cspell/strong-weak-map@10.0.1': {} - '@cspell/url@9.8.0': {} + '@cspell/url@10.0.1': {} '@emnapi/runtime@1.7.0': dependencies: @@ -2122,8 +2102,6 @@ snapshots: dependencies: duplexer: 0.1.1 - callsites@3.1.0: {} - chalk-template@1.1.2: dependencies: chalk: 5.6.2 @@ -2152,11 +2130,6 @@ snapshots: dependencies: ansi-colors: 4.1.3 - clear-module@4.1.3: - dependencies: - parent-module: 2.0.0 - resolve-from: 5.0.0 - color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -2181,99 +2154,98 @@ snapshots: commander@8.3.0: {} - comment-json@4.6.2: + comment-json@5.0.0: dependencies: array-timsort: 1.0.3 esprima: 4.0.1 concat-map@0.0.1: {} - cspell-config-lib@9.8.0: + cspell-config-lib@10.0.1: dependencies: - '@cspell/cspell-types': 9.8.0 - comment-json: 4.6.2 + '@cspell/cspell-types': 10.0.1 + comment-json: 5.0.0 smol-toml: 1.6.1 yaml: 2.9.0 - cspell-dictionary@9.8.0: + cspell-dictionary@10.0.1: dependencies: - '@cspell/cspell-performance-monitor': 9.8.0 - '@cspell/cspell-pipe': 9.8.0 - '@cspell/cspell-types': 9.8.0 - cspell-trie-lib: 9.8.0(@cspell/cspell-types@9.8.0) + '@cspell/cspell-performance-monitor': 10.0.1 + '@cspell/cspell-pipe': 10.0.1 + '@cspell/cspell-types': 10.0.1 + cspell-trie-lib: 10.0.1(@cspell/cspell-types@10.0.1) fast-equals: 6.0.0 - cspell-gitignore@9.8.0: + cspell-gitignore@10.0.1: dependencies: - '@cspell/url': 9.8.0 - cspell-glob: 9.8.0 - cspell-io: 9.8.0 + '@cspell/url': 10.0.1 + cspell-glob: 10.0.1 + cspell-io: 10.0.1 - cspell-glob@9.8.0: + cspell-glob@10.0.1: dependencies: - '@cspell/url': 9.8.0 + '@cspell/url': 10.0.1 picomatch: 4.0.4 - cspell-grammar@9.8.0: + cspell-grammar@10.0.1: dependencies: - '@cspell/cspell-pipe': 9.8.0 - '@cspell/cspell-types': 9.8.0 + '@cspell/cspell-pipe': 10.0.1 + '@cspell/cspell-types': 10.0.1 - cspell-io@9.8.0: + cspell-io@10.0.1: dependencies: - '@cspell/cspell-service-bus': 9.8.0 - '@cspell/url': 9.8.0 + '@cspell/cspell-service-bus': 10.0.1 + '@cspell/url': 10.0.1 - cspell-lib@9.8.0: + cspell-lib@10.0.1: dependencies: - '@cspell/cspell-bundled-dicts': 9.8.0 - '@cspell/cspell-performance-monitor': 9.8.0 - '@cspell/cspell-pipe': 9.8.0 - '@cspell/cspell-resolver': 9.8.0 - '@cspell/cspell-types': 9.8.0 - '@cspell/dynamic-import': 9.8.0 - '@cspell/filetypes': 9.8.0 - '@cspell/rpc': 9.8.0 - '@cspell/strong-weak-map': 9.8.0 - '@cspell/url': 9.8.0 - clear-module: 4.1.3 - cspell-config-lib: 9.8.0 - cspell-dictionary: 9.8.0 - cspell-glob: 9.8.0 - cspell-grammar: 9.8.0 - cspell-io: 9.8.0 - cspell-trie-lib: 9.8.0(@cspell/cspell-types@9.8.0) + '@cspell/cspell-bundled-dicts': 10.0.1 + '@cspell/cspell-performance-monitor': 10.0.1 + '@cspell/cspell-pipe': 10.0.1 + '@cspell/cspell-resolver': 10.0.1 + '@cspell/cspell-types': 10.0.1 + '@cspell/dynamic-import': 10.0.1 + '@cspell/filetypes': 10.0.1 + '@cspell/rpc': 10.0.1 + '@cspell/strong-weak-map': 10.0.1 + '@cspell/url': 10.0.1 + cspell-config-lib: 10.0.1 + cspell-dictionary: 10.0.1 + cspell-glob: 10.0.1 + cspell-grammar: 10.0.1 + cspell-io: 10.0.1 + cspell-trie-lib: 10.0.1(@cspell/cspell-types@10.0.1) env-paths: 4.0.0 gensequence: 8.0.8 - import-fresh: 3.3.1 + import-fresh: 4.0.0 resolve-from: 5.0.0 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 xdg-basedir: 5.1.0 - cspell-trie-lib@9.8.0(@cspell/cspell-types@9.8.0): + cspell-trie-lib@10.0.1(@cspell/cspell-types@10.0.1): dependencies: - '@cspell/cspell-types': 9.8.0 + '@cspell/cspell-types': 10.0.1 - cspell@9.8.0: + cspell@10.0.1: dependencies: - '@cspell/cspell-json-reporter': 9.8.0 - '@cspell/cspell-performance-monitor': 9.8.0 - '@cspell/cspell-pipe': 9.8.0 - '@cspell/cspell-types': 9.8.0 - '@cspell/cspell-worker': 9.8.0 - '@cspell/dynamic-import': 9.8.0 - '@cspell/url': 9.8.0 + '@cspell/cspell-json-reporter': 10.0.1 + '@cspell/cspell-performance-monitor': 10.0.1 + '@cspell/cspell-pipe': 10.0.1 + '@cspell/cspell-types': 10.0.1 + '@cspell/cspell-worker': 10.0.1 + '@cspell/dynamic-import': 10.0.1 + '@cspell/url': 10.0.1 ansi-regex: 6.2.2 chalk: 5.6.2 chalk-template: 1.1.2 commander: 14.0.3 - cspell-config-lib: 9.8.0 - cspell-dictionary: 9.8.0 - cspell-gitignore: 9.8.0 - cspell-glob: 9.8.0 - cspell-io: 9.8.0 - cspell-lib: 9.8.0 + cspell-config-lib: 10.0.1 + cspell-dictionary: 10.0.1 + cspell-gitignore: 10.0.1 + cspell-glob: 10.0.1 + cspell-io: 10.0.1 + cspell-lib: 10.0.1 fast-json-stable-stringify: 2.1.0 flatted: 3.4.2 semver: 7.8.5 @@ -2521,10 +2493,7 @@ snapshots: dependencies: queue: 6.0.2 - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 + import-fresh@4.0.0: {} import-meta-resolve@4.2.0: {} @@ -2913,14 +2882,6 @@ snapshots: '@pagefind/windows-arm64': 1.5.2 '@pagefind/windows-x64': 1.5.2 - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parent-module@2.0.0: - dependencies: - callsites: 3.1.0 - parse-entities@4.0.2: dependencies: '@types/unist': 2.0.11 @@ -2990,8 +2951,6 @@ snapshots: dependencies: picomatch: 2.3.1 - resolve-from@4.0.0: {} - resolve-from@5.0.0: {} reusify@1.1.0: {} From bbf5e3ab104b9a9f4ffb056ed0dd16f6d35d9af9 Mon Sep 17 00:00:00 2001 From: Arbor Date: Mon, 13 Jul 2026 10:40:26 +0200 Subject: [PATCH 65/66] docs: Add tip for first time SSH connection (#843) This adds a tip for users connecting to Codeberg for the first time that they may need to verify the host fingerprint. Closes: Codeberg/Documentation#832 Co-authored-by: arbor Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/843 Reviewed-by: Robert Wolff --- content/security/ssh-key.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/content/security/ssh-key.md b/content/security/ssh-key.md index 0d6acf8..cd2bb78 100644 --- a/content/security/ssh-key.md +++ b/content/security/ssh-key.md @@ -133,6 +133,14 @@ Do this simple test: ssh -T git@codeberg.org ``` +
+{% admonition "tip" %} + +If this is your first time connecting to Codeberg, you may be warned by your SSH client that the authenticity of the host cannot be established. +In this case, you will need to [verify the host fingerprint](/security/ssh-fingerprint/). + +{% endadmonition %} + The output should look like this: ```text From b061608a890732166c4899516b1bbe2c821d40b5 Mon Sep 17 00:00:00 2001 From: crystal Date: Wed, 15 Jul 2026 14:43:57 +0200 Subject: [PATCH 66/66] use example.org for pages documentation (#838) We should consistently use a safe example domain that is [reserved by IANA](https://www.iana.org/help/example-domains) Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/838 Reviewed-by: Robert Wolff --- content/codeberg-pages/using-custom-domain.md | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/content/codeberg-pages/using-custom-domain.md b/content/codeberg-pages/using-custom-domain.md index c4b4678..0560078 100644 --- a/content/codeberg-pages/using-custom-domain.md +++ b/content/codeberg-pages/using-custom-domain.md @@ -32,18 +32,23 @@ The second record has a value of `letsencrypt.org;accounturi=https://acme-stagin {% endadmonition %} -_We assume for the following description, that you want to serve your website with and without www in front. -If you are on a subdomain already (like myproject.yourdomain.com), you can skip the `www.yourdomain.com` CNAME entry._ +{% admonition "info" "Notice" %} + +Throughout this document, the domain `example.org` is used as a placeholder for your own domain. Please ensure you replace any literal instances of `example.org` with the domain that you've purchased to ensure the proper setup procedure. + +We provide context-appropriate examples for both the apex domain, and the `www` subdomain commonly used for websites. If you wish to use a different subdomain, replace the `www` in the following examples with the hostname of your desired subdomain. If you wish to use the apex domain (that is, the bare domain without any `www.` in front), we recommend additionally setting up a redirect on the `www` subdomain (or vice versa) to ensure compatibility with all browsers and devices. + +{% endadmonition %} {% admonition "Warning" %} -When setting up DNS records with many registrars, any domain added to the `Domain` or `Host` option is automatically +When setting up DNS records with many providers, any domain added to the `Domain` or `Host` option is automatically appended onto the domain the records are being made for. -For example, if your domain is `example.com`, entering `www` will mean the record refers to `www.example.com`. +For example, if your domain is `example.org`, entering `www` will mean the record refers to `www.example.org`. -Therefore, in this guide, you may need to replace references to just your domain name (e.g. `example.com`) with `@` and -`anything.example.com` (i.e. any subdomain) with just `anything`. +Therefore, in this guide, you may need to replace references to just your domain name (e.g. `example.org`) with `@` and +`anything.example.org` (i.e. any subdomain) with just `anything`, depending on your DNS provider. {% endadmonition %} @@ -60,7 +65,7 @@ In the end, it should look like this: - www.yourdomain.com + www.example.org CNAME codeberg.page. @@ -92,12 +97,12 @@ In this case, some DNS providers support an ALIAS record, which will work instea - yourdomain.com + example.org ALIAS codeberg.page - www.yourdomain.com + www.example.org ALIAS codeberg.page @@ -126,12 +131,12 @@ so keep an eye on Codeberg updates to check. - yourdomain.com + example.org A 217.197.84.141 - yourdomain.com + example.org AAAA 2a0a:4580:103f:c0de::2 @@ -171,12 +176,12 @@ set a TXT record on the `_git-pages-repository` subdomain of your domain with th - _git-pages-repository.yourdomain.com + _git-pages-repository.example.org TXT https://codeberg.org/username/repository.git - _git-pages-repository.www.yourdomain.com + _git-pages-repository.www.example.org TXT https://codeberg.org/username/repository.git @@ -194,12 +199,12 @@ set a TXT record on the `_git-pages-forge-allowlist` subdomain of your domain wi - _git-pages-forge-allowlist.yourdomain.com + _git-pages-forge-allowlist.example.org TXT https://codeberg.org/username/repository.git - _git-pages-forge-allowlist.www.yourdomain.com + _git-pages-forge-allowlist.www.example.org TXT https://codeberg.org/username/repository.git @@ -223,11 +228,11 @@ you should choose one of them to be the ‘canonical’ URL, add a [`_redirects` file](/codeberg-pages/advanced-usage/) to your site redirecting from one version to the other, and deploy your website to both domains. (I.e. set up two separate webhooks, or use two separate deploy actions.) -For example, to redirect people from www.yourdomain.com to yourdomain.com, +For example, to redirect people from www.example.org to example.org, use this `_redirects` file: ``` -//www.yourdomain.com/* https://yourdomain.com/:splat 302! +//www.example.org/* https://example.org/:splat 302! ``` For the redirect to work,