Skip to content

Commit d10e871

Browse files
authoredSep 23, 2024··
Update workflowcheck and allow it to handle aliased context (#1642)
Handle aliasing of internal packages in workflow check
1 parent 8283604 commit d10e871

File tree

6 files changed

+33
-18
lines changed

6 files changed

+33
-18
lines changed
 

‎contrib/tools/workflowcheck/determinism/checker.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ import (
3131
"reflect"
3232
"regexp"
3333
"runtime"
34+
"slices"
3435
"strings"
3536
"sync"
3637

37-
"golang.org/x/exp/slices"
3838
"golang.org/x/tools/go/analysis"
3939
"golang.org/x/tools/go/types/typeutil"
4040
)

‎contrib/tools/workflowcheck/go.mod

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
module go.temporal.io/sdk/contrib/tools/workflowcheck
22

3-
go 1.20
3+
go 1.22.0
44

55
require (
6-
golang.org/x/exp v0.0.0-20230905200255-921286631fa9
7-
golang.org/x/tools v0.17.0
6+
golang.org/x/tools v0.25.0
87
gopkg.in/yaml.v2 v2.4.0
98
)
109

1110
require (
1211
github.com/kr/pretty v0.1.0 // indirect
1312
github.com/kr/text v0.2.0 // indirect
14-
golang.org/x/mod v0.14.0 // indirect
13+
golang.org/x/mod v0.21.0 // indirect
14+
golang.org/x/sync v0.8.0 // indirect
1515
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
1616
)

‎contrib/tools/workflowcheck/go.sum

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
2+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
3+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
24
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
35
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
46
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
57
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
68
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
79
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
8-
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
9-
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
10-
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
11-
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
12-
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
13-
golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=
14-
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
10+
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
11+
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
12+
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
13+
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
14+
golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE=
15+
golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg=
1516
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
1617
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
1718
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

‎contrib/tools/workflowcheck/workflow/checker.go

+11-4
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ func (c *Checker) debugf(f string, v ...interface{}) {
125125
func (c *Checker) NewAnalyzer() *analysis.Analyzer {
126126
a := &analysis.Analyzer{
127127
Name: "workflowcheck",
128-
Doc: "Analyzes all RegisterWorkflow functions for non-determinism",
128+
Doc: "Analyzes all Workflow functions for non-determinism",
129129
Run: func(p *analysis.Pass) (interface{}, error) { return nil, c.Run(p) },
130130
FactTypes: []analysis.Fact{&determinism.PackageNonDeterminisms{}, &determinism.NonDeterminisms{}},
131131
}
@@ -197,17 +197,24 @@ func (c *Checker) Run(pass *analysis.Pass) error {
197197
}
198198

199199
// isWorkflowFunc checks if f has workflow.Context as a first parameter.
200-
func isWorkflowFunc(f *ast.FuncDecl, pass *analysis.Pass) bool {
200+
func isWorkflowFunc(f *ast.FuncDecl, pass *analysis.Pass) (b bool) {
201201
if f.Type.Params == nil || len(f.Type.Params.List) == 0 {
202202
return false
203203
}
204204
firstParam := f.Type.Params.List[0]
205205
typeInfo := pass.TypesInfo.TypeOf(firstParam.Type)
206206
named, _ := typeInfo.(*types.Named)
207-
if named == nil {
207+
alias, _ := typeInfo.(*types.Alias)
208+
if named == nil && alias == nil {
208209
return false
209210
}
210-
obj := named.Obj()
211+
var obj *types.TypeName
212+
if named != nil {
213+
obj = named.Obj()
214+
}
215+
if alias != nil {
216+
obj = alias.Obj()
217+
}
211218
if obj.Pkg() == nil || obj.Name() != "Context" {
212219
return false
213220
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package internal
2+
3+
type Context interface{}

‎contrib/tools/workflowcheck/workflow/testdata/src/go.temporal.io/sdk/workflow/workflow.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package workflow
22

3-
import "time"
3+
import (
4+
"time"
5+
6+
"go.temporal.io/sdk/internal"
7+
)
48

59
type RegisterOptions struct{}
610

7-
type Context interface{}
11+
type Context = internal.Context
812

913
func AwaitWithTimeout(ctx Context, timeout time.Duration, condition func() bool) (ok bool, err error) {
1014
// Intentionally simulate non-deterministic call internally

0 commit comments

Comments
 (0)
Please sign in to comment.