chore(lint): Add exceptions for dbfs_model and unittest (#10275)

Thanks a lot to @floss4good who pointed this out in the comments of
#10253!

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/10275
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: floss4good <floss4good@noreply.codeberg.org>
Co-authored-by: nachtjasmin <nachtjasmin@posteo.de>
Co-committed-by: nachtjasmin <nachtjasmin@posteo.de>
This commit is contained in:
nachtjasmin 2025-12-09 14:34:06 +01:00 committed by Gusted
parent f43d48d5c8
commit 70166de15a
11 changed files with 38 additions and 54 deletions

View file

@ -50,36 +50,20 @@ linters:
importas: importas:
alias: alias:
# Specific overrides that would violate the default rules further below. # Specific overrides that would violate the default rules further below.
- pkg: forgejo.org/models/actions
alias: actions_model
- pkg: forgejo.org/models/activities
alias: activities_model
- pkg: forgejo.org/models/db - pkg: forgejo.org/models/db
alias: "" alias: ""
- pkg: forgejo.org/models/issues
alias: issues_model
- pkg: forgejo.org/models/organization - pkg: forgejo.org/models/organization
alias: org_model alias: org_model
- pkg: forgejo.org/models/packages
alias: packages_model
- pkg: forgejo.org/services/actions
alias: actions_service
- pkg: forgejo.org/services/context - pkg: forgejo.org/services/context
alias: app_context alias: app_context
- pkg: forgejo.org/services/doctor - pkg: forgejo.org/services/doctor
alias: doctor alias: doctor
- pkg: forgejo.org/services/packages
alias: packages_service
- pkg: forgejo.org/services/repository - pkg: forgejo.org/services/repository
alias: repo_service alias: repo_service
# Make sure that we follow a consistent naming for model and service aliases. # Make sure that we follow a consistent naming for model and service aliases.
# The \w+? syntax is the RE2 syntax for: one or more \w, prefer fewer - pkg: 'forgejo.org/(model|service)s/(\w+)'
#
# It's used to make sure that if the model has a plural name, e.g. "issues", it's imported with the singular
# name (e.g. "issue") nonetheless.
- pkg: 'forgejo.org/(model|service)s/(\w+?)s?'
alias: '${2}_${1}' alias: '${2}_${1}'
revive: revive:

View file

@ -6,7 +6,7 @@ package avatars_test
import ( import (
"testing" "testing"
avatar_model "forgejo.org/models/avatars" avatars_model "forgejo.org/models/avatars"
"forgejo.org/models/db" "forgejo.org/models/db"
system_model "forgejo.org/models/system" system_model "forgejo.org/models/system"
"forgejo.org/modules/setting" "forgejo.org/modules/setting"
@ -34,11 +34,11 @@ func enableGravatar(t *testing.T) {
func TestHashEmail(t *testing.T) { func TestHashEmail(t *testing.T) {
assert.Equal(t, assert.Equal(t,
"d41d8cd98f00b204e9800998ecf8427e", "d41d8cd98f00b204e9800998ecf8427e",
avatar_model.HashEmail(""), avatars_model.HashEmail(""),
) )
assert.Equal(t, assert.Equal(t,
"353cbad9b58e69c96154ad99f92bedc7", "353cbad9b58e69c96154ad99f92bedc7",
avatar_model.HashEmail("gitea@example.com"), avatars_model.HashEmail("gitea@example.com"),
) )
} }
@ -48,12 +48,12 @@ func TestSizedAvatarLink(t *testing.T) {
disableGravatar(t) disableGravatar(t)
config.GetDynGetter().InvalidateCache() config.GetDynGetter().InvalidateCache()
assert.Equal(t, "/testsuburl/assets/img/avatar_default.png", assert.Equal(t, "/testsuburl/assets/img/avatar_default.png",
avatar_model.GenerateEmailAvatarFastLink(db.DefaultContext, "gitea@example.com", 100)) avatars_model.GenerateEmailAvatarFastLink(db.DefaultContext, "gitea@example.com", 100))
enableGravatar(t) enableGravatar(t)
config.GetDynGetter().InvalidateCache() config.GetDynGetter().InvalidateCache()
assert.Equal(t, assert.Equal(t,
"https://secure.gravatar.com/avatar/353cbad9b58e69c96154ad99f92bedc7?d=identicon&s=100", "https://secure.gravatar.com/avatar/353cbad9b58e69c96154ad99f92bedc7?d=identicon&s=100",
avatar_model.GenerateEmailAvatarFastLink(db.DefaultContext, "gitea@example.com", 100), avatars_model.GenerateEmailAvatarFastLink(db.DefaultContext, "gitea@example.com", 100),
) )
} }

View file

@ -17,7 +17,7 @@ import (
"forgejo.org/routers/api/v1/utils" "forgejo.org/routers/api/v1/utils"
actions_service "forgejo.org/services/actions" actions_service "forgejo.org/services/actions"
"forgejo.org/services/context" "forgejo.org/services/context"
secret_service "forgejo.org/services/secrets" secrets_service "forgejo.org/services/secrets"
) )
// ListActionsSecrets lists actions secrets of an organization // ListActionsSecrets lists actions secrets of an organization
@ -106,7 +106,7 @@ func (Action) CreateOrUpdateSecret(ctx *context.APIContext) {
opt := web.GetForm(ctx).(*api.CreateOrUpdateSecretOption) opt := web.GetForm(ctx).(*api.CreateOrUpdateSecretOption)
_, created, err := secret_service.CreateOrUpdateSecret(ctx, ctx.Org.Organization.ID, 0, ctx.Params("secretname"), opt.Data) _, created, err := secrets_service.CreateOrUpdateSecret(ctx, ctx.Org.Organization.ID, 0, ctx.Params("secretname"), opt.Data)
if err != nil { if err != nil {
if errors.Is(err, util.ErrInvalidArgument) { if errors.Is(err, util.ErrInvalidArgument) {
ctx.Error(http.StatusBadRequest, "CreateOrUpdateSecret", err) ctx.Error(http.StatusBadRequest, "CreateOrUpdateSecret", err)
@ -153,7 +153,7 @@ func (Action) DeleteSecret(ctx *context.APIContext) {
// "404": // "404":
// "$ref": "#/responses/notFound" // "$ref": "#/responses/notFound"
err := secret_service.DeleteSecretByName(ctx, ctx.Org.Organization.ID, 0, ctx.Params("secretname")) err := secrets_service.DeleteSecretByName(ctx, ctx.Org.Organization.ID, 0, ctx.Params("secretname"))
if err != nil { if err != nil {
if errors.Is(err, util.ErrInvalidArgument) { if errors.Is(err, util.ErrInvalidArgument) {
ctx.Error(http.StatusBadRequest, "DeleteSecret", err) ctx.Error(http.StatusBadRequest, "DeleteSecret", err)

View file

@ -19,7 +19,7 @@ import (
actions_service "forgejo.org/services/actions" actions_service "forgejo.org/services/actions"
"forgejo.org/services/context" "forgejo.org/services/context"
"forgejo.org/services/convert" "forgejo.org/services/convert"
secret_service "forgejo.org/services/secrets" secrets_service "forgejo.org/services/secrets"
) )
// ListActionsSecrets list an repo's actions secrets // ListActionsSecrets list an repo's actions secrets
@ -122,7 +122,7 @@ func (Action) CreateOrUpdateSecret(ctx *context.APIContext) {
opt := web.GetForm(ctx).(*api.CreateOrUpdateSecretOption) opt := web.GetForm(ctx).(*api.CreateOrUpdateSecretOption)
_, created, err := secret_service.CreateOrUpdateSecret(ctx, 0, repo.ID, ctx.Params("secretname"), opt.Data) _, created, err := secrets_service.CreateOrUpdateSecret(ctx, 0, repo.ID, ctx.Params("secretname"), opt.Data)
if err != nil { if err != nil {
if errors.Is(err, util.ErrInvalidArgument) { if errors.Is(err, util.ErrInvalidArgument) {
ctx.Error(http.StatusBadRequest, "CreateOrUpdateSecret", err) ctx.Error(http.StatusBadRequest, "CreateOrUpdateSecret", err)
@ -176,7 +176,7 @@ func (Action) DeleteSecret(ctx *context.APIContext) {
repo := ctx.Repo.Repository repo := ctx.Repo.Repository
err := secret_service.DeleteSecretByName(ctx, 0, repo.ID, ctx.Params("secretname")) err := secrets_service.DeleteSecretByName(ctx, 0, repo.ID, ctx.Params("secretname"))
if err != nil { if err != nil {
if errors.Is(err, util.ErrInvalidArgument) { if errors.Is(err, util.ErrInvalidArgument) {
ctx.Error(http.StatusBadRequest, "DeleteSecret", err) ctx.Error(http.StatusBadRequest, "DeleteSecret", err)

View file

@ -15,7 +15,7 @@ import (
"forgejo.org/routers/api/v1/utils" "forgejo.org/routers/api/v1/utils"
actions_service "forgejo.org/services/actions" actions_service "forgejo.org/services/actions"
"forgejo.org/services/context" "forgejo.org/services/context"
secret_service "forgejo.org/services/secrets" secrets_service "forgejo.org/services/secrets"
) )
// create or update one secret of the user scope // create or update one secret of the user scope
@ -53,7 +53,7 @@ func CreateOrUpdateSecret(ctx *context.APIContext) {
opt := web.GetForm(ctx).(*api.CreateOrUpdateSecretOption) opt := web.GetForm(ctx).(*api.CreateOrUpdateSecretOption)
_, created, err := secret_service.CreateOrUpdateSecret(ctx, ctx.Doer.ID, 0, ctx.Params("secretname"), opt.Data) _, created, err := secrets_service.CreateOrUpdateSecret(ctx, ctx.Doer.ID, 0, ctx.Params("secretname"), opt.Data)
if err != nil { if err != nil {
if errors.Is(err, util.ErrInvalidArgument) { if errors.Is(err, util.ErrInvalidArgument) {
ctx.Error(http.StatusBadRequest, "CreateOrUpdateSecret", err) ctx.Error(http.StatusBadRequest, "CreateOrUpdateSecret", err)
@ -99,7 +99,7 @@ func DeleteSecret(ctx *context.APIContext) {
// "404": // "404":
// "$ref": "#/responses/notFound" // "$ref": "#/responses/notFound"
err := secret_service.DeleteSecretByName(ctx, ctx.Doer.ID, 0, ctx.Params("secretname")) err := secrets_service.DeleteSecretByName(ctx, ctx.Doer.ID, 0, ctx.Params("secretname"))
if err != nil { if err != nil {
if errors.Is(err, util.ErrInvalidArgument) { if errors.Is(err, util.ErrInvalidArgument) {
ctx.Error(http.StatusBadRequest, "DeleteSecret", err) ctx.Error(http.StatusBadRequest, "DeleteSecret", err)

View file

@ -44,7 +44,7 @@ import (
"forgejo.org/services/mailer" "forgejo.org/services/mailer"
mailer_incoming "forgejo.org/services/mailer/incoming" mailer_incoming "forgejo.org/services/mailer/incoming"
markup_service "forgejo.org/services/markup" markup_service "forgejo.org/services/markup"
migration_service "forgejo.org/services/migrations" migrations_service "forgejo.org/services/migrations"
mirror_service "forgejo.org/services/mirror" mirror_service "forgejo.org/services/mirror"
pull_service "forgejo.org/services/pull" pull_service "forgejo.org/services/pull"
release_service "forgejo.org/services/release" release_service "forgejo.org/services/release"
@ -157,7 +157,7 @@ func InitWebInstalled(ctx context.Context) {
mustInit(pull_service.Init) mustInit(pull_service.Init)
mustInit(automerge.Init) mustInit(automerge.Init)
mustInit(task.Init) mustInit(task.Init)
mustInit(migration_service.Init) mustInit(migrations_service.Init)
eventsource.GetManager().Init() eventsource.GetManager().Init()
mustInitCtx(ctx, mailer_incoming.Init) mustInitCtx(ctx, mailer_incoming.Init)

View file

@ -8,14 +8,14 @@ import (
actions_model "forgejo.org/models/actions" actions_model "forgejo.org/models/actions"
"forgejo.org/models/db" "forgejo.org/models/db"
unittest_model "forgejo.org/models/unittest" "forgejo.org/models/unittest"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func Test_loadIsRefDeleted(t *testing.T) { func Test_loadIsRefDeleted(t *testing.T) {
unittest_model.PrepareTestEnv(t) unittest.PrepareTestEnv(t)
runs, total, err := db.FindAndCount[actions_model.ActionRun](db.DefaultContext, runs, total, err := db.FindAndCount[actions_model.ActionRun](db.DefaultContext,
actions_model.FindRunOptions{RepoID: 4, Ref: "refs/heads/test"}) actions_model.FindRunOptions{RepoID: 4, Ref: "refs/heads/test"})

View file

@ -11,7 +11,7 @@ import (
actions_model "forgejo.org/models/actions" actions_model "forgejo.org/models/actions"
repo_model "forgejo.org/models/repo" repo_model "forgejo.org/models/repo"
unittest_model "forgejo.org/models/unittest" "forgejo.org/models/unittest"
"forgejo.org/modules/json" "forgejo.org/modules/json"
"forgejo.org/modules/translation" "forgejo.org/modules/translation"
"forgejo.org/modules/web" "forgejo.org/modules/web"
@ -22,9 +22,9 @@ import (
) )
func TestActionsViewGetRunByID(t *testing.T) { func TestActionsViewGetRunByID(t *testing.T) {
unittest_model.PrepareTestEnv(t) unittest.PrepareTestEnv(t)
repo := unittest_model.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: 5, ID: 4}) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: 5, ID: 4})
for _, testCase := range []struct { for _, testCase := range []struct {
name string name string
@ -63,7 +63,7 @@ func TestActionsViewGetRunByID(t *testing.T) {
} }
func TestActionsViewArtifactsFind(t *testing.T) { func TestActionsViewArtifactsFind(t *testing.T) {
unittest_model.PrepareTestEnv(t) unittest.PrepareTestEnv(t)
for _, testCase := range []struct { for _, testCase := range []struct {
name string name string
@ -95,7 +95,7 @@ func TestActionsViewArtifactsFind(t *testing.T) {
} }
func TestActionsViewArtifactsFindByNameOrID(t *testing.T) { func TestActionsViewArtifactsFindByNameOrID(t *testing.T) {
unittest_model.PrepareTestEnv(t) unittest.PrepareTestEnv(t)
for _, testCase := range []struct { for _, testCase := range []struct {
name string name string
@ -223,7 +223,7 @@ func baseExpectedViewResponse() *ViewResponse {
} }
func TestActionsViewViewPost(t *testing.T) { func TestActionsViewViewPost(t *testing.T) {
unittest_model.PrepareTestEnv(t) unittest.PrepareTestEnv(t)
tests := []struct { tests := []struct {
name string name string
@ -383,7 +383,7 @@ func TestActionsViewViewPost(t *testing.T) {
} }
func TestActionsViewRedirectToLatestAttempt(t *testing.T) { func TestActionsViewRedirectToLatestAttempt(t *testing.T) {
unittest_model.PrepareTestEnv(t) unittest.PrepareTestEnv(t)
tests := []struct { tests := []struct {
name string name string

View file

@ -11,7 +11,7 @@ import (
"forgejo.org/modules/web" "forgejo.org/modules/web"
"forgejo.org/services/context" "forgejo.org/services/context"
"forgejo.org/services/forms" "forgejo.org/services/forms"
secret_service "forgejo.org/services/secrets" secrets_service "forgejo.org/services/secrets"
) )
func SetSecretsContext(ctx *context.Context, ownerID, repoID int64) { func SetSecretsContext(ctx *context.Context, ownerID, repoID int64) {
@ -27,7 +27,7 @@ func SetSecretsContext(ctx *context.Context, ownerID, repoID int64) {
func PerformSecretsPost(ctx *context.Context, ownerID, repoID int64, redirectURL string) { func PerformSecretsPost(ctx *context.Context, ownerID, repoID int64, redirectURL string) {
form := web.GetForm(ctx).(*forms.AddSecretForm) form := web.GetForm(ctx).(*forms.AddSecretForm)
s, _, err := secret_service.CreateOrUpdateSecret(ctx, ownerID, repoID, form.Name, util.ReserveLineBreakForTextarea(form.Data)) s, _, err := secrets_service.CreateOrUpdateSecret(ctx, ownerID, repoID, form.Name, util.ReserveLineBreakForTextarea(form.Data))
if err != nil { if err != nil {
log.Error("CreateOrUpdateSecret failed: %v", err) log.Error("CreateOrUpdateSecret failed: %v", err)
ctx.JSONError(ctx.Tr("secrets.creation.failed")) ctx.JSONError(ctx.Tr("secrets.creation.failed"))
@ -41,7 +41,7 @@ func PerformSecretsPost(ctx *context.Context, ownerID, repoID int64, redirectURL
func PerformSecretsDelete(ctx *context.Context, ownerID, repoID int64, redirectURL string) { func PerformSecretsDelete(ctx *context.Context, ownerID, repoID int64, redirectURL string) {
id := ctx.FormInt64("id") id := ctx.FormInt64("id")
err := secret_service.DeleteSecretByID(ctx, ownerID, repoID, id) err := secrets_service.DeleteSecretByID(ctx, ownerID, repoID, id)
if err != nil { if err != nil {
log.Error("DeleteSecretByID(%d) failed: %v", id, err) log.Error("DeleteSecretByID(%d) failed: %v", id, err)
ctx.JSONError(ctx.Tr("secrets.deletion.failed")) ctx.JSONError(ctx.Tr("secrets.deletion.failed"))

View file

@ -8,7 +8,7 @@ import (
"time" "time"
actions_model "forgejo.org/models/actions" actions_model "forgejo.org/models/actions"
dbf_model "forgejo.org/models/dbfs" dbfs_model "forgejo.org/models/dbfs"
"forgejo.org/models/unittest" "forgejo.org/models/unittest"
"forgejo.org/modules/test" "forgejo.org/modules/test"
"forgejo.org/modules/timeutil" "forgejo.org/modules/timeutil"
@ -50,19 +50,19 @@ func TestServicesActions_transferLingeringLogs(t *testing.T) {
} }
lingeringLogIDs := []int64{1, 4, 5} lingeringLogIDs := []int64{1, 4, 5}
assert.True(t, unittest.BeanExists(t, &dbf_model.DbfsMeta{}, builder.In("id", []any{lingeringLogIDs}...))) assert.True(t, unittest.BeanExists(t, &dbfs_model.DbfsMeta{}, builder.In("id", []any{lingeringLogIDs}...)))
// first pass transfer logs for transferLingeringLogsMax tasks // first pass transfer logs for transferLingeringLogsMax tasks
require.NoError(t, transferLingeringLogs(t.Context(), transferLingeringLogsOpts(now))) require.NoError(t, transferLingeringLogs(t.Context(), transferLingeringLogsOpts(now)))
assert.True(t, unittest.BeanExists(t, &dbf_model.DbfsMeta{}, builder.In("id", []any{lingeringLogIDs[transferLingeringLogsMax:]}...))) assert.True(t, unittest.BeanExists(t, &dbfs_model.DbfsMeta{}, builder.In("id", []any{lingeringLogIDs[transferLingeringLogsMax:]}...)))
for _, lingeringLogID := range lingeringLogIDs[:transferLingeringLogsMax] { for _, lingeringLogID := range lingeringLogIDs[:transferLingeringLogsMax] {
unittest.AssertNotExistsBean(t, &dbf_model.DbfsMeta{ID: lingeringLogID}) unittest.AssertNotExistsBean(t, &dbfs_model.DbfsMeta{ID: lingeringLogID})
} }
// second pass transfer logs for the remainder tasks and there are none left // second pass transfer logs for the remainder tasks and there are none left
require.NoError(t, transferLingeringLogs(t.Context(), transferLingeringLogsOpts(now))) require.NoError(t, transferLingeringLogs(t.Context(), transferLingeringLogsOpts(now)))
for _, lingeringLogID := range lingeringLogIDs { for _, lingeringLogID := range lingeringLogIDs {
unittest.AssertNotExistsBean(t, &dbf_model.DbfsMeta{ID: lingeringLogID}) unittest.AssertNotExistsBean(t, &dbfs_model.DbfsMeta{ID: lingeringLogID})
} }
// third pass is happilly doing nothing // third pass is happilly doing nothing

View file

@ -11,11 +11,11 @@ import (
actions_model "forgejo.org/models/actions" actions_model "forgejo.org/models/actions"
"forgejo.org/modules/log" "forgejo.org/modules/log"
"forgejo.org/modules/util" "forgejo.org/modules/util"
secret_service "forgejo.org/services/secrets" secrets_service "forgejo.org/services/secrets"
) )
func CreateVariable(ctx context.Context, ownerID, repoID int64, name, data string) (*actions_model.ActionVariable, error) { func CreateVariable(ctx context.Context, ownerID, repoID int64, name, data string) (*actions_model.ActionVariable, error) {
if err := secret_service.ValidateName(name); err != nil { if err := secrets_service.ValidateName(name); err != nil {
return nil, err return nil, err
} }
@ -32,7 +32,7 @@ func CreateVariable(ctx context.Context, ownerID, repoID int64, name, data strin
} }
func UpdateVariable(ctx context.Context, variableID, ownerID, repoID int64, name, data string) (bool, error) { func UpdateVariable(ctx context.Context, variableID, ownerID, repoID int64, name, data string) (bool, error) {
if err := secret_service.ValidateName(name); err != nil { if err := secrets_service.ValidateName(name); err != nil {
return false, err return false, err
} }
@ -50,7 +50,7 @@ func UpdateVariable(ctx context.Context, variableID, ownerID, repoID int64, name
} }
func DeleteVariableByName(ctx context.Context, ownerID, repoID int64, name string) error { func DeleteVariableByName(ctx context.Context, ownerID, repoID int64, name string) error {
if err := secret_service.ValidateName(name); err != nil { if err := secrets_service.ValidateName(name); err != nil {
return err return err
} }