mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 14:31:02 +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) (cherry picked from commitf3ad9d345f) (cherry picked from commit1a01baaa0f) (cherry picked from commit21123afcfd) (cherry picked from commitfdfbda0f9b) (cherry picked from commit19eb6b5774)
This commit is contained in:
		
					parent
					
						
							
								ca778777f5
							
						
					
				
			
			
				commit
				
					
						a411a377b0
					
				
			
		
					 9 changed files with 158 additions and 2 deletions
				
			
		
							
								
								
									
										2
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -91,7 +91,7 @@ VERSION = ${GITEA_VERSION} | |||
| # SemVer
 | ||||
| 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 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										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…
	
	Add table
		Add a link
		
	
		Reference in a new issue