forked from NYANDEV/forgejo
[SEMVER] store SemVer in ForgejoSemVer after a database upgrade
(cherry picked from commit b7fe7cf401f4bddd6455efc651f7ac054f3fe1cf) (cherry picked from commit cf339eed4f4851b18448dbdd83df32d00bc6f45b) (cherry picked from commit 4f3a16168bbeced519a60c32e10e2895d9367238) (cherry picked from commit 6f5bbc53fcebd614f5ee8627c7d6e3c637ffa694) (cherry picked from commit aca42b422e76668387769c15868ef77b073bb7db) (cherry picked from commit 5a7f7580e525694d1f27e12329c8532bd29273f8) (cherry picked from commit 06c383c807ad49e1e35b429a10c6a11c65aeebe5) (cherry picked from commit fe831dcb53b81b6cc632be751bfcbfb9bc00efd3) (cherry picked from commit cd12cd0dbce47c6117ea579ae5019c182155b3a9) (cherry picked from commit cc79163703ce31706c86b88c38fb8a20ed745e20) (cherry picked from commit 0102a5715ea6a03b560cc2f0b6cbe2b2576c255e) (cherry picked from commit 403f7520b3056eace36eae505afbab6a05f597b7) (cherry picked from commit a3b61510a246f61c174ddc3c288e556522a6aab9)
This commit is contained in:
parent
00c6940851
commit
f83f0f9feb
9 changed files with 158 additions and 2 deletions
2
Makefile
2
Makefile
|
@ -95,7 +95,7 @@ VERSION = ${GITEA_VERSION}
|
||||||
# SemVer
|
# SemVer
|
||||||
FORGEJO_VERSION := 6.0.0+0-gitea-1.21.0
|
FORGEJO_VERSION := 6.0.0+0-gitea-1.21.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
|
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
|
MakeVersion = "" // "make" program version if built with make
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var ForgejoVersion = "1.0.0"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
setting.AppVer = Version
|
setting.AppVer = Version
|
||||||
|
setting.ForgejoVersion = ForgejoVersion
|
||||||
setting.AppBuiltWith = formatBuiltWith()
|
setting.AppBuiltWith = formatBuiltWith()
|
||||||
setting.AppStartTime = time.Now().UTC()
|
setting.AppStartTime = time.Now().UTC()
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ type Engine interface {
|
||||||
Incr(column string, arg ...any) *xorm.Session
|
Incr(column string, arg ...any) *xorm.Session
|
||||||
Insert(...any) (int64, error)
|
Insert(...any) (int64, error)
|
||||||
Iterate(any, xorm.IterFunc) error
|
Iterate(any, xorm.IterFunc) error
|
||||||
|
IsTableExist(any) (bool, error)
|
||||||
Join(joinOperator string, tablename, condition any, args ...any) *xorm.Session
|
Join(joinOperator string, tablename, condition any, args ...any) *xorm.Session
|
||||||
SQL(any, ...any) *xorm.Session
|
SQL(any, ...any) *xorm.Session
|
||||||
Where(any, ...any) *xorm.Session
|
Where(any, ...any) *xorm.Session
|
||||||
|
|
|
@ -68,6 +68,7 @@ func TestPrimaryKeys(t *testing.T) {
|
||||||
|
|
||||||
whitelist := map[string]string{
|
whitelist := map[string]string{
|
||||||
"the_table_name_to_skip_checking": "Write a note here to explain why",
|
"the_table_name_to_skip_checking": "Write a note here to explain why",
|
||||||
|
"forgejo_sem_ver": "seriously dude",
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, bean := range beans {
|
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"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/models/forgejo/semver"
|
||||||
forgejo_v1_20 "code.gitea.io/gitea/models/forgejo_migrations/v1_20"
|
forgejo_v1_20 "code.gitea.io/gitea/models/forgejo_migrations/v1_20"
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
|
@ -141,5 +142,10 @@ func Migrate(x *xorm.Engine) error {
|
||||||
return err
|
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"
|
"code.gitea.io/gitea/modules/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var ForgejoVersion = "1.0.0"
|
||||||
|
|
||||||
// settings
|
// settings
|
||||||
var (
|
var (
|
||||||
// AppVer is the version of the current build of Gitea. It is set in main.go from main.Version.
|
// 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