Best way to add versioned software paths?

Hello there!

I’m adding softwares with some custom hooks to tk-multi-launchapp.yml, and I define a path field thati points to a config in software_paths.yml.

I was wondering about what could be the best solution to add path to software_paths.yml, if the path includes the software’s version, eg. c:/Program Files/Side Effects Software/Houdini {version}/bin/houdini.exe and I don’t want to edit this exact line every time we upgrade it or want to add something new.

Is there a way I could add the software’s executable’s path to the sg config’s PATH env var and just have like houdini.exe in the software_paths.yml?

Also, how could I add multiple versions of the same software this way?

Thanks in advance!

Have you looked at the Software Entity?

Yes, I’m familiar with that. However with Software Entities I don’t see a way to add hooks and various parameters to the app launch, hence I use tk-multi-launchapp.yml and the paths from software_paths.yml.

It uses the tk-multi-launchapp so it will pick up your app launch hooks in the same way.

You have to set this setting to true:

use_software_entity

1 Like

Hi @pw_simon !

I fell for that as well. As @Ricardo_Musch said the tk-multi-launch app does still call all hooks when you set use_software_entities to true. Definitely a live changer once you have set it up. :smiley:

1 Like

So I could use one entity in tk-multi-launchapp that covers all my softwares, set the hook_app_launch for it, and maybe I could even get the afore mentioned parameters from the Shotgrid software entities’ fields?
This will require some refactoring on my part then…

@Ricardo_Musch @Fabian Thank you very much for the answers!

1 Like

Uhm, no its a special Entity inside ShotGrid:

I cant currently find the documentation about it but its already built in, you dont have to do anything to make it work except enable the launchapp to consider the data.

1 Like

So there will be still the same number of entities in the tk-multi-launchapp, but they will get some of their data from web (like the path), and the others from the yml.

I’m not really sure what you mean.

You add the software and its paths to the Software Entity page.
Engines have a built in ability to search for sofytware installation paths based on the default install location.

The Software entity allows you to define what versions you want to enable, how to group them in Sg desktop, etc.

Have a look here:
https://developer.shotgridsoftware.com/8085533c/#configuring-software-launches

I finally had time to do some actual work and not just theorize on this :slight_smile:
Seems like I was right on my first hunch:

On the webpage I create any software entity, give them anything I want to use later as parameters as software entity fields.

Then in the tk-multi-launcher this code covers ALL my softwares coming from the web:

# auto discover DCCs for launch
settings.tk-multi-launchapp:
  use_software_entity: true
  hook_before_register_command: "{config}/tk-multi-launchapp/before_register_command.py"
  location: "@apps.tk-multi-launchapp.location"
  hook_app_launch: "{config}/tk-multi-launchapp/awesome_hook.py"

Then in the awesome_hook I can get the software entity fields’ data.

Ah,

yes the before_app_launch and app_launch hooks will run for every software launched from tk desktop.

1 Like

Again, big thanks for pointing me to the right direction! :slight_smile: :pray:

1 Like

Well, this almost worked flawlessly.
Unfortunately the hook only gets the default fields of the software_entity, and not the custom fields, which I’d like to store additional data for the hook.

Any good ideas on solving this?

:wink:

2 Likes

Excellent! :smiley:
Just what I needed. Big thanks!!

1 Like