feat: Allow converting mirror repos to normal through the API #8932

Merged
Gusted merged 10 commits from mactynow/forgejo:feat/add-convert-repository-api-for-mirrors into forgejo 2025-09-14 14:25:12 +02:00
Contributor

Checklist

The contributor guide contains information that will be helpful to first time contributors. There also are a few conditions for merging Pull Requests in Forgejo repositories. You are also welcome to join the Forgejo development chatroom.

Tests

  • I added test coverage for Go changes...
    • in their respective *_test.go for unit tests.
    • in the tests/integration directory if it involves interactions with a live Forgejo server.
  • I added test coverage for JavaScript changes...

Documentation

  • I created a pull request to the documentation to explain to Forgejo users how to use this change.
  • I did not document these changes and I do not expect someone else to do it.

Release notes

  • I do not want this change to show in the release notes.
  • I want the title to show in the release notes with a link to this pull request.
  • I want the content of the release-notes/<pull request number>.md to be be used for the release notes instead of the title.

Fixes #7733.

Release notes

  • Features
    • PR: Allow converting mirror repos to normal through the API
## Checklist The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org). ### Tests - I added test coverage for Go changes... - [x] in their respective `*_test.go` for unit tests. - [ ] in the `tests/integration` directory if it involves interactions with a live Forgejo server. - I added test coverage for JavaScript changes... - [ ] in `web_src/js/*.test.js` if it can be unit tested. - [ ] in `tests/e2e/*.test.e2e.js` if it requires interactions with a live Forgejo server (see also the [developer guide for JavaScript testing](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/tests/e2e/README.md#end-to-end-tests)). ### Documentation - [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change. - [x] I did not document these changes and I do not expect someone else to do it. ### Release notes - [ ] I do not want this change to show in the release notes. - [ ] I want the title to show in the release notes with a link to this pull request. - [x] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title. Fixes https://codeberg.org/forgejo/forgejo/issues/7733. <!--start release-notes-assistant--> ## Release notes <!--URL:https://codeberg.org/forgejo/forgejo--> - Features - [PR](https://codeberg.org/forgejo/forgejo/pulls/8932): <!--number 8932 --><!--line 0 --><!--description QWxsb3cgY29udmVydGluZyBtaXJyb3IgcmVwb3MgdG8gbm9ybWFsIHRocm91Z2ggdGhlIEFQSQ==-->Allow converting mirror repos to normal through the API<!--description--> <!--end release-notes-assistant-->
mactynow force-pushed feat/add-convert-repository-api-for-mirrors from b641c9a799
Some checks failed
issue-labels / backporting (pull_request_target) Has been skipped
issue-labels / cascade (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Has been skipped
testing / backend-checks (pull_request) Has been cancelled
testing / frontend-checks (pull_request) Has been cancelled
testing / test-unit (pull_request) Has been cancelled
testing / test-e2e (pull_request) Has been cancelled
testing / test-remote-cacher (redis) (pull_request) Has been cancelled
testing / test-remote-cacher (valkey) (pull_request) Has been cancelled
testing / test-remote-cacher (garnet) (pull_request) Has been cancelled
testing / test-remote-cacher (redict) (pull_request) Has been cancelled
testing / test-mysql (pull_request) Has been cancelled
testing / test-pgsql (pull_request) Has been cancelled
testing / test-sqlite (pull_request) Has been cancelled
testing / security-check (pull_request) Has been cancelled
requirements / merge-conditions (pull_request) Has been cancelled
Integration tests for the release process / release-simulation (pull_request) Has been cancelled
to 0e20575d22
Some checks failed
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / backporting (pull_request_target) Has been skipped
issue-labels / cascade (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 54s
testing / backend-checks (pull_request) Failing after 2m6s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
2025-08-18 12:10:26 +02:00
Compare
Author
Contributor

Where can I update the API documentation for this change?

Where can I update the API documentation for this change?
Member

@mactynow wrote in #8932 (comment):

Where can I update the API documentation for this change?

Not sure if this is applicable (i.e. this PR needs an update to the docs) but you would change this file via the forgejo/docs repository

@mactynow wrote in https://codeberg.org/forgejo/forgejo/pulls/8932#issuecomment-6580648: > Where can I update the API documentation for this change? Not sure if this is applicable (i.e. this PR needs an update to the docs) but you would change [this file](https://codeberg.org/forgejo/docs/src/branch/next/docs/user/api-usage.md) via the [forgejo/docs](https://codeberg.org/forgejo/docs) repository
mahlzahn changed title from Allow converting mirror repos to normal through the API to feat: Allow converting mirror repos to normal through the API 2025-08-22 16:19:25 +02:00
Owner

@mactynow If you only mean the swagger docs, I think make generate-swagger and committing the changed file should do the trick. I don't think this change requires extensive documentation.

@mactynow If you only mean the swagger docs, I think `make generate-swagger` and committing the changed file should do the trick. I don't think this change requires extensive documentation.
Author
Contributor

@fnetX that's exactly what I wanted to do. Thanks!

@fnetX that's exactly what I wanted to do. Thanks!
Author
Contributor

The linter is now giving me issues unrelated to my changes so I won't address them in this PR (unless you want me to?)

The linter is now giving me issues unrelated to my changes so I won't address them in this PR (unless you want me to?)
Contributor

The linter check is related to your change at #8932/files

The linter check is related to your change at https://codeberg.org/forgejo/forgejo/pulls/8932/files#diff-782daba8cbf543ced8e0028fa3c867bd5256b351
mactynow force-pushed feat/add-convert-repository-api-for-mirrors from 443598f3e2
Some checks failed
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m6s
testing / backend-checks (pull_request) Successful in 4m0s
Integration tests for the release process / release-simulation (pull_request) Successful in 6m13s
testing / test-unit (pull_request) Successful in 7m6s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m50s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m51s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m50s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m51s
testing / test-e2e (pull_request) Failing after 19m57s
testing / test-mysql (pull_request) Successful in 21m40s
testing / test-sqlite (pull_request) Successful in 26m16s
testing / test-pgsql (pull_request) Failing after 30m8s
testing / security-check (pull_request) Has been skipped
to 3602787a97
Some checks failed
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 55s
testing / backend-checks (pull_request) Successful in 3m35s
testing / test-unit (pull_request) Successful in 6m37s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m42s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m47s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m48s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m46s
testing / test-mysql (pull_request) Successful in 19m31s
testing / test-sqlite (pull_request) Successful in 24m22s
testing / test-pgsql (pull_request) Successful in 27m25s
testing / security-check (pull_request) Successful in 1m5s
testing / test-e2e (pull_request) Failing after 11m41s
2025-08-27 10:04:59 +02:00
Compare
Author
Contributor

@earl-warren wrote in #8932 (comment):

The linter check is related to your change at #8932/files

My bad, that's fixed now, however I'm not sure what I should do about the failing e2e tests.

@earl-warren wrote in https://codeberg.org/forgejo/forgejo/pulls/8932#issuecomment-6731725: > The linter check is related to your change at #8932/files My bad, that's fixed now, however I'm not sure what I should do about the failing e2e tests.
Contributor

@mactynow wrote in #8932 (comment):

I'm not sure what I should do about the failing e2e tests.

You can ignore them, they are known false negative.

@mactynow wrote in https://codeberg.org/forgejo/forgejo/pulls/8932#issuecomment-6733522: > I'm not sure what I should do about the failing e2e tests. You can ignore them, they are known false negative.
@ -87,0 +90,4 @@
func TestRepoConvertToNormalRepo(t *testing.T) {
unittest.PrepareTestEnv(t)
ctx, _ := contexttest.MockAPIContext(t, "user2/repo1") // TODO: is this a mirror? doesn't look like it, how to test?
Contributor

this test is effectively a false positive since the repo is not a mirror to begin with. You should look for a fixture that is already a mirror and then.

assert.True(t, repo.IsMirror) to be sure.

https://codeberg.org/forgejo/forgejo/src/branch/forgejo/models/fixtures/repository.yml#L133-L165

this test is effectively a false positive since the repo is not a mirror to begin with. You should look for a fixture that is already a mirror and then. `assert.True(t, repo.IsMirror)` to be sure. https://codeberg.org/forgejo/forgejo/src/branch/forgejo/models/fixtures/repository.yml#L133-L165
mactynow marked this conversation as resolved
fnetX left a comment
Owner

Just a thought: Wouldn't it feel more intuitive if "convert to normal repo" was a specific route that you could POST to, e.g. POST /owner/repo/convert (optionally with the option to convert from fork to normal, or from mirror to normal, but I prefer to just do it automatically).

It feels a little odd to have a struct field for something that is basically a one-time and one-way operation.

What do you think?

Just a thought: Wouldn't it feel more intuitive if "convert to normal repo" was a specific route that you could POST to, e.g. `POST /owner/repo/convert` (optionally with the option to convert from fork to normal, or from mirror to normal, but I prefer to just do it automatically). It feels a little odd to have a struct field for something that is basically a one-time and one-way operation. What do you think?
Author
Contributor

@fnetX that would make sense. I thought that I'd leave it under Edit() because it seemed that this is where all the operations from the UI related to making changes on the repo are grouped and this way it was consistent between the two. But with the code for the operation under services it's not complicated to understand what's going on. I'll make a separate route then.

@fnetX that would make sense. I thought that I'd leave it under `Edit()` because it seemed that this is where all the operations from the UI related to making changes on the repo are grouped and this way it was consistent between the two. But with the code for the operation under services it's not complicated to understand what's going on. I'll make a separate route then.
Owner

The UI has a "danger" section, though. And ... I think in general we should not think of the UI too much, because it's easier to move some buttons if they make more sense somewhere else. It's much more difficult with API routes.

The UI has a "danger" section, though. And ... I think in general we should not think of the UI too much, because it's easier to move some buttons if they make more sense somewhere else. It's much more difficult with API routes.
mactynow force-pushed feat/add-convert-repository-api-for-mirrors from 2634e39897
Some checks failed
testing / frontend-checks (pull_request) Successful in 1m6s
testing / backend-checks (pull_request) Successful in 4m31s
Integration tests for the release process / release-simulation (pull_request) Successful in 4m58s
testing / test-unit (pull_request) Successful in 6m42s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m47s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m46s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m47s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m46s
testing / test-e2e (pull_request) Failing after 12m27s
testing / test-mysql (pull_request) Successful in 19m28s
testing / test-sqlite (pull_request) Successful in 24m27s
testing / test-pgsql (pull_request) Successful in 27m52s
testing / security-check (pull_request) Successful in 1m10s
issue-labels / backporting (pull_request_target) Has been skipped
requirements / merge-conditions (pull_request) Successful in 3s
issue-labels / cascade (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Has been skipped
to 9b51b3e5de
All checks were successful
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m19s
testing / backend-checks (pull_request) Successful in 2m51s
testing / test-unit (pull_request) Successful in 5m33s
testing / test-remote-cacher (redis) (pull_request) Successful in 1m44s
testing / test-remote-cacher (valkey) (pull_request) Successful in 1m46s
testing / test-remote-cacher (garnet) (pull_request) Successful in 1m46s
testing / test-remote-cacher (redict) (pull_request) Successful in 1m47s
testing / test-e2e (pull_request) Successful in 15m44s
testing / test-mysql (pull_request) Successful in 17m50s
testing / test-sqlite (pull_request) Successful in 22m58s
testing / test-pgsql (pull_request) Successful in 25m58s
testing / security-check (pull_request) Successful in 39s
2025-09-02 14:38:06 +02:00
Compare
mactynow changed title from feat: Allow converting mirror repos to normal through the API to WIP: feat: Allow converting mirror repos to normal through the API 2025-09-02 16:16:34 +02:00
Author
Contributor

I have a few questions:

  1. Regarding integration tests: using user5 for testing this doesn't work, I get a bunch of errors when doing the login steps. I suspect because is_active is false? Regardless, I tried with user20 instead and don't get these errors, but because user20/repo25 is not in the fixtures as a an actual git repo, the tests are failing (on the CleanUpMigrateInfo() steps). Should I add repo25 as a fixture and if so, is there a process for that, or should I approach this differently?
  2. Currently I want to return a 200 if calling this api for a repo that is not a mirror, as no action is taken and nothing changes. Is that right or would you rather return something else?
I have a few questions: 1. Regarding integration tests: using `user5` for testing this doesn't work, I get a bunch of errors when doing the login steps. I suspect because `is_active` is `false`? Regardless, I tried with `user20` instead and don't get these errors, but because `user20/repo25` is not in the fixtures as a an actual git repo, the tests are failing (on the `CleanUpMigrateInfo()` steps). Should I add `repo25` as a fixture and if so, is there a process for that, or should I approach this differently? 2. Currently I want to return a `200` if calling this api for a repo that is not a mirror, as no action is taken and nothing changes. Is that right or would you rather return something else?
Owner

@mactynow wrote in #8932 (comment):

Regarding integration tests: using user5 for testing this doesn't work, I get a bunch of errors when doing the login steps. I suspect because is_active is false? Regardless, I tried with user20 instead and don't get these errors, but because user20/repo25 is not in the fixtures as a an actual git repo, the tests are failing (on the CleanUpMigrateInfo() steps). Should I add repo25 as a fixture and if so, is there a process for that, or should I approach this differently?

What is what you want to have? A mirror repository and a user who has access to convert it?

@mactynow wrote in #8932 (comment):

Currently I want to return a 200 if calling this api for a repo that is not a mirror, as no action is taken and nothing changes. Is that right or would you rather return something else?

I think "422 Unprocessable Entity" would be fitting and is already used in other router code for such purposes.

@mactynow wrote in https://codeberg.org/forgejo/forgejo/pulls/8932#issuecomment-6864010: > Regarding integration tests: using `user5` for testing this doesn't work, I get a bunch of errors when doing the login steps. I suspect because `is_active` is `false`? Regardless, I tried with `user20` instead and don't get these errors, but because `user20/repo25` is not in the fixtures as a an actual git repo, the tests are failing (on the `CleanUpMigrateInfo()` steps). Should I add `repo25` as a fixture and if so, is there a process for that, or should I approach this differently? What is what you want to have? A mirror repository and a user who has access to convert it? @mactynow wrote in https://codeberg.org/forgejo/forgejo/pulls/8932#issuecomment-6864010: > Currently I want to return a `200` if calling this api for a repo that is not a mirror, as no action is taken and nothing changes. Is that right or would you rather return something else? I think "422 Unprocessable Entity" would be fitting and is already used in other router code for such purposes.
Author
Contributor

@Gusted wrote in #8932 (comment):

What is what you want to have? A mirror repository and a user who has access to convert it?

Yes, but I think it also needs to have the actual repo (with the .git subdirectory) under tests/gitea-repositories-meta. User3 doesn't seem to be authorized to log in.

@Gusted wrote in https://codeberg.org/forgejo/forgejo/pulls/8932#issuecomment-6893420: > > What is what you want to have? A mirror repository and a user who has access to convert it? Yes, but I think it also needs to have the actual repo (with the .git subdirectory) under `tests/gitea-repositories-meta`. User3 doesn't seem to be authorized to log in.
Owner

user3 is an organization.

I think you can use user3/repo5 and log in as user2 who is a owner of that organisation. This repository has fixtures.

user3 is an organization. I think you can use `user3/repo5` and log in as user2 who is a owner of that organisation. This repository has fixtures.
Owner

There's two linter issues, I think they are fixed if you call make fmt and commit the result. Otherwise make lint-go-fix might fix it.

There's two linter issues, I think they are fixed if you call `make fmt` and commit the result. Otherwise `make lint-go-fix` might fix it.
Author
Contributor

@Gusted wrote in #8932 (comment):

There's two linter issues, I think they are fixed if you call make fmt and commit the result. Otherwise make lint-go-fix might fix it.

Whoops, sorry, I missed that the push went through, since there were some issues earlier. Fixed now! Let me also remove the WIP tag.

@Gusted wrote in https://codeberg.org/forgejo/forgejo/pulls/8932#issuecomment-7020275: > There's two linter issues, I think they are fixed if you call `make fmt` and commit the result. Otherwise `make lint-go-fix` might fix it. Whoops, sorry, I missed that the push went through, since there were some issues earlier. Fixed now! Let me also remove the WIP tag.
mactynow changed title from WIP: feat: Allow converting mirror repos to normal through the API to feat: Allow converting mirror repos to normal through the API 2025-09-08 13:02:14 +02:00
mactynow force-pushed feat/add-convert-repository-api-for-mirrors from fe9de36842
Some checks failed
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / release-notes (pull_request_target) Has been skipped
Integration tests for the release process / release-simulation (pull_request) Failing after 24s
testing / frontend-checks (pull_request) Successful in 1m10s
testing / backend-checks (pull_request) Successful in 4m22s
testing / test-unit (pull_request) Successful in 8m22s
testing / test-remote-cacher (redis) (pull_request) Successful in 1m52s
testing / test-remote-cacher (valkey) (pull_request) Successful in 1m50s
testing / test-remote-cacher (garnet) (pull_request) Successful in 1m48s
testing / test-remote-cacher (redict) (pull_request) Successful in 1m49s
testing / test-e2e (pull_request) Successful in 22m29s
testing / test-mysql (pull_request) Successful in 24m4s
testing / test-sqlite (pull_request) Successful in 28m23s
testing / test-pgsql (pull_request) Successful in 32m51s
testing / security-check (pull_request) Successful in 2m13s
to 02fd10a1c0
All checks were successful
requirements / merge-conditions (pull_request) Successful in 3s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m38s
testing / backend-checks (pull_request) Successful in 4m6s
testing / test-unit (pull_request) Successful in 9m7s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m24s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m23s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m9s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m12s
testing / test-e2e (pull_request) Successful in 22m28s
testing / test-mysql (pull_request) Successful in 24m28s
testing / test-sqlite (pull_request) Successful in 29m57s
testing / test-pgsql (pull_request) Successful in 34m27s
testing / security-check (pull_request) Successful in 1m39s
2025-09-08 13:02:28 +02:00
Compare
@ -675,0 +704,4 @@
return
}
repo, err := repo_model.GetRepositoryByID(ctx, ctx.Repo.Repository.ID)
Owner

Is there a reason to return the repository?

Is there a reason to return the repository?
Author
Contributor

Not really, I just followed the pattern from the Edit() function. I'm not sure what I should be returning or if I should be returning anything at all here actually. What do you think?

Not really, I just followed the pattern from the `Edit()` function. I'm not sure what I should be returning or if I should be returning anything at all here actually. What do you think?
Owner

There's not really anything interesting being returned for this repository data except is_mirror = false, so I don't think the response would really be used. Hm let's leave it for now. Not too much of a problem then.

There's not really anything interesting being returned for this repository data except `is_mirror = false`, so I don't think the response would really be used. Hm let's leave it for now. Not too much of a problem then.
Gusted marked this conversation as resolved
@ -120,2 +120,4 @@
}
// ConvertMirrorToNormalRepo converts a mirror to a normal repo
func ConvertMirrorToNormalRepo(ctx context.Context, repo *repo_model.Repository) (err error) {
Owner

Nicely done by moving it to service/, good choice!

Nicely done by moving it to `service/`, good choice!
Author
Contributor

The credit goes to you, that was your suggestion: #7733 (comment)

The credit goes to you, that was your suggestion: https://codeberg.org/forgejo/forgejo/issues/7733#issuecomment-4472573
Owner

Oops 🙈

Oops 🙈
Gusted marked this conversation as resolved
mactynow force-pushed feat/add-convert-repository-api-for-mirrors from 02fd10a1c0
All checks were successful
requirements / merge-conditions (pull_request) Successful in 3s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m38s
testing / backend-checks (pull_request) Successful in 4m6s
testing / test-unit (pull_request) Successful in 9m7s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m24s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m23s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m9s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m12s
testing / test-e2e (pull_request) Successful in 22m28s
testing / test-mysql (pull_request) Successful in 24m28s
testing / test-sqlite (pull_request) Successful in 29m57s
testing / test-pgsql (pull_request) Successful in 34m27s
testing / security-check (pull_request) Successful in 1m39s
to 4e60c61a0f
All checks were successful
requirements / merge-conditions (pull_request) Successful in 2s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 56s
testing / backend-checks (pull_request) Successful in 3m2s
testing / test-unit (pull_request) Successful in 5m48s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m2s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m0s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m2s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m2s
testing / test-e2e (pull_request) Successful in 16m34s
testing / test-mysql (pull_request) Successful in 17m40s
testing / test-sqlite (pull_request) Successful in 22m49s
testing / test-pgsql (pull_request) Successful in 26m20s
testing / security-check (pull_request) Successful in 1m0s
2025-09-13 14:11:22 +02:00
Compare
Gusted approved these changes 2025-09-13 14:21:31 +02:00
mactynow force-pushed feat/add-convert-repository-api-for-mirrors from 4e60c61a0f
All checks were successful
requirements / merge-conditions (pull_request) Successful in 2s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 56s
testing / backend-checks (pull_request) Successful in 3m2s
testing / test-unit (pull_request) Successful in 5m48s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m2s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m0s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m2s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m2s
testing / test-e2e (pull_request) Successful in 16m34s
testing / test-mysql (pull_request) Successful in 17m40s
testing / test-sqlite (pull_request) Successful in 22m49s
testing / test-pgsql (pull_request) Successful in 26m20s
testing / security-check (pull_request) Successful in 1m0s
to 0da361bb67
All checks were successful
requirements / merge-conditions (pull_request) Successful in 2s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 59s
testing / backend-checks (pull_request) Successful in 3m10s
testing / test-unit (pull_request) Successful in 5m58s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m12s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m10s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m9s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m9s
testing / test-e2e (pull_request) Successful in 17m34s
testing / test-mysql (pull_request) Successful in 18m55s
testing / test-sqlite (pull_request) Successful in 25m14s
testing / test-pgsql (pull_request) Successful in 29m30s
testing / security-check (pull_request) Successful in 1m15s
2025-09-14 07:44:06 +02:00
Compare
mactynow force-pushed feat/add-convert-repository-api-for-mirrors from 0da361bb67
All checks were successful
requirements / merge-conditions (pull_request) Successful in 2s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 59s
testing / backend-checks (pull_request) Successful in 3m10s
testing / test-unit (pull_request) Successful in 5m58s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m12s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m10s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m9s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m9s
testing / test-e2e (pull_request) Successful in 17m34s
testing / test-mysql (pull_request) Successful in 18m55s
testing / test-sqlite (pull_request) Successful in 25m14s
testing / test-pgsql (pull_request) Successful in 29m30s
testing / security-check (pull_request) Successful in 1m15s
to c20102aee4
All checks were successful
testing / frontend-checks (pull_request) Successful in 54s
milestone / set (pull_request_target) Successful in 4s
testing / backend-checks (pull_request) Successful in 2m59s
testing / test-unit (pull_request) Successful in 7m10s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m28s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m27s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m27s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m29s
testing / test-e2e (pull_request) Successful in 22m36s
testing / test-mysql (pull_request) Successful in 23m26s
testing / test-sqlite (pull_request) Successful in 28m9s
testing / test-pgsql (pull_request) Successful in 31m34s
testing / security-check (pull_request) Successful in 1m8s
requirements / merge-conditions (pull_request) Successful in 3s
issue-labels / backporting (pull_request_target) Has been skipped
issue-labels / cascade (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Successful in 37s
2025-09-14 11:24:56 +02:00
Compare
Gusted merged commit 0b1942150f into forgejo 2025-09-14 14:25:12 +02:00
Where does that come from? The following is a preview of the release notes for this pull request, as they will appear in the upcoming release. They are derived from the content of the `release-notes/8932.md` file, if it exists, or the title of the pull request. They were also added at the bottom of the description of this pull request for easier reference.

This message and the release notes originate from a call to the release-notes-assistant.

@@ -23,3 +23,11 @@
 - [x] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title.
 
-Fixes https://codeberg.org/forgejo/forgejo/issues/7733.
\ No newline at end of file
+Fixes https://codeberg.org/forgejo/forgejo/issues/7733.
+
+<!--start release-notes-assistant-->
+
+## Release notes
+<!--URL:https://codeberg.org/forgejo/forgejo-->
+- Features
+  - [PR](https://codeberg.org/forgejo/forgejo/pulls/8932): <!--number 8932 --><!--line 0 --><!--description QWxsb3cgY29udmVydGluZyBtaXJyb3IgcmVwb3MgdG8gbm9ybWFsIHRocm91Z2ggdGhlIEFQSQ==-->Allow converting mirror repos to normal through the API<!--description-->
+<!--end release-notes-assistant-->

Release notes

  • Features
    • PR: Allow converting mirror repos to normal through the API
<details> <summary>Where does that come from?</summary> The following is a preview of the release notes for this pull request, as they will appear in the upcoming release. They are derived from the content of the `release-notes/8932.md` file, if it exists, or the title of the pull request. They were also added at the bottom of the description of this pull request for easier reference. This message and the release notes originate from a call to the [release-notes-assistant](https://code.forgejo.org/forgejo/release-notes-assistant). ```diff @@ -23,3 +23,11 @@ - [x] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title. -Fixes https://codeberg.org/forgejo/forgejo/issues/7733. \ No newline at end of file +Fixes https://codeberg.org/forgejo/forgejo/issues/7733. + +<!--start release-notes-assistant--> + +## Release notes +<!--URL:https://codeberg.org/forgejo/forgejo--> +- Features + - [PR](https://codeberg.org/forgejo/forgejo/pulls/8932): <!--number 8932 --><!--line 0 --><!--description QWxsb3cgY29udmVydGluZyBtaXJyb3IgcmVwb3MgdG8gbm9ybWFsIHRocm91Z2ggdGhlIEFQSQ==-->Allow converting mirror repos to normal through the API<!--description--> +<!--end release-notes-assistant--> ``` </details> <!--start release-notes-assistant--> ## Release notes <!--URL:https://codeberg.org/forgejo/forgejo--> - Features - [PR](https://codeberg.org/forgejo/forgejo/pulls/8932): <!--number 8932 --><!--line 0 --><!--description QWxsb3cgY29udmVydGluZyBtaXJyb3IgcmVwb3MgdG8gbm9ybWFsIHRocm91Z2ggdGhlIEFQSQ==-->Allow converting mirror repos to normal through the API<!--description--> <!--end release-notes-assistant-->
Sign in to join this conversation.
No reviewers
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/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
certmagic
dependency
chart.js
dependency
Chi
dependency
Chroma
dependency
citation.js
dependency
codespell
dependency
css-loader
dependency
devcontainers
dependency
dropzone
dependency
editorconfig-checker
dependency
elasticsearch
dependency
enmime
dependency
F3
dependency
ForgeFed
dependency
garage
dependency
Git
dependency
git-backporting
dependency
Gitea
dependency
gitignore
dependency
go-ap
dependency
go-enry
dependency
go-gitlab
dependency
Go-org
dependency
go-rpmutils
dependency
go-sql-driver mysql
dependency
go-swagger
dependency
go-version
dependency
go-webauthn
dependency
gocron
dependency
Golang
dependency
goldmark
dependency
goquery
dependency
Goth
dependency
grpc-go
dependency
happy-dom
dependency
Helm
dependency
image-spec
dependency
jsonschema
dependency
KaTeX
dependency
lint
dependency
MariaDB
dependency
Mermaid
dependency
minio-go
dependency
misspell
dependency
Monaco
dependency
PDFobject
dependency
playwright
dependency
postcss
dependency
postcss-plugins
dependency
pprof
dependency
prometheus client_golang
dependency
protobuf
dependency
relative-time-element
dependency
renovate
dependency
reply
dependency
ssh
dependency
swagger-ui
dependency
tailwind
dependency
temporal-polyfill
dependency
terminal-to-html
dependency
tests-only
dependency
text-expander-element
dependency
urfave
dependency
vfsgen
dependency
vite
dependency
Woodpecker CI
dependency
x tools
dependency
XORM
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
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 - Git workflow
User Research - In the Future
User Research - Labels
User Research - Moderation
User Research - Needs Input
User research - Notifications/Dashboard
User Research - Repo creation
User Research - Repo Units
User Research - security
User Research - Settings (in-app)
No milestone
No project
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!8932
No description provided.