Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into feat/new-app-wiring
Browse files Browse the repository at this point in the history
# Conflicts:
#	ignite/pkg/cosmosanalysis/app/testdata/modules/append_arguments/app.go
#	ignite/pkg/cosmosanalysis/app/testdata/modules/append_package_function/app.go
#	ignite/pkg/cosmosanalysis/app/testdata/modules/arguments/app.go
#	ignite/pkg/cosmosanalysis/app/testdata/modules/external_variable/app.go
#	ignite/pkg/cosmosanalysis/app/testdata/modules/file_function/app.go
#	ignite/pkg/cosmosanalysis/app/testdata/modules/file_variable/app.go
#	ignite/pkg/cosmosanalysis/app/testdata/modules/package_alias/app.go
#	ignite/pkg/cosmosanalysis/app/testdata/modules/package_function/app.go
#	ignite/pkg/cosmosanalysis/app/testdata/modules/package_not_called_app/app.go
#	ignite/pkg/cosmosanalysis/app/testdata/modules/package_variable/app.go
#	ignite/pkg/cosmosanalysis/app/testdata/modules/registration_not_in_app_go/app.go
#	ignite/pkg/cosmosanalysis/cosmosanalysis.go
#	ignite/pkg/cosmosanalysis/cosmosanalysis_test.go
  • Loading branch information
Pantani committed Mar 30, 2023
2 parents b94b9a0 + a34ee06 commit f18f4d7
Show file tree
Hide file tree
Showing 22 changed files with 819 additions and 178 deletions.
1 change: 1 addition & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
- [#3337](https://github.com/ignite/cli/pull/3337) Remove `pkg/openapiconsole` import from scaffold template.
- [#3337](https://github.com/ignite/cli/pull/3337) Register`nodeservice` gRPC in `app.go` template.
- [#3455](https://github.com/ignite/cli/pull/3455) Bump `cosmos-sdk` to `v0.47.0`
- [#3434](https://github.com/ignite/cli/pull/3434) Detect app wiring implementation.
- [#3445](https://github.com/ignite/cli/pull/3445) refactor: replace `github.com/ghodss/yaml` with `sigs.k8s.io/yaml`

### Breaking Changes
Expand Down
31 changes: 31 additions & 0 deletions ignite/pkg/cosmosanalysis/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ import (
"github.com/ignite/cli/ignite/pkg/xast"
)

const (
appWiringImport = "cosmossdk.io/depinject"
appWiringCallMethod = "Inject"
)

var appImplementation = []string{
"RegisterAPIRoutes",
"RegisterTxService",
Expand Down Expand Up @@ -140,6 +145,32 @@ func FindRegisteredModules(chainRoot string) (modules []string, err error) {
return modules, nil
}

// CheckAppWiring check if the app wiring exists finding the `appconfig.Compose` method call.
func CheckAppWiring(chainRoot string) (bool, error) {
// Assumption: modules are registered in the app package
appFilePath, err := cosmosanalysis.FindAppFilePath(chainRoot)
if err != nil {
return false, err
}
// The directory where the app file is located.
// This is required to resolve references within the app package.
appDir := filepath.Dir(appFilePath)

appPkg, _, err := xast.ParseDir(appDir)
if err != nil {
return false, err
}

// Loop on package's files
for _, f := range appPkg.Files {
exists := goanalysis.FuncVarExists(f, appWiringImport, appWiringCallMethod)
if exists {
return true, err
}
}
return false, nil
}

func exprToString(n ast.Expr) (string, error) {
buf := bytes.Buffer{}
fset := token.NewFileSet()
Expand Down
44 changes: 42 additions & 2 deletions ignite/pkg/cosmosanalysis/app/app_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package app_test

import (
_ "embed"
"errors"
"os"
"path/filepath"
"testing"
Expand All @@ -20,8 +21,8 @@ var (
NoAppFile []byte
//go:embed testdata/two_app.go
TwoAppFile []byte
//go:embed testdata/app_full.go
AppFullFile []byte
//go:embed testdata/app_v2.go
AppV2 []byte
)

func TestCheckKeeper(t *testing.T) {
Expand Down Expand Up @@ -360,3 +361,42 @@ func TestFindRegisteredModules(t *testing.T) {
})
}
}

func TestCheckAppWiring(t *testing.T) {
tests := []struct {
name string
appFile []byte
want bool
err error
}{
{
name: "valid case",
appFile: AppV2,
want: true,
err: nil,
},
{
name: "invalid case",
appFile: AppMinimalFile,
want: false,
err: errors.New("app.go file cannot be found"),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tmpDir := t.TempDir()
tmpFile := filepath.Join(tmpDir, "app.go")
err := os.WriteFile(tmpFile, tt.appFile, 0o644)
require.NoError(t, err)

got, err := app.CheckAppWiring(tmpDir)
if tt.err != nil {
require.Error(t, err)
require.Equal(t, tt.err.Error(), err.Error())
return
}
require.NoError(t, err)
require.Equal(t, tt.want, got)
})
}
}
96 changes: 0 additions & 96 deletions ignite/pkg/cosmosanalysis/app/testdata/app_full.go

This file was deleted.

2 changes: 2 additions & 0 deletions ignite/pkg/cosmosanalysis/app/testdata/app_generic.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package foo
import (
sdk "github.com/cosmos/cosmos-sdk/types"
abci "github.com/tendermint/tendermint/abci/types"

app "github.com/ignite/cli/ignite/pkg/cosmosanalysis/app/testdata/modules/registration_not_in_app_go"
)

type Foo[T any] struct {
Expand Down
2 changes: 2 additions & 0 deletions ignite/pkg/cosmosanalysis/app/testdata/app_minimal.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package foo
import (
sdk "github.com/cosmos/cosmos-sdk/types"
abci "github.com/tendermint/tendermint/abci/types"

app "github.com/ignite/cli/ignite/pkg/cosmosanalysis/app/testdata/modules/registration_not_in_app_go"
)

type Foo struct {
Expand Down
Loading

0 comments on commit f18f4d7

Please sign in to comment.