Adding upstream version 0.28.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
88f1d47ab6
commit
e28c88ef14
933 changed files with 194711 additions and 0 deletions
83
modernc_versions_check.go
Normal file
83
modernc_versions_check.go
Normal file
|
@ -0,0 +1,83 @@
|
|||
package pocketbase
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"runtime/debug"
|
||||
|
||||
"github.com/fatih/color"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
)
|
||||
|
||||
const (
|
||||
expectedDriverVersion = "v1.37.0"
|
||||
expectedLibcVersion = "v1.62.1"
|
||||
|
||||
// ModerncDepsCheckHookId is the id of the hook that performs the modernc.org/* deps checks.
|
||||
// It could be used for removing/unbinding the hook if you don't want the checks.
|
||||
ModerncDepsCheckHookId = "pbModerncDepsCheck"
|
||||
)
|
||||
|
||||
// checkModerncDeps checks whether the current binary was buit with the
|
||||
// expected and tested modernc driver dependencies.
|
||||
//
|
||||
// This is needed because modernc.org/libc doesn't follow semantic versioning
|
||||
// and using a version different from the one in the go.mod of modernc.org/sqlite
|
||||
// could have unintended side-effects and cause obscure build and runtime bugs
|
||||
// (https://github.com/pocketbase/pocketbase/issues/6136).
|
||||
func checkModerncDeps(app core.App) {
|
||||
info, ok := debug.ReadBuildInfo()
|
||||
if !ok {
|
||||
return // no build info (probably compiled without module support)
|
||||
}
|
||||
|
||||
var driverVersion, libcVersion string
|
||||
|
||||
for _, dep := range info.Deps {
|
||||
switch dep.Path {
|
||||
case "modernc.org/libc":
|
||||
libcVersion = dep.Version
|
||||
case "modernc.org/sqlite":
|
||||
driverVersion = dep.Version
|
||||
}
|
||||
|
||||
// no need to further search if both deps are located
|
||||
if driverVersion != "" && libcVersion != "" {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// not using the default driver
|
||||
if driverVersion == "" {
|
||||
return
|
||||
}
|
||||
|
||||
var msg string
|
||||
if driverVersion != expectedDriverVersion {
|
||||
msg = fmt.Sprintf(
|
||||
"You are using modernc.org/sqlite %s which differs from the expected and tested %s.\n"+
|
||||
"Make sure to either manually update in your go.mod the dependency version to the expected one OR if you want to keep yours "+
|
||||
"ensure that its indirect modernc.org/libc dependency has the same version as in the https://gitlab.com/cznic/sqlite/-/blob/master/go.mod, "+
|
||||
"otherwise it could result in unexpected build or runtime errors.",
|
||||
driverVersion,
|
||||
expectedDriverVersion,
|
||||
)
|
||||
app.Logger().Warn(msg, slog.String("current", driverVersion), slog.String("expected", expectedDriverVersion))
|
||||
} else if libcVersion != expectedLibcVersion {
|
||||
msg = fmt.Sprintf(
|
||||
"You are using modernc.org/libc %s which differs from the expected and tested %s.\n"+
|
||||
"Please update your go.mod and manually set modernc.org/libc to %s, otherwise it could result in unexpected build or runtime errors "+
|
||||
"(you may have to also run 'go clean -modcache' to clear the cache if the warning persists).",
|
||||
libcVersion,
|
||||
expectedLibcVersion,
|
||||
expectedLibcVersion,
|
||||
)
|
||||
app.Logger().Warn(msg, slog.String("current", libcVersion), slog.String("expected", expectedLibcVersion))
|
||||
}
|
||||
|
||||
// ensure that the message is printed to the default stderr too
|
||||
// (when in dev mode this is not needed because we print all logs)
|
||||
if msg != "" && !app.IsDev() {
|
||||
color.Yellow("\nWARN " + msg + "\n\n")
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue