I agree with you here in terms of needing to do this each time.
I am called to run setup:static-content:deploy with each upgrade and I have two languages so I need to run with the locale flag next to it, ie:
php bin/magento setup:static-content:deploy en_US <other locals>
However, we do have the option of --keep-generated with setup:upgrade. See the help:
php bin/magento setup:upgrade --help
setup:upgrade [--keep-generated] [--magento-init-params="..."]
--keep-generated Prevents generated files from being deleted.
We discourage using this option except when deploying to production.
Consult your system integrator or administrator for more information.
--magento-init-params Add to any command to customize Magento initialization parameters
For example: "MAGE_MODE=developer&MAGE_DIRS[base][path]=/var/www/example.com&MAGE_DIRS[cache][path]=/var/tmp/cache"
--help (-h) Display this help message
--quiet (-q) Do not output any message
--verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version (-V) Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
--no-interaction (-n) Do not ask any interactive question
It will keep static content.