# TP27 partie 4 : Software Template « Golden Path » pour un nouveau service Node.js.
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: node-service
  title: Service Node.js (Golden Path)
  description: Crée un dépôt GitHub avec Dockerfile, CI de sécurité, manifests Kubernetes et fiche catalogue
  tags: [nodejs, recommended]
spec:
  owner: team-platform
  type: service

  parameters:
    - title: Le service
      required: [name, owner]
      properties:
        name:
          title: Nom du service
          type: string
          pattern: "^[a-z][a-z0-9-]{2,30}$"
          ui:autofocus: true
        description:
          title: Description
          type: string
        owner:
          title: Équipe propriétaire
          type: string
          ui:field: OwnerPicker
          ui:options:
            catalogFilter:
              kind: Group
        # TODO : paramètre "port" (number, défaut 3000)
    - title: Dépôt
      required: [repoUrl]
      properties:
        repoUrl:
          title: Emplacement du dépôt
          type: string
          ui:field: RepoUrlPicker
          ui:options:
            allowedHosts: [github.com]

  steps:
    - id: fetch
      name: Générer les fichiers
      action: fetch:template
      input:
        url: ./skeleton
        # Les workflows GitHub utilisent aussi la syntaxe ${{ }} : on ne les fait pas passer par le moteur de templates.
        copyWithoutTemplating: [".github/workflows/*"]
        values:
          name: ${{ parameters.name }}
          description: ${{ parameters.description }}
          owner: ${{ parameters.owner }}
          # TODO : transmettre le port

    - id: publish
      name: Publier sur GitHub
      action: publish:github
      input:
        repoUrl: ${{ parameters.repoUrl }}
        description: ${{ parameters.description }}
        defaultBranch: main
        repoVisibility: public

    - id: register
      name: Enregistrer dans le catalogue
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
        catalogInfoPath: /catalog-info.yaml

  output:
    links:
      - title: Dépôt
        url: ${{ steps.publish.output.remoteUrl }}
      - title: Fiche dans le catalogue
        icon: catalog
        entityRef: ${{ steps.register.output.entityRef }}
