mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-10-24 19:12:24 +00:00
[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)
This commit is contained in:
parent
de3a74e576
commit
f3ad9d345f
9 changed files with 158 additions and 2 deletions
2
Makefile
2
Makefile
|
|
@ -91,7 +91,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…
Add table
Add a link
Reference in a new issue