This is an automated email from the ASF dual-hosted git repository.

linkinstar pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/answer.git


The following commit(s) were added to refs/heads/dev by this push:
     new b83d0214 feat(ci): add lint action
b83d0214 is described below

commit b83d0214c70126bbb6c97db38e9c239480eb2df7
Author: ferhat elmas <[email protected]>
AuthorDate: Fri Jan 23 21:43:40 2026 +0100

    feat(ci): add lint action
    
    related to #1432
    
    Signed-off-by: ferhat elmas <[email protected]>
---
 .github/workflows/lint.yml           | 62 ++++++++++++++++++++++++++++++++++++
 cmd/wire_gen.go                      | 48 ++++++++++++++--------------
 go.mod                               |  2 +-
 internal/base/translator/provider.go |  4 +--
 script/check-asf-header.sh           |  2 +-
 5 files changed, 90 insertions(+), 28 deletions(-)

diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
new file mode 100644
index 00000000..53463b39
--- /dev/null
+++ b/.github/workflows/lint.yml
@@ -0,0 +1,62 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+name: Lint
+
+on:
+  push:
+  pull_request:
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.event_name }}-${{ 
github.event.number || github.run_id }}
+  cancel-in-progress: true
+
+jobs:
+  lint:
+    name: Lint (${{ matrix.os }})
+    runs-on: ${{ matrix.os }}
+    timeout-minutes: 15
+    strategy:
+      fail-fast: false
+      matrix:
+        os: [ubuntu-latest]
+
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v4
+
+      - name: Setup Go
+        uses: actions/setup-go@v5
+        with:
+          go-version: "1.23"
+          cache: true
+
+      - name: Run go mod tidy
+        run: go mod tidy
+
+      - name: Run golangci-lint
+        run: make lint
+
+      - name: Check for uncommitted changes
+        shell: bash
+        run: |
+          if [ -n "$(git status --porcelain)" ]; then
+            echo "::error::Uncommitted changes detected"
+            git status
+            git diff
+            exit 1
+          fi
diff --git a/cmd/wire_gen.go b/cmd/wire_gen.go
index 22a70f29..5b999021 100644
--- a/cmd/wire_gen.go
+++ b/cmd/wire_gen.go
@@ -172,29 +172,29 @@ func initApplication(debug bool, serverConf *conf.Server, 
dbConf *data.Database,
        tagRepo := tag.NewTagRepo(dataData, uniqueIDRepo)
        revisionRepo := revision.NewRevisionRepo(dataData, uniqueIDRepo)
        revisionService := revision_common.NewRevisionService(revisionRepo, 
userRepo)
-       v := activityqueue.NewService()
-       tagCommonService := tag_common2.NewTagCommonService(tagCommonRepo, 
tagRelRepo, tagRepo, revisionService, siteInfoCommonService, v)
+       service := activityqueue.NewService()
+       tagCommonService := tag_common2.NewTagCommonService(tagCommonRepo, 
tagRelRepo, tagRepo, revisionService, siteInfoCommonService, service)
        collectionRepo := collection.NewCollectionRepo(dataData, uniqueIDRepo)
        collectionCommon := collectioncommon.NewCollectionCommon(collectionRepo)
        answerCommon := answercommon.NewAnswerCommon(answerRepo)
        metaRepo := meta.NewMetaRepo(dataData)
        metaCommonService := metacommon.NewMetaCommonService(metaRepo)
-       questionCommon := questioncommon.NewQuestionCommon(questionRepo, 
answerRepo, voteRepo, followRepo, tagCommonService, userCommon, 
collectionCommon, answerCommon, metaCommonService, configService, v, 
revisionRepo, siteInfoCommonService, dataData)
-       v2 := eventqueue.NewService()
+       questionCommon := questioncommon.NewQuestionCommon(questionRepo, 
answerRepo, voteRepo, followRepo, tagCommonService, userCommon, 
collectionCommon, answerCommon, metaCommonService, configService, service, 
revisionRepo, siteInfoCommonService, dataData)
+       eventqueueService := eventqueue.NewService()
        fileRecordRepo := file_record.NewFileRecordRepo(dataData)
        fileRecordService := file_record2.NewFileRecordService(fileRecordRepo, 
revisionRepo, serviceConf, siteInfoCommonService, userCommon)
-       userService := content.NewUserService(userRepo, userActiveActivityRepo, 
activityRepo, emailService, authService, siteInfoCommonService, 
userRoleRelService, userCommon, userExternalLoginService, 
userNotificationConfigRepo, userNotificationConfigService, questionCommon, v2, 
fileRecordService)
+       userService := content.NewUserService(userRepo, userActiveActivityRepo, 
activityRepo, emailService, authService, siteInfoCommonService, 
userRoleRelService, userCommon, userExternalLoginService, 
userNotificationConfigRepo, userNotificationConfigService, questionCommon, 
eventqueueService, fileRecordService)
        captchaRepo := captcha.NewCaptchaRepo(dataData)
        captchaService := action.NewCaptchaService(captchaRepo)
        userController := controller.NewUserController(authService, 
userService, captchaService, emailService, siteInfoCommonService, 
userNotificationConfigService)
        commentRepo := comment.NewCommentRepo(dataData, uniqueIDRepo)
        commentCommonRepo := comment.NewCommentCommonRepo(dataData, 
uniqueIDRepo)
        objService := object_info.NewObjService(answerRepo, questionRepo, 
commentCommonRepo, tagCommonRepo, tagCommonService)
-       v3 := noticequeue.NewService()
-       v4 := noticequeue.NewExternalService()
+       noticequeueService := noticequeue.NewService()
+       externalService := noticequeue.NewExternalService()
        reviewRepo := review.NewReviewRepo(dataData)
-       reviewService := review2.NewReviewService(reviewRepo, objService, 
userCommon, userRepo, questionRepo, answerRepo, userRoleRelService, v4, 
tagCommonService, questionCommon, v3, siteInfoCommonService, commentCommonRepo)
-       commentService := comment2.NewCommentService(commentRepo, 
commentCommonRepo, userCommon, objService, voteRepo, emailService, userRepo, 
v3, v4, v, v2, reviewService)
+       reviewService := review2.NewReviewService(reviewRepo, objService, 
userCommon, userRepo, questionRepo, answerRepo, userRoleRelService, 
externalService, tagCommonService, questionCommon, noticequeueService, 
siteInfoCommonService, commentCommonRepo)
+       commentService := comment2.NewCommentService(commentRepo, 
commentCommonRepo, userCommon, objService, voteRepo, emailService, userRepo, 
noticequeueService, externalService, service, eventqueueService, reviewService)
        rolePowerRelRepo := role.NewRolePowerRelRepo(dataData)
        rolePowerRelService := role2.NewRolePowerRelService(rolePowerRelRepo, 
userRoleRelService)
        rankService := rank2.NewRankService(userCommon, userRankRepo, 
objService, userRoleRelService, rolePowerRelService, configService)
@@ -202,17 +202,17 @@ func initApplication(debug bool, serverConf *conf.Server, 
dbConf *data.Database,
        rateLimitMiddleware := middleware.NewRateLimitMiddleware(limitRepo)
        commentController := controller.NewCommentController(commentService, 
rankService, captchaService, rateLimitMiddleware)
        reportRepo := report.NewReportRepo(dataData, uniqueIDRepo)
-       tagService := tag2.NewTagService(tagRepo, tagCommonService, 
revisionService, followRepo, siteInfoCommonService, v)
-       answerActivityRepo := activity.NewAnswerActivityRepo(dataData, 
activityRepo, userRankRepo, v3)
+       tagService := tag2.NewTagService(tagRepo, tagCommonService, 
revisionService, followRepo, siteInfoCommonService, service)
+       answerActivityRepo := activity.NewAnswerActivityRepo(dataData, 
activityRepo, userRankRepo, noticequeueService)
        answerActivityService := 
activity2.NewAnswerActivityService(answerActivityRepo, configService)
-       externalNotificationService := 
notification.NewExternalNotificationService(dataData, 
userNotificationConfigRepo, followRepo, emailService, userRepo, v4, 
userExternalLoginRepo, siteInfoCommonService)
-       questionService := content.NewQuestionService(activityRepo, 
questionRepo, answerRepo, tagCommonService, tagService, questionCommon, 
userCommon, userRepo, userRoleRelService, revisionService, metaCommonService, 
collectionCommon, answerActivityService, emailService, v3, v4, v, 
siteInfoCommonService, externalNotificationService, reviewService, 
configService, v2, reviewRepo)
-       answerService := content.NewAnswerService(answerRepo, questionRepo, 
questionCommon, userCommon, collectionCommon, userRepo, revisionService, 
answerActivityService, answerCommon, voteRepo, emailService, 
userRoleRelService, v3, v4, v, reviewService, v2)
+       externalNotificationService := 
notification.NewExternalNotificationService(dataData, 
userNotificationConfigRepo, followRepo, emailService, userRepo, 
externalService, userExternalLoginRepo, siteInfoCommonService)
+       questionService := content.NewQuestionService(activityRepo, 
questionRepo, answerRepo, tagCommonService, tagService, questionCommon, 
userCommon, userRepo, userRoleRelService, revisionService, metaCommonService, 
collectionCommon, answerActivityService, emailService, noticequeueService, 
externalService, service, siteInfoCommonService, externalNotificationService, 
reviewService, configService, eventqueueService, reviewRepo)
+       answerService := content.NewAnswerService(answerRepo, questionRepo, 
questionCommon, userCommon, collectionCommon, userRepo, revisionService, 
answerActivityService, answerCommon, voteRepo, emailService, 
userRoleRelService, noticequeueService, externalService, service, 
reviewService, eventqueueService)
        reportHandle := report_handle.NewReportHandle(questionService, 
answerService, commentService)
-       reportService := report2.NewReportService(reportRepo, objService, 
userCommon, answerRepo, questionRepo, commentCommonRepo, reportHandle, 
configService, v2)
+       reportService := report2.NewReportService(reportRepo, objService, 
userCommon, answerRepo, questionRepo, commentCommonRepo, reportHandle, 
configService, eventqueueService)
        reportController := controller.NewReportController(reportService, 
rankService, captchaService)
-       contentVoteRepo := activity.NewVoteRepo(dataData, activityRepo, 
userRankRepo, v3)
-       voteService := content.NewVoteService(contentVoteRepo, configService, 
questionRepo, answerRepo, commentCommonRepo, objService, v2)
+       contentVoteRepo := activity.NewVoteRepo(dataData, activityRepo, 
userRankRepo, noticequeueService)
+       voteService := content.NewVoteService(contentVoteRepo, configService, 
questionRepo, answerRepo, commentCommonRepo, objService, eventqueueService)
        voteController := controller.NewVoteController(voteService, 
rankService, captchaService)
        tagController := controller.NewTagController(tagService, 
tagCommonService, rankService)
        followFollowRepo := activity.NewFollowRepo(dataData, uniqueIDRepo, 
activityRepo)
@@ -228,7 +228,7 @@ func initApplication(debug bool, serverConf *conf.Server, 
dbConf *data.Database,
        searchService := content.NewSearchService(searchParser, searchRepo)
        searchController := controller.NewSearchController(searchService, 
captchaService)
        reviewActivityRepo := activity.NewReviewActivityRepo(dataData, 
activityRepo, userRankRepo, configService)
-       contentRevisionService := content.NewRevisionService(revisionRepo, 
userCommon, questionCommon, answerService, objService, questionRepo, 
answerRepo, tagRepo, tagCommonService, v3, v, reportRepo, reviewService, 
reviewActivityRepo)
+       contentRevisionService := content.NewRevisionService(revisionRepo, 
userCommon, questionCommon, answerService, objService, questionRepo, 
answerRepo, tagRepo, tagCommonService, noticequeueService, service, reportRepo, 
reviewService, reviewActivityRepo)
        revisionController := 
controller.NewRevisionController(contentRevisionService, rankService)
        rankController := controller.NewRankController(rankService)
        userAdminRepo := user.NewUserAdminRepo(dataData, authRepo)
@@ -244,7 +244,7 @@ func initApplication(debug bool, serverConf *conf.Server, 
dbConf *data.Database,
        siteInfoService := siteinfo.NewSiteInfoService(siteInfoRepo, 
siteInfoCommonService, emailService, tagCommonService, configService, 
questionCommon, fileRecordService)
        siteInfoController := 
controller_admin.NewSiteInfoController(siteInfoService)
        controllerSiteInfoController := 
controller.NewSiteInfoController(siteInfoCommonService)
-       notificationCommon := 
notificationcommon.NewNotificationCommon(dataData, notificationRepo, 
userCommon, activityRepo, followRepo, objService, v3, userExternalLoginRepo, 
siteInfoCommonService)
+       notificationCommon := 
notificationcommon.NewNotificationCommon(dataData, notificationRepo, 
userCommon, activityRepo, followRepo, objService, noticequeueService, 
userExternalLoginRepo, siteInfoCommonService)
        badgeRepo := badge.NewBadgeRepo(dataData, uniqueIDRepo)
        notificationService := notification.NewNotificationService(dataData, 
notificationRepo, notificationCommon, revisionService, userRepo, reportRepo, 
reviewService, badgeRepo)
        notificationController := 
controller.NewNotificationController(notificationService, rankService)
@@ -253,7 +253,7 @@ func initApplication(debug bool, serverConf *conf.Server, 
dbConf *data.Database,
        uploaderService := uploader.NewUploaderService(serviceConf, 
siteInfoCommonService, fileRecordService)
        uploadController := controller.NewUploadController(uploaderService)
        activityActivityRepo := activity.NewActivityRepo(dataData, 
configService)
-       activityCommon := activity_common2.NewActivityCommon(activityRepo, v)
+       activityCommon := activity_common2.NewActivityCommon(activityRepo, 
service)
        commentCommonService := 
comment_common.NewCommentCommonService(commentCommonRepo)
        activityService := activity2.NewActivityService(activityActivityRepo, 
userCommon, activityCommon, tagCommonService, objService, commentCommonService, 
revisionService, metaCommonService, configService)
        activityController := controller.NewActivityController(activityService)
@@ -265,12 +265,12 @@ func initApplication(debug bool, serverConf *conf.Server, 
dbConf *data.Database,
        permissionController := controller.NewPermissionController(rankService)
        userPluginController := 
controller.NewUserPluginController(pluginCommonService)
        reviewController := controller.NewReviewController(reviewService, 
rankService, captchaService)
-       metaService := meta2.NewMetaService(metaCommonService, userCommon, 
answerRepo, questionRepo, v2)
+       metaService := meta2.NewMetaService(metaCommonService, userCommon, 
answerRepo, questionRepo, eventqueueService)
        metaController := controller.NewMetaController(metaService)
        badgeGroupRepo := badge_group.NewBadgeGroupRepo(dataData, uniqueIDRepo)
        eventRuleRepo := badge.NewEventRuleRepo(dataData)
-       badgeAwardService := badge2.NewBadgeAwardService(badgeAwardRepo, 
badgeRepo, userCommon, objService, v3)
-       badgeEventService := badge2.NewBadgeEventService(dataData, v2, 
badgeRepo, eventRuleRepo, badgeAwardService)
+       badgeAwardService := badge2.NewBadgeAwardService(badgeAwardRepo, 
badgeRepo, userCommon, objService, noticequeueService)
+       badgeEventService := badge2.NewBadgeEventService(dataData, 
eventqueueService, badgeRepo, eventRuleRepo, badgeAwardService)
        badgeService := badge2.NewBadgeService(badgeRepo, badgeGroupRepo, 
badgeAwardRepo, badgeEventService, siteInfoCommonService)
        badgeController := controller.NewBadgeController(badgeService, 
badgeAwardService)
        controller_adminBadgeController := 
controller_admin.NewBadgeController(badgeService)
@@ -281,7 +281,7 @@ func initApplication(debug bool, serverConf *conf.Server, 
dbConf *data.Database,
        avatarMiddleware := middleware.NewAvatarMiddleware(serviceConf, 
uploaderService)
        shortIDMiddleware := 
middleware.NewShortIDMiddleware(siteInfoCommonService)
        templateRenderController := 
templaterender.NewTemplateRenderController(questionService, userService, 
tagService, answerService, commentService, siteInfoCommonService, questionRepo)
-       templateController := 
controller.NewTemplateController(templateRenderController, 
siteInfoCommonService, v2, userService, questionService)
+       templateController := 
controller.NewTemplateController(templateRenderController, 
siteInfoCommonService, eventqueueService, userService, questionService)
        templateRouter := router.NewTemplateRouter(templateController, 
templateRenderController, siteInfoController, authUserMiddleware)
        connectorController := 
controller.NewConnectorController(siteInfoCommonService, emailService, 
userExternalLoginService)
        userCenterLoginService := 
user_external_login2.NewUserCenterLoginService(userRepo, userCommon, 
userExternalLoginRepo, userActiveActivityRepo, siteInfoCommonService)
diff --git a/go.mod b/go.mod
index 52d64c73..d2430295 100644
--- a/go.mod
+++ b/go.mod
@@ -37,6 +37,7 @@ require (
        github.com/grokify/html-strip-tags-go v0.1.0
        github.com/jinzhu/copier v0.4.0
        github.com/jinzhu/now v1.1.5
+       github.com/joho/godotenv v1.5.1
        github.com/lib/pq v1.10.9
        github.com/microcosm-cc/bluemonday v1.0.27
        github.com/mozillazg/go-pinyin v0.20.0
@@ -117,7 +118,6 @@ require (
        github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
        github.com/hashicorp/hcl v1.0.0 // indirect
        github.com/inconshreveable/mousetrap v1.1.0 // indirect
-       github.com/joho/godotenv v1.5.1 // indirect
        github.com/josharian/intern v1.0.0 // indirect
        github.com/json-iterator/go v1.1.12 // indirect
        github.com/klauspost/cpuid/v2 v2.2.8 // indirect
diff --git a/internal/base/translator/provider.go 
b/internal/base/translator/provider.go
index 1a465b1e..982dbd03 100644
--- a/internal/base/translator/provider.go
+++ b/internal/base/translator/provider.go
@@ -242,7 +242,7 @@ func inspectTranslatorNode(node any, path []string, isRoot 
bool) error {
                return nil
        case []any:
                for idx, child := range data {
-                       nextPath := append(path, fmt.Sprintf("[%d]", idx))
+                       nextPath := append(path, fmt.Sprintf("[%d]", idx)) 
//nolint: gocritic
                        if err := inspectTranslatorNode(child, nextPath, 
false); err != nil {
                                return err
                        }
@@ -250,7 +250,7 @@ func inspectTranslatorNode(node any, path []string, isRoot 
bool) error {
                return nil
        case []map[string]any:
                for idx, child := range data {
-                       nextPath := append(path, fmt.Sprintf("[%d]", idx))
+                       nextPath := append(path, fmt.Sprintf("[%d]", idx)) 
//nolint: gocritic
                        if err := inspectTranslatorNode(child, nextPath, 
false); err != nil {
                                return err
                        }
diff --git a/script/check-asf-header.sh b/script/check-asf-header.sh
index 808efa10..05e52314 100755
--- a/script/check-asf-header.sh
+++ b/script/check-asf-header.sh
@@ -26,6 +26,6 @@ else
     exit 1
 fi
 
-$CONTAINER_RUNTIME run -it --rm -v "$(pwd)":/github/workspace 
ghcr.io/korandoru/hawkeye-native format
+$CONTAINER_RUNTIME run --rm -v "$(pwd)":/github/workspace 
ghcr.io/korandoru/hawkeye-native format
 
 gofmt -w -l .

Reply via email to