app/lib/Bot.scala (30 lines of code) (raw):

package lib import com.madgag.scalagithub.{GitHub, GitHubCredentials} import com.madgag.scalagithub.model.User import org.eclipse.jgit.transport.CredentialsProvider import play.api.Logging import java.nio.file.Path import scala.concurrent.{Await, ExecutionContext} import scala.concurrent.duration._ case class Bot( workingDir: Path, github: GitHub, git: CredentialsProvider, user: User ) object Bot extends Logging { def forAccessToken(accessToken: String)(implicit ec: ExecutionContext): Bot = { val workingDir = Path.of("/tmp", "bot", "working-dir") val credentials: GitHubCredentials = GitHubCredentials.forAccessKey(accessToken, workingDir).get val github: GitHub = new GitHub(credentials) val user: User = Await.result(github.getUser().map(_.result), 3.seconds) logger.info(s"Token gives GitHub user ${user.atLogin}") Bot( workingDir, github, credentials.git, user ) } }