mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 08:27:12 -07:00
Successful upload.
This commit is contained in:
parent
779d8d7b8a
commit
49dac2a6b3
2 changed files with 149 additions and 136 deletions
|
@ -70,6 +70,7 @@ private class Main @Inject constructor(
|
|||
}
|
||||
|
||||
public fun run(jc: JCommander, args: Args, argv: Array<String>): Int {
|
||||
// github.uploadRelease()
|
||||
|
||||
//
|
||||
// Add all the repos from repo contributors (at least those that return values without a Project)
|
||||
|
@ -91,7 +92,6 @@ private class Main @Inject constructor(
|
|||
var result = 0
|
||||
val latestVersionFuture = github.latestKobaltVersion
|
||||
val seconds = benchmark("build", {
|
||||
// runTest()
|
||||
try {
|
||||
result = runWithArgs(jc, args, argv)
|
||||
} catch(ex: KobaltException) {
|
||||
|
|
|
@ -8,8 +8,13 @@ import com.google.gson.JsonParser
|
|||
import com.google.gson.annotations.SerializedName
|
||||
import com.squareup.okhttp.OkHttpClient
|
||||
import retrofit.RestAdapter
|
||||
import retrofit.RetrofitError
|
||||
import retrofit.client.OkClient
|
||||
import retrofit.client.Response
|
||||
import retrofit.http.*
|
||||
import retrofit.mime.MimeUtil
|
||||
import retrofit.mime.TypedByteArray
|
||||
import retrofit.mime.TypedFile
|
||||
import rx.Observable
|
||||
import java.io.BufferedReader
|
||||
import java.io.File
|
||||
|
@ -28,147 +33,112 @@ import javax.inject.Inject
|
|||
*/
|
||||
public class GithubApi @Inject constructor(val executors: KobaltExecutors) {
|
||||
companion object {
|
||||
const val HOST =
|
||||
"https://api.github.com"
|
||||
// "https://developer.github.com/v3/"
|
||||
const val RELEASES_URL = "$HOST/repos/cbeust/kobalt/releases"
|
||||
const val RELEASES_URL = "https://api.github.com/repos/cbeust/kobalt/releases"
|
||||
}
|
||||
|
||||
public class ServiceGenerator {
|
||||
companion object {
|
||||
val API_BASE_URL = HOST
|
||||
fun uploadRelease(): Int {
|
||||
val releaseName = "TestRelease"
|
||||
val release = service.getReleaseByTagName(Prop.username, "kobalt", releaseName)
|
||||
|
||||
val httpClient = OkHttpClient()
|
||||
val builder = RestAdapter.Builder()
|
||||
.setEndpoint(API_BASE_URL)
|
||||
// .baseUrl(API_BASE_URL)
|
||||
// .addConverterFactory(GsonConverterFactory.create())
|
||||
|
||||
class Contributor {
|
||||
var login: String? = null
|
||||
var contributions: Int? = null
|
||||
}
|
||||
|
||||
class Release {
|
||||
var name: String? = null
|
||||
var prerelease: Boolean? = null
|
||||
}
|
||||
|
||||
class UploadReleaseResponse(var id: String? = null)
|
||||
|
||||
class CreateRelease(@SerializedName("tag_name") var tag_name: String? = null)
|
||||
// class CreateRelease(
|
||||
// @Query("tag_name") tag_name: String,
|
||||
// @Query("target_commitish") target: String,
|
||||
// @Query("name") name: String,
|
||||
// @Query("body") body: String,
|
||||
// @Query("draft") draft : Boolean,
|
||||
// @Query("prerelease") prerelease: Boolean
|
||||
// )
|
||||
class CreateReleaseResponse(var id: String? = null)
|
||||
|
||||
interface Api {
|
||||
@GET("/repos/{owner}/{repo}/contributors")
|
||||
fun contributors(@Path("owner") owner: String, @Path("repo") repo: String): List<Contributor>
|
||||
|
||||
@GET("/repos/{owner}/{repo}/releases")
|
||||
fun releases(@Path("owner") owner: String, @Path("repo") repo: String): List<Release>
|
||||
|
||||
@POST("/repos/{owner}/{repo}/releases")
|
||||
fun createRelease(@Path("owner") owner: String,
|
||||
@Query("access_token") accessToken: String,
|
||||
@Path("repo") repo: String,
|
||||
@Body createRelease: CreateRelease
|
||||
) : Observable<CreateReleaseResponse>
|
||||
|
||||
@POST("/repos/{owner}/{repo}/releases/{id}/assets")
|
||||
fun uploadRelease(@Path("owner") owner: String,
|
||||
@Query("access_token") accessToken: String,
|
||||
@Path("repo") repo: String,
|
||||
@Path("id") id: String,
|
||||
@Query("name") name: String,
|
||||
@Query("label") label: String,
|
||||
@Body file: File,
|
||||
@Query("Content-Type") contentType: String = "application/zip")
|
||||
: Observable<UploadReleaseResponse>
|
||||
|
||||
}
|
||||
|
||||
val service : Api by lazy { ServiceGenerator.createService(Api::class.java) }
|
||||
|
||||
fun <S> createService(serviceClass: Class<S>): S {
|
||||
val retrofit = builder
|
||||
.setEndpoint(HOST)
|
||||
.setLogLevel(RestAdapter.LogLevel.FULL)
|
||||
.setClient(OkClient(OkHttpClient()))
|
||||
|
||||
// .setClient(httpClient)
|
||||
.build()
|
||||
return retrofit.create(serviceClass)
|
||||
}
|
||||
|
||||
const val ACCESS_TOKEN_PROPERTY = "github.accessToken"
|
||||
const val USERNAME_PROPERTY = "github.username"
|
||||
|
||||
val localProperties: Properties by lazy {
|
||||
val result = Properties()
|
||||
val filePath = Paths.get("local.properties")
|
||||
if (! Files.exists(filePath)) {
|
||||
throw KobaltException("Couldn't find a local.properties file")
|
||||
}
|
||||
|
||||
filePath.let { path ->
|
||||
if (Files.exists(path)) {
|
||||
Files.newInputStream(path).use {
|
||||
result.load(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
private fun fromProperties(name: String) : String {
|
||||
val result = localProperties.get(name)
|
||||
?: throw KobaltException("Couldn't find $name in local.properties")
|
||||
return result as String
|
||||
}
|
||||
|
||||
val accessToken: String get() = fromProperties(ACCESS_TOKEN_PROPERTY)
|
||||
val username: String get() = fromProperties(USERNAME_PROPERTY)
|
||||
|
||||
fun uploadRelease() : Int {
|
||||
println("createRelease()")
|
||||
service.createRelease(username, accessToken, "kobalt",
|
||||
// hashMapOf("tag_name" to "0.502tagName")
|
||||
CreateRelease("0.503tagName")
|
||||
// CreateRelease().apply { tag_name = "0.500tagName"}
|
||||
// CreateRelease("0.500tagName",
|
||||
// "master", "0.500name",
|
||||
// "A test release",
|
||||
// draft = false, prerelease = true)
|
||||
)
|
||||
.map { response: CreateReleaseResponse? ->
|
||||
uploadRelease(response?.id!!)
|
||||
println("Received id " + response?.id)
|
||||
}
|
||||
uploadService.uploadRelease(Prop.username, Prop.accessToken, "kobalt", release.id!!, "zipFile", "label",
|
||||
TypedFile("text/plain", File(homeDir("kotlin", "kobalt", "kobalt", "src", "Build.kt"))))
|
||||
.subscribe(
|
||||
{ println("success") },
|
||||
{ e: Throwable -> println("error" + e)},
|
||||
{ println("complete")}
|
||||
{ e: Throwable ->
|
||||
println("error" + (e as RetrofitError).response.bodyContent())
|
||||
println("")
|
||||
},
|
||||
{ println("complete") }
|
||||
)
|
||||
// })
|
||||
Thread.sleep(10000)
|
||||
return 0
|
||||
}
|
||||
|
||||
fun uploadRelease(id: String) {
|
||||
service.uploadRelease(username, accessToken, "kobalt", id, "The zip file", "The label",
|
||||
File(homeDir("kotlin", "kobalt", "src", "Build.kt")))
|
||||
}
|
||||
}
|
||||
println("createRelease()")
|
||||
// service.createRelease(username, accessToken, "kobalt",
|
||||
//// hashMapOf("tag_name" to "0.502tagName")
|
||||
// CreateRelease(releaseName)
|
||||
//// CreateRelease().apply { tag_name = "0.500tagName"}
|
||||
//// CreateRelease("0.500tagName",
|
||||
//// "master", "0.500name",
|
||||
//// "A test release",
|
||||
//// draft = false, prerelease = true)
|
||||
// )
|
||||
// .map { response: CreateReleaseResponse? ->
|
||||
// uploadRelease(response?.id!!)
|
||||
// println("Received id " + response?.id)
|
||||
// }
|
||||
// .subscribe(
|
||||
// { println("success") },
|
||||
// { e: Throwable ->
|
||||
// println("error" + (e as RetrofitError).response.bodyContent())
|
||||
// },
|
||||
// { println("complete")}
|
||||
// )
|
||||
//// })
|
||||
Thread.sleep(10000)
|
||||
return 0
|
||||
}
|
||||
|
||||
//
|
||||
// Read only Api
|
||||
//
|
||||
|
||||
private val service = RestAdapter.Builder()
|
||||
.setLogLevel(RestAdapter.LogLevel.FULL)
|
||||
.setClient(OkClient(OkHttpClient()))
|
||||
.setEndpoint("https://api.github.com")
|
||||
.build()
|
||||
.create(Api::class.java)
|
||||
|
||||
class Release {
|
||||
var name: String? = null
|
||||
var prerelease: Boolean? = null
|
||||
}
|
||||
|
||||
class CreateRelease(@SerializedName("tag_name") var tag_name: String? = null)
|
||||
class CreateReleaseResponse(var id: String? = null)
|
||||
class GetReleaseResponse(var id: String? = null,
|
||||
@SerializedName("upload_url") var uploadUrl: String? = null)
|
||||
|
||||
interface Api {
|
||||
|
||||
@GET("/repos/{owner}/{repo}/releases/tags/{tag}")
|
||||
fun getReleaseByTagName(@Path("owner") owner: String, @Path("repo") repo: String,
|
||||
@Path("tag") tagName: String): GetReleaseResponse
|
||||
|
||||
@GET("/repos/{owner}/{repo}/releases")
|
||||
fun releases(@Path("owner") owner: String, @Path("repo") repo: String): List<Release>
|
||||
|
||||
@POST("/repos/{owner}/{repo}/releases")
|
||||
fun createRelease(@Path("owner") owner: String,
|
||||
@Query("access_token") accessToken: String,
|
||||
@Path("repo") repo: String,
|
||||
@Body createRelease: CreateRelease
|
||||
): Observable<CreateReleaseResponse>
|
||||
}
|
||||
|
||||
//
|
||||
// Upload Api
|
||||
//
|
||||
|
||||
val uploadService = RestAdapter.Builder()
|
||||
.setEndpoint("https://uploads.github.com/")
|
||||
.setLogLevel(RestAdapter.LogLevel.FULL)
|
||||
.setClient(OkClient(OkHttpClient()))
|
||||
.build()
|
||||
.create(UploadApi::class.java)
|
||||
|
||||
class UploadReleaseResponse(var id: String? = null)
|
||||
|
||||
interface UploadApi {
|
||||
@POST("/repos/{owner}/{repo}/releases/{id}/assets")
|
||||
fun uploadRelease(@Path("owner") owner: String,
|
||||
@Query("access_token") accessToken: String,
|
||||
@Path("repo") repo: String,
|
||||
@Path("id") id: String,
|
||||
@Query("name") name: String,
|
||||
@Query("label") label: String,
|
||||
@Body file: TypedFile)
|
||||
// @Query("Content-Type") contentType: String = "text/plain")//"application/zip")
|
||||
: Observable<UploadReleaseResponse>
|
||||
}
|
||||
|
||||
val latestKobaltVersion: Future<String>
|
||||
get() {
|
||||
|
@ -179,7 +149,7 @@ public class GithubApi @Inject constructor(val executors: KobaltExecutors) {
|
|||
@Suppress("UNCHECKED_CAST")
|
||||
val reader = BufferedReader(InputStreamReader(ins))
|
||||
val jo = JsonParser().parse(reader) as JsonArray
|
||||
// val jo = Parser().parse(ins) as JsonArray<JsonObject>
|
||||
// val jo = Parser().parse(ins) as JsonArray<JsonObject>
|
||||
if (jo.size() > 0) {
|
||||
var versionName = (jo.get(0) as JsonObject).get("name").asString
|
||||
if (versionName == null) {
|
||||
|
@ -197,3 +167,46 @@ public class GithubApi @Inject constructor(val executors: KobaltExecutors) {
|
|||
return executors.miscExecutor.submit(callable)
|
||||
}
|
||||
}
|
||||
|
||||
fun Response.bodyContent() : String {
|
||||
val bodyBytes = (body as TypedByteArray).bytes
|
||||
val bodyMime = body.mimeType()
|
||||
val bodyCharset = MimeUtil.parseCharset(bodyMime, "utf-8")
|
||||
val result = String(bodyBytes, bodyCharset)
|
||||
return result
|
||||
// return new Gson().fromJson(data, type);
|
||||
}
|
||||
|
||||
class Prop {
|
||||
companion object {
|
||||
const val ACCESS_TOKEN_PROPERTY = "github.accessToken"
|
||||
const val USERNAME_PROPERTY = "github.username"
|
||||
|
||||
val localProperties: Properties by lazy {
|
||||
val result = Properties()
|
||||
val filePath = Paths.get("local.properties")
|
||||
if (! Files.exists(filePath)) {
|
||||
throw KobaltException("Couldn't find a local.properties file")
|
||||
}
|
||||
|
||||
filePath.let { path ->
|
||||
if (Files.exists(path)) {
|
||||
Files.newInputStream(path).use {
|
||||
result.load(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
private fun fromProperties(name: String) : String {
|
||||
val result = localProperties.get(name)
|
||||
?: throw KobaltException("Couldn't find $name in local.properties")
|
||||
return result as String
|
||||
}
|
||||
|
||||
val accessToken: String get() = fromProperties(ACCESS_TOKEN_PROPERTY)
|
||||
val username: String get() = fromProperties(USERNAME_PROPERTY)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue