From feb94c131f05603fc0f1762274a5a6f8362c1410 Mon Sep 17 00:00:00 2001 From: ellery44 <5491827+ellery44@users.noreply.github.com> Date: Thu, 11 Oct 2018 14:27:07 -0700 Subject: [PATCH 1/4] #907 Adds oauth token as param to codebuild.GitHubEnterpriseSource --- packages/@aws-cdk/aws-codebuild/lib/source.ts | 6 ++-- .../aws-codebuild/test/test.project.ts | 36 ++++++++++++++++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/packages/@aws-cdk/aws-codebuild/lib/source.ts b/packages/@aws-cdk/aws-codebuild/lib/source.ts index 2fef03ce0db39..f95efb4a56b68 100644 --- a/packages/@aws-cdk/aws-codebuild/lib/source.ts +++ b/packages/@aws-cdk/aws-codebuild/lib/source.ts @@ -92,18 +92,20 @@ export class GitHubSource extends BuildSource { } /** - * GitHub Enterprice Source definition for a CodeBuild project + * GitHub Enterprise Source definition for a CodeBuild project */ export class GitHubEnterpriseSource extends BuildSource { - constructor(private readonly cloneUrl: string) { + constructor(private readonly cloneUrl: string, private readonly oauthToken: any) { super(); this.cloneUrl = cloneUrl; + this.oauthToken = oauthToken; } public toSourceJSON(): cloudformation.ProjectResource.SourceProperty { return { type: SourceType.GitHubEnterPrise, location: this.cloneUrl, + auth: this.oauthToken != null ? { type: 'OAUTH', resource: this.oauthToken } : undefined, }; } } diff --git a/packages/@aws-cdk/aws-codebuild/test/test.project.ts b/packages/@aws-cdk/aws-codebuild/test/test.project.ts index 9c42173536d58..854e7f43c0d79 100644 --- a/packages/@aws-cdk/aws-codebuild/test/test.project.ts +++ b/packages/@aws-cdk/aws-codebuild/test/test.project.ts @@ -34,7 +34,7 @@ export = { // WHEN new codebuild.Project(stack, 'Project', { source: new codebuild.CodePipelineSource(), - buildSpec: { phases: [ 'say hi' ] } + buildSpec: { phases: ['say hi'] } }); // THEN @@ -47,6 +47,30 @@ export = { test.done(); }, + 'github enterprise auth test'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + new codebuild.Project(stack, 'Project', { + source: new codebuild.GitHubEnterpriseSource("https://mycompany.github.com", "my_oauth_token") + }); + + // THEN + expect(stack).to(haveResource('AWS::CodeBuild::Project', { + Source: { + Type: "GITHUB_ENTERPRISE", + Auth: { + Type: 'OAUTH', + Resource: 'my_oauth_token' + }, + Location: 'https://mycompany.github.com' + } + })); + + test.done(); + }, + 'construct from asset'(test: Test) { // GIVEN const stack = new cdk.Stack(); @@ -70,10 +94,12 @@ export = { { Name: "SCRIPT_S3_KEY", Type: "PLAINTEXT", - Value: { "Fn::Join": [ "", [ - { "Fn::Select": [ 0, { "Fn::Split": [ "||", { Ref: "AssetS3VersionKeyA852DDAE" } ] } ] }, - { "Fn::Select": [ 1, { "Fn::Split": [ "||", { Ref: "AssetS3VersionKeyA852DDAE" } ] } ] } - ] ] } + Value: { + "Fn::Join": ["", [ + { "Fn::Select": [0, { "Fn::Split": ["||", { Ref: "AssetS3VersionKeyA852DDAE" }] }] }, + { "Fn::Select": [1, { "Fn::Split": ["||", { Ref: "AssetS3VersionKeyA852DDAE" }] }] } + ]] + } } ], }, From ddffe24e348032feb67b64e2a4624caa8a3c19a6 Mon Sep 17 00:00:00 2001 From: ellery44 <5491827+ellery44@users.noreply.github.com> Date: Thu, 11 Oct 2018 21:16:17 -0700 Subject: [PATCH 2/4] #907 Makes codebuild github sources use `cdk.Secret` for oAuth token. --- packages/@aws-cdk/aws-codebuild/lib/source.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/@aws-cdk/aws-codebuild/lib/source.ts b/packages/@aws-cdk/aws-codebuild/lib/source.ts index f95efb4a56b68..e62458389b3c0 100644 --- a/packages/@aws-cdk/aws-codebuild/lib/source.ts +++ b/packages/@aws-cdk/aws-codebuild/lib/source.ts @@ -76,7 +76,7 @@ export class CodePipelineSource extends BuildSource { * GitHub Source definition for a CodeBuild project */ export class GitHubSource extends BuildSource { - constructor(private readonly httpscloneUrl: string, private readonly oauthToken: any) { + constructor(private readonly httpscloneUrl: string, private readonly oauthToken: cdk.Secret) { super(); this.httpscloneUrl = httpscloneUrl; this.oauthToken = oauthToken; @@ -95,7 +95,7 @@ export class GitHubSource extends BuildSource { * GitHub Enterprise Source definition for a CodeBuild project */ export class GitHubEnterpriseSource extends BuildSource { - constructor(private readonly cloneUrl: string, private readonly oauthToken: any) { + constructor(private readonly cloneUrl: string, private readonly oauthToken: cdk.Secret) { super(); this.cloneUrl = cloneUrl; this.oauthToken = oauthToken; From ee1b38c9549733babbe39c6315b31d7d47d5c7b6 Mon Sep 17 00:00:00 2001 From: ellery44 <5491827+ellery44@users.noreply.github.com> Date: Thu, 11 Oct 2018 23:12:02 -0700 Subject: [PATCH 3/4] #907 Makes github codebuild sources take prop interface. --- packages/@aws-cdk/aws-codebuild/lib/source.ts | 31 ++++++++++++++----- .../aws-codebuild/test/test.project.ts | 5 ++- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/packages/@aws-cdk/aws-codebuild/lib/source.ts b/packages/@aws-cdk/aws-codebuild/lib/source.ts index e62458389b3c0..9c4ebb15ec0c4 100644 --- a/packages/@aws-cdk/aws-codebuild/lib/source.ts +++ b/packages/@aws-cdk/aws-codebuild/lib/source.ts @@ -72,21 +72,36 @@ export class CodePipelineSource extends BuildSource { } } +export interface GithubSourceProps { + /** + * The git url to clone for this code build project. + */ + cloneUrl: string; + + /** + * The oAuthToken used to authenticate when cloning source git repo. + */ + oauthToken: cdk.Secret; + +} + /** * GitHub Source definition for a CodeBuild project */ export class GitHubSource extends BuildSource { - constructor(private readonly httpscloneUrl: string, private readonly oauthToken: cdk.Secret) { + private cloneUrl: string; + private oauthToken: cdk.Secret; + constructor(props: GithubSourceProps) { super(); - this.httpscloneUrl = httpscloneUrl; - this.oauthToken = oauthToken; + this.cloneUrl = props.cloneUrl; + this.oauthToken = props.oauthToken; } public toSourceJSON(): cloudformation.ProjectResource.SourceProperty { return { type: SourceType.GitHub, auth: this.oauthToken != null ? { type: 'OAUTH', resource: this.oauthToken } : undefined, - location: this.httpscloneUrl + location: this.cloneUrl }; } } @@ -95,10 +110,12 @@ export class GitHubSource extends BuildSource { * GitHub Enterprise Source definition for a CodeBuild project */ export class GitHubEnterpriseSource extends BuildSource { - constructor(private readonly cloneUrl: string, private readonly oauthToken: cdk.Secret) { + private cloneUrl: string; + private oauthToken: cdk.Secret; + constructor(props: GithubSourceProps) { super(); - this.cloneUrl = cloneUrl; - this.oauthToken = oauthToken; + this.cloneUrl = props.cloneUrl; + this.oauthToken = props.oauthToken; } public toSourceJSON(): cloudformation.ProjectResource.SourceProperty { diff --git a/packages/@aws-cdk/aws-codebuild/test/test.project.ts b/packages/@aws-cdk/aws-codebuild/test/test.project.ts index 854e7f43c0d79..c550c4d2b38ba 100644 --- a/packages/@aws-cdk/aws-codebuild/test/test.project.ts +++ b/packages/@aws-cdk/aws-codebuild/test/test.project.ts @@ -53,7 +53,10 @@ export = { // WHEN new codebuild.Project(stack, 'Project', { - source: new codebuild.GitHubEnterpriseSource("https://mycompany.github.com", "my_oauth_token") + source: new codebuild.GitHubEnterpriseSource({ + cloneUrl: "https://mycompany.github.com", + oauthToken: new cdk.Secret("my_oauth_token") + }) }); // THEN From 6530d86de31d5bc2098f6279e8b62738c473b4c8 Mon Sep 17 00:00:00 2001 From: ellery44 <5491827+ellery44@users.noreply.github.com> Date: Thu, 11 Oct 2018 23:25:33 -0700 Subject: [PATCH 4/4] #907 Adds test for codebuild github source. --- .../aws-codebuild/test/test.project.ts | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/packages/@aws-cdk/aws-codebuild/test/test.project.ts b/packages/@aws-cdk/aws-codebuild/test/test.project.ts index c550c4d2b38ba..a8c5fb49e3176 100644 --- a/packages/@aws-cdk/aws-codebuild/test/test.project.ts +++ b/packages/@aws-cdk/aws-codebuild/test/test.project.ts @@ -47,6 +47,33 @@ export = { test.done(); }, + 'github auth test'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + new codebuild.Project(stack, 'Project', { + source: new codebuild.GitHubSource({ + cloneUrl: "https://github.com/testowner/testrepo", + oauthToken: new cdk.Secret("test_oauth_token") + }) + }); + + // THEN + expect(stack).to(haveResource('AWS::CodeBuild::Project', { + Source: { + Type: "GITHUB", + Auth: { + Type: 'OAUTH', + Resource: 'test_oauth_token' + }, + Location: 'https://github.com/testowner/testrepo' + } + })); + + test.done(); + }, + 'github enterprise auth test'(test: Test) { // GIVEN const stack = new cdk.Stack(); @@ -54,8 +81,8 @@ export = { // WHEN new codebuild.Project(stack, 'Project', { source: new codebuild.GitHubEnterpriseSource({ - cloneUrl: "https://mycompany.github.com", - oauthToken: new cdk.Secret("my_oauth_token") + cloneUrl: "https://github.testcompany.com/testowner/testrepo", + oauthToken: new cdk.Secret("test_oauth_token") }) }); @@ -65,9 +92,9 @@ export = { Type: "GITHUB_ENTERPRISE", Auth: { Type: 'OAUTH', - Resource: 'my_oauth_token' + Resource: 'test_oauth_token' }, - Location: 'https://mycompany.github.com' + Location: 'https://github.testcompany.com/testowner/testrepo' } }));