diff --git a/pom.xml b/pom.xml
index 5ab01b8766..ddc44fb1f5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
github-api
- 1.59
+ 1.60-SNAPSHOT
GitHub API for Java
http://github-api.kohsuke.org/
GitHub API for Java
@@ -35,7 +35,7 @@
com.infradna.tool
bridge-method-injector
- 1.12
+ 1.14
@@ -77,7 +77,7 @@
com.infradna.tool
bridge-method-annotation
- 1.12
+ 1.14
org.kohsuke.stapler
@@ -107,6 +107,7 @@
org.mockito
mockito-all
1.9.5
+ test
diff --git a/src/main/java/org/kohsuke/github/GHAsset.java b/src/main/java/org/kohsuke/github/GHAsset.java
index 902356eebf..fb79e758d6 100644
--- a/src/main/java/org/kohsuke/github/GHAsset.java
+++ b/src/main/java/org/kohsuke/github/GHAsset.java
@@ -1,26 +1,21 @@
package org.kohsuke.github;
import java.io.IOException;
-import java.util.Date;
/**
* Asset in a release.
*
* @see GHRelease#getAssets()
*/
-public class GHAsset {
+public class GHAsset extends GHObject {
GitHub root;
GHRepository owner;
- private String url;
- private String id;
private String name;
private String label;
private String state;
private String content_type;
private long size;
private long download_count;
- private Date created_at;
- private Date updated_at;
private String browser_download_url;
public String getContentType() {
@@ -32,18 +27,10 @@ public void setContentType(String contentType) throws IOException {
this.content_type = contentType;
}
- public Date getCreatedAt() {
- return created_at;
- }
-
public long getDownloadCount() {
return download_count;
}
- public String getId() {
- return id;
- }
-
public String getLabel() {
return label;
}
@@ -73,14 +60,6 @@ public String getState() {
return state;
}
- public Date getUpdatedAt() {
- return updated_at;
- }
-
- public String getUrl() {
- return url;
- }
-
public String getBrowserDownloadUrl() {
return browser_download_url;
}
diff --git a/src/main/java/org/kohsuke/github/GHAuthorization.java b/src/main/java/org/kohsuke/github/GHAuthorization.java
index 7fe8fdaf94..b464b9cb68 100644
--- a/src/main/java/org/kohsuke/github/GHAuthorization.java
+++ b/src/main/java/org/kohsuke/github/GHAuthorization.java
@@ -12,7 +12,7 @@
* @see GitHub#createToken(Collection, String, String)
* @see http://developer.github.com/v3/oauth/#create-a-new-authorization
*/
-public class GHAuthorization {
+public class GHAuthorization extends GHObject {
public static final String USER = "user";
public static final String USER_EMAIL = "user:email";
public static final String USER_FOLLOW = "user:follow";
@@ -33,24 +33,16 @@ public class GHAuthorization {
public static final String ADMIN_KEY = "admin:public_key";
private GitHub root;
- private int id;
- private String url;
private List scopes;
private String token;
private App app;
private String note;
private String note_url;
- private String updated_at;
- private String created_at;
public GitHub getRoot() {
return root;
}
- public int getId() {
- return id;
- }
-
public List getScopes() {
return scopes;
}
@@ -78,14 +70,6 @@ public String getNote() {
public URL getNoteUrl(){
return GitHub.parseURL(note_url);
}
-
- public Date getCreatedAt() {
- return GitHub.parseDate(created_at);
- }
-
- public Date getUpdatedAt() {
- return GitHub.parseDate(updated_at);
- }
/*package*/ GHAuthorization wrap(GitHub root) {
this.root = root;
diff --git a/src/main/java/org/kohsuke/github/GHCommitComment.java b/src/main/java/org/kohsuke/github/GHCommitComment.java
index a5f23877f8..7deebbc6ad 100644
--- a/src/main/java/org/kohsuke/github/GHCommitComment.java
+++ b/src/main/java/org/kohsuke/github/GHCommitComment.java
@@ -12,13 +12,11 @@
* @see GHCommit#listComments()
* @see GHCommit#createComment(String, String, Integer, Integer)
*/
-public class GHCommitComment {
+public class GHCommitComment extends GHObject {
private GHRepository owner;
- String updated_at, created_at;
- String body, url, html_url, commit_id;
+ String body, html_url, commit_id;
Integer line;
- int id;
String path;
User user;
@@ -32,14 +30,6 @@ public GHRepository getOwner() {
return owner;
}
- public Date getCreatedAt() {
- return GitHub.parseDate(created_at);
- }
-
- public Date getUpdatedAt() {
- return GitHub.parseDate(updated_at);
- }
-
/**
* URL like 'https://github.com/kohsuke/sandbox-ant/commit/8ae38db0ea5837313ab5f39d43a6f73de3bd9000#commitcomment-1252827' to
* show this commit comment in a browser.
@@ -75,10 +65,6 @@ public int getLine() {
return line!=null ? line : -1;
}
- public int getId() {
- return id;
- }
-
/**
* Gets the user who put this comment.
*/
diff --git a/src/main/java/org/kohsuke/github/GHCommitStatus.java b/src/main/java/org/kohsuke/github/GHCommitStatus.java
index af9f1d31ca..98112ae2e7 100644
--- a/src/main/java/org/kohsuke/github/GHCommitStatus.java
+++ b/src/main/java/org/kohsuke/github/GHCommitStatus.java
@@ -10,12 +10,9 @@
* @see GHRepository#getCommitStatus(String)
* @see GHCommit#getStatus()
*/
-public class GHCommitStatus {
- String created_at, updated_at;
+public class GHCommitStatus extends GHObject {
String state;
String target_url,description;
- int id;
- String url;
String context;
GHUser creator;
@@ -27,14 +24,6 @@ public class GHCommitStatus {
return this;
}
- public Date getCreatedAt() {
- return GitHub.parseDate(created_at);
- }
-
- public Date getUpdatedAt() {
- return GitHub.parseDate(updated_at);
- }
-
public GHCommitState getState() {
for (GHCommitState s : GHCommitState.values()) {
if (s.name().equalsIgnoreCase(state))
@@ -56,17 +45,6 @@ public String getDescription() {
return description;
}
- public int getId() {
- return id;
- }
-
- /**
- * API URL of this commit status.
- */
- public String getUrl() {
- return url;
- }
-
public GHUser getCreator() {
return creator;
}
diff --git a/src/main/java/org/kohsuke/github/GHCompare.java b/src/main/java/org/kohsuke/github/GHCompare.java
index d61991fa13..9ca63b6e3b 100644
--- a/src/main/java/org/kohsuke/github/GHCompare.java
+++ b/src/main/java/org/kohsuke/github/GHCompare.java
@@ -148,6 +148,6 @@ public static class User extends GitUser {
}
public static enum Status {
- behind, ahead, identical
+ behind, ahead, identical, diverged
}
}
diff --git a/src/main/java/org/kohsuke/github/GHContent.java b/src/main/java/org/kohsuke/github/GHContent.java
index 443dd5918d..4900a19214 100644
--- a/src/main/java/org/kohsuke/github/GHContent.java
+++ b/src/main/java/org/kohsuke/github/GHContent.java
@@ -129,11 +129,19 @@ protected void wrapUp(GHContent[] page) {
}
public GHContentUpdateResponse update(String newContent, String commitMessage) throws IOException {
- return update(newContent, commitMessage, null);
+ return update(newContent.getBytes(), commitMessage, null);
}
public GHContentUpdateResponse update(String newContent, String commitMessage, String branch) throws IOException {
- String encodedContent = DatatypeConverter.printBase64Binary(newContent.getBytes());
+ return update(newContent.getBytes(), commitMessage, branch);
+ }
+
+ public GHContentUpdateResponse update(byte[] newContentBytes, String commitMessage) throws IOException {
+ return update(newContentBytes, commitMessage, null);
+ }
+
+ public GHContentUpdateResponse update(byte[] newContentBytes, String commitMessage, String branch) throws IOException {
+ String encodedContent = DatatypeConverter.printBase64Binary(newContentBytes);
Requester requester = new Requester(owner.root)
.with("path", path)
diff --git a/src/main/java/org/kohsuke/github/GHDeployment.java b/src/main/java/org/kohsuke/github/GHDeployment.java
new file mode 100644
index 0000000000..58fff1a0d4
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHDeployment.java
@@ -0,0 +1,53 @@
+package org.kohsuke.github;
+
+
+import java.net.URL;
+
+public class GHDeployment extends GHObject {
+ private GHRepository owner;
+ private GitHub root;
+ protected String sha;
+ protected String ref;
+ protected String task;
+ protected Object payload;
+ protected String environment;
+ protected String description;
+ protected String statuses_url;
+ protected String repository_url;
+ protected GHUser creator;
+
+
+ GHDeployment wrap(GHRepository owner) {
+ this.owner = owner;
+ this.root = owner.root;
+ if(creator != null) creator.wrapUp(root);
+ return this;
+ }
+
+ public URL getStatusesUrl() {
+ return GitHub.parseURL(statuses_url);
+ }
+
+ public URL getRepositoryUrl() {
+ return GitHub.parseURL(repository_url);
+ }
+
+ public String getTask() {
+ return task;
+ }
+ public String getPayload() {
+ return (String) payload;
+ }
+ public String getEnvironment() {
+ return environment;
+ }
+ public GHUser getCreator() {
+ return creator;
+ }
+ public String getRef() {
+ return ref;
+ }
+ public String getSha(){
+ return sha;
+ }
+}
diff --git a/src/main/java/org/kohsuke/github/GHDeploymentBuilder.java b/src/main/java/org/kohsuke/github/GHDeploymentBuilder.java
new file mode 100644
index 0000000000..00d10fad1b
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHDeploymentBuilder.java
@@ -0,0 +1,55 @@
+package org.kohsuke.github;
+
+import java.io.IOException;
+import java.util.List;
+
+//Based on https://developer.github.com/v3/repos/deployments/#create-a-deployment
+public class GHDeploymentBuilder {
+ private final GHRepository repo;
+ private final Requester builder;
+
+ public GHDeploymentBuilder(GHRepository repo) {
+ this.repo = repo;
+ this.builder = new Requester(repo.root);
+ }
+
+ public GHDeploymentBuilder(GHRepository repo, String ref) {
+ this(repo);
+ ref(ref);
+ }
+
+ public GHDeploymentBuilder ref(String branch) {
+ builder.with("ref",branch);
+ return this;
+ }
+ public GHDeploymentBuilder task(String task) {
+ builder.with("task",task);
+ return this;
+ }
+ public GHDeploymentBuilder autoMerge(boolean autoMerge) {
+ builder.with("auto_merge",autoMerge);
+ return this;
+ }
+
+ public GHDeploymentBuilder requiredContexts(List requiredContexts) {
+ builder.with("required_contexts",requiredContexts);
+ return this;
+ }
+ public GHDeploymentBuilder payload(String payload) {
+ builder.with("payload",payload);
+ return this;
+ }
+
+ public GHDeploymentBuilder environment(String environment) {
+ builder.with("environment",environment);
+ return this;
+ }
+ public GHDeploymentBuilder description(String description) {
+ builder.with("description",description);
+ return this;
+ }
+
+ public GHDeployment create() throws IOException {
+ return builder.to(repo.getApiTailUrl("deployments"),GHDeployment.class).wrap(repo);
+ }
+}
diff --git a/src/main/java/org/kohsuke/github/GHDeploymentState.java b/src/main/java/org/kohsuke/github/GHDeploymentState.java
new file mode 100644
index 0000000000..ff53a6d490
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHDeploymentState.java
@@ -0,0 +1,8 @@
+package org.kohsuke.github;
+
+/**
+ * Represents the state of deployment
+ */
+public enum GHDeploymentState {
+ PENDING, SUCCESS, ERROR, FAILURE
+}
diff --git a/src/main/java/org/kohsuke/github/GHDeploymentStatus.java b/src/main/java/org/kohsuke/github/GHDeploymentStatus.java
new file mode 100644
index 0000000000..78cf1b2ba2
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHDeploymentStatus.java
@@ -0,0 +1,36 @@
+package org.kohsuke.github;
+
+import java.net.URL;
+
+public class GHDeploymentStatus extends GHObject {
+ private GHRepository owner;
+ private GitHub root;
+ protected GHUser creator;
+ protected String state;
+ protected String description;
+ protected String target_url;
+ protected String deployment_url;
+ protected String repository_url;
+ public GHDeploymentStatus wrap(GHRepository owner) {
+ this.owner = owner;
+ this.root = owner.root;
+ if(creator != null) creator.wrapUp(root);
+ return this;
+ }
+ public URL getTargetUrl() {
+ return GitHub.parseURL(target_url);
+ }
+
+ public URL getDeploymentUrl() {
+ return GitHub.parseURL(deployment_url);
+ }
+
+ public URL getRepositoryUrl() {
+ return GitHub.parseURL(repository_url);
+ }
+ public GHDeploymentState getState() {
+ return GHDeploymentState.valueOf(state.toUpperCase());
+ }
+
+
+}
diff --git a/src/main/java/org/kohsuke/github/GHDeploymentStatusBuilder.java b/src/main/java/org/kohsuke/github/GHDeploymentStatusBuilder.java
new file mode 100644
index 0000000000..4310153800
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHDeploymentStatusBuilder.java
@@ -0,0 +1,30 @@
+package org.kohsuke.github;
+
+import java.io.IOException;
+
+public class GHDeploymentStatusBuilder {
+ private final Requester builder;
+ private GHRepository repo;
+ private int deploymentId;
+
+ public GHDeploymentStatusBuilder(GHRepository repo, int deploymentId, GHDeploymentState state) {
+ this.repo = repo;
+ this.deploymentId = deploymentId;
+ this.builder = new Requester(repo.root);
+ this.builder.with("state",state.toString().toLowerCase());
+ }
+
+ public GHDeploymentStatusBuilder description(String description) {
+ this.builder.with("description",description);
+ return this;
+ }
+
+ public GHDeploymentStatusBuilder targetUrl(String targetUrl) {
+ this.builder.with("target_url",targetUrl);
+ return this;
+ }
+
+ public GHDeploymentStatus create() throws IOException {
+ return builder.to(repo.getApiTailUrl("deployments")+"/"+deploymentId+"/statuses",GHDeploymentStatus.class).wrap(repo);
+ }
+}
diff --git a/src/main/java/org/kohsuke/github/GHGist.java b/src/main/java/org/kohsuke/github/GHGist.java
index 6cfada36d0..6e3f35d989 100644
--- a/src/main/java/org/kohsuke/github/GHGist.java
+++ b/src/main/java/org/kohsuke/github/GHGist.java
@@ -4,7 +4,6 @@
import java.io.IOException;
import java.util.Collections;
-import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@@ -17,16 +16,16 @@
* @see GitHub#getGist(String)
* @see GitHub#createGist()
*/
-public class GHGist {
+public class GHGist extends GHObject {
/*package almost final*/ GHUser owner;
/*package almost final*/ GitHub root;
- private String url, forks_url, commits_url, id, git_pull_url, git_push_url, html_url;
+ private String forks_url, commits_url, id, git_pull_url, git_push_url, html_url;
@JsonProperty("public")
private boolean _public;
- private String created_at, updated_at, description;
+ private String description;
private int comments;
@@ -41,13 +40,6 @@ public GHUser getOwner() {
return owner;
}
- /**
- * API URL of this gist, such as 'https://api.github.com/gists/12345'
- */
- public String getUrl() {
- return url;
- }
-
public String getForksUrl() {
return forks_url;
}
@@ -56,13 +48,6 @@ public String getCommitsUrl() {
return commits_url;
}
- /**
- * ID of this gist, such as '12345'
- */
- public String getId() {
- return id;
- }
-
/**
* URL like https://gist.github.com/gists/12345.git
*/
@@ -82,14 +67,6 @@ public boolean isPublic() {
return _public;
}
- public Date getCreatedAt() {
- return GitHub.parseDate(created_at);
- }
-
- public Date getUpdatedAt() {
- return GitHub.parseDate(updated_at);
- }
-
public String getDescription() {
return description;
}
diff --git a/src/main/java/org/kohsuke/github/GHHook.java b/src/main/java/org/kohsuke/github/GHHook.java
index 4a8ce78b88..7b9c523a05 100644
--- a/src/main/java/org/kohsuke/github/GHHook.java
+++ b/src/main/java/org/kohsuke/github/GHHook.java
@@ -10,18 +10,17 @@
/**
* @author Kohsuke Kawaguchi
*/
-public class GHHook {
+public class GHHook extends GHObject {
/**
* Repository that the hook belongs to.
*/
/*package*/ transient GHRepository repository;
- String created_at, updated_at, name;
+ String name;
List events;
boolean active;
Map config;
- int id;
-
+
/*package*/ GHHook wrap(GHRepository owner) {
this.repository = owner;
return this;
@@ -46,10 +45,6 @@ public Map getConfig() {
return Collections.unmodifiableMap(config);
}
- public int getId() {
- return id;
- }
-
/**
* Deletes this hook.
*/
diff --git a/src/main/java/org/kohsuke/github/GHIssue.java b/src/main/java/org/kohsuke/github/GHIssue.java
index bed8ba30f0..53db997adc 100644
--- a/src/main/java/org/kohsuke/github/GHIssue.java
+++ b/src/main/java/org/kohsuke/github/GHIssue.java
@@ -37,8 +37,11 @@
*
* @author Eric Maupin
* @author Kohsuke Kawaguchi
+ * @see GHRepository#getIssue(int)
+ * @see GitHub#searchIssues()
+ * @see GHIssueSearchBuilder
*/
-public class GHIssue {
+public class GHIssue extends GHObject {
GitHub root;
GHRepository owner;
@@ -51,11 +54,9 @@ public class GHIssue {
protected String body;
protected List