diff --git a/libraries-5/pom.xml b/libraries-5/pom.xml
index 6034646e0e13..ad524d9adefc 100644
--- a/libraries-5/pom.xml
+++ b/libraries-5/pom.xml
@@ -198,6 +198,11 @@
jline-terminal-jansi
${jline.version}
+
+ org.kohsuke
+ github-api
+ ${github-api.version}
+
org.springframework.boot
spring-boot-starter-test
@@ -220,6 +225,7 @@
1.3.0
2.1.0
3.28.0
+ 1.327
diff --git a/libraries-5/src/test/java/com/baeldung/githubapi/ClientLiveTest.java b/libraries-5/src/test/java/com/baeldung/githubapi/ClientLiveTest.java
new file mode 100644
index 000000000000..296ba5bbe67a
--- /dev/null
+++ b/libraries-5/src/test/java/com/baeldung/githubapi/ClientLiveTest.java
@@ -0,0 +1,38 @@
+package com.baeldung.githubapi;
+
+import org.junit.jupiter.api.Test;
+import org.kohsuke.github.GitHub;
+import org.kohsuke.github.GitHubBuilder;
+
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class ClientLiveTest {
+
+ @Test
+ void whenWeCreateAnAnonynousClient_thenWeCanAccessTheGithubApi() throws IOException {
+ GitHub gitHub = GitHub.connectAnonymously();
+
+ String apiUri = gitHub.getApiUrl();
+ assertEquals("https://api.github.com", apiUri);
+ }
+
+ @Test
+ // Needs credentials configuring in environment variables or ~/.github.
+ void whenWeCreateADefaultClient_thenWeCanAccessTheGithubApi() throws IOException {
+ GitHub gitHub = GitHub.connect();
+
+ String apiUri = gitHub.getApiUrl();
+ assertEquals("https://api.github.com", apiUri);
+ }
+
+ @Test
+ // Needs credentials configuring
+ void whenWeCreateAClientWithProvidedCredentials_thenWeCanAccessTheGithubApi() throws IOException {
+ GitHub gitHub = new GitHubBuilder().withPassword("my_user", "my_password").build();
+
+ String apiUri = gitHub.getApiUrl();
+ assertEquals("https://api.github.com", apiUri);
+ }
+}
diff --git a/libraries-5/src/test/java/com/baeldung/githubapi/RepositoryLiveTest.java b/libraries-5/src/test/java/com/baeldung/githubapi/RepositoryLiveTest.java
new file mode 100644
index 000000000000..ae9e343bf0e0
--- /dev/null
+++ b/libraries-5/src/test/java/com/baeldung/githubapi/RepositoryLiveTest.java
@@ -0,0 +1,100 @@
+package com.baeldung.githubapi;
+
+import com.google.common.base.Charsets;
+import org.apache.commons.io.IOUtils;
+import org.junit.jupiter.api.Test;
+import org.kohsuke.github.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class RepositoryLiveTest {
+ private static final Logger LOG = LoggerFactory.getLogger(RepositoryLiveTest.class);
+
+ @Test
+ void whenWeListAUsersRepositories_thenWeCanAccessTheRepositories() throws IOException {
+ GitHub gitHub = GitHub.connectAnonymously();
+
+ GHUser user = gitHub.getUser("eugenp");
+ List repositoriesList = user.listRepositories().toList();
+ assertThat(repositoriesList).isNotEmpty();
+ }
+
+ @Test
+ void whenWeIterateAUsersRepositories_thenWeCanAccessTheRepositories() throws IOException {
+ GitHub gitHub = GitHub.connectAnonymously();
+
+ GHUser user = gitHub.getUser("eugenp");
+
+ Set names = new HashSet<>();
+ for (GHRepository ghRepository : user.listRepositories()) {
+ names.add(ghRepository.getName());
+ }
+
+ assertThat(names).isNotEmpty();
+ }
+
+ @Test
+ void whenWeDirectlyAccessAUsersRepository_thenWeCanQueryRepositoryDetails() throws IOException {
+ GitHub gitHub = GitHub.connectAnonymously();
+
+ GHUser user = gitHub.getUser("eugenp");
+ GHRepository repository = user.getRepository("tutorials");
+ assertEquals("tutorials", repository.getName());
+ assertEquals("eugenp/tutorials", repository.getFullName());
+ }
+
+ @Test
+ void whenWeDirectlyAccessARepository_thenWeCanQueryRepositoryDetails() throws IOException {
+ GitHub gitHub = GitHub.connectAnonymously();
+
+ GHRepository repository = gitHub.getRepository("eugenp/tutorials");
+ assertEquals("tutorials", repository.getName());
+ assertEquals("eugenp/tutorials", repository.getFullName());
+ }
+
+ @Test
+ void whenWeAccessARepositoryBranch_thenWeCanAccessCommitDetails() throws IOException {
+ GitHub gitHub = GitHub.connectAnonymously();
+
+ GHRepository repository = gitHub.getRepository("eugenp/tutorials");
+
+ String defaultBranch = repository.getDefaultBranch();
+ GHBranch branch = repository.getBranch(defaultBranch);
+ String branchHash = branch.getSHA1();
+
+ GHCommit commit = repository.getCommit(branchHash);
+ LOG.info("Commit message: {}", commit.getCommitShortInfo().getMessage());
+ }
+
+ @Test
+ void whenWeAccessARepositoryBranch_thenWeCanAccessFiles() throws IOException {
+ GitHub gitHub = GitHub.connectAnonymously();
+
+ GHRepository repository = gitHub.getRepository("eugenp/tutorials");
+
+ String defaultBranch = repository.getDefaultBranch();
+ GHContent file = repository.getFileContent("pom.xml", defaultBranch);
+
+ String fileContents = IOUtils.toString(file.read(), Charsets.UTF_8);
+ LOG.info("pom.xml file contents: {}", fileContents);
+ }
+
+ @Test
+ void whenWeAccessTheRepository_thenWeCanDirectlyAccessTheReadme() throws IOException {
+ GitHub gitHub = GitHub.connectAnonymously();
+
+ GHRepository repository = gitHub.getRepository("eugenp/tutorials");
+
+ GHContent readme = repository.getReadme();
+ String fileContents = IOUtils.toString(readme.read(), Charsets.UTF_8);
+ LOG.info("Readme file contents: {}", fileContents);
+ }
+}
diff --git a/libraries-5/src/test/java/com/baeldung/githubapi/UsersLiveTest.java b/libraries-5/src/test/java/com/baeldung/githubapi/UsersLiveTest.java
new file mode 100644
index 000000000000..6be1275343cf
--- /dev/null
+++ b/libraries-5/src/test/java/com/baeldung/githubapi/UsersLiveTest.java
@@ -0,0 +1,34 @@
+package com.baeldung.githubapi;
+
+import org.junit.jupiter.api.Test;
+import org.kohsuke.github.GHMyself;
+import org.kohsuke.github.GHUser;
+import org.kohsuke.github.GitHub;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class UsersLiveTest {
+ private static final Logger LOG = LoggerFactory.getLogger(UsersLiveTest.class);
+
+ @Test
+ // Needs credentials configuring in environment variables or ~/.github.
+ void whenWeAccessMyself_thenWeCanQueryUserDetails() throws IOException {
+ GitHub gitHub = GitHub.connect();
+
+ GHMyself myself = gitHub.getMyself();
+ LOG.info("Current users username: {}", myself.getLogin());
+ LOG.info("Current users email: {}", myself.getEmail());
+ }
+
+ @Test
+ void whenWeAccessAnotherUser_thenWeCanQueryUserDetails() throws IOException {
+ GitHub gitHub = GitHub.connectAnonymously();
+
+ GHUser user = gitHub.getUser("eugenp");
+ assertEquals("eugenp", user.getLogin());
+ }
+}