I have more or less this experience right now with both Google App Engine and Digital Ocean App Platform. For GAE it's driven by Github Actions, for DO it's built in. Either way it's just:
Everything, including Heroku, feels a bit immature compared to GAE. Just the stackdriver logging alone is worth the price. I couldn't live without cloud tasks. And of course the autoscaling...
DOAP has some minor issues and a very minimal feature list but it's significantly less expensive than GAE. I use it to run a memory-hungry image processing service that would otherwise hurt too much. We still log remotely to stackdriver.
When the git push process finishes, do you know that the deploy succeeded without running any other command or looking at other logs? Does the push fail if it the deploy itself was unsuccessful?
It posts a slack message to a channel, which triggers an alert on my desktop. My build/test/deploy cycle (for the GAE app, which is the primary service) is currently about 25 minutes. I'm happy with the flow.
My only real complaint is that Github Actions offers almost nothing if a build fails. I try to put some useful info in the slack message, but often I have to download and grep the build logs.
Yeah, that's the difference between Heroku and all these "alternatives" people tend to recommend. They are not the same.
Heroku you push your code to git and if the push succeeded, the deploy is done. If the deploy fails, so does the git push.
If you have failing deploys in your case, you'll end up in a state where what's deployed is not the same as what's on the git branch. Personally, I avoid that like the plague.
I use GAE for just about every deployment I have. Works very well. And I like that I can deploy code from whatever branch (or no branch at all) to whatever service I want.