blob: 446143a8382c9310f165dfd35d695d8f1f472fc3 [file]
= GitHub2 Component
:doctitle: GitHub2
:shortname: github2
:artifactid: camel-github2
:description: Interact with the GitHub API.
:since: 4.18
:supportlevel: Stable
:tabs-sync-option:
:component-header: Both producer and consumer are supported
*Since Camel {since}*
*{component-header}*
The GitHub2 component interacts with the GitHub API by
encapsulating the https://github.com/hub4j/github-api[kohsuke github-api] library. It
currently provides polling for new pull requests, pull request comments,
tags, commits, and events. It is also able to produce comments on pull
requests, as well as close the pull request entirely.
This component supports GitHub Enterprise by allowing you to specify a custom API URL.
Rather than webhooks, this endpoint relies on simple polling. Reasons
include:
* Concern for reliability/stability
* The types of payloads we're polling aren't typically large (plus,
paging is available in the API)
* The need to support apps running somewhere not publicly accessible
where a webhook would fail
Note that the GitHub API is fairly expansive. Therefore, this component
could be easily expanded to provide additional interactions.
Maven users will need to add the following dependency to their pom.xml
for this component:
[source,xml]
----
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-github2</artifactId>
<version>${camel-version}</version>
</dependency>
----
== URI format
----
github2://endpoint[?options]
----
// component-configure options: START
include::partial$component-configure-options.adoc[]
include::partial$component-endpoint-options.adoc[]
include::partial$component-endpoint-headers.adoc[]
// component-configure options: END
== Usage
=== Configuring authentication
The GitHub2 component requires to be configured with an authentication token on either the component or endpoint level.
For example, to set it on the component:
._Java-only: programmatic component configuration_
[source,java]
----
GitHub2Component ghc = context.getComponent("github2", GitHub2Component.class);
ghc.setOauthToken("mytoken");
----
=== GitHub Enterprise
To use with GitHub Enterprise, set the `apiUrl` parameter to your GitHub Enterprise API endpoint:
[tabs]
====
Java::
+
[source,java]
----
from("github2:commit/main?repoOwner=myorg&repoName=myrepo&apiUrl=https://github.mycompany.com/api/v3")
.to("log:commits");
----
XML::
+
[source,xml]
----
<route>
<from uri="github2:commit/main?repoOwner=myorg&amp;repoName=myrepo&amp;apiUrl=https://github.mycompany.com/api/v3"/>
<to uri="log:commits"/>
</route>
----
YAML::
+
[source,yaml]
----
- route:
from:
uri: github2:commit/main
parameters:
repoOwner: myorg
repoName: myrepo
apiUrl: "https://github.mycompany.com/api/v3"
steps:
- to:
uri: log:commits
----
====
=== Consumer Endpoints
[width="100%",cols="20%,20%,60%",options="header",]
|=======================================================================
|Endpoint |Context |Body Type
|pullRequest |polling |`org.kohsuke.github.GHPullRequest`
|pullRequestComment |polling |`org.kohsuke.github.GHPullRequestReviewComment`
|tag |polling |`org.kohsuke.github.GHTag`
|commit |polling |`org.kohsuke.github.GHCommit` or `String` with commit message and headers with some metadata.
This can be configured by the `commitMessageAsBody` option.
|event |polling |`org.kohsuke.github.GHEventInfo`
|=======================================================================
=== Producer Endpoints
[width="100%",cols="20%,20%,60%",options="header",]
|=======================================================================
|Endpoint |Body |Message Headers
|pullRequestComment |String (comment text) | - `CamelGitHubPullRequest` (integer) (REQUIRED): Pull request number.
- `CamelGitHubInResponseTo` (integer): Required if responding to another inline
comment on the pull request diff. If left off, a general comment on the
pull request discussion is assumed.
|closePullRequest |none | - `CamelGitHubPullRequest` (integer) (REQUIRED): Pull request number.
|createIssue |String (issue body text) | - `CamelGitHubIssueTitle` (String) (REQUIRED): Issue Title.
|pullRequestState |none | - `CamelGitHubPullRequest` (integer) (REQUIRED): Pull request number.
Sets the commit status on a pull request.
|pullRequestFiles |none | - `CamelGitHubPullRequest` (integer) (REQUIRED): Pull request number.
Returns the list of files changed in a pull request.
|getCommitFile |none | - `CamelGitHubCommitSha` (String) (REQUIRED): Commit SHA.
- `CamelGitHubFilePath` (String) (REQUIRED): File path.
Returns the content of a file at a specific commit.
|=======================================================================
=== Example: Consuming commits
[tabs]
====
Java::
+
[source,java]
----
from("github2:commit/main?repoOwner=apache&repoName=camel&oauthToken=mytoken")
.log("New commit: ${header.CamelGitHubCommitSha} by ${header.CamelGitHubCommitAuthor}")
.to("direct:processCommit");
----
XML::
+
[source,xml]
----
<route>
<from uri="github2:commit/main?repoOwner=apache&amp;repoName=camel&amp;oauthToken=mytoken"/>
<log message="New commit: ${header.CamelGitHubCommitSha} by ${header.CamelGitHubCommitAuthor}"/>
<to uri="direct:processCommit"/>
</route>
----
YAML::
+
[source,yaml]
----
- route:
from:
uri: github2:commit/main
parameters:
repoOwner: apache
repoName: camel
oauthToken: mytoken
steps:
- log:
message: "New commit: ${header.CamelGitHubCommitSha} by ${header.CamelGitHubCommitAuthor}"
- to:
uri: direct:processCommit
----
====
=== Example: Creating an issue
[tabs]
====
Java::
+
[source,java]
----
from("direct:createIssue")
.setHeader("CamelGitHubIssueTitle", constant("Bug Report"))
.setBody(constant("This is the issue description"))
.to("github2:createIssue?repoOwner=apache&repoName=camel&oauthToken=mytoken");
----
XML::
+
[source,xml]
----
<route>
<from uri="direct:createIssue"/>
<setHeader name="CamelGitHubIssueTitle">
<constant>Bug Report</constant>
</setHeader>
<setBody>
<constant>This is the issue description</constant>
</setBody>
<to uri="github2:createIssue?repoOwner=apache&amp;repoName=camel&amp;oauthToken=mytoken"/>
</route>
----
YAML::
+
[source,yaml]
----
- route:
from:
uri: direct:createIssue
steps:
- setHeader:
name: CamelGitHubIssueTitle
constant: Bug Report
- setBody:
constant: This is the issue description
- to:
uri: github2:createIssue
parameters:
repoOwner: apache
repoName: camel
oauthToken: mytoken
----
====