forgejo/forgejo
123
5.1k
Fork
You've already forked forgejo
876

[FEAT] Allow fine-grained control of packages permission #3577

Open
opened 2024年05月01日 06:17:05 +02:00 by proton-ab · 12 comments
Contributor
Copy link

Needs and benefits

Currently, packages are scoped to user or organization and inherit all permissions and visibility from them. As such, currently:

  • All packages within public organization are visible, even if they are attached to private repository
  • Every member of organization that is in a team with Write access to Packages unit can overwrite any package in organization, even if said package is attached to repository that they do not have access to.

Feature Description

I propose that we take some liberal inspiration from GitHub implementation of permissions for packages. Specifically, for team permissions (organization-specific) we would do the following:

  • Allow organization admins to change visibility of each package, with new packages defaulting to visibility of organization.
  • When package is linked to repository, automatically inherit visibility of repository as new default for this package (unless manually changed beforehand as above).
  • When package is linked to repository, only allow pushes from organization members within a team that have Write permission to "Packages" unit AND access to linked repository.
  • When package is linked to repository which has private visibility, only allow pulls from organization members within a team that have Read permission to "Packages" unit AND access to linked repository.
  • Allow teams to be configured on whether their members can push NEW packages to organization. This would work similarly to "Create repositories" option we already have there.

Following should be done on Actions side:

  • Allow organization admins/users to configure whether to grant Action tokens permission to push new packages to organization/user that is owner of repository under which Action is running.
  • Allow repository admin to configure whether to grant Action token full Write permissions to all packages that are linked to repository under which Action is running, regardless of package visibility configuration.

Screenshots

No response

### Needs and benefits Currently, packages are scoped to user or organization and inherit all permissions and visibility from them. As such, currently: - All packages within public organization are visible, even if they are attached to private repository - Every member of organization that is in a team with Write access to Packages unit can overwrite any package in organization, even if said package is attached to repository that they do not have access to. ### Feature Description I propose that we take some liberal inspiration from GitHub implementation of permissions for packages. Specifically, for team permissions (organization-specific) we would do the following: - Allow organization admins to change visibility of each package, with new packages defaulting to visibility of organization. - When package is linked to repository, automatically inherit visibility of repository as new default for this package (unless manually changed beforehand as above). - When package is linked to repository, only allow pushes from organization members within a team that have Write permission to "Packages" unit AND access to linked repository. - When package is linked to repository which has private visibility, only allow pulls from organization members within a team that have Read permission to "Packages" unit AND access to linked repository. - Allow teams to be configured on whether their members can push NEW packages to organization. This would work similarly to "Create repositories" option we already have there. Following should be done on Actions side: - Allow organization admins/users to configure whether to grant Action tokens permission to push new packages to organization/user that is owner of repository under which Action is running. - Allow repository admin to configure whether to grant Action token full Write permissions to all packages that are linked to repository under which Action is running, regardless of package visibility configuration. ### Screenshots _No response_
Contributor
Copy link

Seems to be related to #2699, where more discussion has already taken place.

Seems to be related to #2699, where more discussion has already taken place.

Also see #5388 which was closed

Also see #5388 which was closed

Scoping packages to the organization/user instead of the repository creates a mismatch between visibility and access that most users won’t expect.

In practice, many setups need a mix of public and private projects under the same org. With the current model, packages tied to private repositories can still become visible (or modifiable) based solely on org-level settings. This breaks the assumption that repository boundaries define access and can unintentionally expose internal artifacts or allow changes from users who shouldn’t have them.

From a UX standpoint, this is also non-obvious. Most users will assume packages follow repository visibility and won’t realize they need to manage a separate permission model. That increases the risk of accidental exposure or modification.

Aligning package scope with repositories (or making it explicitly configurable per package) would better match expectations and reduce both security and usability issues.

Scoping packages to the organization/user instead of the repository creates a mismatch between visibility and access that most users won’t expect. In practice, many setups need a mix of public and private projects under the same org. With the current model, packages tied to private repositories can still become visible (or modifiable) based solely on org-level settings. This breaks the assumption that repository boundaries define access and can unintentionally expose internal artifacts or allow changes from users who shouldn’t have them. From a UX standpoint, this is also non-obvious. Most users will assume packages follow repository visibility and won’t realize they need to manage a separate permission model. That increases the risk of accidental exposure or modification. Aligning package scope with repositories (or making it explicitly configurable per package) would better match expectations and reduce both security and usability issues.

Im keeping orgs private until I figure out what a good next step is. Either I use a private self-hosted reg or I create a second org. Im not liking either solution right now.

Granular control over package visibility would be a better solution.

Im keeping orgs private until I figure out what a good next step is. Either I use a private self-hosted reg or I create a second org. Im not liking either solution right now. Granular control over package visibility would be a better solution.

@ramones wrote in #3577 (comment):

Granular control over package visibility would be a better solution.

100%

I currently operate with a bit of paranoia because I prefer to have my orgs public. I’ve considered using other registries as well.

@ramones wrote in https://codeberg.org/forgejo/forgejo/issues/3577#issuecomment-14141249: > Granular control over package visibility would be a better solution. 100% I currently operate with a bit of paranoia because I prefer to have my orgs public. I’ve considered using other registries as well.

For the record, changing the visibility of packages is a feature Forgejo will accept (because there's no written opposition to it). The actions side of things likely needs more discussions as messing around with the permissions like that is a huge security undertaking to do that in safe and expected manner.

CC @ramones

For the record, changing the visibility of packages is a feature Forgejo will accept (because there's no written opposition to it). The actions side of things likely needs more discussions as messing around with the permissions like that is a huge security undertaking to do that in safe and expected manner. CC @ramones

@Gusted what's the best way to discuss this somewhere? I haven't contributed to forgejo before, so I'm a bit out of the loop. Is there a matrix/slack/discord?

@Gusted what's the best way to discuss this somewhere? I haven't contributed to forgejo before, so I'm a bit out of the loop. Is there a matrix/slack/discord?

@ramones The best place to discuss is in issues because they are asynchronous and allow us to go back to figure out why we ended up with a particular design. Here isn't a bad place. What is needed is a plan. Somebody has to dig into the topic and explore what's going to be impacted, discover potential challenges, and then start in small steps.

#3571 is related. #3571 (comment) shows the current plan regarding packages in the context of Forgejo Actions.

@ramones The best place to discuss is in issues because they are asynchronous and allow us to go back to figure out why we ended up with a particular design. Here isn't a bad place. What is needed is a plan. Somebody has to dig into the topic and explore what's going to be impacted, discover potential challenges, and then start in small steps. https://codeberg.org/forgejo/forgejo/issues/3571 is related. https://codeberg.org/forgejo/forgejo/issues/3571#issuecomment-13268004 shows the current plan regarding packages in the context of Forgejo Actions.

From what I understand from earlier threads (and what i'd prefer), a good first step would be something like:

  • packages not linked to repos keep org/user visibility
  • packages that are linked to repos will receive their org visibility (afaik only public, internal and private exist)
  • reading said package requires read access to unit.TypePackages on the linked repo (afaik this is not a thing yet)
  • writing/managing packages requires write access to unit.TypePackages on the linked repo
  • admins can always bypass this

I think a first safe change is to make packages follow repo-visibility. package lookup should happen early enough to account for RepoID. probably in services/context/package.go. models/packages/package_version.go also has no visibility filter currently. I can already start on some helper functions to check what permission a package would have.

I guess we should keep in mind that there are going to be repo's affected by this first change.

From what I understand from earlier threads (and what i'd prefer), a good first step would be something like: - packages not linked to repos keep org/user visibility - packages that are linked to repos will receive their org visibility (afaik only public, internal and private exist) - reading said package requires read access to `unit.TypePackages` on the linked repo (afaik this is not a thing yet) - writing/managing packages requires write access to `unit.TypePackages` on the linked repo - admins can always bypass this I think a first safe change is to make packages follow repo-visibility. package lookup should happen early enough to account for RepoID. probably in `services/context/package.go`. `models/packages/package_version.go` also has no visibility filter currently. I can already start on some helper functions to check what permission a package would have. I guess we should keep in mind that there are going to be repo's affected by this first change.

If I'm not mistaken, a package registry is attached to a user or organization. Packages are merely linked to repositories, not owned by repositories. The only (?) effect this has is that a package appears in the list of packages of a repository. Even when linked, packages are not managed within a repository, but within the package registry (i.e. the user's or organization's scope). Considering that, I find the idea to impose a repository's visibility on a linked package questionable.

It also raises a number of questions:

  • How would the permission model look like? For example, what about users that have access to the package registry, but not to that particular repository? Should tokens with write:repository get access to packages?
  • Forgejo performs auto-linking of packages based on their name. That's likely lead to permission issues.
  • How can existing package registries be upgraded without breaking them?
  • Do all package formats support that kind of segregation? For example, Debian generates a central package index. Is that compatible with varying visibility? If not, can it be made compatible? What about the gazillion other formats that Forgejo supports?
  • Some package formats require signing. Should repositories with a different visibility reuse the existing signing keys?

That might also be a good idea to investigate alternatives, which might require more work initially, but lead to a more flexible, powerful, and sustainable solution. For example, would it make sense to turn package registries into a repository-like concept? That would mean that a user or organization can have zero or more package registries, all with their own permissions. Or should repositories get a separate package registry that should not be shared with the owner?

If I'm not mistaken, a package registry is attached to a user or organization. Packages are merely linked to repositories, not owned by repositories. The only (?) effect this has is that a package appears in the list of packages of a repository. Even when linked, packages are not managed within a repository, but within the package registry (i.e. the user's or organization's scope). Considering that, I find the idea to impose a repository's visibility on a linked package questionable. It also raises a number of questions: * How would the permission model look like? For example, what about users that have access to the package registry, but not to that particular repository? Should tokens with `write:repository` get access to packages? * Forgejo performs auto-linking of packages based on their name. That's likely lead to permission issues. * How can existing package registries be upgraded without breaking them? * Do all package formats support that kind of segregation? For example, Debian generates a central package index. Is that compatible with varying visibility? If not, can it be made compatible? What about the gazillion other formats that Forgejo supports? * Some package formats require signing. Should repositories with a different visibility reuse the existing signing keys? That might also be a good idea to investigate alternatives, which might require more work initially, but lead to a more flexible, powerful, and sustainable solution. For example, would it make sense to turn package registries into a repository-like concept? That would mean that a user or organization can have zero or more package registries, all with their own permissions. Or should repositories get a separate package registry that should not be shared with the owner?

In that case maybe linked-repo inheritance is more of a hack than it is an implementation.

Would it make sense to use some form of "registry registry"? where you can setup one public and one private registry, and push packages to either (or have a public, internal, private registry that's a set prefix)? It's kind of similar to creating two orgs, only it's not under one name. This is just an idea to throw around.

I was also thinking about just having a seperate registry on repo-level, but then it's very easy to dupe namespaces, packages etc and the API would become quite messy.

Edit: I just realized that the first idea was exactly what you described, oops.

In that case maybe linked-repo inheritance is more of a hack than it is an implementation. Would it make sense to use some form of "registry registry"? where you can setup one public and one private registry, and push packages to either (or have a public, internal, private registry that's a set prefix)? It's kind of similar to creating two orgs, only it's not under one name. This is just an idea to throw around. I was also thinking about just having a seperate registry on repo-level, but then it's very easy to dupe namespaces, packages etc and the API would become quite messy. Edit: I just realized that the first idea was exactly what you described, oops.

@ramones wrote in #3577 (comment):

Would it make sense to use some form of "registry registry"? where you can setup one public and one private registry, and push packages to either (or have a public, internal, private registry that's a set prefix)? It's kind of similar to creating two orgs, only it's not under one name. This is just an idea to throw around.

My personal preference would be a model that's similar to Artifactory or Nexus: a user or organization can have as many package registries as they like. Each one has a dedicated name, namespace, permissions, visibility, and tokens. It can host a particular type of packages only, and be optionally declared as a pull-through cache (if we ever introduce that feature). That's the most flexible, powerful, and scalable model with the least number of WTFs. In short, it's like repositories, but for packages.

The question is: Can we get there? And if so, can we do it in a backwards-compatible manner?

As said before, somebody has to research it and come up with a plan. It's always possible to ask for help.

@ramones wrote in https://codeberg.org/forgejo/forgejo/issues/3577#issuecomment-14269694: > Would it make sense to use some form of "registry registry"? where you can setup one public and one private registry, and push packages to either (or have a public, internal, private registry that's a set prefix)? It's kind of similar to creating two orgs, only it's not under one name. This is just an idea to throw around. My personal preference would be a model that's similar to [Artifactory](https://jfrog.com/artifactory/) or [Nexus](https://www.sonatype.com/products/sonatype-nexus-repository): a user or organization can have as many package registries as they like. Each one has a dedicated name, namespace, permissions, visibility, and tokens. It can host a particular type of packages only, and be optionally declared as a pull-through cache ([if we ever introduce that feature](https://codeberg.org/forgejo/discussions/issues/444)). That's the most flexible, powerful, and scalable model with the least number of WTFs. In short, it's like repositories, but for packages. The question is: Can we get there? And if so, can we do it in a backwards-compatible manner? As said before, somebody has to research it and come up with a plan. It's always possible to ask for help.
Sign in to join this conversation.
No Branch/Tag specified
forgejo
renovate/forgejo-citation-js-monorepo
v16.0/forgejo
renovate/forgejo-github.com-urfave-cli-v3-3.x
renovate/forgejo-github.com-alecthomas-chroma-v2-2.x
renovate/forgejo-sharp-0.x
renovate/forgejo-github.com-sourcegraph-zoekt-digest
v15.0/forgejo
bp-v16.0/forgejo-74f6dda
v11.0/forgejo
renovate/forgejo-github.com-go-swagger-go-swagger-cmd-swagger-0.x
bp-v15.0/forgejo-daaee9c
bp-v15.0/forgejo-5c61808
bp-v15.0/forgejo-6cd3f02
v14.0/forgejo
bp-v15.0/forgejo-2176403
bp-v14.0/forgejo-9767ceb
bp-v14.0/forgejo-d996dfb
v13.0/forgejo
bp-v13.0/forgejo-dc0a63e
bp-v13.0/forgejo-e7ef2eb
v12.0/forgejo
bp-v12.0/forgejo-cf1fda8-a511e37
bp-v11.0/forgejo-b52cec7
v7.0/forgejo
v10.0/forgejo
v9.0/forgejo
v8.0/forgejo
v1.21/forgejo
v1.20/forgejo
v1.19/forgejo
v1.18/forgejo
v1.17/forgejo
v15.0.4
v11.0.16
v17.0.0-dev
v15.0.3
v11.0.15
v15.0.2
v11.0.14
v15.0.1
v14.0.5
v11.0.13
v15.0.0
v14.0.4
v11.0.12
v16.0.0-dev
v14.0.3
v11.0.11
v14.0.2
v14.0.1
v13.0.5
v11.0.10
v14.0.0
v13.0.4
v11.0.9
v15.0.0-dev
v13.0.3
v11.0.8
v13.0.2
v11.0.7
v13.0.1
v13.0.0
v14.0.0-dev
v12.0.4
v11.0.6
v12.0.3
v11.0.5
v12.0.2
v11.0.4
v12.0.1
v12.0.0
v11.0.3
v7.0.16
v13.0.0-dev
v11.0.2
v11.0.1
v7.0.15
v11.0.0
v12.0.0-dev
v10.0.3
v10.0.2
v7.0.14
v10.0.1
v7.0.13
v10.0.0
v11.0.0-dev
v9.0.3
v7.0.12
v9.0.2
v7.0.11
v9.0.1
v7.0.10
v9.0.0
v10.0.0-dev
v8.0.3
v7.0.9
v8.0.2
v7.0.8
v8.0.1
v7.0.7
v8.0.0
v7.0.6
v7.0.5
v9.0.0-dev
v7.0.4
v1.21.11-2
v7.0.3
v7.0.2
v7.0.1
v7.0.0
v1.21.11-1
v1.21.11-0
v1.21.10-0
v8.0.0-dev
v1.21.8-0
v1.21.7-0
v1.21.6-0
v1.21.5-0
v1.21.4-0
v1.21.3-0
v1.20.6-1
v1.21.2-1
v1.21.2-0
v1.20.6-0
v1.21.1-0
v1.20.5-1
v1.21.0-rc2
v1.21.0-rc1
v1.20.5-0
v7.0.0-dev
v1.21.0-rc0
v1.20.4-1
v1.20.4-0
v1.20.3-0
v1.20.2-0
v1.20.1-0
v1.20.0
v1.19.4-0
v1.21.0-dev
v1.20.0-rc2
v1.19.3-0
v1.19.2-0
v1.19.1-0
v1.19.0-3
v1.19.0-2
v1.18.5-0
v1.20.0-dev
v1.19.0-rc0
v1.18.3-2
v1.18.3-1
v1.18.3-0
v1.18.2-1
v1.18.2-0
v1.18.1-0
v1.18.0-1
v1.18.0-0
v1.18.0-rc1-2
v1.18.0-rc1-1
v1.18.0-rc1
v1.18.0-rc0
v1.19.0-dev
v1.17.3
v1.17.2
v1.17.1
v1.17.0
v1.17.0-rc2
v1.16.9
v1.17.0-rc1
v1.18.0-dev
v1.16.8
v1.16.7
v1.16.6
v1.16.5
v1.16.4
v1.16.3
v1.16.2
v1.16.1
v1.16.0
v1.15.11
v1.17.0-dev
v1.16.0-rc1
v1.15.10
v1.15.9
v1.15.8
v1.15.7
v1.15.6
v1.15.5
v1.15.4
v1.15.3
v1.15.2
v1.15.1
v1.14.7
v1.15.0
v1.15.0-rc3
v1.14.6
v1.15.0-rc2
v1.14.5
v1.16.0-dev
v1.15.0-rc1
v1.14.4
v1.14.3
v1.14.2
v1.14.1
v1.14.0
v1.13.7
v1.14.0-rc2
v1.13.6
v1.13.5
v1.14.0-rc1
v1.15.0-dev
v1.13.4
v1.13.3
v1.13.2
v1.13.1
v1.13.0
v1.12.6
v1.13.0-rc2
v1.14.0-dev
v1.13.0-rc1
v1.12.5
v1.12.4
v1.12.3
v1.12.2
v1.12.1
v1.11.8
v1.12.0
v1.11.7
v1.12.0-rc2
v1.11.6
v1.12.0-rc1
v1.13.0-dev
v1.11.5
v1.11.4
v1.11.3
v1.10.6
v1.12.0-dev
v1.11.2
v1.10.5
v1.11.1
v1.10.4
v1.11.0
v1.11.0-rc2
v1.10.3
v1.11.0-rc1
v1.10.2
v1.10.1
v1.10.0
v1.9.6
v1.9.5
v1.10.0-rc2
v1.11.0-dev
v1.10.0-rc1
v1.9.4
v1.9.3
v1.9.2
v1.9.1
v1.9.0
v1.9.0-rc2
v1.10.0-dev
v1.9.0-rc1
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.8.0-rc3
v1.7.6
v1.8.0-rc2
v1.7.5
v1.8.0-rc1
v1.9.0-dev
v1.7.4
v1.7.3
v1.7.2
v1.7.1
v1.7.0
v1.7.0-rc3
v1.6.4
v1.7.0-rc2
v1.6.3
v1.7.0-rc1
v1.7.0-dev
v1.6.2
v1.6.1
v1.6.0
v1.6.0-rc2
v1.5.3
v1.6.0-rc1
v1.6.0-dev
v1.5.2
v1.5.1
v1.5.0
v1.5.0-rc2
v1.5.0-rc1
v1.5.0-dev
v1.4.3
v1.4.2
v1.4.1
v1.4.0
v1.4.0-rc3
v1.4.0-rc2
v1.3.3
v1.4.0-rc1
v1.3.2
v1.3.1
v1.3.0
v1.3.0-rc2
v1.3.0-rc1
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.2.0-rc3
v1.2.0-rc2
v1.1.4
v1.2.0-rc1
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.0.2
v1.0.1
v1.0.0
v0.9.99
Labels
Clear labels
arch
riscv64

Archived

backport/v1.19
Scheduled for backport to Forgejo v1.19

Archived

backport/v1.20
Scheduled for backport to Forgejo v1.20

Archived

backport/v1.21/forgejo
Scheduled for backport to Forgejo v1.21

Archived

backport/v10.0/forgejo
Automated backport to v10.0

Archived

backport/v11.0/forgejo
Automated backport to v11.0
backport/v12.0/forgejo
Automated backport to v12.0

Archived

backport/v13.0/forgejo
Automated backport to v13.0

Archived

backport/v14.0/forgejo
Automated backport to v14.0

Archived

backport/v15.0/forgejo
Automated backport to v15.0
backport/v16.0/forgejo
Automated backport to v16.0
backport/v7.0/forgejo
Scheduled for backport to Forgejo v7.0

Archived

backport/v8.0/forgejo
Scheduled for backport to Forgejo v8.0

Archived

backport/v9.0/forgejo
Scheduled for backport to Forgejo v9.0

Archived

breaking
The release containing this change is not backward compatible
bug
Something is not working

Archived

bug
confirmed
it can be reproduced
bug
duplicate
bug has already been reported in the Forgejo tracker
bug
needs-more-info
the information provided does not contain enough details
bug
new-report
bug has just been reported and need triage (default label on issue creation)
bug
reported-upstream
bug cannot be fixed within Forgejo easily, it has been reported upstream
code/actions
Forgejo Actions feature
code/api
API
code/auth
Forgejo Authentication
code/auth/faidp
Forgejo as Identity Provider (in OAuth/OIDC flow)
code/auth/farp
Forgejo as Relying Party / Client (in OAuth/OIDC flow)
code/email
Everything related to email in Forgejo
code/federation
Federation
code/git
Related to the Git backend in Forgejo
code/migrations
Migration between Git forges (i.e. for GitHub, GitLab, Gitea, Forgejo, etc.). NOT for database migrations.
code/packages
Forgejo package and container registry
code/wiki
database
MySQL
https://www.mysql.com/
database
PostgreSQL
https://www.postgresql.org/
database
SQLite
https://sqlite.org/
dependency-upgrade
https://codeberg.org/forgejo/forgejo/issues/2779
dependency
Chi
https://github.com/go-chi/chi/

Archived

dependency
Chroma
https://github.com/alecthomas/chroma/

Archived

dependency
F3
https://f3.forgefriends.org/
dependency
ForgeFed
https://forgefed.org
dependency
garage
https://git.deuxfleurs.fr/Deuxfleurs/garage
dependency
Gitea
https://github.com/go-gitea/gitea

Archived

dependency
Golang
https://go.dev/
Discussion
duplicate
This issue or pull request already exists
enhancement/feature
New feature
forgejo/accessibility
Accessibility (a11y)
forgejo/branding
Branding (logo, name, tagline etc.)
forgejo/ci
Forgejo Actions CI configuration
forgejo/commit-graph
The commit graph feature and page.
forgejo/documentation
forgejo/furnace cleanup
Keeping Forgejo in sync with its dependencies and contributing back to them

Archived

forgejo/i18n
t9n/translation, l10n/localization, and i18n/internationalization of Forgejo
forgejo/interop
Interoperability with other services: Webhooks, bridges, integrations
forgejo/moderation
Moderation
forgejo/privacy
Privacy first
forgejo/release
Release management
forgejo/scaling
Performance and scaling
forgejo/security
Security (please disclose responsibly)
forgejo/ui
User interface
Gain
High
User research provides indicators that this would be good to have, interested contributors are encouraged to pick this.
Gain
Nice to have
This is likely worth having, but the assumption is not backed by user research data (it might benefit a small amount of users only.) Unlikely to receive much attention, but feel free to pick.
Gain
Undefined
Not enough information to assess the request's benefits. This issue may be closed if no gain is established: You can help by giving us more input.
Gain
Very High
User research indicates that this is an important improvement for Forgejo users. Contributions very welcome!
good first issue
Optimal for first-timers! Make sure to look for further explanations and ask for help if needed. If you want, you can consider the person who added this label as a point of contact.
i18n/backport-stable
This PR needs to be backported to stable branch of Forgejo safely and manually, using a migration script.
impact
large
Large impact: Potential data loss, many users affected, major degradation in UX.
impact
medium
Medium impact: Several users affected, degradation in UX, workarounds might be available but inconvenient.
impact
small
Small impact: No data loss, workarounds might be available, affects few users.
impact
unknown
Report was not yet triaged to assess impact.
Incompatible license
This pull request contains changes that are not (yet) compatible with the current Forgejo license
issue
closed
The issue was resolved in the repository of the dependency
issue
do-not-exist-yet
An issue should be created in the respository of the dependency
issue
open
An open issue exists in the upstream repository of the dependency
manual test
Pull requests that have been merged with a manual test

Archived

Manually tested during feature freeze
The manual test instructions were followed
OS
FreeBSD
Specific to the FreeBSD Operating System
OS
Linux
Specific to (GNU/)Linux Operating Systems
OS
macOS
Specific to the MacOS Operating System
OS
Windows
Specific to the Windows Operating System
problem
A user report about a problem. Needs to be triaged to find potential solutions.
QA
regression
found in the version of the milestone and not before
release blocker
Issues that must be fixed before the release can be published
Release Cycle
Feature Freeze
Only bug fixes with automated tests (except for CSS/JavaScript)
release-blocker
v7.0
Issues that must be fixed before Forgejo v7.0 can be released 17 April 2024

Archived

release-blocker
v7.0.1
Issues that must be fixed before Forgejo v7.0.1 can be released

Archived

release-blocker
v7.0.2
Issues that must be fixed before Forgejo v7.0.2 can be released

Archived

release-blocker
v7.0.3
Issues that must be fixed before Forgejo v7.0.3 can be released

Archived

release-blocker
v7.0.4
Issues that must be fixed before Forgejo v7.0.4 can be released

Archived

release-blocker
v8.0.0
Issues that must be fixed before Forgejo v8.0.0 can be released

Archived

release-blocker/v9.0.0
Issues that must be fixed before Forgejo v9.0.0 can be released

Archived

run-all-playwright-tests
Add this label to a PR to run all playwright tests manually.
run-end-to-end-tests
Trigger additional tests on the PR when it is ready to be merged
stage
2-research
Needs research to moe on.
stage
3-design
Needs design to move on
stage
4-implementation
This is actionable and waits for implementation
test
manual
manual testing has been documented
test
needed
test should be added
test
needs-help
help needed to add a test
test
not-needed
no additional test is needed
test
present
test has been added
untested
Pull requests that have been merged with no test and submitted as is to the dependency where they belong

Archived

User research - time-tracker
Time tracking feature for issues and the JS stopwatch.
valuable code
This PR was closed because the implementation is incomplete
worth a release-note
Add this PR to the release notes
User research - Accessibility
Requires input about accessibility features, likely involves user testing.
User research - Blocked
Do not pick as-is! We are happy if you can help, but please coordinate with ongoing redesign in this area.
User research - Community
Community features, such as discovering other people's work or otherwise feeling welcome on a Forgejo instance.
User research - Config (instance)
Instance-wide configuration, authentication and other admin-only needs.
User research - Errors
How to deal with errors in the application and write helpful error messages.
User research - Filters
How filter and search is being worked with.
User research - Future backlog
The issue might be inspiring for future design work.
User research - Git workflow
AGit, fork-based and new Git workflow, PR creation etc
User research - Labels
Active research about Labels
User research - Moderation
Moderation Featuers for Admins are undergoing active User Research
User research - Needs input
Use this label to let the User Research team know their input is requested.
User research - Notifications/Dashboard
Research on how users should know what to do next.
User research - Rendering
Text rendering, markup languages etc
User research - Repo creation
Active research about the New Repo dialog.
User research - Repo units
The repo sections, disabling them and the "Add more" button.
User research - Security
User research - Settings (in-app)
How to structure in-app settings in the future?
No labels
arch
riscv64
backport/v1.19
backport/v1.20
backport/v1.21/forgejo
backport/v10.0/forgejo
backport/v11.0/forgejo
backport/v12.0/forgejo
backport/v13.0/forgejo
backport/v14.0/forgejo
backport/v15.0/forgejo
backport/v16.0/forgejo
backport/v7.0/forgejo
backport/v8.0/forgejo
backport/v9.0/forgejo
breaking
bug
bug
confirmed
bug
duplicate
bug
needs-more-info
bug
new-report
bug
reported-upstream
code/actions
code/api
code/auth
code/auth/faidp
code/auth/farp
code/email
code/federation
code/git
code/migrations
code/packages
code/wiki
database
MySQL
database
PostgreSQL
database
SQLite
dependency-upgrade
dependency
Chi
dependency
Chroma
dependency
F3
dependency
ForgeFed
dependency
garage
dependency
Gitea
dependency
Golang
Discussion
duplicate
enhancement/feature
forgejo/accessibility
forgejo/branding
forgejo/ci
forgejo/commit-graph
forgejo/documentation
forgejo/furnace cleanup
forgejo/i18n
forgejo/interop
forgejo/moderation
forgejo/privacy
forgejo/release
forgejo/scaling
forgejo/security
forgejo/ui
Gain
High
Gain
Nice to have
Gain
Undefined
Gain
Very High
good first issue
i18n/backport-stable
impact
large
impact
medium
impact
small
impact
unknown
Incompatible license
issue
closed
issue
do-not-exist-yet
issue
open
manual test
Manually tested during feature freeze
OS
FreeBSD
OS
Linux
OS
macOS
OS
Windows
problem
QA
regression
release blocker
Release Cycle
Feature Freeze
release-blocker
v7.0
release-blocker
v7.0.1
release-blocker
v7.0.2
release-blocker
v7.0.3
release-blocker
v7.0.4
release-blocker
v8.0.0
release-blocker/v9.0.0
run-all-playwright-tests
run-end-to-end-tests
stage
2-research
stage
3-design
stage
4-implementation
test
manual
test
needed
test
needs-help
test
not-needed
test
present
untested
User research - time-tracker
valuable code
worth a release-note
User research - Accessibility
User research - Blocked
User research - Community
User research - Config (instance)
User research - Errors
User research - Filters
User research - Future backlog
User research - Git workflow
User research - Labels
User research - Moderation
User research - Needs input
User research - Notifications/Dashboard
User research - Rendering
User research - Repo creation
User research - Repo units
User research - Security
User research - Settings (in-app)
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
6 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
forgejo/forgejo#3577
Reference in a new issue
forgejo/forgejo
No description provided.
Delete branch "%!s()"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?