Skip to content
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

feat(gnodev): lazy loading & staging support #3237

Open
wants to merge 58 commits into
base: master
Choose a base branch
from

Conversation

gfanton
Copy link
Member

@gfanton gfanton commented Nov 28, 2024

featuring:

  • Lazy reload: Super fast reload, only loading the needed packages for the current directory package.
  • Chain resolver: You can change the gnodev resolving process so it can resolve packages on-chain and configure a local fallback, allowing you to try your package against the chain before submitting it.
  • Staging Mode: gnodev now starts from the current directory by default. The staging subcommand will reproduce previous behaviors by loading and monitoring the entire example folder.
Contributors' checklist...
  • Added new tests, or not needed, or not feasible
  • Provided an example (e.g. screenshot) to aid review or the PR is self-explanatory
  • Updated the official documentation or not needed
  • No breaking changes were made, or a BREAKING CHANGE: xxx message was included in the description
  • Added references to related issues and PRs
  • Provided any useful hints for running manual tests

@gfanton gfanton self-assigned this Nov 28, 2024
@github-actions github-actions bot added 🧾 package/realm Tag used for new Realms or Packages. 📦 🤖 gnovm Issues or PRs gnovm related labels Nov 28, 2024
Signed-off-by: gfanton <[email protected]>
@Gno2D2
Copy link
Collaborator

Gno2D2 commented Nov 30, 2024

🛠 PR Checks Summary

All Automated Checks passed. ✅

Manual Checks (for Reviewers):
  • IGNORE the bot requirements for this PR (force green CI check)
Read More

🤖 This bot helps streamline PR reviews by verifying automated checks and providing guidance for contributors and reviewers.

✅ Automated Checks (for Contributors):

🟢 Maintainers must be able to edit this pull request (more info)

☑️ Contributor Actions:
  1. Fix any issues flagged by automated checks.
  2. Follow the Contributor Checklist to ensure your PR is ready for review.
    • Add new tests, or document why they are unnecessary.
    • Provide clear examples/screenshots, if necessary.
    • Update documentation, if required.
    • Ensure no breaking changes, or include BREAKING CHANGE notes.
    • Link related issues/PRs, where applicable.
☑️ Reviewer Actions:
  1. Complete manual checks for the PR, including the guidelines and additional checks if applicable.
📚 Resources:
Debug
Automated Checks
Maintainers must be able to edit this pull request (more info)

If

🟢 Condition met
└── 🟢 The pull request was created from a fork (head branch repo: gfanton/gno)

Then

🟢 Requirement satisfied
└── 🟢 Maintainer can modify this pull request

Manual Checks
**IGNORE** the bot requirements for this PR (force green CI check)

If

🟢 Condition met
└── 🟢 On every pull request

Can be checked by

  • Any user with comment edit permission

@gfanton gfanton force-pushed the feat/dev/lazy-loader branch from 5b95a3e to 135f854 Compare November 30, 2024 08:13
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
@github-actions github-actions bot added the 📦 🌐 tendermint v2 Issues or PRs tm2 related label Dec 15, 2024
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
@leohhhn leohhhn self-requested a review December 16, 2024 10:02
@github-actions github-actions bot added the 📦 ⛰️ gno.land Issues or PRs gno.land package related label Jan 13, 2025
leohhhn and others added 19 commits January 20, 2025 01:33
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
Signed-off-by: gfanton <[email protected]>
logger.Info("guessing directory path", "path", path, "dir", dir)
paths = append(paths, path) // append local path
} else {
logger.Warn("invalid local path", "dir", dir)
Copy link
Contributor

@leohhhn leohhhn Jan 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should be no package found at {pwd}, maybe even no Gno pacakge found at {pwd}.

On top of that, maybe another affirmation sentence that will tell the user that it's ok if there is no package, because lazy load kicks in for links that are requested from gnoweb/queries. Something like:

Loader      ┃ W no Gno pacakge found at {pwd}
Accounts    ┃ I default address imported name=test1 addr=g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5
Node        ┃ I packages paths=[] // rm this line in this case
Node        ┃ W no path to load, lazy resolving from {GNOROOT}

Or, another approach would to disable the loader output in this case; since querying the node and the given updates should be enough, maybe?
In cases where a package was found or a path was specified, keep it

resolver := packages.NewLocalResolver(path, dir)

if resolver.IsValid() {
logger.Info("guessing directory path", "path", path, "dir", dir)
Copy link
Contributor

@leohhhn leohhhn Jan 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
logger.Info("guessing directory path", "path", path, "dir", dir)
logger.Info("getting package path", "pkgpath", path, "dir", dir)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because in this case it gets it from a gno.mod file, no?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not necessarily; if no gno.mod is detected, it will still load the package using the directory as the package name.

Copy link
Contributor

@leohhhn leohhhn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested out most of the features manually, lgtm. Really looking forward to this being merged.

I left a few suggestions on the user messaging.

After this we can also set up a small CI job to create a preview of new example realms, or changes to gnoweb code that would use gnodev as a base.

@Kouteki Kouteki removed the in focus label Feb 3, 2025
@gfanton
Copy link
Member Author

gfanton commented Feb 4, 2025

@leohhhn i've updated gnodev starting logic based on your feedback

Signed-off-by: gfanton <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
📦 🌐 tendermint v2 Issues or PRs tm2 related 📦 ⛰️ gno.land Issues or PRs gno.land package related 📦 🤖 gnovm Issues or PRs gnovm related 🧾 package/realm Tag used for new Realms or Packages.
Projects
Status: In Review
Development

Successfully merging this pull request may close these issues.

4 participants