Good to learn about requirement expansion.
Btw. rez-release does have a --variants flag, we rely on it for some time.
We have a very low tech solution for these kind of problems.
First I've implemented a small script called 'lsvar' that shows you the indices of the package.py in cwd:
package.py variants for usd-0.8.5a:
-------------------------------------------------
0: platform-linux arch-x86_64 os-CentOS-7.2 python-2.7 boost-1.61 tbb-4.4 pyside-1.2.2 pysidetools
1: platform-linux arch-x86_64 os-CentOS-7.2 maya-2018 boost-1.61 mayasetup
2: platform-linux arch-x86_64 os-CentOS-7.2 katana-3 boost-1.61
3: platform-linux arch-x86_64 os-CentOS-7.2 houdini-16.5 boost-1.61 !maya
This helps finding the right index. From there we just pipe it into --variants.
It also can show released variants only (using rez-search). Maybe something we can contribute back if you find it valuable.
Then we bootstrapped releasing as a build_process called 'ssh' that would build locally if your platform matches the variants platform/os or else lookup a global table of hosts and ssh and build/release from there. It can skip not existing variants and generates a log at the end.
Since it relies on ssh it does not work with windows well but at least we can build on various distros without much overhead.
This made migration of distros quite bearable.
Ideally we want to go back to a dedicated build server that would do the right thing: split variants to clients with matching os/platforms. But windows is a minor platform here anyway so we just manually release our way through.