enhance: Migrate remaining gopkg.in/yaml.v3 usages to go.yaml.in/yaml/v4 (#37866)

### Description
Replaces all remaining direct `gopkg.in/yaml.v3` imports with
`go.yaml.in/yaml/v4` across models, modules, routers, services, and
integration tests. `gopkg.in/yaml.v3` moves from a direct to an indirect
dependency in `go.mod`.

#### API compatibility

The yaml.Node type, node.Kind/node.Content traversal style
(modules/markup/markdown/convertyaml.go), and the
UnmarshalYAML(*yaml.Node) interface signature
(modules/optional/serialization.go) are all preserved in v4 — no
call-site changes were required beyond the import path.

**Related:**
- https://github.com/go-gitea/gitea/pull/36564#issuecomment-4526536805

---------

Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.8) <noreply@anthropic.com>
This commit is contained in:
Pascal Zimmermann
2026-05-29 03:12:11 +02:00
committed by GitHub
parent 90d443b46c
commit ea723fe482
24 changed files with 26 additions and 26 deletions

View File

@@ -14,7 +14,7 @@ import (
api "gitea.dev/modules/structs"
"gitea.dev/modules/util"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
// CouldBe indicates a file with the filename could be a template,

View File

@@ -10,7 +10,7 @@ import (
"gitea.dev/modules/options"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
type labelFile struct {

View File

@@ -11,7 +11,7 @@ import (
"github.com/yuin/goldmark/ast"
east "github.com/yuin/goldmark/extension/ast"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
func nodeToTable(meta *yaml.Node) ast.Node {

View File

@@ -9,7 +9,7 @@ import (
"unicode"
"unicode/utf8"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
func isYAMLSeparator(line []byte) bool {

View File

@@ -10,7 +10,7 @@ import (
"gitea.dev/modules/markup"
"github.com/yuin/goldmark/ast"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
// RenderConfig represents rendering configuration for this file

View File

@@ -9,7 +9,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
func TestRenderConfig_UnmarshalYAML(t *testing.T) {

View File

@@ -13,7 +13,7 @@ import (
"gitea.dev/modules/log"
"github.com/santhosh-tekuri/jsonschema/v6"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
// schemaLoader implements jsonschema.URLLoader

View File

@@ -6,7 +6,7 @@ package optional
import (
"gitea.dev/modules/json"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
func (o *Option[T]) UnmarshalJSON(data []byte) error {

View File

@@ -11,7 +11,7 @@ import (
"gitea.dev/modules/optional"
"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
type testSerializationStruct struct {

View File

@@ -13,7 +13,7 @@ import (
"gitea.dev/modules/validation"
"github.com/hashicorp/go-version"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
var (

View File

@@ -14,7 +14,7 @@ import (
"gitea.dev/modules/validation"
"github.com/hashicorp/go-version"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
var (

View File

@@ -14,7 +14,7 @@ import (
"gitea.dev/modules/util"
"gitea.dev/modules/validation"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
var (

View File

@@ -10,7 +10,7 @@ import (
"strings"
"time"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
// StateType issue state type
@@ -231,7 +231,7 @@ func (l *IssueTemplateStringSlice) UnmarshalYAML(value *yaml.Node) error {
*l = labels
return nil
}
return fmt.Errorf("line %d: cannot unmarshal %s into IssueTemplateStringSlice", value.Line, value.ShortTag())
return fmt.Errorf("cannot unmarshal %s into IssueTemplateStringSlice", value.ShortTag())
}
type IssueConfigContactLink struct {

View File

@@ -7,7 +7,7 @@ import (
"testing"
"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
func TestIssueTemplate_Type(t *testing.T) {
@@ -88,7 +88,7 @@ labels:
b: bb
`,
tmpl: &IssueTemplate{},
wantErr: "line 3: cannot unmarshal !!map into IssueTemplateStringSlice",
wantErr: "yaml: unmarshal errors:\n line 3: cannot unmarshal !!map into IssueTemplateStringSlice",
},
}
for _, tt := range tests {