<?xml version="1.0" encoding="UTF-8"?>
<dsl-extension kind="projectFeature" type="IssueTracker" generateDslJar="true" applicable="params['type'] == 'GithubIssues'">
    <class name="GitHubIssueTracker">
        <description>
            Project feature enabling integration with GitHub issue tracker
        </description>
    </class>
    <init>
        <param name="type" value="GithubIssues" />
        <param name="secure:accessToken" value="" />
        <param name="username" value="" />
        <param name="secure:password" value="" />
    </init>
    <function name="githubIssues">
        <description>
            Adds a project features enabling integration with GitHub issue tracker
        </description>
    </function>
    <params>
        <param name="name" dslName="displayName" mandatory="true">
            <description>
                Issue tracker integration display name.
            </description>
        </param>

        <param name="repository" dslName="repositoryURL" mandatory="true">
            <description>
                GitHub server URL.
            </description>
        </param>

        <param name="authType" type="compound">
            <option name="anonymous" value="anonymous" />
            <option name="accessToken" value="accesstoken">
                <param name="secure:accessToken" dslName="accessToken" mandatory="true" />
            </option>
            <option name="usernameAndPassword" value="loginpassword">
                <description>
                    Authentication via login/password is no longer supported by GitHub.
                    We highly recommend that you authenticate with access tokens instead.
                </description>
                <param name="username" dslName="userName" mandatory="true"/>
                <param name="secure:password" dslName="password" mandatory="true"/>
            </option>
            <option name="storedToken" value="storedToken">
                <description>
                    Use GitHub App credentials
                </description>
                <param name="tokenId" dslName="tokenId" mandatory="true">
                    <description>
                        Internal ID of a token in TeamCity token storage
                    </description>
                </param>
            </option>
        </param>

        <param name="pattern" dslName="issuesPattern">
            <description>
                Issues ID pattern. Use regex syntax, e.g. '#(\d+)'.
            </description>
        </param>
    </params>
    <examples>
        <example>
            <description>
                It is not recommended to store secure values such as tokens directly in the DSL code,
                see [Managing Tokens](https://www.jetbrains.com/help/teamcity/storing-project-settings-in-version-control.html#Managing+Tokens)
                section of our documentation.
            </description>
            <code>
                githubIssues {
                    id = "&lt;Connection ID>" // arbitrary ID, must be unique in the project
                    displayName = "&lt;Connection display name>"
                    repositoryURL = "&lt;GitHub repository URL>"
                    authType = accessToken {
                        accessToken = "credentialsJSON:*****"
                    }
                    issuesPattern = "&lt;Issue id pattern>" // optional, assumed #(\d+) if omitted
                }
            </code>
        </example>
        <example>
            <description>
                Uses a GitHub App installation token stored in TeamCity.
            </description>
            <code>
                githubIssues {
                    id = "&lt;Connection ID>" // arbitrary ID, must be unique in the project
                    displayName = "&lt;Connection display name>"
                    repositoryURL = "&lt;GitHub repository URL>"
                    authType = storedToken {
                        tokenId = "tc_token_id:*****"
                    }
                    issuesPattern = "&lt;Issue id pattern>" // optional, assumed #(\d+) if omitted
                }
            </code>
        </example>
    </examples>
</dsl-extension>