code: def image_tag_from_dockerfile_and_source(
      launch_project: LaunchProject, dockerfile_contents: str
  ) -> str:
      """Hashes the source and dockerfile contents into a unique tag."""
      image_source_string = launch_project.get_image_source_string()
      unique_id_string = image_source_string + dockerfile_contents
      image_tag = hashlib.sha256(
          unique_id_string.encode("utf-8")
      ).hexdigest()[:8]
      return image_tag
  
imports: import hashlib
  import json
  import logging
  import os
  import shlex
  import shutil
  import sys
  import tempfile
  from typing import Any, Dict, List, Optional, Tuple
  import pkg_resources
  import yaml
  from dockerpycreds.utils import find_executable
  from six.moves import shlex_quote
  import wandb
  import wandb.docker
  import wandb.env
  from wandb.apis.internal import Api
  from wandb.sdk.launch.loader import builder_from_config, environment_from_config, registry_from_config
  from .._project_spec import EntryPoint, EntrypointDefaults, LaunchProject, fetch_and_validate_project
  from ..errors import ExecutionError, LaunchError
  from ..registry.abstract import AbstractRegistry
  from ..utils import AZURE_CONTAINER_REGISTRY_URI_REGEX, ELASTIC_CONTAINER_REGISTRY_URI_REGEX, GCP_ARTIFACT_REGISTRY_URI_REGEX, LAUNCH_CONFIG_FILE, LOG_PREFIX, event_loop_thread_exec, resolve_build_and_registry_config
label_desc: Use image node_id 15 for calling a global function with example usage: image_tag_from_dockerfile_and_source(launch_project, dockerfile_contents) and returns: image_tag