code: def release_note(
      release: str,
      artifact_hashes: List[str],
      r_urls: Dict[str, str],
      tarname: str,
      outdir: str,
  ) -> None:
      """Generate a note for GitHub release description."""
      r_gpu_linux_url = r_urls["linux"]
      r_gpu_win64_url = r_urls["win64"]
      src_tarball = f"https://github.com/dmlc/xgboost/releases/download/v{release}/{tarname}"
      hash_note = "\n".join(artifact_hashes)
  
      end_note = f"""
  ### Additional artifacts:
  
  You can verify the downloaded packages by running the following command on your Unix shell:
  
  ``` sh
  echo "<hash> <artifact>" | shasum -a 256 --check
  ```
  
  ```
  {hash_note}
  ```
  
  **Experimental binary packages for R with CUDA enabled**
  * xgboost_r_gpu_linux_{release}.tar.gz: [Download]({r_gpu_linux_url})
  * xgboost_r_gpu_win64_{release}.tar.gz: [Download]({r_gpu_win64_url})
  
  **Source tarball**
  * xgboost.tar.gz: [Download]({src_tarball})"""
      print(end_note)
      with open(os.path.join(outdir, "end_note.md"), "w") as fd:
          fd.write(end_note)
  
imports: import argparse
  import os
  import shutil
  import subprocess
  import tarfile
  import tempfile
  from pathlib import Path
  from typing import Any, Dict, List, Optional, Tuple, Union
  from urllib.request import urlretrieve
  import tqdm
  from packaging import version
  from sh.contrib import git
label_desc: Use image node_id 10 for calling a global function with example usage: release_note(release, artifact_hashes, r_urls, tarname, outdir) without return types