code: def publish_release_candidate(
      version, previous_version, github_token
  ):
      from packaging.version import Version
  
      airflow_version = Version(version)
      if not airflow_version.is_prerelease:
          exit("--version value must be a pre-release")
      if Version(previous_version).is_prerelease:
          exit(
              "--previous-version value must be a release not a pre-release"
          )
      if not github_token:
          github_token = os.environ.get("GITHUB_TOKEN")
          if not github_token:
              console_print(
                  "GITHUB_TOKEN is not set! Issue generation will fail."
              )
              confirm_action("Do you want to continue?", abort=True)
  
      version_suffix = airflow_version.pre[0] + str(
          airflow_version.pre[1]
      )
      version_branch = (
          str(airflow_version.release[0])
          + "-"
          + str(airflow_version.release[1])
      )
      version_without_rc = airflow_version.base_version
      os.chdir(AIRFLOW_SOURCES_ROOT)
      airflow_repo_root = os.getcwd()
  
      # List the above variables and ask for confirmation
      console_print()
      console_print(f"Previous version: {previous_version}")
      console_print(f"version: {version}")
      console_print(f"version_suffix: {version_suffix}")
      console_print(f"version_branch: {version_branch}")
      console_print(f"version_without_rc: {version_without_rc}")
      console_print(f"airflow_repo_root: {airflow_repo_root}")
      console_print()
      console_print(
          "Below are your git remotes. We will push to origin:"
      )
      run_command(["git", "remote", "-v"], dry_run_override=DRY_RUN)
      console_print()
      confirm_action(
          "Verify that the above information is correct. Do you want to continue?",
          abort=True,
      )
      # Final confirmation
      confirm_action(
          "Pushes will be made to origin. Do you want to continue?",
          abort=True,
      )
      # Merge the sync PR
      merge_pr(version_branch)
      #
      # # Tag & clean the repo
      git_tag(version)
      git_clean()
      source_date_epoch = get_source_date_epoch()
      shutil.rmtree(DIST_DIR, ignore_errors=True)
      # Create the tarball
      tarball_release(
          version=version,
          version_without_rc=version_without_rc,
          source_date_epoch=source_date_epoch,
      )
      # Create the artifacts
      if confirm_action("Use docker to create artifacts?"):
          create_artifacts_with_docker()
      elif confirm_action("Use hatch to create artifacts?"):
          create_artifacts_with_hatch()
      # Sign the release
      sign_the_release(airflow_repo_root)
      # Tag and push constraints
      tag_and_push_constraints(version, version_branch)
      # Clone the asf repo
      clone_asf_repo(version, airflow_repo_root)
      # Move artifacts to SVN
      move_artifacts_to_svn(version, airflow_repo_root)
      # Push the artifacts to the asf repo
      push_artifacts_to_asf_repo(version, airflow_repo_root)
  
      # Remove old releases
      remove_old_releases(version, airflow_repo_root)
  
      # Delete asf-dist directory
      delete_asf_repo(airflow_repo_root)
  
      # Prepare the pypi packages
      prepare_pypi_packages(version, version_suffix, airflow_repo_root)
  
      # Push the packages to pypi
      push_packages_to_pypi(version)
  
      # Push the release candidate tag to gitHub
      push_release_candidate_tag_to_github(version)
      # Create issue for testing
      os.chdir(airflow_repo_root)
      create_issue_for_testing(version, previous_version, github_token)
  
      console_print()
      console_print("Done!")
  
imports: from __future__ import annotations
  import os
  import shutil
  import click
  from airflow_breeze.commands.common_options import option_answer
  from airflow_breeze.commands.release_management_group import release_management
  from airflow_breeze.utils.confirm import confirm_action
  from airflow_breeze.utils.console import console_print
  from airflow_breeze.utils.path_utils import AIRFLOW_SOURCES_ROOT
  from airflow_breeze.utils.reproducible import archive_deterministically, get_source_date_epoch
  from airflow_breeze.utils.run_utils import run_command
label_desc: Use image node_id 19 for calling a global function with example usage: publish_release_candidate(version, previous_version, github_token) without return types