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(gnovm): packages loader #2932

Draft
wants to merge 154 commits into
base: master
Choose a base branch
from
Draft

Conversation

n0izn0iz
Copy link
Contributor

@n0izn0iz n0izn0iz commented Oct 10, 2024

WIP

Continuation of #2201
Taking #2904 into account

This implements a Load function with a similar interface to the packages.Load go function

Screenshot 2024-10-11 at 13 50 18
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
  • Added new benchmarks to generated graphs, if any. More info here.

@github-actions github-actions bot added 🧾 package/realm Tag used for new Realms or Packages. 📦 🤖 gnovm Issues or PRs gnovm related 📦 ⛰️ gno.land Issues or PRs gno.land package related labels Oct 10, 2024
Signed-off-by: Norman Meier <[email protected]>
Signed-off-by: Norman Meier <[email protected]>
Signed-off-by: Norman Meier <[email protected]>
Signed-off-by: Norman Meier <[email protected]>
Signed-off-by: Norman Meier <[email protected]>
Signed-off-by: Norman Meier <[email protected]>
Signed-off-by: Norman Meier <[email protected]>
Signed-off-by: Norman Meier <[email protected]>
@n0izn0iz n0izn0iz changed the title feat(gnovm): package resolver lib feat(gnovm): packages loader Oct 11, 2024
Signed-off-by: Norman Meier <[email protected]>
@@ -0,0 +1 @@
module gno.land
Copy link
Member

Choose a reason for hiding this comment

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

do we need this file?

if we need it, please explain in a comment.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

please see #2904 (comment) and tell me what you think

Copy link
Contributor Author

@n0izn0iz n0izn0iz Oct 11, 2024

Choose a reason for hiding this comment

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

I think the best would be to have a gno.work file at repo root to support multiple modules in a monorepo
But in that case we need to implement the gno work commands

@@ -40,7 +40,7 @@ func TestMachineTestMemPackage(t *testing.T) {
Name: tt.name,
F: func(t2 *testing.T) { //nolint:thelper
rootDir := filepath.Join("..", "..")
store := TestStore(rootDir, "test", os.Stdin, os.Stdout, os.Stderr, ImportModeStdlibsOnly)
store := TestStore(rootDir, "test", nil, os.Stdin, os.Stdout, os.Stderr, ImportModeStdlibsOnly)
Copy link
Member

Choose a reason for hiding this comment

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

create a variable that you set to nil, so we now what is this parameter.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

done in 0123512

func DownloadModule(pkgPath string, dst string) error {
modFilePath := filepath.Join(dst, ModfileName)
if _, err := os.Stat(modFilePath); os.IsNotExist(err) {
fmt.Fprintln(os.Stderr, "gno: downloading", pkgPath)
Copy link
Member

Choose a reason for hiding this comment

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

we usually don't use os.StdXXX, but stdouterr from a struct (io something) which is passed when needed.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

done in e648305

thehowl added a commit that referenced this pull request Jan 9, 2025
This makes the imports utils split imports by file kinds, allowing to
make explicit decisions about what imports to use at the various
callsites

- Create `FileKind` enum to categorize gno files, with variants
`PackageSource`, `Test`, `XTest` and `Filetest`
- Create `GetFileKind` util to derive the `FileKind` from a file name
and body
- Create `ImportsMap` type that maps `FileKind`s to lists of imports. It
has a single method `Merge` to select and merge various imports from
multiple `FileKind`s
- Modify the`packages.Imports` helper to return an `ImportsMap` instead
of a `[]string` and adapt callsites by using`ImportMap.Merge` to
preserve existing behavior

This is something I need for #3304 and #2932 but to help reviews I made
an atomic PR here instead

---------

Signed-off-by: Norman Meier <[email protected]>
Co-authored-by: Morgan <[email protected]>
@github-actions github-actions bot added the 📦 🌐 tendermint v2 Issues or PRs tm2 related label Jan 10, 2025
Signed-off-by: Norman <[email protected]>
Signed-off-by: Norman <[email protected]>
albttx pushed a commit that referenced this pull request Jan 10, 2025
A step towards the importer package (#2932) and future of `gno.mod`
(#2904)

- BREAKING CHANGE: remove `require` statement support from `gno.mod`
- BREAKING CHANGE: remove `-v` (verbose) and `--remote` flags in `gno
mod download`
- Don't require version specification in `gno.mod`'s `replace`
statements
- Use `.gno` files `import` statements to find dependencies
- Extract and refacto imports gathering utils in `gnovm/pkg/packages`
- Add `gnovm/cmd/gno/internal/pkgdownload.PackageFetcher` interface
- Implement `PackageFetcher` using `vm/qfile` queries in
`gnovm/cmd/gno/internal/pkgdownload/rpcpackagefetcher`
- Rewrite single package download routine in
`gnovm/cmd/gno/internal/pkgdownload`
- Move and refacto dependencies download routine in
`gnovm/cmd/gno/download_deps.go`
- Add a `--remote-overrides` flag for `gno mod download` that takes
`chain-domain=rpc-url` comma-separated pairs to override endpoints used
to fetch packages
- Add and use a testing implementation of `PackageFetcher` called
`examplesPackageFetcher` that serves package from the `examples`
directory for testing purposes (download tests before this PR use the
portal loop public endpoint)
- Make `ReadMemPackage` and it's dependencies error-out instead of
panicking
- Create panicking `MemPackage` utils that wrap the erroring ones and
use them at existing callsites

I decided to do this first to avoid having multiple ways to resolve
dependencies lying around in the codebase and causing confusion in
subsequent steps

<details><summary>Contributors' checklist...</summary>

- [x] 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
- [x] No breaking changes were made, or a `BREAKING CHANGE: xxx` message
was included in the description
- [x] Added references to related issues and PRs
- [ ] Provided any useful hints for running manual tests
</details>

---------

Signed-off-by: Norman Meier <[email protected]>
Co-authored-by: Morgan Bazalgette <[email protected]>
albttx pushed a commit that referenced this pull request Jan 10, 2025
This makes the imports utils split imports by file kinds, allowing to
make explicit decisions about what imports to use at the various
callsites

- Create `FileKind` enum to categorize gno files, with variants
`PackageSource`, `Test`, `XTest` and `Filetest`
- Create `GetFileKind` util to derive the `FileKind` from a file name
and body
- Create `ImportsMap` type that maps `FileKind`s to lists of imports. It
has a single method `Merge` to select and merge various imports from
multiple `FileKind`s
- Modify the`packages.Imports` helper to return an `ImportsMap` instead
of a `[]string` and adapt callsites by using`ImportMap.Merge` to
preserve existing behavior

This is something I need for #3304 and #2932 but to help reviews I made
an atomic PR here instead

---------

Signed-off-by: Norman Meier <[email protected]>
Co-authored-by: Morgan <[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: No status
Status: Triage
Development

Successfully merging this pull request may close these issues.

4 participants