Skip to content

Commit 15ff3fb

Browse files
authored
Merge pull request #150 from cloudgraphdev/feature/EP-3200-add-codecommit-repository-service
Feature/ep 3200 add codecommit repository service
2 parents b1f30ce + 5fd5ab0 commit 15ff3fb

File tree

15 files changed

+209
-1
lines changed

15 files changed

+209
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ CloudGraph AWS Provider will ask you what regions you would like to crawl and wi
9191
| cloudtrail | cloudwatch, cloudwatchLog, kms, s3, sns |
9292
| cloudwatch | cloudfront, cloudtrail, cloudwatchLog, sns |
9393
| cloudwatchLog | cloudtrail, cloudwatch, ecsCluster, elasticSearchDomain, kms, managedAirflow, rdsDbInstance |
94+
| codeCommitRepository | |
9495
| codebuild | iamRole, kms, vpc, securityGroup, subnet |
9596
| cognitoIdentityPool | iamRole, iamOpenIdConnectProvider, iamSamlProvider, elasticSearchDomain |
9697
| cognitoUserPool | appSync, elasticSearchDomain, lambda |

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"terraform:cleanup": "rimraf ./tests/terraform/{.terraform,.terraform.lock.hcl,tfplan} ./tests/terraform/*.{tfstate,tfplan,backup}"
3232
},
3333
"dependencies": {
34+
"@aws-sdk/client-codecommit": "^3.342.0",
3435
"@aws-sdk/client-elastic-beanstalk": "^3.338.0",
3536
"@aws-sdk/client-glue": "^3.342.0",
3637
"@aws-sdk/client-ssm": "^3.341.0",

src/enums/schemasMap.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export default {
2525
[services.cloudwatch]: 'awsCloudwatch',
2626
[services.cloudwatchLog]: 'awsCloudwatchLog',
2727
[services.codebuild]: 'awsCodebuild',
28+
[services.codeCommitRepository]: 'awsCodeCommitRepository',
2829
[services.cognitoIdentityPool]: 'awsCognitoIdentityPool',
2930
[services.cognitoUserPool]: 'awsCognitoUserPool',
3031
[services.configurationRecorder]: 'awsConfigurationRecorder',

src/enums/serviceAliases.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export default {
2121
[services.cloudwatchDashboard]: 'cloudwatchDashboards',
2222
[services.cloudwatchEventRule]: 'cloudwatchEventRules',
2323
[services.codebuild]: 'codebuilds',
24+
[services.codeCommitRepository]: 'codeCommitRepositories',
2425
[services.configurationDeliveryChannel]: 'configurationDeliveryChannels',
2526
[services.configurationRecorder]: 'configurationRecorders',
2627
[services.configurationRule]: 'configurationRules',

src/enums/serviceMap.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ import TransitGatewayRouteTable from '../services/transitGatewayRouteTable'
120120
import VPC from '../services/vpc'
121121
import VpcEndpoint from '../services/vpcEndpoint'
122122
import VpcPeeringConnection from '../services/vpcPeeringConnection'
123+
import CodeCommitRepository from '../services/codeCommitRepository'
123124
import VpnConnection from '../services/vpnConnection'
124125
import VpnGateway from '../services/vpnGateway'
125126
import WafV2WebAcl from '../services/wafV2WebAcl'
@@ -156,6 +157,7 @@ export default {
156157
[services.cloudwatchEventRule]: CloudWatchEventRule,
157158
[services.cloudwatchLog]: CloudWatchLog,
158159
[services.codebuild]: CodeBuild,
160+
[services.codeCommitRepository]: CodeCommitRepository,
159161
[services.cognitoIdentityPool]: CognitoIdentityPool,
160162
[services.cognitoUserPool]: CognitoUserPool,
161163
[services.configurationDeliveryChannel]: ConfigurationDeliveryChannel,

src/enums/services.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export default {
2424
cloudwatchEventRule: 'cloudwatchEventRule',
2525
cloudwatchLog: 'cloudwatchLog',
2626
codebuild: 'codebuild',
27+
codeCommitRepository: 'codeCommitRepository',
2728
cognitoIdentityPool: 'cognitoIdentityPool',
2829
cognitoUserPool: 'cognitoUserPool',
2930
configurationDeliveryChannel: 'configurationDeliveryChannel',

src/services/account/schema.graphql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ type awsAccount implements awsOptionalService @key(fields: "id") {
2222
cloudwatch: [awsCloudwatch]
2323
cloudwatchLogs: [awsCloudwatchLog]
2424
codebuilds: [awsCodebuild]
25+
codeCommitRepository: [awsCodeCommitRepository]
2526
cognitoIdentityPool: [awsCognitoIdentityPool]
2627
cognitoUserPool: [awsCognitoUserPool]
2728
configurationDeliveryChannels: [awsConfigurationDeliveryChannel]
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import {
2+
CodeCommitClient,
3+
ListRepositoriesCommand,
4+
ListRepositoriesInput,
5+
RepositoryNameIdPair,
6+
} from '@aws-sdk/client-codecommit'
7+
import CloudGraph from '@cloudgraph/sdk'
8+
import { Config } from 'aws-sdk'
9+
import { groupBy } from 'lodash'
10+
import isEmpty from 'lodash/isEmpty'
11+
import awsLoggerText from '../../properties/logger'
12+
import AwsErrorLog from '../../utils/errorLog'
13+
14+
const lt = { ...awsLoggerText }
15+
const { logger } = CloudGraph
16+
17+
const serviceName = 'Code Commit Repository'
18+
const errorLog = new AwsErrorLog(serviceName)
19+
20+
export interface RawAwsRepository extends RepositoryNameIdPair {
21+
region: string
22+
}
23+
24+
const listRepositories = async (
25+
cc: CodeCommitClient
26+
): Promise<RepositoryNameIdPair[]> =>
27+
new Promise(async resolve => {
28+
const ccRepositories: RepositoryNameIdPair[] = []
29+
30+
const input: ListRepositoriesInput = {}
31+
32+
const listAllRepositories = (token?: string): void => {
33+
if (token) {
34+
input.nextToken = token
35+
}
36+
const command = new ListRepositoriesCommand(input)
37+
cc.send(command)
38+
.then(data => {
39+
if (isEmpty(data)) {
40+
return resolve([])
41+
}
42+
43+
const { repositories = [], nextToken } = data || {}
44+
45+
ccRepositories.push(...repositories)
46+
47+
if (nextToken) {
48+
logger.debug(lt.foundAnotherThousand)
49+
listAllRepositories(nextToken)
50+
} else {
51+
resolve(ccRepositories)
52+
}
53+
})
54+
.catch(err => {
55+
errorLog.generateAwsErrorLog({
56+
functionName: 'codecommit:listRepositories',
57+
err,
58+
})
59+
resolve([])
60+
})
61+
}
62+
listAllRepositories()
63+
})
64+
65+
export default async ({
66+
regions,
67+
config,
68+
}: {
69+
regions: string
70+
config: Config
71+
}): Promise<{ [property: string]: RawAwsRepository[] }> =>
72+
new Promise(async resolve => {
73+
const { credentials } = config
74+
const repositoriesData: RawAwsRepository[] = []
75+
76+
const regionPromises = regions.split(',').map(region => {
77+
const cc = new CodeCommitClient({
78+
credentials,
79+
region,
80+
})
81+
return new Promise<void>(async resolveRegion => {
82+
const repos = (await listRepositories(cc)) || []
83+
if (!isEmpty(repos))
84+
repositoriesData.push(...repos.map(val => ({ ...val, region })))
85+
resolveRegion()
86+
})
87+
})
88+
89+
await Promise.all(regionPromises)
90+
errorLog.reset()
91+
92+
resolve(groupBy(repositoriesData, 'region'))
93+
})
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { AwsCodeCommitRepository } from '../../types/generated'
2+
import { codeCommitRepositoryArn } from '../../utils/generateArns'
3+
import { RawAwsRepository } from './data'
4+
5+
/**
6+
* Code Commit Repository
7+
*/
8+
export default ({
9+
account,
10+
region,
11+
service: parameter,
12+
}: {
13+
account: string
14+
region: string
15+
service: RawAwsRepository
16+
}): AwsCodeCommitRepository => {
17+
const { repositoryName, repositoryId } = parameter
18+
19+
const arn = codeCommitRepositoryArn({ region, account, name: repositoryName })
20+
21+
return {
22+
accountId: account,
23+
arn,
24+
id: repositoryId,
25+
name: repositoryName,
26+
region,
27+
}
28+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Service } from '@cloudgraph/sdk'
2+
import BaseService from '../base'
3+
import getData from './data'
4+
import format from './format'
5+
import mutation from './mutation'
6+
7+
export default class CodeCommitRepository extends BaseService implements Service {
8+
format = format.bind(this)
9+
10+
getData = getData.bind(this)
11+
12+
mutation = mutation
13+
}

0 commit comments

Comments
 (0)