mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-10 05:24:18 +09:00
chore: enable forcetypeassert linter, fix issues (#38804)
Enable [`forcetypeassert`](https://github.com/gostaticanalysis/forcetypeassert) linter to prevent unchecked type assertions. ~650 issues fixed, most fixes were clean, some use `setting.PanicInDevOrTesting`. The only behaviour changes are where code would previously send a 500 error or panic, a 4xx error is now emitted. Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
@@ -64,7 +64,7 @@ func MatchScopedWorkflows(
|
||||
parsed []*ParsedScopedWorkflow,
|
||||
consumerGitRepo *git.Repository,
|
||||
consumerCommit *git.Commit,
|
||||
triggedEvent webhook_module.HookEventType,
|
||||
inputEvent webhook_module.HookEventType,
|
||||
payload api.Payloader,
|
||||
) (matched, filtered []*DetectedWorkflow) {
|
||||
for _, p := range parsed {
|
||||
@@ -78,7 +78,7 @@ func MatchScopedWorkflows(
|
||||
TriggerEvent: evt,
|
||||
Content: p.Content,
|
||||
}
|
||||
switch detectWorkflowMatch(ctx, consumerGitRepo, consumerCommit, triggedEvent, payload, evt) {
|
||||
switch detectWorkflowMatch(ctx, consumerGitRepo, consumerCommit, inputEvent, payload, evt) {
|
||||
case detectMatched:
|
||||
matched = append(matched, dwf)
|
||||
case detectFilteredOut:
|
||||
|
||||
@@ -266,12 +266,22 @@ func DetectScheduledWorkflows(ctx context.Context, gitRepo *git.Repository, comm
|
||||
return wfs, nil
|
||||
}
|
||||
|
||||
func detectWorkflowMatch(ctx context.Context, gitRepo *git.Repository, commit *git.Commit, triggedEvent webhook_module.HookEventType, payload api.Payloader, evt *jobparser.Event) detectResult {
|
||||
if !canGithubEventMatch(evt.Name, triggedEvent) {
|
||||
// payloadAs returns the payload as the type the event is expected to carry
|
||||
func payloadAs[T api.Payloader](payload api.Payloader, inputEvent webhook_module.HookEventType) T {
|
||||
typedPayload, ok := payload.(T)
|
||||
if !ok {
|
||||
// the event type determines the payload type, so a mismatch can only be a programming error
|
||||
panic(fmt.Errorf("event %q was triggered with payload type %T instead of %T", inputEvent, payload, typedPayload))
|
||||
}
|
||||
return typedPayload
|
||||
}
|
||||
|
||||
func detectWorkflowMatch(ctx context.Context, gitRepo *git.Repository, commit *git.Commit, inputEvent webhook_module.HookEventType, payload api.Payloader, evt *jobparser.Event) detectResult {
|
||||
if !canGithubEventMatch(evt.Name, inputEvent) {
|
||||
return detectNotApplicable
|
||||
}
|
||||
|
||||
switch triggedEvent {
|
||||
switch inputEvent {
|
||||
case // events with no activity types
|
||||
webhook_module.HookEventCreate,
|
||||
webhook_module.HookEventDelete,
|
||||
@@ -279,21 +289,23 @@ func detectWorkflowMatch(ctx context.Context, gitRepo *git.Repository, commit *g
|
||||
webhook_module.HookEventWiki,
|
||||
webhook_module.HookEventSchedule:
|
||||
if len(evt.Acts()) != 0 {
|
||||
log.Warn("Ignore unsupported %s event arguments %v", triggedEvent, evt.Acts())
|
||||
log.Warn("Ignore unsupported %s event arguments %v", inputEvent, evt.Acts())
|
||||
}
|
||||
// no special filter parameters for these events, just return true if name matched
|
||||
return detectMatched
|
||||
|
||||
case // push
|
||||
webhook_module.HookEventPush:
|
||||
return matchPushEvent(ctx, gitRepo, commit, payload.(*api.PushPayload), evt)
|
||||
pushPayload := payloadAs[*api.PushPayload](payload, inputEvent)
|
||||
return matchPushEvent(ctx, gitRepo, commit, pushPayload, evt)
|
||||
|
||||
case // issues
|
||||
webhook_module.HookEventIssues,
|
||||
webhook_module.HookEventIssueAssign,
|
||||
webhook_module.HookEventIssueLabel,
|
||||
webhook_module.HookEventIssueMilestone:
|
||||
if matchIssuesEvent(payload.(*api.IssuePayload), evt) {
|
||||
issuePayload := payloadAs[*api.IssuePayload](payload, inputEvent)
|
||||
if matchIssuesEvent(issuePayload, evt) {
|
||||
return detectMatched
|
||||
}
|
||||
return detectNotApplicable
|
||||
@@ -303,7 +315,8 @@ func detectWorkflowMatch(ctx context.Context, gitRepo *git.Repository, commit *g
|
||||
// `pull_request_comment` is same as `issue_comment`
|
||||
// See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_comment-use-issue_comment
|
||||
webhook_module.HookEventPullRequestComment:
|
||||
if matchIssueCommentEvent(payload.(*api.IssueCommentPayload), evt) {
|
||||
issueCommentPayload := payloadAs[*api.IssueCommentPayload](payload, inputEvent)
|
||||
if matchIssueCommentEvent(issueCommentPayload, evt) {
|
||||
return detectMatched
|
||||
}
|
||||
return detectNotApplicable
|
||||
@@ -315,46 +328,52 @@ func detectWorkflowMatch(ctx context.Context, gitRepo *git.Repository, commit *g
|
||||
webhook_module.HookEventPullRequestLabel,
|
||||
webhook_module.HookEventPullRequestReviewRequest,
|
||||
webhook_module.HookEventPullRequestMilestone:
|
||||
return matchPullRequestEvent(ctx, gitRepo, commit, payload.(*api.PullRequestPayload), evt)
|
||||
pullRequestPayload := payloadAs[*api.PullRequestPayload](payload, inputEvent)
|
||||
return matchPullRequestEvent(ctx, gitRepo, commit, pullRequestPayload, evt)
|
||||
|
||||
case // pull_request_review
|
||||
webhook_module.HookEventPullRequestReviewApproved,
|
||||
webhook_module.HookEventPullRequestReviewRejected:
|
||||
if matchPullRequestReviewEvent(payload.(*api.PullRequestPayload), evt) {
|
||||
reviewPayload := payloadAs[*api.PullRequestPayload](payload, inputEvent)
|
||||
if matchPullRequestReviewEvent(reviewPayload, evt) {
|
||||
return detectMatched
|
||||
}
|
||||
return detectNotApplicable
|
||||
|
||||
case // pull_request_review_comment
|
||||
webhook_module.HookEventPullRequestReviewComment:
|
||||
if matchPullRequestReviewCommentEvent(payload.(*api.PullRequestPayload), evt) {
|
||||
reviewCommentPayload := payloadAs[*api.PullRequestPayload](payload, inputEvent)
|
||||
if matchPullRequestReviewCommentEvent(reviewCommentPayload, evt) {
|
||||
return detectMatched
|
||||
}
|
||||
return detectNotApplicable
|
||||
|
||||
case // release
|
||||
webhook_module.HookEventRelease:
|
||||
if matchReleaseEvent(payload.(*api.ReleasePayload), evt) {
|
||||
releasePayload := payloadAs[*api.ReleasePayload](payload, inputEvent)
|
||||
if matchReleaseEvent(releasePayload, evt) {
|
||||
return detectMatched
|
||||
}
|
||||
return detectNotApplicable
|
||||
|
||||
case // registry_package
|
||||
webhook_module.HookEventPackage:
|
||||
if matchPackageEvent(payload.(*api.PackagePayload), evt) {
|
||||
packagePayload := payloadAs[*api.PackagePayload](payload, inputEvent)
|
||||
if matchPackageEvent(packagePayload, evt) {
|
||||
return detectMatched
|
||||
}
|
||||
return detectNotApplicable
|
||||
|
||||
case // workflow_run
|
||||
webhook_module.HookEventWorkflowRun:
|
||||
if matchWorkflowRunEvent(payload.(*api.WorkflowRunPayload), evt) {
|
||||
workflowRunPayload := payloadAs[*api.WorkflowRunPayload](payload, inputEvent)
|
||||
if matchWorkflowRunEvent(workflowRunPayload, evt) {
|
||||
return detectMatched
|
||||
}
|
||||
return detectNotApplicable
|
||||
|
||||
default:
|
||||
log.Warn("unsupported event %q", triggedEvent)
|
||||
log.Warn("unsupported event %q", inputEvent)
|
||||
return detectNotApplicable
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user