Skip to content

Commit

Permalink
Merge pull request #473 from joaoe/issue-472-archive-repository
Browse files Browse the repository at this point in the history
Implemented GitHub.doArchive
  • Loading branch information
bitwiseman committed Sep 25, 2019
2 parents 9042ff4 + 22575c9 commit 50fb9c1
Show file tree
Hide file tree
Showing 295 changed files with 291 additions and 7 deletions.
23 changes: 23 additions & 0 deletions src/main/java/org/kohsuke/github/GHRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,29 @@ public void delete() throws IOException {
}
}

/**
* Will archive and this repository as read-only. When a repository is archived, any operation
* that can change its state is forbidden. This applies symmetrically if trying to unarchive it.
*
* <p>When you try to do any operation that modifies a read-only repository, it returns the
* response:
*
* <pre>
* org.kohsuke.github.HttpException: {
* "message":"Repository was archived so is read-only.",
* "documentation_url":"https://developer.github.com/v3/repos/#edit"
* }
* </pre>
*
* @throws IOException In case of any networking error or error from the server.
*/
public void archive() throws IOException {
edit("archived", "true");
// Generall would not update this record,
// but do so here since this will result in any other update actions failing
archived = true;
}

/**
* Sort orders for listing forks
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.Properties;

import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static org.junit.Assume.assumeFalse;

/**
* @author Liam Newman
Expand All @@ -29,8 +30,10 @@ public abstract class AbstractGitHubApiWireMockTest extends Assert {

private final GitHubBuilder githubBuilder = createGitHubBuilder();

public final static String STUBBED_USER_LOGIN = "placeholder-user";
public final static String STUBBED_USER_PASSWORD = "placeholder-password";
final static String GITHUB_API_TEST_ORG = "github-api-test-org";

final static String STUBBED_USER_LOGIN = "placeholder-user";
final static String STUBBED_USER_PASSWORD = "placeholder-password";

/**
* {@link GitHub} instance for use during test.
Expand Down Expand Up @@ -109,4 +112,9 @@ public void wireMockSetup() throws Exception {
gitHubBeforeAfter = null;
}
}

protected void snapshotNotAllowed() {
assumeFalse("Test contains hand written mappings. Only valid when not taking a snapshot.", githubApi.isTakeSnapshot());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/**
* @author Kohsuke Kawaguchi
*/
public class PullRequestTest extends AbstractGitHubApiWireMockTest {
public class GHPullRequestTest extends AbstractGitHubApiWireMockTest {

@Before
@After
Expand Down
39 changes: 39 additions & 0 deletions src/test/java/org/kohsuke/github/GHRepositoryTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.kohsuke.github;

import org.junit.Test;

import java.io.IOException;

import static org.hamcrest.Matchers.is;
import static org.junit.Assert.*;
import static org.junit.Assume.assumeFalse;

/**
* @author Liam Newman
*/
public class GHRepositoryTest extends AbstractGitHubApiWireMockTest {

@Test
public void archive() throws Exception {
snapshotNotAllowed();

// Archive is a one-way action in the API.
// We do thi this one
GHRepository repo = getRepository();

assertThat(repo.isArchived(), is(false));

repo.archive();

assertThat(repo.isArchived(), is(true));
assertThat(getRepository().isArchived(), is(true));
}

protected GHRepository getRepository() throws IOException {
return getRepository(gitHub);
}

private GHRepository getRepository(GitHub gitHub) throws IOException {
return gitHub.getOrganization("github-api-test-org").getRepository("github-api");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class WireMockStatusReporterTest extends AbstractGitHubApiWireMockTest {

@Test
public void user_whenProxying_AuthCorrectlyConfigured() throws Exception {
assumeFalse("Test only valid when not taking a snapshot", githubApi.isTakeSnapshot());
snapshotNotAllowed();
assumeTrue("Test only valid when proxying (-Dtest.github.useProxy to enable)", githubApi.isUseProxy());

assertThat(
Expand All @@ -42,7 +42,7 @@ public void user_whenProxying_AuthCorrectlyConfigured() throws Exception {

@Test
public void user_whenNotProxying_Stubbed() throws Exception {
assumeFalse("Test only valid when not taking a snapshot", githubApi.isTakeSnapshot());
snapshotNotAllowed();
assumeFalse("Test only valid when not proxying", githubApi.isUseProxy());

assertThat(gitHub.isAnonymous(), is(false));
Expand All @@ -59,7 +59,7 @@ public void user_whenNotProxying_Stubbed() throws Exception {

@Test
public void BasicBehaviors_whenNotProxying() throws Exception {
assumeFalse("Test only valid when not taking a snapshot", githubApi.isTakeSnapshot());
snapshotNotAllowed();
assumeFalse("Test only valid when not proxying", githubApi.isUseProxy());

Exception e = null;
Expand Down Expand Up @@ -96,7 +96,7 @@ public void BasicBehaviors_whenNotProxying() throws Exception {

@Test
public void BasicBehaviors_whenProxying() throws Exception {
assumeFalse("Test only valid when not taking a snapshot", githubApi.isTakeSnapshot());
snapshotNotAllowed();
assumeTrue("Test only valid when proxying (-Dtest.github.useProxy to enable)", githubApi.isUseProxy());
Exception e = null;
GHRepository repo = null;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"login":"github-api-test-org","id":7544739,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc1NDQ3Mzk=","url":"https://api.github.com/orgs/github-api-test-org","repos_url":"https://api.github.com/orgs/github-api-test-org/repos","events_url":"https://api.github.com/orgs/github-api-test-org/events","hooks_url":"https://api.github.com/orgs/github-api-test-org/hooks","issues_url":"https://api.github.com/orgs/github-api-test-org/issues","members_url":"https://api.github.com/orgs/github-api-test-org/members{/member}","public_members_url":"https://api.github.com/orgs/github-api-test-org/public_members{/member}","avatar_url":"https://avatars3.githubusercontent.com/u/7544739?v=4","description":null,"is_verified":false,"has_organization_projects":true,"has_repository_projects":true,"public_repos":9,"public_gists":0,"followers":0,"following":0,"html_url":"https://github.com/github-api-test-org","created_at":"2014-05-10T19:39:11Z","updated_at":"2015-04-20T00:42:30Z","type":"Organization","total_private_repos":0,"owned_private_repos":0,"private_gists":0,"disk_usage":132,"collaborators":0,"billing_email":"[email protected]","default_repository_permission":"none","members_can_create_repositories":false,"two_factor_requirement_enabled":false,"members_allowed_repository_creation_type":"none","plan":{"name":"free","space":976562499,"private_repos":0,"filled_seats":3,"seats":0}}

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"login":"bitwiseman","id":1958953,"node_id":"MDQ6VXNlcjE5NTg5NTM=","avatar_url":"https://avatars3.githubusercontent.com/u/1958953?v=4","gravatar_id":"","url":"https://api.github.com/users/bitwiseman","html_url":"https://github.com/bitwiseman","followers_url":"https://api.github.com/users/bitwiseman/followers","following_url":"https://api.github.com/users/bitwiseman/following{/other_user}","gists_url":"https://api.github.com/users/bitwiseman/gists{/gist_id}","starred_url":"https://api.github.com/users/bitwiseman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bitwiseman/subscriptions","organizations_url":"https://api.github.com/users/bitwiseman/orgs","repos_url":"https://api.github.com/users/bitwiseman/repos","events_url":"https://api.github.com/users/bitwiseman/events{/privacy}","received_events_url":"https://api.github.com/users/bitwiseman/received_events","type":"User","site_admin":false,"name":"Liam Newman","company":"Cloudbees, Inc.","blog":"","location":"Seattle, WA, USA","email":"[email protected]","hireable":null,"bio":"https://twitter.com/bitwiseman","public_repos":166,"public_gists":4,"followers":135,"following":9,"created_at":"2012-07-11T20:38:33Z","updated_at":"2019-09-24T19:32:29Z"}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"id" : "cb173af2-c793-444a-acdf-c3850e7afdbe",
"name" : "orgs_github-api-test-org",
"request" : {
"url" : "/orgs/github-api-test-org",
"method" : "GET"
},
"response" : {
"status" : 200,
"bodyFileName" : "orgs_github-api-test-org-cb173af2-c793-444a-acdf-c3850e7afdbe.json",
"headers" : {
"Date" : "Wed, 25 Sep 2019 23:35:58 GMT",
"Content-Type" : "application/json; charset=utf-8",
"Server" : "GitHub.com",
"Status" : "200 OK",
"X-RateLimit-Limit" : "5000",
"X-RateLimit-Remaining" : "4989",
"X-RateLimit-Reset" : "1569457884",
"Cache-Control" : "private, max-age=60, s-maxage=60",
"Vary" : [ "Accept, Authorization, Cookie, X-GitHub-OTP", "Accept-Encoding" ],
"ETag" : "W/\"b7989d48e6539c9c76038995b902421b\"",
"Last-Modified" : "Mon, 20 Apr 2015 00:42:30 GMT",
"X-OAuth-Scopes" : "gist, notifications, read:org, read:public_key, read:repo_hook, repo",
"X-Accepted-OAuth-Scopes" : "admin:org, read:org, repo, user, write:org",
"X-GitHub-Media-Type" : "unknown, github.v3",
"Access-Control-Expose-Headers" : "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type",
"Access-Control-Allow-Origin" : "*",
"Strict-Transport-Security" : "max-age=31536000; includeSubdomains; preload",
"X-Frame-Options" : "deny",
"X-Content-Type-Options" : "nosniff",
"X-XSS-Protection" : "1; mode=block",
"Referrer-Policy" : "origin-when-cross-origin, strict-origin-when-cross-origin",
"Content-Security-Policy" : "default-src 'none'",
"X-GitHub-Request-Id" : "F855:59E1:1397ED7:171400E:5D8BF9DE"
}
},
"uuid" : "cb173af2-c793-444a-acdf-c3850e7afdbe",
"persistent" : true,
"insertionIndex" : 2
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"id" : "0a4d7a1a-f99c-47ca-840a-3e920c18bd1f",
"name" : "repos_github-api-test-org_github-api",
"request" : {
"url" : "/repos/github-api-test-org/github-api",
"method" : "GET"
},
"response" : {
"status" : 200,
"bodyFileName" : "repos_github-api-test-org_github-api-0a4d7a1a-f99c-47ca-840a-3e920c18bd1f.json",
"headers" : {
"Date" : "Wed, 25 Sep 2019 23:35:58 GMT",
"Content-Type" : "application/json; charset=utf-8",
"Server" : "GitHub.com",
"Status" : "200 OK",
"X-RateLimit-Limit" : "5000",
"X-RateLimit-Remaining" : "4988",
"X-RateLimit-Reset" : "1569457884",
"Cache-Control" : "private, max-age=60, s-maxage=60",
"Vary" : [ "Accept, Authorization, Cookie, X-GitHub-OTP", "Accept-Encoding" ],
"ETag" : "W/\"0678d1c39ea574f68cc0fb330b067cb7\"",
"Last-Modified" : "Wed, 25 Sep 2019 23:32:35 GMT",
"X-OAuth-Scopes" : "gist, notifications, read:org, read:public_key, read:repo_hook, repo",
"X-Accepted-OAuth-Scopes" : "repo",
"X-GitHub-Media-Type" : "unknown, github.v3",
"Access-Control-Expose-Headers" : "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type",
"Access-Control-Allow-Origin" : "*",
"Strict-Transport-Security" : "max-age=31536000; includeSubdomains; preload",
"X-Frame-Options" : "deny",
"X-Content-Type-Options" : "nosniff",
"X-XSS-Protection" : "1; mode=block",
"Referrer-Policy" : "origin-when-cross-origin, strict-origin-when-cross-origin",
"Content-Security-Policy" : "default-src 'none'",
"X-GitHub-Request-Id" : "F855:59E1:1397EEB:1714029:5D8BF9DE"
}
},
"uuid" : "0a4d7a1a-f99c-47ca-840a-3e920c18bd1f",
"persistent" : true,
"scenarioName" : "scenario-1-repos-github-api-test-org-github-api",
"requiredScenarioState" : "Started",
"newScenarioState" : "scenario-1-repos-github-api-test-org-github-api-2",
"insertionIndex" : 3
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"id" : "1c529d7c-99f0-43ae-8231-044f48beac1a",
"name" : "repos_github-api-test-org_github-api",
"request" : {
"url" : "/repos/github-api-test-org/github-api",
"method" : "GET"
},
"response" : {
"status" : 200,
"bodyFileName" : "repos_github-api-test-org_github-api-1c529d7c-99f0-43ae-8231-044f48beac1a.json",
"headers" : {
"Date" : "Wed, 25 Sep 2019 23:35:59 GMT",
"Content-Type" : "application/json; charset=utf-8",
"Server" : "GitHub.com",
"Status" : "200 OK",
"X-RateLimit-Limit" : "5000",
"X-RateLimit-Remaining" : "4986",
"X-RateLimit-Reset" : "1569457884",
"Cache-Control" : "private, max-age=60, s-maxage=60",
"Vary" : [ "Accept, Authorization, Cookie, X-GitHub-OTP", "Accept-Encoding" ],
"ETag" : "W/\"e40487cafd3670c0de171f4250dbefb8\"",
"Last-Modified" : "Wed, 25 Sep 2019 23:35:59 GMT",
"X-OAuth-Scopes" : "gist, notifications, read:org, read:public_key, read:repo_hook, repo",
"X-Accepted-OAuth-Scopes" : "repo",
"X-GitHub-Media-Type" : "unknown, github.v3",
"Access-Control-Expose-Headers" : "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type",
"Access-Control-Allow-Origin" : "*",
"Strict-Transport-Security" : "max-age=31536000; includeSubdomains; preload",
"X-Frame-Options" : "deny",
"X-Content-Type-Options" : "nosniff",
"X-XSS-Protection" : "1; mode=block",
"Referrer-Policy" : "origin-when-cross-origin, strict-origin-when-cross-origin",
"Content-Security-Policy" : "default-src 'none'",
"X-GitHub-Request-Id" : "F855:59E1:1397F42:1714091:5D8BF9DF"
}
},
"uuid" : "1c529d7c-99f0-43ae-8231-044f48beac1a",
"persistent" : true,
"scenarioName" : "scenario-1-repos-github-api-test-org-github-api",
"requiredScenarioState" : "scenario-1-repos-github-api-test-org-github-api-2",
"insertionIndex" : 5
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"id" : "2c69d5c8-dd81-4204-bad9-ee37f5b0ebfd",
"name" : "repos_github-api-test-org_github-api",
"request" : {
"url" : "/repos/github-api-test-org/github-api",
"method" : "PATCH",
"bodyPatterns" : [ {
"equalToJson" : "{\"archived\":\"true\",\"name\":\"github-api\"}",
"ignoreArrayOrder" : true,
"ignoreExtraElements" : true
} ]
},
"response" : {
"status" : 200,
"bodyFileName" : "repos_github-api-test-org_github-api-2c69d5c8-dd81-4204-bad9-ee37f5b0ebfd.json",
"headers" : {
"Date" : "Wed, 25 Sep 2019 23:35:59 GMT",
"Content-Type" : "application/json; charset=utf-8",
"Server" : "GitHub.com",
"Status" : "200 OK",
"X-RateLimit-Limit" : "5000",
"X-RateLimit-Remaining" : "4987",
"X-RateLimit-Reset" : "1569457884",
"Cache-Control" : "private, max-age=60, s-maxage=60",
"Vary" : [ "Accept, Authorization, Cookie, X-GitHub-OTP", "Accept-Encoding" ],
"ETag" : "W/\"e40487cafd3670c0de171f4250dbefb8\"",
"X-OAuth-Scopes" : "gist, notifications, read:org, read:public_key, read:repo_hook, repo",
"X-Accepted-OAuth-Scopes" : "",
"X-GitHub-Media-Type" : "unknown, github.v3",
"Access-Control-Expose-Headers" : "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type",
"Access-Control-Allow-Origin" : "*",
"Strict-Transport-Security" : "max-age=31536000; includeSubdomains; preload",
"X-Frame-Options" : "deny",
"X-Content-Type-Options" : "nosniff",
"X-XSS-Protection" : "1; mode=block",
"Referrer-Policy" : "origin-when-cross-origin, strict-origin-when-cross-origin",
"Content-Security-Policy" : "default-src 'none'",
"X-GitHub-Request-Id" : "F855:59E1:1397F0E:1714041:5D8BF9DE"
}
},
"uuid" : "2c69d5c8-dd81-4204-bad9-ee37f5b0ebfd",
"persistent" : true,
"insertionIndex" : 4
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"id" : "7f6e9a01-5bfa-4f72-9947-07df902f56c3",
"name" : "user",
"request" : {
"url" : "/user",
"method" : "GET"
},
"response" : {
"status" : 200,
"bodyFileName" : "user-7f6e9a01-5bfa-4f72-9947-07df902f56c3.json",
"headers" : {
"Date" : "Wed, 25 Sep 2019 23:35:33 GMT",
"Content-Type" : "application/json; charset=utf-8",
"Server" : "GitHub.com",
"Status" : "200 OK",
"X-RateLimit-Limit" : "5000",
"X-RateLimit-Remaining" : "4992",
"X-RateLimit-Reset" : "1569457884",
"Cache-Control" : "private, max-age=60, s-maxage=60",
"Vary" : [ "Accept, Authorization, Cookie, X-GitHub-OTP", "Accept-Encoding" ],
"ETag" : "W/\"14ffd29009ddc2209c450bb29a5a8330\"",
"Last-Modified" : "Tue, 24 Sep 2019 19:32:29 GMT",
"X-OAuth-Scopes" : "gist, notifications, read:org, read:public_key, read:repo_hook, repo",
"X-Accepted-OAuth-Scopes" : "",
"X-GitHub-Media-Type" : "unknown, github.v3",
"Access-Control-Expose-Headers" : "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type",
"Access-Control-Allow-Origin" : "*",
"Strict-Transport-Security" : "max-age=31536000; includeSubdomains; preload",
"X-Frame-Options" : "deny",
"X-Content-Type-Options" : "nosniff",
"X-XSS-Protection" : "1; mode=block",
"Referrer-Policy" : "origin-when-cross-origin, strict-origin-when-cross-origin",
"Content-Security-Policy" : "default-src 'none'",
"X-GitHub-Request-Id" : "F845:5D1D:FFA88A:12FE539:5D8BF9C5"
}
},
"uuid" : "7f6e9a01-5bfa-4f72-9947-07df902f56c3",
"persistent" : true,
"insertionIndex" : 1
}

0 comments on commit 50fb9c1

Please sign in to comment.