When publishing a release, we rely on server-side validation to abort the operation if an existing published release with the same tag name already exists.
However, then creating a release with assets, we first create a draft release, upload assets to it, then publish. If there was an existing release with the same tag name, the operation would fail but it would leave behind a temporary draft release with assets. This makes the operation fail earlier, before creating any records.