You can always monitor the root viewport using it's resize signal. Then calculate what you need from that. It depends though a lot on how you have your project setup, the implementation is up to you.
A simple example:
func _enter_tree():
get_tree().get_root().connect("size_changed", self, "resized")
func resized():
print(OS.get_window_size())
# Do resizing calculations here using new size information.