[SEMVER] store SemVer in ForgejoSemVer after a database upgrade
(cherry picked from commitb7fe7cf401
) (cherry picked from commitcf339eed4f
) (cherry picked from commit4f3a16168b
) (cherry picked from commit6f5bbc53fc
) (cherry picked from commitaca42b422e
) (cherry picked from commit5a7f7580e5
) (cherry picked from commit06c383c807
) (cherry picked from commitfe831dcb53
) (cherry picked from commitcd12cd0dbc
) (cherry picked from commitcc79163703
) (cherry picked from commit0102a5715e
) (cherry picked from commit403f7520b3
) (cherry picked from commita3b61510a2
) (cherry picked from commitf83f0f9feb
) (cherry picked from commitfd1c3a6d09
) (cherry picked from commitf7cdc3d6f1
) (cherry picked from commit060121b644
) (cherry picked from commit62c847ff02
)
This commit is contained in:
parent
0313d02e50
commit
4d051b51c2
9 changed files with 158 additions and 2 deletions
2
Makefile
2
Makefile
|
@ -95,7 +95,7 @@ VERSION = ${GITEA_VERSION}
|
|||
# SemVer
|
||||
FORGEJO_VERSION := 5.0.0+0-gitea-1.20.0
|
||||
|
||||
LDFLAGS := $(LDFLAGS) -X "main.MakeVersion=$(MAKE_VERSION)" -X "main.Version=$(GITEA_VERSION)" -X "main.Tags=$(TAGS)" -X "code.gitea.io/gitea/routers/api/forgejo/v1.ForgejoVersion=$(FORGEJO_VERSION)"
|
||||
LDFLAGS := $(LDFLAGS) -X "main.MakeVersion=$(MAKE_VERSION)" -X "main.Version=$(GITEA_VERSION)" -X "main.Tags=$(TAGS)" -X "code.gitea.io/gitea/routers/api/forgejo/v1.ForgejoVersion=$(FORGEJO_VERSION)" -X "main.ForgejoVersion=$(FORGEJO_VERSION)"
|
||||
|
||||
LINUX_ARCHS ?= linux/amd64,linux/386,linux/arm-5,linux/arm-6,linux/arm64
|
||||
|
||||
|
|
3
main.go
3
main.go
|
@ -31,8 +31,11 @@ var (
|
|||
MakeVersion = "" // "make" program version if built with make
|
||||
)
|
||||
|
||||
var ForgejoVersion = "1.0.0"
|
||||
|
||||
func init() {
|
||||
setting.AppVer = Version
|
||||
setting.ForgejoVersion = ForgejoVersion
|
||||
setting.AppBuiltWith = formatBuiltWith()
|
||||
setting.AppStartTime = time.Now().UTC()
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ type Engine interface {
|
|||
Incr(column string, arg ...any) *xorm.Session
|
||||
Insert(...any) (int64, error)
|
||||
Iterate(any, xorm.IterFunc) error
|
||||
IsTableExist(any) (bool, error)
|
||||
Join(joinOperator string, tablename, condition any, args ...any) *xorm.Session
|
||||
SQL(any, ...any) *xorm.Session
|
||||
Where(any, ...any) *xorm.Session
|
||||
|
|
|
@ -68,6 +68,7 @@ func TestPrimaryKeys(t *testing.T) {
|
|||
|
||||
whitelist := map[string]string{
|
||||
"the_table_name_to_skip_checking": "Write a note here to explain why",
|
||||
"forgejo_sem_ver": "seriously dude",
|
||||
}
|
||||
|
||||
for _, bean := range beans {
|
||||
|
|
20
models/forgejo/semver/main_test.go
Normal file
20
models/forgejo/semver/main_test.go
Normal file
|
@ -0,0 +1,20 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package semver
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/models/unittest"
|
||||
|
||||
_ "code.gitea.io/gitea/models"
|
||||
_ "code.gitea.io/gitea/models/actions"
|
||||
_ "code.gitea.io/gitea/models/activities"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
unittest.MainTest(m, &unittest.TestOptions{
|
||||
GiteaRootPath: filepath.Join("..", "..", ".."),
|
||||
})
|
||||
}
|
77
models/forgejo/semver/semver.go
Normal file
77
models/forgejo/semver/semver.go
Normal file
|
@ -0,0 +1,77 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package semver
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"code.gitea.io/gitea/models/db"
|
||||
|
||||
"github.com/hashicorp/go-version"
|
||||
)
|
||||
|
||||
func init() {
|
||||
db.RegisterModel(new(ForgejoSemVer))
|
||||
}
|
||||
|
||||
type ForgejoSemVer struct {
|
||||
Version string
|
||||
}
|
||||
|
||||
func GetVersion(ctx context.Context) (*version.Version, error) {
|
||||
return GetVersionWithEngine(db.GetEngine(ctx))
|
||||
}
|
||||
|
||||
func GetVersionWithEngine(e db.Engine) (*version.Version, error) {
|
||||
versionString := "v1.0.0"
|
||||
exists, err := e.IsTableExist("forgejo_sem_ver")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if exists {
|
||||
var semver ForgejoSemVer
|
||||
has, err := e.Get(&semver)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if has {
|
||||
versionString = semver.Version
|
||||
}
|
||||
}
|
||||
|
||||
v, err := version.NewVersion(versionString)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return v, nil
|
||||
}
|
||||
|
||||
func SetVersionString(ctx context.Context, versionString string) error {
|
||||
return SetVersionStringWithEngine(db.GetEngine(ctx), versionString)
|
||||
}
|
||||
|
||||
func SetVersionStringWithEngine(e db.Engine, versionString string) error {
|
||||
v, err := version.NewVersion(versionString)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return SetVersionWithEngine(e, v)
|
||||
}
|
||||
|
||||
func SetVersion(ctx context.Context, v *version.Version) error {
|
||||
return SetVersionWithEngine(db.GetEngine(ctx), v)
|
||||
}
|
||||
|
||||
func SetVersionWithEngine(e db.Engine, v *version.Version) error {
|
||||
var semver ForgejoSemVer
|
||||
has, err := e.Get(&semver)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !has {
|
||||
_, err = e.Exec("insert into forgejo_sem_ver values (?)", v.String())
|
||||
} else {
|
||||
_, err = e.Exec("update forgejo_sem_ver set version = ?", v.String())
|
||||
}
|
||||
return err
|
||||
}
|
46
models/forgejo/semver/semver_test.go
Normal file
46
models/forgejo/semver/semver_test.go
Normal file
|
@ -0,0 +1,46 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package semver
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/models/db"
|
||||
"code.gitea.io/gitea/models/unittest"
|
||||
|
||||
"github.com/hashicorp/go-version"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestForgejoSemVerSetGet(t *testing.T) {
|
||||
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||
ctx := db.DefaultContext
|
||||
|
||||
newVersion, err := version.NewVersion("v1.2.3")
|
||||
assert.NoError(t, err)
|
||||
assert.NoError(t, SetVersionString(ctx, newVersion.String()))
|
||||
databaseVersion, err := GetVersion(ctx)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, newVersion.String(), databaseVersion.String())
|
||||
assert.True(t, newVersion.Equal(databaseVersion))
|
||||
}
|
||||
|
||||
func TestForgejoSemVerMissing(t *testing.T) {
|
||||
assert.NoError(t, unittest.PrepareTestDatabase())
|
||||
ctx := db.DefaultContext
|
||||
e := db.GetEngine(ctx)
|
||||
|
||||
_, err := e.Exec("delete from forgejo_sem_ver")
|
||||
assert.NoError(t, err)
|
||||
|
||||
v, err := GetVersion(ctx)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, "1.0.0", v.String())
|
||||
|
||||
_, err = e.Exec("drop table forgejo_sem_ver")
|
||||
assert.NoError(t, err)
|
||||
|
||||
v, err = GetVersion(ctx)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, "1.0.0", v.String())
|
||||
}
|
|
@ -8,6 +8,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
"code.gitea.io/gitea/models/forgejo/semver"
|
||||
forgejo_v1_20 "code.gitea.io/gitea/models/forgejo_migrations/v1_20"
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
|
@ -141,5 +142,10 @@ func Migrate(x *xorm.Engine) error {
|
|||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
||||
if err := x.Sync(new(semver.ForgejoSemVer)); err != nil {
|
||||
return fmt.Errorf("sync: %w", err)
|
||||
}
|
||||
|
||||
return semver.SetVersionStringWithEngine(x, setting.ForgejoVersion)
|
||||
}
|
||||
|
|
|
@ -15,6 +15,8 @@ import (
|
|||
"code.gitea.io/gitea/modules/user"
|
||||
)
|
||||
|
||||
var ForgejoVersion = "1.0.0"
|
||||
|
||||
// settings
|
||||
var (
|
||||
// AppVer is the version of the current build of Gitea. It is set in main.go from main.Version.
|
||||
|
|
Loading…
Reference in a new issue