forked from NYANDEV/forgejo
2edac36701
(cherry picked from commit 20b56692693e054bb3c04b4ef12b29b0715b4530) (cherry picked from commit 1574643a6a9634e5b92c033a4bfb69062a86bd05) Update semantic version according to specification (cherry picked from commit 22510f41306f9c133a7e99b61f9c38dabfd4b810) Mise à jour de 'Makefile' (cherry picked from commit c3d85d8409f1bb18a45659a167cf1ffee057f3b6) (cherry picked from commit 5ea23098513c068444226af41faf9be9c4c998e6) (cherry picked from commit ec5217b9d1b94bb04e34ce8c27eecbdc6f3a247a) (cherry picked from commit 14f08e364b2ad7e3176b45d3ec8da5f5605b4315) (cherry picked from commit b4465c67b8737aed9fd79a43046aa3795a298e68) [API] [SEMVER] replace number with version (cherry picked from commit fba48e64977a75e77c9c6cf8e3f8a679a5e7b733) (cherry picked from commit 532ec5d8782703b62d7d02312764e50637cd016e) [API] [SEMVER] [v1.20] less is replaced by css (cherry picked from commit 01ca3a4f4291cf4c62df42cbd12a00638f3cdc70) (cherry picked from commit 1d928c3ab2e1fda6082e1400d89ea96d6605ebaa) (cherry picked from commit a39dc804cd1da86444ed709455857f069475e7db) Conflicts: webpack.config.js (cherry picked from commit adc68578b3eb41215338125edfca91804706f8a1) (cherry picked from commit 9b8d98475fd7efcc15bf0d91b0af6ef3aff64508) (cherry picked from commit 25161039745a63282257eded9616390241af8013) (cherry picked from commit 18e6287963a0e1863cd08fd514a4e732a1904a68) (cherry picked from commit e9694e67ab93ad74f7eae3152d88d95e8493e739) (cherry picked from commit a9763edaf002c8009a2cca4115cb8b926f8cdc85) (cherry picked from commit e2b550f4fba144f9637a212b56bfe30cac1adb3b)
207 lines
6.5 KiB
Go
207 lines
6.5 KiB
Go
// Copyright 2016 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package routers
|
|
|
|
import (
|
|
"context"
|
|
"reflect"
|
|
"runtime"
|
|
|
|
"code.gitea.io/gitea/models"
|
|
asymkey_model "code.gitea.io/gitea/models/asymkey"
|
|
"code.gitea.io/gitea/modules/cache"
|
|
"code.gitea.io/gitea/modules/eventsource"
|
|
"code.gitea.io/gitea/modules/git"
|
|
"code.gitea.io/gitea/modules/highlight"
|
|
code_indexer "code.gitea.io/gitea/modules/indexer/code"
|
|
issue_indexer "code.gitea.io/gitea/modules/indexer/issues"
|
|
stats_indexer "code.gitea.io/gitea/modules/indexer/stats"
|
|
"code.gitea.io/gitea/modules/log"
|
|
"code.gitea.io/gitea/modules/markup"
|
|
"code.gitea.io/gitea/modules/markup/external"
|
|
"code.gitea.io/gitea/modules/notification"
|
|
"code.gitea.io/gitea/modules/setting"
|
|
"code.gitea.io/gitea/modules/ssh"
|
|
"code.gitea.io/gitea/modules/storage"
|
|
"code.gitea.io/gitea/modules/svg"
|
|
"code.gitea.io/gitea/modules/system"
|
|
"code.gitea.io/gitea/modules/templates"
|
|
"code.gitea.io/gitea/modules/translation"
|
|
"code.gitea.io/gitea/modules/util"
|
|
"code.gitea.io/gitea/modules/web"
|
|
actions_router "code.gitea.io/gitea/routers/api/actions"
|
|
forgejo "code.gitea.io/gitea/routers/api/forgejo/v1"
|
|
packages_router "code.gitea.io/gitea/routers/api/packages"
|
|
apiv1 "code.gitea.io/gitea/routers/api/v1"
|
|
"code.gitea.io/gitea/routers/common"
|
|
"code.gitea.io/gitea/routers/private"
|
|
web_routers "code.gitea.io/gitea/routers/web"
|
|
actions_service "code.gitea.io/gitea/services/actions"
|
|
"code.gitea.io/gitea/services/auth"
|
|
"code.gitea.io/gitea/services/auth/source/oauth2"
|
|
"code.gitea.io/gitea/services/automerge"
|
|
"code.gitea.io/gitea/services/cron"
|
|
"code.gitea.io/gitea/services/mailer"
|
|
mailer_incoming "code.gitea.io/gitea/services/mailer/incoming"
|
|
markup_service "code.gitea.io/gitea/services/markup"
|
|
repo_migrations "code.gitea.io/gitea/services/migrations"
|
|
mirror_service "code.gitea.io/gitea/services/mirror"
|
|
pull_service "code.gitea.io/gitea/services/pull"
|
|
repo_service "code.gitea.io/gitea/services/repository"
|
|
"code.gitea.io/gitea/services/repository/archiver"
|
|
"code.gitea.io/gitea/services/task"
|
|
"code.gitea.io/gitea/services/webhook"
|
|
)
|
|
|
|
func mustInit(fn func() error) {
|
|
err := fn()
|
|
if err != nil {
|
|
ptr := reflect.ValueOf(fn).Pointer()
|
|
fi := runtime.FuncForPC(ptr)
|
|
log.Fatal("%s failed: %v", fi.Name(), err)
|
|
}
|
|
}
|
|
|
|
func mustInitCtx(ctx context.Context, fn func(ctx context.Context) error) {
|
|
err := fn(ctx)
|
|
if err != nil {
|
|
ptr := reflect.ValueOf(fn).Pointer()
|
|
fi := runtime.FuncForPC(ptr)
|
|
log.Fatal("%s(ctx) failed: %v", fi.Name(), err)
|
|
}
|
|
}
|
|
|
|
func syncAppConfForGit(ctx context.Context) error {
|
|
runtimeState := new(system.RuntimeState)
|
|
if err := system.AppState.Get(runtimeState); err != nil {
|
|
return err
|
|
}
|
|
|
|
updated := false
|
|
if runtimeState.LastAppPath != setting.AppPath {
|
|
log.Info("AppPath changed from '%s' to '%s'", runtimeState.LastAppPath, setting.AppPath)
|
|
runtimeState.LastAppPath = setting.AppPath
|
|
updated = true
|
|
}
|
|
if runtimeState.LastCustomConf != setting.CustomConf {
|
|
log.Info("CustomConf changed from '%s' to '%s'", runtimeState.LastCustomConf, setting.CustomConf)
|
|
runtimeState.LastCustomConf = setting.CustomConf
|
|
updated = true
|
|
}
|
|
|
|
if updated {
|
|
log.Info("re-sync repository hooks ...")
|
|
mustInitCtx(ctx, repo_service.SyncRepositoryHooks)
|
|
|
|
log.Info("re-write ssh public keys ...")
|
|
mustInit(asymkey_model.RewriteAllPublicKeys)
|
|
|
|
return system.AppState.Set(runtimeState)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GlobalInitInstalled is for global installed configuration.
|
|
func GlobalInitInstalled(ctx context.Context) {
|
|
if !setting.InstallLock {
|
|
log.Fatal("Gitea is not installed")
|
|
}
|
|
|
|
mustInitCtx(ctx, git.InitFull)
|
|
log.Info("Gitea Version: %s%s", setting.AppVer, setting.AppBuiltWith)
|
|
log.Info("Git Version: %s (home: %s)", git.VersionInfo(), git.HomeDir())
|
|
log.Info("AppPath: %s", setting.AppPath)
|
|
log.Info("AppWorkPath: %s", setting.AppWorkPath)
|
|
log.Info("Custom path: %s", setting.CustomPath)
|
|
log.Info("Log path: %s", setting.Log.RootPath)
|
|
log.Info("Configuration file: %s", setting.CustomConf)
|
|
log.Info("Run Mode: %s", util.ToTitleCase(setting.RunMode))
|
|
|
|
// Setup i18n
|
|
translation.InitLocales(ctx)
|
|
|
|
setting.LoadSettings()
|
|
mustInit(storage.Init)
|
|
|
|
mailer.NewContext(ctx)
|
|
mustInit(cache.NewContext)
|
|
notification.NewContext()
|
|
mustInit(archiver.Init)
|
|
|
|
highlight.NewContext()
|
|
external.RegisterRenderers()
|
|
markup.Init(markup_service.ProcessorHelper())
|
|
|
|
if setting.EnableSQLite3 {
|
|
log.Info("SQLite3 support is enabled")
|
|
} else if setting.Database.Type.IsSQLite3() {
|
|
log.Fatal("SQLite3 support is disabled, but it is used for database setting. Please get or build a Gitea release with SQLite3 support.")
|
|
}
|
|
|
|
mustInitCtx(ctx, common.InitDBEngine)
|
|
log.Info("ORM engine initialization successful!")
|
|
mustInit(system.Init)
|
|
mustInit(oauth2.Init)
|
|
|
|
mustInitCtx(ctx, models.Init)
|
|
mustInit(repo_service.Init)
|
|
|
|
// Booting long running goroutines.
|
|
issue_indexer.InitIssueIndexer(false)
|
|
code_indexer.Init()
|
|
mustInit(stats_indexer.Init)
|
|
|
|
mirror_service.InitSyncMirrors()
|
|
mustInit(webhook.Init)
|
|
mustInit(pull_service.Init)
|
|
mustInit(automerge.Init)
|
|
mustInit(task.Init)
|
|
mustInit(repo_migrations.Init)
|
|
eventsource.GetManager().Init()
|
|
mustInitCtx(ctx, mailer_incoming.Init)
|
|
|
|
mustInitCtx(ctx, syncAppConfForGit)
|
|
|
|
mustInit(ssh.Init)
|
|
|
|
auth.Init()
|
|
mustInit(svg.Init)
|
|
|
|
actions_service.Init()
|
|
|
|
// Finally start up the cron
|
|
cron.NewContext(ctx)
|
|
}
|
|
|
|
// NormalRoutes represents non install routes
|
|
func NormalRoutes(ctx context.Context) *web.Route {
|
|
_ = templates.HTMLRenderer()
|
|
r := web.NewRoute()
|
|
r.Use(common.ProtocolMiddlewares()...)
|
|
|
|
r.Mount("/", web_routers.Routes(ctx))
|
|
r.Mount("/api/v1", apiv1.Routes(ctx))
|
|
r.Mount("/api/forgejo/v1", forgejo.Routes(ctx))
|
|
r.Mount("/api/internal", private.Routes())
|
|
|
|
if setting.Packages.Enabled {
|
|
// This implements package support for most package managers
|
|
r.Mount("/api/packages", packages_router.CommonRoutes(ctx))
|
|
// This implements the OCI API (Note this is not preceded by /api but is instead /v2)
|
|
r.Mount("/v2", packages_router.ContainerRoutes(ctx))
|
|
}
|
|
|
|
if setting.Actions.Enabled {
|
|
prefix := "/api/actions"
|
|
r.Mount(prefix, actions_router.Routes(ctx, prefix))
|
|
|
|
// TODO: Pipeline api used for runner internal communication with gitea server. but only artifact is used for now.
|
|
// In Github, it uses ACTIONS_RUNTIME_URL=https://pipelines.actions.githubusercontent.com/fLgcSHkPGySXeIFrg8W8OBSfeg3b5Fls1A1CwX566g8PayEGlg/
|
|
// TODO: this prefix should be generated with a token string with runner ?
|
|
prefix = "/api/actions_pipeline"
|
|
r.Mount(prefix, actions_router.ArtifactsRoutes(prefix))
|
|
}
|
|
|
|
return r
|
|
}
|