In the early days of a core port yes, it means manually copying things across and making tweaks when things are committed. However, as the port matures I usually script all the work, and it’s just a case of typing one command to get the latest data, parse the config files for the information I need, and bundle up all the packages. By doing it manually at first I can assess the stability of the port better, and learn what can be scripted for scraping, and what can be left as static and tweaked manually on the very rare occasions that it would ever change. It tends to be easier to script when the core is already packaged for the Arduino IDE using the .json file system since I can monitor that file for new versions and download them as a package to then repackage and generate config files from. It’s a little harder when it’s just a github repo, since commits to the repo may have nothing to do with my packages at all – and may not even be stable and desirable to push out until fully tested – especially when there are multiple cores in one repo like Arduino_STM32.
It would be helpful if there was a release structure in place for the Arduino core, but alas not – so it falls on my shoulders to keep my end up to date. For some cores I have, in the past (and I need to re-create this) had nightly builds of the core direct from the source github repository which have been published in a separate Nightly Builds UECIDE repository for those that like bleeding edge software. That was (and will again be) all 100% scripted and unattended. But only for cores that I have written the scripting for.
I try and keep the variable names in the configuration files the same where possible – although UECIDE does impose some special names of its own – and variables are in the bash format ${…} instead of just {…}, and there are extra-special variable that I call “varcmds” which are small executable scripts that get replaced with whatever the script returns (programmed in Javascript) which give you ultimate flexibility to build really quite complex command structures in the config files – something Arduino can never do 
So yes, once I have finished porting the boards and things over and I know just what is needed in the porting, I will be scripting it. And then I may add it to the nightly repository too with automated builds, when I resurrect it. But really that needs the upstream core to have “releases” for “nightly” to make any sense.