-
Notifications
You must be signed in to change notification settings - Fork 248
feat!: sdk-50 #2008
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
feat!: sdk-50 #2008
Conversation
Signed-off-by: Artur Troian <[email protected]>
WalkthroughMassive refactor migrating to Cosmos SDK v0.53+/CometBFT, reorganizing app bootstrapping, modules, ante handlers, and exports. CLI and testnet tooling are reworked; GitHub workflows/actions consolidated. SDL and events subsystems removed. Linting/release configs updated. New e2e tests, upgrade scripts/configs, and Makefile/tooling adjustments introduced. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor User
participant CLI as akash CLI
participant AC as appCreator
participant App as AkashApp
participant Mod as Module Manager
User->>CLI: run command
CLI->>AC: newApp(logger, db, appOpts)
AC->>App: InitSpecialKeepers()
AC->>App: InitNormalKeepers()
AC->>Mod: NewManager(appModules, simModules)
Mod-->>App: Services registered (GRPC, REST)
App-->>AC: Ante handler, routes set
AC-->>CLI: Application ready
sequenceDiagram
autonumber
actor Dev
participant GH as GitHub Workflow
participant SA as setup-ubuntu action
participant Tools as Toolchain
Dev->>GH: push/dispatch
GH->>SA: Run composite action
SA->>SA: Fetch tags/unshallow
SA->>Tools: apt install core deps (direnv, lz4, pv, jq, ...)
SA->>Tools: setup-node@v4 (Node 18)
SA->>Tools: Detect Go version (script/tools.sh)
SA->>Tools: setup-go@v5 (check-latest)
SA-->>GH: Env configured
Estimated code review effort🎯 5 (Critical) | ⏱️ ~180+ minutes Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning, 2 inconclusive)
✨ Finishing touches
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 27
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
script/upgrades.sh (1)
138-177
: Correct the xz archive detection globBoth
tar_by_content_type
andcontent_type
look for*.tar.cz*
, which is a typo. As written,.tar.xz
archives (the common format) fall through to the default branch and are treated as plain tar files, causing extraction to fail. Update the glob to*.tar.xz*
(and, if desired, also handle.txz
aliases) so xz-compressed archives are detected correctly before downloading snapshots/genesis data.cmd/akash/cmd/auth.go (1)
69-88
: Critical bug: nbf parsing sets exp instead of nbf.Lines 84 and 86 incorrectly assign to
exp
when parsing thenbf
(not before) flag. This is a copy-paste error from the expiration parsing logic above. As a result, the nbf flag has no effect and the exp value is overwritten.Apply this diff to fix the bug:
nbfString, err := cmd.Flags().GetString(FlagJWTNbf) if err != nil { return err } // first, attempt to parse expiration value as duration. // fallback to unix timestamp if fails dur, err := time.ParseDuration(nbfString) if err != nil { nbfInt, err := strconv.ParseInt(nbfString, 10, 64) if err != nil { return err } - exp = time.Unix(nbfInt, 0) + nbf = time.Unix(nbfInt, 0) } else { - exp = now.Add(dur) + nbf = now.Add(dur) } }app/app.go (1)
420-429
: BlockedAddrs computes wrong addresses (double NewModuleAddress).You’re deriving a module address from an address string. Use module names from ModuleAccountPerms instead.
-func (app *AkashApp) BlockedAddrs() map[string]bool { - perms := ModuleAccountAddrs() - blockedAddrs := make(map[string]bool) - for acc := range perms { - blockedAddrs[authtypes.NewModuleAddress(acc).String()] = !allowedReceivingModAcc[acc] - } - return blockedAddrs -} +func (app *AkashApp) BlockedAddrs() map[string]bool { + perms := ModuleAccountPerms() + blocked := make(map[string]bool, len(perms)) + for moduleName := range perms { + addr := authtypes.NewModuleAddress(moduleName).String() + blocked[addr] = !allowedReceivingModAcc[moduleName] + } + return blocked +}
🧹 Nitpick comments (21)
cmd/akash/cmd/testnetify/cmt_abci.go (1)
11-17
: Consider using pointer receiver for consistency.The wrapper uses a value receiver, which means each method call will copy the struct (though it only contains a single pointer field). While this works correctly, pointer receivers are more common for types that implement interfaces, especially ABCI applications.
Apply this diff to use a pointer receiver:
-func NewCometABCIWrapper(app servertypes.ABCI) abci.Application { - return cometABCIWrapper{app: app} +func NewCometABCIWrapper(app servertypes.ABCI) abci.Application { + return &cometABCIWrapper{app: app} } -func (w cometABCIWrapper) Info(_ context.Context, req *abci.RequestInfo) (*abci.ResponseInfo, error) { +func (w *cometABCIWrapper) Info(_ context.Context, req *abci.RequestInfo) (*abci.ResponseInfo, error) { return w.app.Info(req) }Then update all remaining method receivers from
(w cometABCIWrapper)
to(w *cometABCIWrapper)
.cmd/akash/cmd/bech32.go (1)
33-36
: Consider returning the error instead of panicking.The function uses
panic(err)
at line 35, which is inconsistent with the error-handling pattern used elsewhere in this function (lines 24-25, 29-31). For better error propagation and consistency, consider returning the error instead.Apply this diff for consistent error handling:
bech32Addr, err := bech32.ConvertAndEncode(bech32prefix, bz) if err != nil { - panic(err) + return err }cmd/akash/cmd/genesis.go (3)
51-52
: Remove redundant variable assignment.The pattern
depCdc := clientCtx.Codec
followed bycdc := depCdc
is redundant. Either useclientCtx.Codec
directly or assign it once.- clientCtx := client.GetClientContextFromCmd(cmd) - depCdc := clientCtx.Codec - cdc := depCdc + clientCtx := client.GetClientContextFromCmd(cmd) + cdc := clientCtx.Codec
109-110
: Remove redundant variable assignment.Same redundant pattern as in PrepareGenesisCmd (lines 51-52).
- depCdc := clientCtx.Codec - cdc := depCdc + cdc := clientCtx.Codec
264-264
: Consider shorter unbonding time for testnet.The testnet unbonding time is set to 2 weeks, matching mainnet. Testnets typically use shorter unbonding periods (e.g., 1-3 days) to allow faster iteration and testing of unbonding flows. This might be intentional, but consider if a shorter period would be more practical for testnet operations.
- genParams.StakingParams.UnbondingTime = time.Hour * 24 * 7 * 2 // 2 weeks + genParams.StakingParams.UnbondingTime = time.Hour * 24 * 3 // 3 dayscmd/akash/cmd/testnetify/utils.go (1)
55-62
: Consider clarifying the context nesting pattern and documenting the block parameter.The function is correct but has two clarity issues:
Context variable shadowing: Line 57 shadows the
ctx
variable, making it harder to follow the context chain. The pattern works (cancelFn cancels the parent context, which propagates to the errgroup's derived context), but consider using distinct variable names.Missing parameter documentation: The
block
parameter has no explanation. Add a brief comment describing its purpose in the signal handling behavior.Apply this diff to improve clarity:
-func getCtx(sctx *sdksrv.Context, block bool) (*errgroup.Group, context.Context) { - ctx, cancelFn := context.WithCancel(context.Background()) - g, ctx := errgroup.WithContext(ctx) +// getCtx creates an errgroup with a cancellable context and wires up signal handlers. +// If block is true, the signal listener will block until a signal is received. +func getCtx(sctx *sdksrv.Context, block bool) (*errgroup.Group, context.Context) { + parentCtx, cancelFn := context.WithCancel(context.Background()) + g, ctx := errgroup.WithContext(parentCtx) // listen for quit signals so the calling parent process can gracefully exit server.ListenForQuitSignals(g, block, cancelFn, sctx.Logger) return g, ctx }.github/.repo (1)
1-1
: Document the purpose and usage of this manifest file.The
.github/.repo
file appears to be a new repository reference or dependency manifest, but its purpose and format are not documented.Consider adding:
- A comment in the file explaining its purpose
- Documentation in the PR description or a README about how this file is used by CI/tooling
For example:
+# Repository dependency manifest for GitHub Actions/workflows github.com/akash-network/node
make/mod.mk (1)
11-15
: Remove commented-out code.The commented Makefile target for
mod
serves no functional purpose and reduces code maintainability. If this is a placeholder for future implementation, track it in an issue instead.Apply this diff to remove the commented code:
- -#.PHONY: mod -#mod: go.mod -# -#go.mod: -# go mod tidyIf you want to track this for future implementation, open an issue with the desired functionality instead of keeping commented code in the codebase.
make/init.mk (1)
45-47
: Clarify the error message.The error message references an empty string
""
which may confuse users. Consider making it more explicit about what-mod
was actually set to.Apply this diff to improve clarity:
- ifeq ($(GOMOD),$(filter $(GOMOD),mod "")) -$(error '-mod may only be set to readonly or vendor when in workspace mode, but it is set to ""') + ifeq ($(GOMOD),$(filter $(GOMOD),mod "")) +$(error '-mod may only be set to readonly or vendor when in workspace mode, but it is set to "$(GOMOD)"') endifscript/tools.sh (1)
41-42
: Potential command not found error.Line 41 uses
which
to check ifgo
is available, butwhich
itself may not be installed in minimal environments. Consider using the more portablecommand -v
which is a bash built-in.Apply this diff:
# determine go toolchain from go version in go.mod - if which go >/dev/null 2>&1; then + if command -v go >/dev/null 2>&1; then local_goversion=$(GOTOOLCHAIN=local go version | cut -d ' ' -f 3 | sed 's/go*//' | tr -d '\n').envrc (1)
51-58
: Document new tool dependencies.The addition of
pv
andlz4
as required tools is appropriate. Consider documenting these new dependencies in the project's README or setup documentation to help new contributors.app/sim/sim_utils.go (1)
59-69
: Consider returning errors instead of panicking.Lines 61-68 use
panic()
for file read and unmarshal errors. Since the caller expects errors to be returned (the function signature includeserror
), consider returning these errors instead of panicking to allow graceful error handling.Apply this diff:
if config.ParamsFile != "" { bz, err := os.ReadFile(config.ParamsFile) if err != nil { - panic(err) + return nil, err } err = json.Unmarshal(bz, &simState.AppParams) if err != nil { - panic(err) + return nil, err } }Note: This would require updating the function signature to return an error.
go.mod (1)
60-60
: Document the Akash CometBFT fork.The replace directive points to
github.com/akash-network/cometbft v0.38.17-akash.2
. Consider documenting what patches or changes are included in the Akash fork to help future maintainers understand the divergence from upstream..github/actions/setup-ubuntu/action.yaml (1)
14-30
: Addapt-get update
before installing packages.Bare
apt install
can fail on GitHub runners because the package index is often stale. Refresh the cache and useapt-get
for consistency.- name: Install dependencies # Shell must explicitly specify the shell for each step. https://github.com/orgs/community/discussions/18597 shell: bash - run: sudo apt install -y make direnv unzip lz4 wget curl npm jq pv coreutils + run: | + sudo apt-get update + sudo apt-get install -y make direnv unzip lz4 wget curl npm jq pv coreutilscmd/akash/cmd/testnetify/testnetify.go (1)
132-135
: Verify root directory flag handling.The code retrieves the
FlagTestnetRootDir
value but doesn't validate if the directory exists or is writable before proceeding. Consider adding validation to provide clear error messages early.Add validation after line 135:
if _, err := os.Stat(rootDir); os.IsNotExist(err) { return fmt.Errorf("root directory does not exist: %s", rootDir) }tests/upgrade/upgrade_test.go (3)
1209-1239
: Block watchdog timeout tripled.The initial block window increased from 60 to 180 minutes. This generous timeout accounts for potentially slow initial block production, but consider whether 3 hours is excessive for CI/CD environments.
The timeout is adjusted after 3 blocks (lines 1237-1239) to the normal window. Consider adding a comment explaining why the first few blocks might take significantly longer to produce.
// first few blocks may take a while to produce. - // give a watchdog a generous timeout on them + // give a watchdog a generous timeout on them (e.g., state migrations, genesis setup)
1304-1306
: Dual block event detection.The code now checks for both
executedBlock
andexecutedBlock2
patterns to detect block commits. Ensure both patterns are documented and necessary, or consider consolidating if one is deprecated.Add a comment explaining why two different block event patterns exist:
+ // Match both indexed block events (older) and committed state events (newer) } else if strings.Contains(line, executedBlock) || strings.Contains(line, executedBlock2) {
401-403
: Document and track the gas workaround in tests/upgrade/upgrade_test.go:401-403. Add a comment linking to known Cosmos SDK simulation issues (missing/cosmos.tx.v1beta1.Service/Simulate
registration in v0.53), verify your node registers the Tx service with the required patches, or file an issue to track a permanent fix.app/types/app.go (1)
150-157
: Subspace accessor with panic on missing subspace.The
GetSubspace
method panics if a subspace isn't found. While this is acceptable for app initialization failures, consider whether a more informative error that includes available subspaces would help debugging.func (app *App) GetSubspace(moduleName string) paramstypes.Subspace { subspace, found := app.Keepers.Cosmos.Params.GetSubspace(moduleName) if !found { - panic(fmt.Sprintf("params subspace \"%s\" not found", moduleName)) + // Consider listing available subspaces in the panic message for debugging + panic(fmt.Sprintf("params subspace %q not found", moduleName)) } return subspace }cmd/akash/cmd/testnet.go (1)
112-193
: Validator initialization loop handles cleanup.The loop properly generates validator directories, keys, and configurations. The error handling removes the output directory on failures, which is good cleanup behavior. However, this could remove other validators if one fails partway through.
Consider more granular cleanup that only removes the failed validator's directory rather than the entire output directory:
if err := os.MkdirAll(filepath.Join(nodeDir, "config"), nodeDirPerm); err != nil { - _ = os.RemoveAll(outputDir) + _ = os.RemoveAll(nodeDir) return err }This way, partial progress is preserved for debugging.
app/app.go (1)
506-519
: Thread-safe reflection service cache (optional).If tests construct apps concurrently, guard init with sync.Once.
+import "sync" @@ -var cachedReflectionService *runtimeservices.ReflectionService +var ( + cachedReflectionService *runtimeservices.ReflectionService + reflOnce sync.Once +) func getReflectionService() *runtimeservices.ReflectionService { - if cachedReflectionService != nil { - return cachedReflectionService - } - reflectionSvc, err := runtimeservices.NewReflectionService() - if err != nil { - panic(err) - } - cachedReflectionService = reflectionSvc - return reflectionSvc + reflOnce.Do(func() { + rs, err := runtimeservices.NewReflectionService() + if err != nil { + panic(err) + } + cachedReflectionService = rs + }) + return cachedReflectionService }
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
go.sum
is excluded by!**/*.sum
📒 Files selected for processing (151)
.env
(1 hunks).envrc
(1 hunks).github/.repo
(1 hunks).github/actions/setup-ubuntu/action.yaml
(1 hunks).github/workflows/concommits.yaml
(1 hunks).github/workflows/release.yaml
(3 hunks).github/workflows/tests.yaml
(7 hunks).golangci.yaml
(1 hunks).goreleaser-docker.yaml
(1 hunks).goreleaser-test-bins.yaml
(1 hunks).goreleaser.yaml
(5 hunks).mockery.yaml
(1 hunks)CHANGELOG.md
(1 hunks)Makefile
(3 hunks)README.md
(1 hunks)_build/single-node.sh
(2 hunks)_docs/adr/adr-001-network-upgrades.md
(1 hunks)app/ante.go
(1 hunks)app/app.go
(7 hunks)app/app_configure.go
(3 hunks)app/app_test.go
(0 hunks)app/config.go
(2 hunks)app/decorators/gov_filter.go
(0 hunks)app/decorators/min_commision.go
(0 hunks)app/export.go
(6 hunks)app/genesis.go
(2 hunks)app/mac.go
(2 hunks)app/modules.go
(1 hunks)app/option.go
(1 hunks)app/params/proto.go
(0 hunks)app/sim/sim_config.go
(1 hunks)app/sim/sim_utils.go
(1 hunks)app/sim_test.go
(4 hunks)app/testnet.go
(4 hunks)app/types/app.go
(3 hunks)app/types/app_test.go
(1 hunks)app/upgrades.go
(2 hunks)client/client.go
(0 hunks)client/utils.go
(3 hunks)cmd/akash/cmd/app_creator.go
(1 hunks)cmd/akash/cmd/auth.go
(2 hunks)cmd/akash/cmd/bech32.go
(1 hunks)cmd/akash/cmd/flag_test.go
(0 hunks)cmd/akash/cmd/genaccounts.go
(6 hunks)cmd/akash/cmd/genesis.go
(1 hunks)cmd/akash/cmd/root.go
(3 hunks)cmd/akash/cmd/testnet.go
(1 hunks)cmd/akash/cmd/testnetify/cmt_abci.go
(1 hunks)cmd/akash/cmd/testnetify/config.go
(3 hunks)cmd/akash/cmd/testnetify/testnetify.go
(12 hunks)cmd/akash/cmd/testnetify/utils.go
(2 hunks)cmd/akash/main.go
(1 hunks)cmd/common/flags.go
(0 hunks)cmd/common/signal.go
(0 hunks)cmd/common/util.go
(0 hunks)cmd/common/util_test.go
(0 hunks)docgen/main.go
(1 hunks)events/cmd/root.go
(0 hunks)events/publish.go
(0 hunks)events/publish_test.go
(0 hunks)events/query.go
(0 hunks)go.mod
(1 hunks)install.sh
(0 hunks)make/codegen.mk
(1 hunks)make/init.mk
(4 hunks)make/lint.mk
(1 hunks)make/mod.mk
(1 hunks)make/releasing.mk
(6 hunks)make/setup-cache.mk
(2 hunks)make/test-integration.mk
(2 hunks)make/test-simulation.mk
(1 hunks)make/test-upgrade.mk
(3 hunks)meta.json
(1 hunks)pubsub/bus_test.go
(1 hunks)script/tools.sh
(1 hunks)script/upgrades.sh
(13 hunks)sdl/_testdata/deployment-svc-mismatch.yaml
(0 hunks)sdl/_testdata/private_service.yaml
(0 hunks)sdl/_testdata/profile-svc-name-mismatch.yaml
(0 hunks)sdl/_testdata/service-mix.yaml
(0 hunks)sdl/_testdata/service-mix2.yaml
(0 hunks)sdl/_testdata/simple-double-ram.yaml
(0 hunks)sdl/_testdata/simple-gpu.yaml
(0 hunks)sdl/_testdata/simple-with-ip.yaml
(0 hunks)sdl/_testdata/simple.yaml
(0 hunks)sdl/_testdata/simple2.yaml
(0 hunks)sdl/_testdata/simple3.yaml
(0 hunks)sdl/_testdata/simple4.yaml
(0 hunks)sdl/_testdata/storageClass1.yaml
(0 hunks)sdl/_testdata/storageClass2.yaml
(0 hunks)sdl/_testdata/storageClass3.yaml
(0 hunks)sdl/_testdata/storageClass4.yaml
(0 hunks)sdl/_testdata/storageClass5.yaml
(0 hunks)sdl/_testdata/storageClass6.yaml
(0 hunks)sdl/_testdata/v2.1-credentials-error.yaml
(0 hunks)sdl/_testdata/v2.1-credentials.yaml
(0 hunks)sdl/_testdata/v2.1-deployment-svc-mismatch.yaml
(0 hunks)sdl/_testdata/v2.1-private_service.yaml
(0 hunks)sdl/_testdata/v2.1-profile-svc-name-mismatch.yaml
(0 hunks)sdl/_testdata/v2.1-service-mix.yaml
(0 hunks)sdl/_testdata/v2.1-service-mix2.yaml
(0 hunks)sdl/_testdata/v2.1-simple-gpu.yaml
(0 hunks)sdl/_testdata/v2.1-simple-with-ip.yaml
(0 hunks)sdl/_testdata/v2.1-simple.yaml
(0 hunks)sdl/_testdata/v2.1-simple2.yaml
(0 hunks)sdl/_testdata/v2.1-simple3.yaml
(0 hunks)sdl/_testdata/v2.1-simple4.yaml
(0 hunks)sdl/coin.go
(0 hunks)sdl/coin_test.go
(0 hunks)sdl/cpu.go
(0 hunks)sdl/cpu_test.go
(0 hunks)sdl/expose.go
(0 hunks)sdl/full_test.go
(0 hunks)sdl/gpu.go
(0 hunks)sdl/gpu_test.go
(0 hunks)sdl/groupBuilder_v2.go
(0 hunks)sdl/groupBuilder_v2_1.go
(0 hunks)sdl/memory.go
(0 hunks)sdl/placement.go
(0 hunks)sdl/pricing.go
(0 hunks)sdl/resources.go
(0 hunks)sdl/sdl.go
(0 hunks)sdl/sdl_test.go
(0 hunks)sdl/storage.go
(0 hunks)sdl/storage_test.go
(0 hunks)sdl/units.go
(0 hunks)sdl/units_test.go
(0 hunks)sdl/util/util.go
(0 hunks)sdl/util/util_test.go
(0 hunks)sdl/utils.go
(0 hunks)sdl/v2.go
(0 hunks)sdl/v2_1.go
(0 hunks)sdl/v2_1_ip_test.go
(0 hunks)sdl/v2_1_test.go
(0 hunks)sdl/v2_ip_test.go
(0 hunks)sdl/v2_test.go
(0 hunks)tests/e2e/certs_cli_test.go
(1 hunks)tests/e2e/certs_grpc_test.go
(1 hunks)tests/e2e/cli_test.go
(1 hunks)tests/e2e/deployment_cli_test.go
(1 hunks)tests/e2e/deployment_grpc_test.go
(1 hunks)tests/e2e/grpc_test.go
(1 hunks)tests/e2e/market_cli_test.go
(1 hunks)tests/e2e/market_grpc_test.go
(1 hunks)tests/e2e/provider_cli_test.go
(1 hunks)tests/e2e/provider_grpc_test.go
(1 hunks)tests/upgrade/config.json
(1 hunks)tests/upgrade/test-cases.json
(1 hunks)tests/upgrade/test-config-gha.json
(1 hunks)tests/upgrade/types/types.go
(1 hunks)tests/upgrade/upgrade_test.go
(14 hunks)
💤 Files with no reviewable changes (75)
- app/params/proto.go
- sdl/resources.go
- sdl/_testdata/storageClass6.yaml
- sdl/_testdata/v2.1-credentials-error.yaml
- cmd/common/util_test.go
- sdl/sdl_test.go
- sdl/_testdata/v2.1-simple3.yaml
- sdl/v2_test.go
- sdl/_testdata/profile-svc-name-mismatch.yaml
- sdl/_testdata/simple2.yaml
- sdl/_testdata/v2.1-service-mix2.yaml
- app/decorators/min_commision.go
- sdl/_testdata/simple-double-ram.yaml
- cmd/akash/cmd/flag_test.go
- cmd/common/signal.go
- sdl/units_test.go
- client/client.go
- sdl/storage_test.go
- sdl/memory.go
- sdl/units.go
- app/decorators/gov_filter.go
- sdl/_testdata/storageClass4.yaml
- sdl/_testdata/v2.1-simple.yaml
- sdl/gpu_test.go
- events/cmd/root.go
- sdl/v2_ip_test.go
- sdl/_testdata/v2.1-deployment-svc-mismatch.yaml
- app/app_test.go
- sdl/_testdata/service-mix2.yaml
- events/publish.go
- sdl/_testdata/v2.1-simple-gpu.yaml
- sdl/_testdata/storageClass3.yaml
- sdl/_testdata/deployment-svc-mismatch.yaml
- sdl/groupBuilder_v2_1.go
- sdl/_testdata/v2.1-simple2.yaml
- sdl/gpu.go
- sdl/_testdata/simple3.yaml
- install.sh
- sdl/sdl.go
- sdl/_testdata/v2.1-simple4.yaml
- sdl/placement.go
- sdl/_testdata/v2.1-private_service.yaml
- sdl/_testdata/v2.1-profile-svc-name-mismatch.yaml
- sdl/_testdata/private_service.yaml
- sdl/_testdata/v2.1-service-mix.yaml
- sdl/cpu.go
- sdl/v2.go
- sdl/groupBuilder_v2.go
- sdl/coin_test.go
- sdl/_testdata/simple.yaml
- cmd/common/flags.go
- sdl/_testdata/storageClass2.yaml
- sdl/_testdata/simple4.yaml
- sdl/_testdata/v2.1-credentials.yaml
- sdl/_testdata/simple-gpu.yaml
- sdl/util/util.go
- sdl/_testdata/storageClass5.yaml
- sdl/_testdata/storageClass1.yaml
- sdl/_testdata/simple-with-ip.yaml
- sdl/v2_1_ip_test.go
- sdl/expose.go
- sdl/storage.go
- sdl/_testdata/service-mix.yaml
- sdl/_testdata/v2.1-simple-with-ip.yaml
- events/publish_test.go
- sdl/coin.go
- sdl/cpu_test.go
- sdl/v2_1_test.go
- sdl/v2_1.go
- events/query.go
- sdl/pricing.go
- sdl/utils.go
- sdl/util/util_test.go
- sdl/full_test.go
- cmd/common/util.go
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-10-08T15:59:15.421Z
Learnt from: troian
PR: akash-network/node#2007
File: make/releasing.mk:43-45
Timestamp: 2025-10-08T15:59:15.421Z
Learning: In make/releasing.mk, the $(AKASH) target is intentionally marked as .PHONY to force a rebuild every time, even though it produces the akash binary file. This is a deliberate design choice by the maintainers.
Applied to files:
make/releasing.mk
🧬 Code graph analysis (14)
_build/single-node.sh (1)
script/upgrades.sh (1)
init
(267-344)
app/upgrades.go (3)
upgrades/types/types.go (5)
GetUpgradesList
(95-97)IterateMigrations
(119-125)NewMigrationFn
(27-27)NewMigrator
(60-65)RegisterMigration
(107-117)app/types/app.go (1)
App
(123-134)app/app.go (1)
AkashApp
(92-102)
cmd/akash/cmd/testnetify/testnetify.go (3)
util/server/server.go (1)
GetAppDBBackend
(221-231)app/testnet.go (1)
TestnetConfig
(47-52)cmd/akash/cmd/testnetify/config.go (1)
TestnetConfig
(60-66)
cmd/akash/cmd/root.go (5)
app/config.go (1)
ModuleBasics
(70-72)app/app.go (1)
DefaultHome
(82-82)cmd/akash/cmd/bech32.go (1)
ConvertBech32Cmd
(12-47)cmd/akash/cmd/testnetify/testnetify.go (1)
GetCmd
(48-263)cmd/akash/cmd/genaccounts.go (1)
AddGenesisAccountCmd
(35-195)
cmd/akash/main.go (1)
cmd/akash/cmd/root.go (2)
NewRootCmd
(31-46)Execute
(49-58)
cmd/akash/cmd/app_creator.go (4)
util/server/server.go (1)
GetAppDBBackend
(221-231)app/app.go (2)
NewApp
(105-261)AkashApp
(92-102)app/testnet.go (2)
TestnetConfig
(47-52)InitAkashAppForTestnet
(57-284)cmd/akash/cmd/testnetify/config.go (1)
TestnetConfig
(60-66)
cmd/akash/cmd/testnetify/config.go (1)
app/testnet.go (1)
TestnetGov
(38-41)
app/types/app.go (3)
x/deployment/keeper/keeper.go (2)
Keeper
(36-44)NewKeeper
(47-54)x/escrow/keeper/keeper.go (2)
Keeper
(30-50)NewKeeper
(52-68)x/take/keeper/keeper.go (2)
Keeper
(24-30)NewKeeper
(33-39)
app/app_configure.go (3)
x/market/alias.go (1)
ModuleName
(13-13)x/take/alias.go (1)
ModuleName
(11-11)x/cert/alias.go (1)
ModuleName
(13-13)
app/export.go (1)
app/app.go (3)
AkashApp
(92-102)DefaultHome
(82-82)NewApp
(105-261)
app/config.go (2)
x/deployment/module.go (8)
AppModuleBasic
(44-46)AppModuleBasic
(60-62)AppModuleBasic
(65-67)AppModuleBasic
(78-80)AppModuleBasic
(83-90)AppModuleBasic
(93-98)AppModuleBasic
(101-103)AppModuleBasic
(106-108)x/market/module.go (8)
AppModuleBasic
(45-47)AppModuleBasic
(56-58)AppModuleBasic
(61-63)AppModuleBasic
(72-74)AppModuleBasic
(77-84)AppModuleBasic
(87-92)AppModuleBasic
(95-97)AppModuleBasic
(100-102)
app/testnet.go (4)
cmd/akash/cmd/testnetify/config.go (4)
ConsAddress
(40-42)AccAddress
(32-34)TestnetValidator
(44-56)TestnetConfig
(60-66)app/app.go (1)
AkashApp
(92-102)upgrades/types/types.go (1)
GetUpgradesList
(95-97)app/types/app.go (1)
App
(123-134)
app/app.go (5)
app/types/app.go (1)
App
(123-134)app/mac.go (2)
ModuleAccountPerms
(13-24)ModuleAccountAddrs
(26-33)app/app_configure.go (1)
OrderInitGenesis
(54-82)app/ante.go (1)
NewAnteHandler
(21-61)upgrades/types/types.go (1)
GetHeightPatchesList
(99-101)
app/sim_test.go (3)
app/app.go (4)
AkashApp
(92-102)DefaultHome
(82-82)NewApp
(105-261)AppName
(78-78)app/mac.go (1)
ModuleAccountAddrs
(26-33)app/config.go (1)
ModuleBasics
(70-72)
🪛 actionlint (1.7.7)
.github/workflows/release.yaml
13-13: label "core-e2e" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file
(runner-label)
22-22: description is required in metadata of "setup-ubuntu" action at "/home/jailuser/git/.github/actions/setup-ubuntu/action.yaml"
(action)
45-45: label "gh-runner-test" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file
(runner-label)
58-58: shellcheck reported issue in this script: SC2086:info:1:48: Double quote to prevent globbing and word splitting
(shellcheck)
60-60: shellcheck reported issue in this script: SC2086:info:2:40: Double quote to prevent globbing and word splitting
(shellcheck)
.github/workflows/tests.yaml
59-59: description is required in metadata of "setup-ubuntu" action at "/home/jailuser/git/.github/actions/setup-ubuntu/action.yaml"
(action)
109-109: label "core-e2e" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file
(runner-label)
172-172: shellcheck reported issue in this script: SC2086:info:3:38: Double quote to prevent globbing and word splitting
(shellcheck)
172-172: shellcheck reported issue in this script: SC2086:info:4:40: Double quote to prevent globbing and word splitting
(shellcheck)
178-178: shellcheck reported issue in this script: SC2086:info:3:40: Double quote to prevent globbing and word splitting
(shellcheck)
🪛 markdownlint-cli2 (0.18.1)
_docs/adr/adr-001-network-upgrades.md
43-43: Hard tabs
Column: 1
(MD010, no-hard-tabs)
45-45: Hard tabs
Column: 1
(MD010, no-hard-tabs)
46-46: Hard tabs
Column: 1
(MD010, no-hard-tabs)
47-47: Hard tabs
Column: 1
(MD010, no-hard-tabs)
48-48: Hard tabs
Column: 1
(MD010, no-hard-tabs)
🪛 OSV Scanner (2.2.3)
go.mod
[HIGH] 177-177: github.com/hashicorp/go-getter 1.7.8: HashiCorp go-getter Vulnerable to Symlink Attacks in github.com/hashicorp/go-getter
(GO-2025-3892)
[HIGH] 177-177: github.com/hashicorp/go-getter 1.7.8: HashiCorp go-getter Vulnerable to Symlink Attacks
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
- GitHub Check: release-dry-run
- GitHub Check: network-upgrade-names
- GitHub Check: lint-shell
- GitHub Check: sims
- GitHub Check: lint-go
- GitHub Check: build-macos
- GitHub Check: tests
- GitHub Check: build-bins
- GitHub Check: coverage
"github.com/cometbft/cometbft/libs/log" | ||
|
||
storetypes "github.com/cosmos/cosmos-sdk/store/types" | ||
storetypes "cosmossdk.io/store" | ||
sdk "github.com/cosmos/cosmos-sdk/types" | ||
"github.com/cosmos/cosmos-sdk/types/module" | ||
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" | ||
upgradetypes "cosmossdk.io/x/upgrade/types" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replace hard tabs with spaces in code examples.
The code block uses hard tabs (detected by markdownlint). For consistency and to comply with markdown best practices, use spaces for indentation.
Apply this diff to replace tabs with spaces:
import (
- "github.com/cometbft/cometbft/libs/log"
+ "github.com/cometbft/cometbft/libs/log"
- storetypes "cosmossdk.io/store"
- sdk "github.com/cosmos/cosmos-sdk/types"
- "github.com/cosmos/cosmos-sdk/types/module"
- upgradetypes "cosmossdk.io/x/upgrade/types"
+ storetypes "cosmossdk.io/store"
+ sdk "github.com/cosmos/cosmos-sdk/types"
+ "github.com/cosmos/cosmos-sdk/types/module"
+ upgradetypes "cosmossdk.io/x/upgrade/types"
Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
43-43: Hard tabs
Column: 1
(MD010, no-hard-tabs)
45-45: Hard tabs
Column: 1
(MD010, no-hard-tabs)
46-46: Hard tabs
Column: 1
(MD010, no-hard-tabs)
47-47: Hard tabs
Column: 1
(MD010, no-hard-tabs)
48-48: Hard tabs
Column: 1
(MD010, no-hard-tabs)
🤖 Prompt for AI Agents
_docs/adr/adr-001-network-upgrades.md around lines 43 to 48: the code example
contains hard tab characters for indentation; replace all hard tabs in this
block with spaces (use 4 spaces per tab) preserving current alignment and
indentation level so the import lines remain vertically aligned and markdownlint
no longer flags tabs.
- third_party$ | ||
- builtin$ | ||
- examples$ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix directory exclusion regexes
The expressions third_party$
, builtin$
, and examples$
only match paths ending exactly with those names, so files like third_party/foo/bar.go
still get linted. That defeats the exclusion you just reintroduced and will surface a lot of third-party noise.
Switch to patterns that match the directory prefix instead:
- - third_party$
- - builtin$
- - examples$
+ - third_party/
+ - builtin/
+ - examples/
Apply the same adjustment in the formatter exclusions to keep both lists consistent.
Also applies to: 44-46
transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" | ||
ibchost "github.com/cosmos/ibc-go/v10/modules/core/exported" | ||
ibctm "github.com/cosmos/ibc-go/v10/modules/light-clients/07-tendermint" | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix IBC imports and module constants (compile-time breakage).
- ibchost.ModuleName lives in core/24-host, not core/exported.
- 07‑tendermint is not a module; remove ibctm.ModuleName from ordering.
Apply:
- ibchost "github.com/cosmos/ibc-go/v10/modules/core/exported"
- ibctm "github.com/cosmos/ibc-go/v10/modules/light-clients/07-tendermint"
+ ibchost "github.com/cosmos/ibc-go/v10/modules/core/24-host"
And drop 07‑tm from orders:
func orderBeginBlockers(_ []string) []string {
return []string{
@@
- ibctm.ModuleName,
ibchost.ModuleName,
@@
}
}
func OrderEndBlockers(_ []string) []string {
return []string{
@@
- ibchost.ModuleName,
+ ibchost.ModuleName,
@@
}
}
Also applies to: 263-292, 295-321
🤖 Prompt for AI Agents
In app/app.go around lines 59-62 (and also update usages in ranges 263-292 and
295-321), the IBC imports and module ordering are incorrect: replace the ibchost
import path from "github.com/cosmos/ibc-go/v10/modules/core/exported" to
"github.com/cosmos/ibc-go/v10/modules/core/24-host" (so ibchost.ModuleName
resolves), and remove any references to ibctm.ModuleName / "07-tendermint" from
module ordering and related constants (drop the 07-tm entry from the
begin/end/order lists) so compilation succeeds; update any related ordering
slices or maps accordingly to exclude the 07-tm module.
// Tell the app's module manager how to set the order of BeginBlockers, which are run at the beginning of every block. | ||
app.MM.SetOrderBeginBlockers(orderBeginBlockers(app.MM.ModuleNames())...) | ||
app.MM.SetOrderInitGenesis(OrderInitGenesis(app.MM.ModuleNames())...) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Set EndBlockers ordering (currently unused OrderEndBlockers).
You define OrderEndBlockers but never set it on the module manager. Add:
// Tell the app's module manager how to set the order of BeginBlockers, which are run at the beginning of every block.
app.MM.SetOrderBeginBlockers(orderBeginBlockers(app.MM.ModuleNames())...)
app.MM.SetOrderInitGenesis(OrderInitGenesis(app.MM.ModuleNames())...)
+ app.MM.SetOrderEndBlockers(OrderEndBlockers(app.MM.ModuleNames())...)
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
// Tell the app's module manager how to set the order of BeginBlockers, which are run at the beginning of every block. | |
app.MM.SetOrderBeginBlockers(orderBeginBlockers(app.MM.ModuleNames())...) | |
app.MM.SetOrderInitGenesis(OrderInitGenesis(app.MM.ModuleNames())...) | |
// Tell the app's module manager how to set the order of BeginBlockers, which are run at the beginning of every block. | |
app.MM.SetOrderBeginBlockers(orderBeginBlockers(app.MM.ModuleNames())...) | |
app.MM.SetOrderInitGenesis(OrderInitGenesis(app.MM.ModuleNames())...) | |
app.MM.SetOrderEndBlockers(OrderEndBlockers(app.MM.ModuleNames())...) |
🤖 Prompt for AI Agents
In app/app.go around lines 194 to 197, you defined OrderEndBlockers but never
applied it to the module manager; call app.MM.SetOrderEndBlockers with
OrderEndBlockers(app.MM.ModuleNames())... immediately after setting
BeginBlockers (and/or InitGenesis) so the module manager uses your EndBlockers
ordering; ensure you import or reference the OrderEndBlockers function name
exactly as declared and place the call before wiring the rest of the app
lifecycle.
// initialize stores | ||
app.MountKVStores(app.GetKVStoreKey()) | ||
app.MountTransientStores(app.GetTransientStoreKey()) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mount memory stores to avoid runtime panics.
Memory stores are not mounted; modules that declare MemStoreKey will panic at runtime.
// initialize stores
app.MountKVStores(app.GetKVStoreKey())
app.MountTransientStores(app.GetTransientStoreKey())
+ app.MountMemoryStores(app.GetMemoryStoreKey())
🤖 Prompt for AI Agents
In app/app.go around lines 217 to 220, memory stores are not being mounted which
causes modules that declare MemStoreKey to panic at runtime; add a call to mount
them by invoking app.MountMemStores(app.GetMemStoreKey()) (positioned with the
other store mounts) so MemStoreKeys are registered before the app starts.
"v1.0.0": { | ||
"skipped": false, | ||
"from_binary": "v0.38.5-rc3", | ||
"from_version": "v0.38.0" | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Verify the RC binary reference and major version bump.
The v1.0.0 upgrade entry references v0.38.5-rc3
as the from_binary
, which is a release candidate version. Additionally, this represents a major version jump from v0.38.0 to v1.0.0.
Please confirm:
- Is
v0.38.5-rc3
the correct and stable binary for the upgrade path, or should this reference a stable release (e.g.,v0.38.5
)? - Is the major version bump to v1.0.0 intentional and properly documented in upgrade guides?
Run the following to check for existing v0.38.5 stable releases:
🏁 Script executed:
#!/bin/bash
# Check for v0.38.5 releases and tags
gh release view v0.38.5 || echo "No stable v0.38.5 release found"
gh release view v0.38.5-rc3 || echo "No v0.38.5-rc3 release found"
git tag -l "v0.38.5*"
Length of output: 2275
Correct RC reference and confirm major bump docs.
- Change
from_binary
for v1.0.0 from"v0.38.5-rc3"
to stable"v0.38.5"
. - Verify the jump to v1.0.0 is intentional and update the upgrade guide/release notes accordingly.
🤖 Prompt for AI Agents
In meta.json around lines 43 to 47, the from_binary for v1.0.0 incorrectly
references the RC build; change "from_binary": "v0.38.5-rc3" to the stable
"v0.38.5". After updating that field, confirm the v1.0.0 major version bump is
intentional and, if so, update the upgrade guide and release notes to document
the breaking changes and migration steps for the major bump; if it was not
intended, revert the version bump instead and adjust metadata accordingly.
macos_deps=( | ||
"bash" | ||
"direnv" | ||
"pv" | ||
"lz4" | ||
) | ||
|
||
debian_deps=( | ||
"make" | ||
"build-essentials" | ||
"direnv" | ||
"unzip" | ||
"wget" | ||
"curl" | ||
"npm" | ||
"jq" | ||
"coreutils" | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix typo in debian_deps package name.
Line 17 contains a typo: build-essentials
should be build-essential
(no trailing 's'). This will cause installation failures on Debian-based systems.
Apply this diff:
debian_deps=(
"make"
- "build-essentials"
+ "build-essential"
"direnv"
"unzip"
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
macos_deps=( | |
"bash" | |
"direnv" | |
"pv" | |
"lz4" | |
) | |
debian_deps=( | |
"make" | |
"build-essentials" | |
"direnv" | |
"unzip" | |
"wget" | |
"curl" | |
"npm" | |
"jq" | |
"coreutils" | |
) | |
macos_deps=( | |
"bash" | |
"direnv" | |
"pv" | |
"lz4" | |
) | |
debian_deps=( | |
"make" | |
"build-essential" | |
"direnv" | |
"unzip" | |
"wget" | |
"curl" | |
"npm" | |
"jq" | |
"coreutils" | |
) |
🤖 Prompt for AI Agents
In script/tools.sh around lines 8 to 25, the debian_deps array contains a typo:
"build-essentials" should be "build-essential"; update that entry to the correct
package name so apt installs succeed on Debian-based systems.
tar_cmd=$(content_type "$(content_name "${GENESIS_URL}")") | ||
|
||
if [ "$tar_cmd" != "" ]; then | ||
# shellcheck disable=SC2086 | ||
wget -q -O - "${GENESIS_URL}" | pv $pv_args | eval "$tar_cmd" | ||
else | ||
wget -q --show-progress -O "$genesis_file" "${GENESIS_URL}" | ||
fi | ||
else | ||
echo "unable to download genesis" | ||
fi | ||
else | ||
echo "Unpacking genesis from ${GENESIS_URL}" | ||
tar_cmd=$(content_type "${GENESIS_URL}") | ||
# shellcheck disable=SC2086 | ||
(pv -petrafb -i 5 "${GENESIS_URL}" | eval "$tar_cmd") 2>&1 | stdbuf -o0 tr '\r' '\n' | ||
fi | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix genesis download extraction command
content_type
only yields an extension string (e.g. tar.gz
), so eval "$tar_cmd"
executes a non-existent command and the genesis tarball never extracts. Replace the content_type
call with tar_by_content_type
(as done for snapshots) before piping into eval
. Same applies to the local file branch below.
- tar_cmd=$(content_type "$(content_name "${GENESIS_URL}")")
+ tar_cmd=$(tar_by_content_type "$(content_name "${GENESIS_URL}")")
…
- tar_cmd=$(content_type "${GENESIS_URL}")
+ tar_cmd=$(tar_by_content_type "${GENESIS_URL}")
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
tar_cmd=$(content_type "$(content_name "${GENESIS_URL}")") | |
if [ "$tar_cmd" != "" ]; then | |
# shellcheck disable=SC2086 | |
wget -q -O - "${GENESIS_URL}" | pv $pv_args | eval "$tar_cmd" | |
else | |
wget -q --show-progress -O "$genesis_file" "${GENESIS_URL}" | |
fi | |
else | |
echo "unable to download genesis" | |
fi | |
else | |
echo "Unpacking genesis from ${GENESIS_URL}" | |
tar_cmd=$(content_type "${GENESIS_URL}") | |
# shellcheck disable=SC2086 | |
(pv -petrafb -i 5 "${GENESIS_URL}" | eval "$tar_cmd") 2>&1 | stdbuf -o0 tr '\r' '\n' | |
fi | |
tar_cmd=$(tar_by_content_type "$(content_name "${GENESIS_URL}")") | |
if [ "$tar_cmd" != "" ]; then | |
# shellcheck disable=SC2086 | |
wget -q -O - "${GENESIS_URL}" | pv $pv_args | eval "$tar_cmd" | |
else | |
wget -q --show-progress -O "$genesis_file" "${GENESIS_URL}" | |
fi | |
else | |
echo "unable to download genesis" | |
fi | |
else | |
echo "Unpacking genesis from ${GENESIS_URL}" | |
tar_cmd=$(tar_by_content_type "${GENESIS_URL}") | |
# shellcheck disable=SC2086 | |
(pv -petrafb -i 5 "${GENESIS_URL}" | eval "$tar_cmd") 2>&1 | stdbuf -o0 tr '\r' '\n' | |
fi |
for _, tc := range testCases { | ||
tc := tc | ||
s.Run(tc.name, func() { | ||
resp, err := sdktestutil.GetRequest(tc.url) | ||
s.Require().NoError(err) | ||
|
||
var deployments v1beta4.QueryDeploymentsResponse | ||
err = val.ClientCtx.Codec.UnmarshalJSON(resp, &deployments) | ||
|
||
if tc.expErr { | ||
s.Require().NotNil(err) | ||
s.Require().Empty(deployments.Deployments) | ||
} else { | ||
s.Require().NoError(err) | ||
s.Require().Len(deployments.Deployments, tc.expLen) | ||
s.Require().Equal(tc.expResp, deployments.Deployments[0]) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Handle non-200 REST responses correctly in e2e tests.
sdktestutil.GetRequest
returns an error whenever the endpoint responds with a non-200 status. In the error-path scenarios you’re exercising, the request fails before you ever reach JSON unmarshalling, so s.Require().NoError(err)
will trip and the tests never assert the intended behaviour. Please short-circuit on the HTTP error and only unmarshal/compare when the request succeeds; apply the same pattern to the deployment and group suites.
resp, err := sdktestutil.GetRequest(tc.url)
- s.Require().NoError(err)
-
- if tc.expErr {
- s.Require().NotNil(err)
- s.Require().Empty(deployments.Deployments)
- } else {
- s.Require().NoError(err)
- s.Require().Len(deployments.Deployments, tc.expLen)
- s.Require().Equal(tc.expResp, deployments.Deployments[0])
- }
+ if tc.expErr {
+ s.Require().Error(err)
+ return
+ }
+ s.Require().NoError(err)
+ s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(resp, &deployments))
+ s.Require().Len(deployments.Deployments, tc.expLen)
+ s.Require().Equal(tc.expResp, deployments.Deployments[0])
Also applies to: 205-220, 269-284
🤖 Prompt for AI Agents
In tests/e2e/deployment_grpc_test.go around lines 142-158,
sdktestutil.GetRequest returns an error for non-200 responses so the current
code calls s.Require().NoError(err) before unmarshalling which fails the
intended error-path assertions; change the flow to check the error returned by
GetRequest first: if err != nil then assert the test case expects an error
(s.Require().True(tc.expErr) / s.Require().Empty(deployments... or equivalent)
and return from the subtest), otherwise proceed to unmarshal the response and
perform the success assertions (NoError on unmarshal, length and equality
checks). Apply the same fix to the other occurrences at lines 205-220 and
269-284.
nodeEventReplayBlocksStart | ||
nodeEventReplayBlocksDone | ||
nodeEventBlockIndexed | ||
nodeEventBlockCommited |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Event name normalized.
The event constant renamed from nodeEventBlockIndexed
to nodeEventBlockCommited
better reflects the block finality semantic. Note: there's a typo—should be Committed
with double 't'.
Apply this diff to fix the typo:
- nodeEventBlockCommited
+ nodeEventBlockCommitted
Update all references to this constant accordingly (lines 1030, 1305).
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
nodeEventBlockCommited | |
nodeEventBlockCommitted |
🤖 Prompt for AI Agents
In tests/upgrade/upgrade_test.go around line 55 the event constant was renamed
to nodeEventBlockCommited but contains a typo; rename it to
nodeEventBlockCommitted (with double 't') and update all usages accordingly
(specifically at lines ~1030 and ~1305) so references match the corrected
identifier; ensure any import or test assertions referencing the old name are
updated to the new spelling.
Description
Closes: #XXXX
Author Checklist
All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow-up issues.
I have...
!
to the type prefix if API or client breaking changeCHANGELOG.md