It turns out that the TFS cross platform commandline (tfx) has a –override option which you can pass a piece of json to which will override any json in the extension.
So if your standard publish command looks like this:
tfx extension publish –extension-id vsts-tfvc-tasks –publisher jessehouwing –vsix package.vsix
Then the command to publish the private test version would look like this:
tfx extension publish –extension-id vsts-tfvc-tasks-TEST –publisher jessehouwing –override “{“”gallerySpecs””: [ “”Private””, “”Preview””], “”public””: false }” –share-with jessehouwing
Instead of passing the json on the commandline, you can also specify an –overridesFile.
Or, on the safer side, make the extension-manifest you commit to your source control repository always do a private preview release, and then use the –override option to merge the real publish settings.
Note: ensure you escape every double quote in the JSON by doubling it up.
Now I can setup a Visual Studio Release Management template to publish the tasks, test against my personal account and then promote that vsix unmodified to the marketplace. But that’s for the another blog.