AcademySoftwareFoundation / rez

An integrated package configuration, build and deployment system for software
https://rez.readthedocs.io
Apache License 2.0
938 stars 332 forks source link

Suggestion: Improve initial release directory experience #505

Open assumptionsoup opened 6 years ago

assumptionsoup commented 6 years ago

When getting started with rez, by default the release directory ~/.rez/packages/int does not exist. Given the somewhat sparse documentation for rez in this area, any new user will most likely run into the exact same error I did:

>>> rez bind -r --quickstart
...
17:59:12 ERROR    PackageRepositoryError: Lockfile directory C:\Users\jordan\.rez\packages\int does not exist - please create and try again

It's super unclear what a lockfile directory is, or why it should exist. There's no mention in the error that this relates to the release directory. Then the directory itself is confusing. Without any context that int pairs with a corresponding ext directory, my first thought was that rez was incorrectly casting an int variable somewhere. This was obviously not the case, I merely hadn't created this directory (as the error says). But even if I had created it, I would have been confused:

I would suggest two changes:

bpabel commented 6 years ago

I agree that there probably needs to be a more complete "quickstart" procedure.

It might be good to create a rez-quickstart command that launches an interactive set of prompts that builds and saves a rez config file that sets the local and release paths (similar to sphinx-quickstart for sphinx docs) in addition to creating the implicit arch/os/platform packages.

Why is this directory in the hidden subfolder?

That's the local release directory. Most rez users specify a shared network release directory (or custom local release directories) in the rez config file. I don't necessarily think the default local directory needs to change, but I do agree it would be good to prompt new users to specify the local and primary release directories prior to running rez, so they at least know what those directories are and where they're at.

In general, much of the rez documentation needs to be updated, which would prevent a lot of this confusion.

assumptionsoup commented 6 years ago

Wait, there's a local release directory and a network release directory? I'm running rez-bind with the release option -r. This is the resolution order in bind.py:

if opts.release:
    install_path = config.release_packages_path
elif opts.install_path:
    install_path = opts.install_path
else:
    install_path = config.local_packages_path

The .rez folder comes from config.release_packages_path. How would a non-local release directory ever get resolved? Using two different configs?

I like the idea of a rez-quickstart, that did a little more hand holding. That would help get some initial concepts out of the way, and build a foundation for starting to work with rez.

bpabel commented 6 years ago

Sorry, I misspoke, the .rez location is the default release directory, just most people change it to a network share in their rezconfig (at least I'm pretty sure most people do it that way). Technically, I think rez now supports multiple release directories.

There are a couple different paths that need to be set up

This is something else that could probably be improved (or perhaps it already is and I don't know about it yet; rez has had a lot of updates in the last couple years).

There does kind of need to be a concept of local and shared release directories, since the implicit packages -- os, platform, arch -- need to be "released" locally (and only locally). The release directory also probably shouldn't be in the users home directory since it's a system wide package.

nerdvegas commented 6 years ago
  1. Yup, that error message is misleading, it should just fail saying that directory doesn't exist. Will address.
  2. Multiple local/release directories are coming soon, I already started merging the outstanding PR that adds this, expect to see that soon.

Part of the reason the quickstart side of things hasn't gotten much love is down to my wanting to deprecate the rez-bind functionality in favor of new 'native' packages - which are just normal packages, but ones that make use of the more programmable aspects of the package.py that are now available (attributes as functions). So what I would like to do instead is replace the builtin bind modules with a set of analogous builtin packages - ie put a minimal package repo inside the rez source repo itself - and then expose a quickstart option which installs from that.

I think removing rez-bind would be a good thing, as it is cause for confusion, and would move to a completely homogenous approach to package creation/installation.

Thx A

On Wed, Apr 11, 2018 at 5:29 AM, Brendan Abel notifications@github.com wrote:

Sorry, I misspoke, the .rez location is the default release directory, just most people change it to a network share in their rezconfig. Technically, I think rez now supports multiple release directories.

There are a couple different paths that need to be set up

  • release_packages_path -- for doing rez-release
  • local_packages_path -- mostly for local development with rez-build
  • packages_path -- list of paths to search for rez packages. Generally includes the previous two paths along with a directory that contains packages for "external" libraries..

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/nerdvegas/rez/issues/505#issuecomment-380219580, or mute the thread https://github.com/notifications/unsubscribe-auth/ABjqStaFD7mg_TpSMqgEG5qhC0vtASMgks5tnQgAgaJpZM4TNc10 .