diff --git a/scripts/deploy_playstore.py b/scripts/deploy_playstore.py index 16e3d96..921296a 100755 --- a/scripts/deploy_playstore.py +++ b/scripts/deploy_playstore.py @@ -31,24 +31,25 @@ def _upload_aab(session: AuthorizedSession, edit_id: str) -> int: """Resumable upload of the AAB. Returns the version code.""" file_size = os.path.getsize(AAB_PATH) - init_resp = session.post( - f"{_UPLOAD_BASE}/{PACKAGE_NAME}/edits/{edit_id}/bundles", - params={"uploadType": "resumable"}, - headers={ - "X-Upload-Content-Type": "application/octet-stream", - "X-Upload-Content-Length": str(file_size), - }, - json={}, - timeout=30, - ) - init_resp.raise_for_status() - upload_url = init_resp.headers["Location"] - with open(AAB_PATH, "rb") as f: data = f.read() last_exc = None for attempt in range(_MAX_UPLOAD_ATTEMPTS): + # Each attempt needs a fresh resumable upload URL — the previous URL expires on failure. + init_resp = session.post( + f"{_UPLOAD_BASE}/{PACKAGE_NAME}/edits/{edit_id}/bundles", + params={"uploadType": "resumable"}, + headers={ + "X-Upload-Content-Type": "application/octet-stream", + "X-Upload-Content-Length": str(file_size), + }, + json={}, + timeout=30, + ) + init_resp.raise_for_status() + upload_url = init_resp.headers["Location"] + try: upload_resp = session.put( upload_url, @@ -61,7 +62,7 @@ def _upload_aab(session: AuthorizedSession, edit_id: str) -> int: ) upload_resp.raise_for_status() return upload_resp.json()["versionCode"] - except requests.HTTPError as exc: + except requests.RequestException as exc: last_exc = exc if attempt < _MAX_UPLOAD_ATTEMPTS - 1: delay = 10 * (2 ** attempt)