metadata:
  name: githubPublishRelease
  description: Publish a release in GitHub
  longDescription: |
    This step creates a tag in your GitHub repository together with a release.
    The release can be filled with text plus additional information like:

    * Closed pull request since last release
    * Closed issues since last release
    * Link to delta information showing all commits since last release

    The result looks like

    ![Example release](../images/githubRelease.png)
spec:
  inputs:
    secrets:
      - name: githubTokenCredentialsId
        description: Jenkins 'Secret text' credentials ID containing token to authenticate to GitHub.
        type: jenkins
    params:
      - name: addClosedIssues
        description: "If set to `true`, closed issues and merged pull-requests since the last release will added below the `releaseBodyHeader`"
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        type: bool
        default: false
      - name: addDeltaToLastRelease
        description: "If set to `true`, a link will be added to the release information that brings up all commits since the last release."
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        type: bool
        default: false
      - name: apiUrl
        aliases:
          - name: githubApiUrl
        description: Set the GitHub API url.
        scope:
          - GENERAL
          - PARAMETERS
          - STAGES
          - STEPS
        type: string
        default: https://api.github.com
        mandatory: true
      - name: assetPath
        description: Path to a release asset which should be uploaded to the list of release assets.
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        type: string
      - name: assetPathList
        description: List of paths to a release asset which should be uploaded to the list of release assets.
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        type: "[]string"
      - name: commitish
        description: "Target git commitish for the release"
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        type: string
        default: "master"
        resourceRef:
          - name: commonPipelineEnvironment
            param: git/headCommitId
      - name: excludeLabels
        description: "Allows to exclude issues with dedicated list of labels."
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        type: "[]string"
      - name: labels
        description: "Labels to include in issue search."
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        type: "[]string"
      - name: owner
        aliases:
          - name: githubOrg
        description: Name of the GitHub organization.
        resourceRef:
          - name: commonPipelineEnvironment
            param: github/owner
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        type: string
        mandatory: true
      - name: preRelease
        description: "If set to `true` the release will be marked as Pre-release."
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        type: bool
        default: false
      - name: releaseBodyHeader
        description: Content which will appear for the release.
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        type: string
      - name: repository
        aliases:
          - name: githubRepo
        description: Name of the GitHub repository.
        resourceRef:
          - name: commonPipelineEnvironment
            param: github/repository
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        type: string
        mandatory: true
      - name: serverUrl
        aliases:
          - name: githubServerUrl
        description: "GitHub server url for end-user access."
        scope:
          - GENERAL
          - PARAMETERS
          - STAGES
          - STEPS
        type: string
        default: https://github.com
        mandatory: true
      - name: tagPrefix
        type: string
        description: "Defines a prefix to be added to the tag."
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        default: ""
      - name: token
        aliases:
          - name: githubToken
          - name: access_token
        description: "GitHub personal access token as per https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line"
        scope:
          - GENERAL
          - PARAMETERS
          - STAGES
          - STEPS
        type: string
        mandatory: true
        secret: true
        resourceRef:
          - name: githubTokenCredentialsId
            type: secret
          - type: vaultSecret
            default: github
            name: githubVaultSecretName
      - name: uploadUrl
        aliases:
          - name: githubUploadUrl
        description: Set the GitHub API url.
        scope:
          - GENERAL
          - PARAMETERS
          - STAGES
          - STEPS
        type: string
        default: https://uploads.github.com
        mandatory: true
      - name: version
        description: "Define the version number which will be written as tag as well as release name."
        resourceRef:
          - name: commonPipelineEnvironment
            param: artifactVersion
        scope:
          - PARAMETERS
          - STAGES
          - STEPS
        type: string
        mandatory: true
