docs_builder: Copy files with rsync

If you run 'cp foo bar', the result depends on whether 'bar' exists and
whether it's a regular file or a folder. If it doesn't exist or is a
regular file, 'bar' is replaced with 'foo'. If it's a folder, 'foo' is
inserted into 'bar' as 'bar/foo'. 'gsutil cp' has this same behavior,
which causes uploads to 'gs://pigweed-docs-try/<change-id>' to not
always end up in the same location. 'gsutil rsync' does not have this
issue, so switching to it.

Bug: b/352130983
Change-Id: I46f70f1cb12f79c2239e2ccd4448b73592df0b4a
Reviewed-on: https://pigweed-review.googlesource.com/c/infra/recipes/+/220788
Pigweed-Auto-Submit: Rob Mohr <mohrr@google.com>
Presubmit-Verified: CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com>
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed-service-accounts.iam.gserviceaccount.com>
Reviewed-by: Ted Pudlik <tpudlik@google.com>
diff --git a/recipes/docs_builder.py b/recipes/docs_builder.py
index c957159..a7c5b32 100644
--- a/recipes/docs_builder.py
+++ b/recipes/docs_builder.py
@@ -98,7 +98,7 @@
 
     bucket: str = props.bucket or 'pigweed-docs'
     for path in paths:
-        api.gsutil.upload(
+        api.gsutil.rsync(
             bucket=bucket,
             src=html,
             dst=path,