Here is the deal: we don't have anything in ACC for any kind of DevOps or CI/CD stuff. But we have a possibility to do SOAP calls and several other JSP endpoints are accessible also. Frankly better than nothing.
But! There is one task which seem to be impossible to have automated without injecting custom schema and JS library: upload a file to the instance and link it to the xtk:fileRes resource.
What I've discovered so far:
1. What Client console does?
One can use traceviewer to see which calls Client Console performs. Unfortunately, this is what it shows right after Console checks whether the file already exists and before calling PostUpload:
In other words: nothing helpful. Using traffic sniffer it became clear that Client Console actually does the same that all WebApps do to upload a file, see (2) below.
2. WebApp could also upload a file to the instance disk. How it works?
It's pretty simple and straightforward. In fact, when uploading using WebApp, the browser sends POST request to uploadFile.jsp, which, in return, responds with a bit of HTML and JS code, where all the details of the uploaded file are included. But to use this for automation tools, one will have to a) perform the request with required fields inside, b) parse the output. This second part is not so easy because you really have to parse HTML, get the JS from it and then parse JS. (Or you can use regexes to grab the strings, but it's a duct tape, really)
3. Inject custom stuff into ACC to have your automation working
For sure, custom schema can be built exposing custom SOAP method, and custom JS can be written to handle this method and use ACC JS API (like File()) to store uploaded file on disk. But, no. Good automation is the automation which might be thrown away at any time with no need to change anything in the target system. In ideal world, target system should know nothing about automation system. (unless target system doesn't have built-in APIs for external management)
Short conclusion: there is no easy way to pick a file from your local drive and put in into ACC without Client Console.
Adobe, would you please be so kind and share your thoughts on this? Maybe there is a solution hidden somewhere without proper documentation?
POST the file to /nl/jsp/uploadFile.jsp, using content type multipart/form-data. Ignore the response, there's nothing useful in it.
Call SOAPAction: xtk:fileRes#PostUpload with this entity content: <fileRes md5="<file's md5 hash>" originalName="<original filename since it becomes md5 on disk>" useMd5AsFilename="true" publish="true" storageType="5" xtkschema="xtk:fileRes" xmlns="urn:xtk:fileRes" />
Might need to create the xtk:fileRes ahead of the PostUpload call using xtk:persist#Write, give it a shot.