feat: add support for release channels in version upgrade and node agent updates

- Introduced ReleaseChannel type to manage stable and preview releases.
- Updated DashboardTopbar to handle version upgrades based on selected release channel.
- Enhanced node detail page to allow manual checks for agent updates on stable and preview channels.
- Modified API endpoints to support fetching and upgrading based on release channels.
- Updated UI components to reflect changes in version checking and upgrade processes.
- Added tests for new functionality related to preview releases and agent updates.
This commit is contained in:
ryan
2026-03-12 11:25:13 +08:00
parent 93e43fb3b0
commit f50eb9adee
25 changed files with 1448 additions and 239 deletions
+1
View File
@@ -113,6 +113,7 @@ func SetApiRouter(router *gin.Engine) {
nodeRoute.POST("/bootstrap-token/rotate", controller.RotateNodeBootstrapToken)
nodeRoute.GET("/", controller.GetNodes)
nodeRoute.POST("/", controller.CreateNode)
nodeRoute.GET("/:id/agent-release", controller.GetNodeAgentRelease)
nodeRoute.POST("/:id/agent-update", controller.RequestNodeAgentUpdate)
nodeRoute.PUT("/:id", controller.UpdateNode)
nodeRoute.DELETE("/:id", controller.DeleteNode)
+6 -2
View File
@@ -77,9 +77,11 @@ func TestLatestReleaseProxy(t *testing.T) {
if loginRecorder.Code != http.StatusOK {
t.Fatalf("unexpected login status code: %d", loginRecorder.Code)
}
loginResult := loginRecorder.Result()
defer loginResult.Body.Close()
req := httptest.NewRequest(http.MethodGet, "/api/update/latest-release", nil)
for _, cookieValue := range loginRecorder.Result().Cookies() {
for _, cookieValue := range loginResult.Cookies() {
req.AddCookie(cookieValue)
}
@@ -133,8 +135,10 @@ func loginRootAndBuildEngine(t *testing.T) (*gin.Engine, []*http.Cookie) {
if loginRecorder.Code != http.StatusOK {
t.Fatalf("unexpected login status code: %d", loginRecorder.Code)
}
loginResult := loginRecorder.Result()
defer loginResult.Body.Close()
return engine, loginRecorder.Result().Cookies()
return engine, loginResult.Cookies()
}
func fakeManualServerBinary(version string) (string, []byte) {