def GenerateConfig()

in frontend/deploy_ui_cloud_run.py [0:0]


def GenerateConfig(context):
  """Generate YAML resource configuration."""

  #volumes = [{'name': 'cds-code', 'path': '/cds'}]
  datashare_ui_name_with_tag = "ds-frontend-ui:dev"
  container_tag = context.properties['containerTag']
  cloud_run_deploy_name = context.properties['cloudRunDeployName']
  #datashare_ui_name = "ds-frontend-ui"
  gcp_region = context.properties['region']
  client_id = context.properties['clientId']
  delete_timeout = '120s'
  general_timeout = context.properties['timeout']
  cmd = "https://github.com/GoogleCloudPlatform/datashare-toolkit.git"
  git_release_version = "master"
  if context.properties['datashareGitReleaseTag'] != None:
      git_release_version = context.properties['datashareGitReleaseTag']
  custom_cloud_build_sa = context.properties['customCloudBuildSA']
  logging_options = { "logging": "CLOUD_LOGGING_ONLY" }
  api_domain_name = ""
  # if hasattr(context.properties, 'uiDomainName'):
  if context.properties['apiDomainName'] != None:
      api_domain_name = context.properties['apiDomainName']

  steps = [
              { # Clone the Datashare repository only if the ds-frontend-ui:dev is not present
                'name': 'gcr.io/cloud-builders/git',
                'dir': 'ds', # changes the working directory to /workspace/ds/
                'entrypoint': 'bash',
                'args': [ '-c', f'if ! gcloud container images describe gcr.io/$PROJECT_ID/{datashare_ui_name_with_tag}; then ' +
                    'git clone ' + cmd +
                    '; else exit 0; fi'
                    ]
              },
              { # Submit the build configuration to Cloud Build to build the DS UI container image only if the ds-frontend-ui:dev is not present
                  'name': 'gcr.io/google.com/cloudsdktool/cloud-sdk',
                  'dir': 'ds/datashare-toolkit/frontend',
                  'entrypoint': 'bash',
                  'args': [ '-c', f'if ! gcloud container images describe gcr.io/$PROJECT_ID/{datashare_ui_name_with_tag}; then ' +
                      'gcloud builds submit . --config=cloudbuild.yaml ' +
                      f'--substitutions=TAG_NAME={container_tag}' +
                      '; else exit 0; fi'
                  ]
              },
              {   # Deploy the container image to Cloud Run
                  'name': 'gcr.io/google.com/cloudsdktool/cloud-sdk',
                  'dir': 'ds/datashare-toolkit/frontend',
                  'args': ['gcloud', 'run',
                            'deploy',
                            context.properties['cloudRunDeployName'],
                            f'--image=gcr.io/$PROJECT_ID/{cloud_run_deploy_name}:{container_tag}',
                            f'--region={gcp_region}',
                            '--allow-unauthenticated',
                            '--platform=managed'
                          ]
              }
          ]
  # if a user includes the UI domain name then include it as an environment variable
  domain_protocol = 'https://'
  base_path = '/v1'
  environment_variables = ""
  if api_domain_name is not "":
      if domain_has_protocol(api_domain_name):
          environment_variables = 'VUE_APP_API_BASE_URL=' + api_domain_name + base_path
      else:
          environment_variables = 'VUE_APP_API_BASE_URL=' + domain_protocol + api_domain_name + base_path
  # set the Project ID and Client ID environment variables
  environment_variables += ',VUE_APP_PROJECT_ID=$PROJECT_ID'
  environment_variables += ',VUE_APP_GOOGLE_APP_CLIENT_ID=' + client_id
  steps[2]['args'].append('--set-env-vars=' + environment_variables)

  if git_release_version != "master":
      git_release = { # Checkout the correct release
                'name': 'gcr.io/cloud-builders/git',
                'dir': 'ds/datashare-toolkit', # changes the working directory to /workspace/ds/datashare-toolkit
                'entrypoint': 'bash',
                'args': [ '-c', 'if ! gcloud container images describe gcr.io/$PROJECT_ID/' + datashare_ui_name_with_tag + '; then ' +
                        'git checkout ' + git_release_version +
                         '; else exit 0; fi'
                        ]
              }
      steps.insert(1, git_release)

  # include the dependsOn property if we are deploying all the components
  use_runtime_config_waiter = context.properties['useRuntimeConfigWaiter']
  if use_runtime_config_waiter:
      waiter_name = context.properties['waiterName']
      resources = [{
        'name': 'ds-ui-build',
        'action': 'gcp-types/cloudbuild-v1:cloudbuild.projects.builds.create',
        'metadata': {
            'runtimePolicy': ['UPDATE_ALWAYS'],
            'dependsOn': [waiter_name]
        },
        'properties': {
            'steps': steps,
            'timeout': f'{general_timeout}',
            'serviceAccount': custom_cloud_build_sa,
            'options': logging_options
        }
        }]
  else:
      resources = [{
      'name': 'ds-ui-build',
      'action': 'gcp-types/cloudbuild-v1:cloudbuild.projects.builds.create',
      'metadata': {
          'runtimePolicy': ['UPDATE_ALWAYS']
      },
      'properties': {
          'steps': steps,
          'timeout': f'{general_timeout}',
          'serviceAccount': custom_cloud_build_sa,
          'options': logging_options
      }
    }]

  resources.append({
      'name': 'delete-ui',
      'action': 'gcp-types/cloudbuild-v1:cloudbuild.projects.builds.create',
      'metadata': {
          'dependsOn:': ['ds-ui-build'],
          'runtimePolicy': ['DELETE']
      },
      'properties': {
          'steps': [
              {
                'name': 'gcr.io/google.com/cloudsdktool/cloud-sdk',
                'entrypoint': '/bin/bash',
                'args': ['-c', f'gcloud run services delete {cloud_run_deploy_name} --platform=managed --region={gcp_region} --quiet || exit 0']
              }
          ],
          'timeout': f'{delete_timeout}',
          'serviceAccount': custom_cloud_build_sa,
          'options': logging_options
      }
  })

  return { 'resources': resources }