- help_text:
    brief: Create a Cloud Build Connection of type GitHub Enterprise.
    description: |
      Create a Cloud Build Connection of type GitHub Enterprise.

      Connections for GitHub Enterprise can be created either by following an intallation process
      (that requires manual steps in a web browser) or by providing all the properties of an
      already-installed application as arguments to this command.

      If the GitHub Enterprise server can only be accessed within a VPC, a Service Directory
      service resource can be provided for connecting to it.

    examples: |
      To create a connection by following the installation process, provide only the connection
      name and the host URI. If the server can only be accessed within a VPC, provide also the
      Service Directory service resource:

        $ {command} my-ghe-conn \
          --project=myproj --region=us-central1
          --host-uri=https://my.ghe-server.net
          --service-directory-service=projects/myproj/namespaces/x/services/mysds

      The command will print a URL to be opened in a web browser in order create and install a
      GitHub App in that server. After following the URL, you can get the connection's installation
      state with The ``describe'' command:

        $ gcloud alpha builds connections describe my-ghe-conn --region=us-central1

      If the connection's installation state is not COMPLETE yet, it will provide a link to continue
      the installation process. Once the connection is in installation state COMPLETE, repositories
      can be added to it (see ``gcloud'' alpha builds repositories create).

      --

      To create a complete connection (e.g. based on an existing installation),
      provide all the parameters:

        $ {command} my-ghe-conn \
          --project=myproj --region=us-central1 \
          --app-id=111 --app-slug=gcb-app \
          --service-directory-service=projects/myproj/namespaces/x/services/mysds \
          --private-key-secret-version=projects/myproj/secrets/pk/versions/1 \
          --webhook-secret-secret-version=projects/myproj/secrets/whsecret/versions/1 \
          --app-slug=myapp \
          --app-installation-id=1234

      Above command creates the connection in installation state COMPLETE, ready for adding
      repositories.

  command_type: CREATE
  request:
    collection: cloudbuild.projects.locations.connections
    api_version: v2
    static_fields:
      "connection.githubEnterpriseConfig": {}

  arguments:
    resource:
      help_text: Connection to create.
      spec: !REF googlecloudsdk.command_lib.cloudbuild.resources_v2:connection
    params:
    - api_field: connection.githubEnterpriseConfig.hostUri
      arg_name: host-uri
      required: true
      help_text: URI of the GitHub Enterprise server.
    - group:
        help_text: Group of arguments for configuring access through Service Directory.
        params:
        - api_field: connection.githubEnterpriseConfig.serviceDirectoryConfig.service
          arg_name: service-directory-service
          required: true
          help_text: Service Directory service resource to use for accessing the GitHub Enterprise
            Server. Necessary only if the server has no public access from the internet.
        - api_field: connection.githubEnterpriseConfig.sslCa
          arg_name: ssl-ca-file
          help_text: File containing the SSL_CA to be used.
          processor: googlecloudsdk.core.util.files:ReadFileContents
    - group:
        help_text: Group of arguments for the GitHub App properties.
        params:
        - api_field: connection.githubEnterpriseConfig.appId
          arg_name: app-id
          required: true
          help_text: App ID of the GitHub App in the GitHub Enterprise server.
        - api_field: connection.githubEnterpriseConfig.appSlug
          arg_name: app-slug
          required: true
          help_text: |-
            App slug (url-friendly name) of the GitHub App. When seeing the configuration
            page of the App (e.g. in https://my-ghe-server.net/settings/apps/my-app), the app-slug
            is the last component of the URL path ("my-app" in that example).
        - api_field: connection.githubEnterpriseConfig.privateKeySecretVersion
          arg_name: private-key-secret-version
          required: true
          help_text: Secret containing the private key of the GitHub App.
        - api_field: connection.githubEnterpriseConfig.webhookSecretSecretVersion
          arg_name: webhook-secret-secret-version
          required: true
          help_text: |-
            Secret containing the webhook secret string for validating webhook events generated by
            the GitHub App.
        - api_field: connection.githubEnterpriseConfig.appInstallationId
          arg_name: app-installation-id
          help_text: Installation ID of the Cloud Build GitHub App.

  output:
    # Print the installation instruction and link (if any) after creation.
    format: 'csv[no-heading,separator="\\n"](installationState.stage,installationState.message,installationState.actionUri)'

  async:
    collection: cloudbuild.projects.locations.operations
