fix(doctor): ensure the doctor runs with the same settings.AppPath as Forgejo (#12901)

Attempt to address #11705 and #11028.

The docker container runs gitea by default: 1d12151086/docker/root/etc/s6/gitea/run

Whereas a user might run `forgejo doctor ...` (which is symlinked to gitea).

So the doctor expects a different value for the authorized_keys command.

This fix does the opposite of syncAppConfForGit: it fetches the `AppPath` from the database to ensure it is the same as forgejo:
1d12151086/routers/init.go (L76-L87)

### Testing

1. Make a symlink called `forgejo`, pointing to gitea `ln -s gitea forgejo`
2. Run `./gitea` and add a ssh key to a user
3. Stop `./gitea`
4. Run `./forgejo doctor check --run authorized-keys`

Without this fix, the last command should fail.
With the fix, the last command should succeed and print:
```
- [I] AppPath changed from '/home/forgejo/forgejo' to '/home/forgejo/gitea'
```

- I ran...
  - [x] `make pr-go` before pushing

### 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

- [x] This change will be noticed by a Forgejo user or admin (feature, bug fix, performance, etc.). I suggest to include a release note for this change.
- [ ] This change is not visible to a Forgejo user or admin (refactor, dependency upgrade, etc.). I think there is no need to add a release note for this change.

*The decision if the pull request will be shown in the release notes is up to the mergers / release team.*

The content of the `release-notes/<pull request number>.md` file will serve as the basis for the release notes. If the file does not exist, the title of the pull request will be used instead.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12901
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
This commit is contained in:
oliverpool 2026-06-06 03:23:06 +02:00 committed by Mathieu Fenniak
commit b1b47e64d7

View file

@ -13,6 +13,7 @@ import (
asymkey_model "forgejo.org/models/asymkey"
"forgejo.org/modules/log"
"forgejo.org/modules/setting"
"forgejo.org/modules/system"
)
func checkAuthorizedKeys(ctx context.Context, logger log.Logger, autofix bool) error {
@ -20,6 +21,21 @@ func checkAuthorizedKeys(ctx context.Context, logger log.Logger, autofix bool) e
return nil
}
// make sure the doctor has the same AppPath as forgejo
// they can differ due to symlinks
// https://codeberg.org/forgejo/forgejo/pulls/12901
if err := system.Init(); err != nil {
return err
}
runtimeState := new(system.RuntimeState)
if err := system.AppState.Get(ctx, runtimeState); err != nil {
return err
}
if setting.AppPath != runtimeState.LastAppPath {
logger.Info("AppPath set to '%s' (was '%s')", runtimeState.LastAppPath, setting.AppPath)
setting.AppPath = runtimeState.LastAppPath
}
findings, err := asymkey_model.InspectPublicKeys(ctx)
if err != nil {
return fmt.Errorf("inspect authorized_keys failed: %w", err)