hannah-eee/forjero-docs huggingface dataset:
File: docs\contributor\DCO.md

---
title: Developer Certificate of Origin (DCO)
license: 'CC-BY-SA-4.0'
---

Contributions to Forgejo, in all the repositories in the [Forgejo organization](https://codeberg.org/forgejo) are accepted provided the author agrees to the following Developer Certificate of Origin (DCO).

```
By making a contribution to Forgejo, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the Free Software license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate Free Software
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same Free Software license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the Free Software license(s) involved.
```
File: docs\contributor\DISCUSSIONS.md

---
title: Bugs, features and discussions
license: 'CC-BY-SA-4.0'
---

The [Forgejo issue tracker](https://codeberg.org/forgejo/forgejo/issues) is where **bugs** should be reported and **features** requested.

Dedicated repositories in the [Forgejo organization](https://codeberg.org/forgejo) cover areas such as:

- the [website](https://codeberg.org/forgejo/website)
- the [governance](https://codeberg.org/forgejo/governance)
- the [Code of Conduct](https://codeberg.org/forgejo/code-of-conduct)
- the [sustainability and funding](https://codeberg.org/forgejo/sustainability).

Other discussions regarding all **non technical aspects** of Forgejo, happen in a dedicated [issue tracker](https://codeberg.org/forgejo/discussions/issues) and in the [matrix chatroom](https://matrix.to/#/#forgejo-chat:matrix.org).

## Security

The [security team](https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#security) takes care of security vulnerabilities. It handles sensitive security-related issues reported to [security@forgejo.org](mailto:security@forgejo.org) using [encryption](https://keyoxide.org/security@forgejo.org).

The security team also keeps the content of the [security.txt](https://codeberg.org/forgejo/website/src/branch/main/public/.well-known/security.txt) file up to date.

The private GPG key for `security@forgejo.org` is shared among all members of the security team and not stored online.
File: docs\contributor\GOVERNANCE.md

---
title: Governance
license: 'CC-BY-SA-4.0'
---

## Codeberg e.V. custodian of the domains

The Forgejo [domains](https://codeberg.org/forgejo/meta/issues/41) are owned by the democratic non-profit dedicated to Free Software [Codeberg e.V.](https://codeberg.org/Codeberg/org/src/branch/main/en/bylaws.md). Forgejo is therefore ultimately under the control of Codeberg e.V. and its governance. However, although Codeberg e.V. is committed to use and host Forgejo, it is expected that Forgejo defines its own governance, in a way that is compatible with the Codeberg e.V. governance.

## Forgejo Governance

Forgejo was bootstrapped in November 2022 and defines [its governance](https://codeberg.org/forgejo/governance/src/branch/main/README.md) in a [dedicated repository](https://codeberg.org/forgejo/governance).
File: docs\contributor\index.md

---
title: 'Forgejo Contributor Guide'
---

This area is targeted to people who want to improve Forgejo and adjust it to
their needs.

We encourage you to [read our warm welcome first](./welcome/), then get involved.

- For everyone involved
  - [Code of Conduct](./coc/)
  - [Bugs, enhancement ideas and development roadmap](https://codeberg.org/forgejo/forgejo/issues)
  - [General discussions related to Forgejo (tips & tricks, news, ideas, questions)](./discussions/)
  - [Governance](./governance/)
  - [Sustainability and funding repository](https://codeberg.org/forgejo/sustainability)
- Translations
  - [Localization](./localization/) - for translators
  - [English strings](./localization/english/) - for developers or people improving strings
  - [Weblate admin duties](./localization/admin/) - for Forgejo contributors
- For UI/UX designers and user researchers
  - [Design repository](https://codeberg.org/forgejo/design/)
  - [User Research repository](https://codeberg.org/forgejo/user-research/)
- For developers
  - [Compiling from source](./from-source/)
  - [Testing](./testing/)
  - [Development environment](./development-environment/)
  - [Finding what to work on](./finding-what-to-work-on/)
  - [Interface customization](./customization/)
  - [Web browser support](./browser-support/)
  - [Architecture overview](./architecture/)
    - [Federation Architecture](https://codeberg.org/forgejo-contrib/federation/src/branch/main/architecture/federation-architecture.md)
    - [Federation Architectural Decision Records](https://codeberg.org/forgejo-contrib/federation/src/branch/main/architecture/adr)
    - [Repository Migration](./repository-migration/)
  - [Threat Analysis](./threat-analysis/)
  - [Developer Certificate of Origin (DCO)](./dco/)
  - [code.forgejo.org](./code-forgejo-org/)
  - [next.forgejo.org kubernetes infrastructure](https://code.forgejo.org/infrastructure/k8s)
  - [static pages](./static-pages/)
  - [Forgejo Runner implementation notes](https://code.forgejo.org/forgejo/runner/#hacking)
  - [Dependency management](./dependencies/)
- For maintainers
  - [Hardware infrastructure](https://code.forgejo.org/infrastructure/documentation#readme)
  - [Release management](./release/)
  - [Managing dependencies between repositories](./repositories-dependencies/)
  - [Secrets](./secrets/)

When you've contributed something, you'll have learned new things in the process.
Why not share those things with other contributors?
Creating a personal article is an option to do so.
Once you do, create a Pull Request on this page and extend the list.

- [Forgejo Action Notification Development](https://chris-besch.com/articles/forgejo_actions_notification) (including exhaustive development and testing setup) by Christopher Besch on 20th November 2025
- [The History of Forgejo's Pub-Sub Pattern](https://chris-besch.com/articles/forgejo_pub_sub_pattern_history) by Christopher Besch on 30th October 2025
File: docs\contributor\repository-migration.md

---
title: Repository Migration
license: 'CC-BY-SA-4.0'
---

## Basic sequence for getting comments from github

The [sequence diagram](https://en.wikipedia.org/wiki/Sequence_diagram) below shows the different go packages in the top and bottom boxes and their functions within. You can find the relevant code mostly in the services/migrations folder. The arrows are to be read in sequence from top to bottom, while the description of each arrow shows the function and its simplified signature. Reference this diagram if you need a basic overview of how the packages in services/migrations are connected and how PR/Issue comments are filtered based on migration options.

![diagram](../_mermaid/_images/developer/repo-migration-issue-index-1.svg)

The diagram was made with mermaid.js, you can find the documentation for it [here](https://mermaid.js.org/syntax/sequenceDiagram.html#loops).
File: docs\contributor\SECRETS.md

---
title: Secrets
license: 'CC-BY-SA-4.0'
---

All Forgejo credentials are shared among the [devops](https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#devops) team in a private repository with encrypted content.

## Get started

1. Make sure you have a GPG Key, or [create one](https://github.com/NicoHood/gpgit#12-key-generation)
2. Send someone else your public key and ask this person to add yourself as a recipient

```
# Commands for the other person
$ gpg --import public_key.asc
# The following command will open a prompt, with the available public keys.
# Choose the one you just added and all secrets will be re-encrypted with this new key.
$ gopass recipients add
```

3. [Install gopass](https://www.gopass.pw/#install)
   > :warning: When installing on Ubuntu or Debian you can either [download the deb package](https://github.com/gopasspw/gopass/tags), install manually or build from source or use our APT repository ([github comment](https://github.com/gopasspw/gopass/issues/1849#issuecomment-802789285) with more information).
4. Clone this repo using `gopass` (the name and email are for `git config`)

```
$ gopass clone git@codeberg.org:forgejo/gopass.git
```

5. Check the consistency of the gopass storage

```
$ gopass fsck
```

## Get a secret

Show the whole secret file:

```
$ gopass show ovh.com/manager
```

Copy the password in the clipboard:

```
$ gopass show -c ovh.com/manager
```

Copy the `user` part of the secret in the clipboard:

```
$ gopass show -c ovh.com/manager user
```

## Insert or edit a secret

```
$ gopass edit ovh.com/manager
```

In the editor, insert the password on the first line.
You may then add lines with a `key: value` syntax (`user: username` for instance).

## Debugging and manual git operations

The following command will show the location and status of the git repo (all git commands are available).

```
$ gopass git status
```
File: docs\contributor\static-pages.md

---
title: Static pages
license: 'CC-BY-SA-4.0'
---

LXC container dedicated to hosting static HTML pages.

## LXC container

See the [static-pages section in the infrastructure documentation](../infrastructure/).

## SSL on the LXC host

Each domain has a `/etc/nginx/sites-available/f3.forgefriends.forgejo.org` file similar to the following
on the host where the LXC container resides.

```nginx
server {
    listen 80;
    listen [::]:80;

    server_name f3.forgefriends.forgejo.org;

    location / {
        proxy_pass http://10.6.83.106:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
```

Obtain the certificate:

```sh
ln -sf /etc/nginx/sites-available/f3.forgefriends.forgejo.org /etc/nginx/sites-enabled/f3.forgefriends.forgejo.org
sudo certbot -n --agree-tos --email contact@forgejo.org -d f3.forgefriends.forgejo.org --nginx
```

## Creation in the LXC container

With the example of `f3.forgefriends.forgejo.org` and
`f3.forgefriends.org` serving the same content.

### login

From the LXC host:

```sh
lxc-helpers.sh lxc_container_run static-pages -- sudo --user $USER bash
```

### nginx

```
$ cat /etc/nginx/sites-enabled/f3.forgefriends.org
server {
        listen 80;
        listen [::]:80;

        server_name f3.forgefriends.org f3.forgefriends.forgejo.org;

        root /var/www/f3.forgefriends.org;

        location / {
                try_files $uri $uri/ =404;
        }
}
```

### clone

```sh
git clone https://code.forgejo.org/f3/html-documentation /var/www/f3.forgefriends.org
```

## Update in the LXC container

### Webhook

Create a `POST` webhook with the URL `https://f3.forgefriends.forgejo.org/.well-known/forgejo/f3.forgefriends.org` on https://code.forgejo.org/f3/html-documentation. It is expected to fail with 404, the information will be extracted from the web server logs.

To verify that it works:

- `journalctl -f --unit static-pages`
- `Test delivery` at https://code.forgejo.org/f3/html-documentation/settings/hooks/4

### Service

#### git pull on change

```sh
$ cat /usr/local/bin/static-pages.sh
##!/bin/bash

sudo tail -f /var/log/nginx/access.log | sed --silent --regexp-extended --unbuffered --expression 's|.*.well-known/forgejo/([^ /]+) .*|\1|p' | while read server ; do
    d="/var/www/$server"
    if test -d "$d" ; then
        echo "update $server"
        cd "$d"
        git pull
    else
        echo "unknown server $server"
    fi
done
```

#### service

```sh
$ cat /etc/systemd/system/static-pages.service
[Unit]
Description=Static pages

[Service]
User=debian
ExecStart=/usr/local/bin/static-pages.sh

[Install]
WantedBy=multi-user.target
$ sudo systemctl enable static-pages
```
File: docs\contributor\welcome.md

---
title: 'Welcome to Forgejo'
license: 'CC-BY-SA-4.0'
---

Welcome to our project! We are looking forward to seeing you participate in our community.
Thank you so much for improving Forgejo within your means.

Forgejo consists of a diverse community,
and so far we have found a place for everyone and their unique skills,
no matter if they are in communication, management or technical.

Forgejo contributors are very motivated and aim at a very high software quality,
and we hope you'll find yourself inspired by the spirit in our community.
The standards might feel surprisingly high if you compare to some other free software projects of similar size.
Try to bring some patience and consider starting with small contributions to get used to the workflow.
Don't be afraid: We are here to help you in any situation,
and there are low-hanging fruits and easy tasks to get started with.

Some examples you might be surprised about:

- We perform [user research](https://codeberg.org/forgejo/user-research) and user testing.
- We try to apply a [design workflow](https://codeberg.org/forgejo/design/) prior to implementing feature requests (read about the [background](https://codeberg.org/forgejo/discussions/issues/178)).
- To reduce the long-term maintenance effort, we require that code changes bring a significant amount of testing.
- Changes can undergo a lot of review and iterations (not only code but also documentation, translations etc).

## Getting Started

We recommend to join the Matrix channels (see link in footer) and say hi.
The chats are very active and a good place to ask for help or get to know the community.

Depending on where you want to get involved with, check the [list of resources](../).
There might be subjects with less or incomplete onboarding information.
Don't hesitate to say hi and ask for more information,
especially if you want to contribute in a domain that has no clear getting-started procedure
(e.g. helping with project communication / socializing).

If you want to start developing for Forgejo,
we recommend you take a look at [good first issues](https://codeberg.org/forgejo/forgejo/issues/?labels=222666).
In the conversation, you will typically find some information about where to start and what is expected in the change.
Don't hesitate to reply to the issue, explain you'd like to get started or ask questions if any.
The maintainer who added the "good first issue" label will be happy to assist you on your way.

## Getting into the project

If you have fun contributing to Forgejo,
we invite you to consider yourself a part of the community.
Hang around in the chats, have fun with others and feel free to share your feedback, even on things you didn't yet contribute to.
We recommend you make yourself familiar with our [governance repository](https://codeberg.org/forgejo/governance)
and watch the activity for decisions you might want to participate in.
[Check out the teams](https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md)
and consider applying to those who match your interests.
File: docs\user\blame.md

---
title: 'Blame File View'
license: 'Apache-2.0'
origin_url: 'https://github.com/go-gitea/gitea/blob/e865de1e9d65dc09797d165a51c8e705d2a86030/docs/content/usage/blame.en-us.md'
---

Forgejo supports viewing the line-by-line revision history for a file, also known as blame view.
You can also use [`git blame`](https://git-scm.com/docs/git-blame) on the command line to view the revision history of lines within a file.

![Blame view of a file](../_images/user/blame/view.png)

1. Navigate to and open the file whose line history you want to view.
2. Click the `Blame` button in the file header bar.
3. The new view shows the line-by-line revision history for a file with author and commit information on the left side.
4. To navigate to an older commit, click the icon.

## Ignore commits in the blame view

All revisions specified in the `.git-blame-ignore-revs` file are hidden from the blame view.
This is especially useful to hide reformatting changes and keep the benefits of `git blame`.
Lines that were changed or added by an ignored commit will be blamed on the previous commit that changed that line or nearby lines.
The `.git-blame-ignore-revs` file must be located in the root directory of the repository.
For more information, like the file format, see [the `git blame --ignore-revs-file` documentation](https://git-scm.com/docs/git-blame#Documentation/git-blame.txt---ignore-revs-fileltfilegt).

### Bypassing `.git-blame-ignore-revs` in the blame view

If the blame view for a file shows a message about ignored revisions, you can see the normal blame view by appending the URL parameter `?bypass-blame-ignore=true`.
File: docs\user\email-settings.md

---
title: 'Email Settings'
license: 'CC-BY-SA-4.0'
origin_url: 'https://codeberg.org/Codeberg/Documentation/src/commit/85d333f48badb27f8e4371263db3354f70836dfd/content/getting-started/email-settings.md'
origin_author: 'Codeberg Docs Contributors'
origin_title: 'Email Settings'
---

By default, Forgejo will send notifications to your registered email addresses.

This section only concerns your Forgejo account and will not affect the commits you make outside the website.
If you don't know how to **configure your name and email in Git**, take a look at the ["Configuring Git" man page](https://git-scm.com/docs/git-config).

## Configuring all notifications

To change your notification preferences, go to your [Account Settings](https://codeberg.org/user/settings/account) or manually navigate to the settings page.

You can access it by clicking on the menu button “Profile and Settings...” in the top-right corner of Forgejo. From this dropdown, click on Settings, then click on the Account tab.

In the section “Manage Email Addresses”, you can select one of the following options from the drop-down menu for each email address that you have registered with Forgejo:

| Option                      | Effect                                                                                                 |
| :-------------------------- | :----------------------------------------------------------------------------------------------------- |
| Enable Email Notifications  | Enables all notifications, except about your own actions (default setting)                             |
| And Your Own Notifications  | Enables all notifications, _including notifications about your own actions_                            |
| Only Email on Mention       | Forgejo will only send an email to this address if your username is mentioned in an issue or a comment |
| Disable Email Notifications | Forgejo will not send any emails to this address                                                       |

When you're finished, press the button “Set Email Preference” to confirm your selection.

> **Note:**
> Disabling email notifications doesn't mean that you'll stop receiving important messages from the Forgejo organization.

## Issue notifications

As soon as you make a comment on an issue, you automatically subscribe to it. Unless you have disabled email notifications for all your email addresses, you will get an email for every change and comment on that issue.

You can check and modify your issue subscription status under the “Notifications” section on the menu on the right side of the issue screen.

## Watching repositories

When you watch a repository (by clicking on the “Watch” button in a repository), you will receive emails for every change (creation of issues, pull requests, comments, etc.) done in this repository.

To stop watching a repository, simply click on “Unwatch” in a repository.

To list all of your watched repositories, click on `/notifications/watching`. Alternatively, you can click the menu button “Profile and Settings...” in the top-right corner of Forgejo and click on "Subscriptions" in the dropdown.
File: docs\user\forgejo-next.md

---
title: Forgejo Next
license: 'CC-BY-SA-4.0'
---

https://next.forgejo.org, also known as Forgejo Next, is Forgejo's
official testing and demonstration instance. Everyone is encouraged to
use it to experiment with Forgejo, try out upcoming features, search for
bugs, or even casually host a project.

Please make sure you have a mirror or backup of any important data uploaded
to Forgejo Next! It won't be reset unless there is a need to, but this instance is
running potentially unstable code, so don't use it as your only storage for
irreplaceable valuable data.
File: docs\user\incoming.md

---
title: Comment on issues and pull requests via email
license: 'CC-BY-SA-4.0'
---

> **NOTE:** This feature is not enabled by default; the [`[email.incoming].ENABLED`](../../admin/config-cheat-sheet/) setting must be set.

When receiving a notification, it is possible to reply to the email instead of using the web interface. The content of the reply will be stripped of the quoted text (lines starting with a greater than `>`) and used as the content of the comment. The attachments from the reply will be added as attachments to the comment.

It will be taken into account when receiving a notification email about:

- A newly created issue
- A newly created pull request
- A comment added to a specific line of code in a pull request review
- A comment on an existing issue
- A comment on an existing pull request

> **NOTE:** The reply address contains a unique token to match the response with the issue or pull request and looks like this: `forgejo+ABCDE@example.com`. In some mail clients, such as Thunderbird, using this reply address may require using the `Reply List` button rather than the `Reply` button.