Skip to content

Commit

Permalink
Added summary information (#50)
Browse files Browse the repository at this point in the history
* Added sample of summary

* Update summary to use environment variable

* Update unit tests for supporting new method

* Using core functionality for summary generating

* Replace native to Markdown

* Update unit tests

* Got to the native implementation of core and add links

* Remove AWS_REGION from secrets

* Added total execution time

* Added extended information about phases

* Added additional information

* added formatting

* Added Job startup configuration

* Change formatting

* Change formatting
  • Loading branch information
akazakou committed Jul 22, 2022
1 parent ca2868d commit ca3849d
Show file tree
Hide file tree
Showing 7 changed files with 208 additions and 28 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
AWS_REGION: us-east-1
CODEBUILD__environmentVariablesOverride: '[
{ "name":"testEnvVar", "value":"Testing environment variable", "type": "PLAINTEXT" }
]'
3 changes: 2 additions & 1 deletion .github/workflows/validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ jobs:
planning:
name: Executing AWS CodeBuild Job
runs-on: ubuntu-latest
needs: [ build ]
steps:
- name: Checkout source code
uses: actions/checkout@v3
Expand All @@ -47,7 +48,7 @@ jobs:
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
AWS_REGION: us-east-1
CODEBUILD__environmentVariablesOverride: '[
{ "name":"testEnvVar", "value":"Testing environment variable", "type": "PLAINTEXT" }
]'
54 changes: 38 additions & 16 deletions __tests__/src/codebuildjob/CodeBuildJob.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const mocks = {
actionsCoreNotice: jest.fn().mockName('Mock: "@actions/core".notice()'),
actionsCoreWarning: jest.fn().mockName('Mock: "@actions/core".warning()'),
actionsCoreError: jest.fn().mockName('Mock: "@actions/core".error()'),
actionsCoreExportVariable: jest.fn().mockName('Mock: "@actions/core".exportVariable()'),
loggerStart: jest.fn().mockName('Mock: "src/logger".Logger.start()'),
loggerStop: jest.fn().mockName('Mock: "src/logger".Logger.stop()'),
};
Expand All @@ -29,6 +30,16 @@ jest.mock('@actions/core', () => ({
error: mocks.actionsCoreError,
setFailed: mocks.actionsCoreSetFailed,
setOutput: mocks.actionsCoreSetOutput,
summary: {
addLink: jest.fn(),
addHeading: jest.fn(),
addBreak: jest.fn(),
write: jest.fn(),
addRaw: jest.fn(),
addEOL: jest.fn(),
addTable: jest.fn(),
addCodeBlock: jest.fn(),
},
}));

jest.mock('../../../src/logger', () => ({
Expand All @@ -43,8 +54,22 @@ import { StartBuildOutput, BatchGetBuildsOutput, StopBuildOutput } from 'aws-sdk

describe('CodeBuildJob class functionality', () => {
const createAWSResponse = (resolves: unknown) => ({ promise: () => Promise.resolve(resolves) });
const buildDesc = {
id: 'test:testStreamID',
logs: { cloudWatchLogs: { status: 'ENABLED' } },
arn: 'arn:aws:codebuild:us-east-1:972995211738:build/testing-codebuild-logs:d585fe96-caa5-4a64-a7e1-01dcf612bffc',
startTime: new Date(),
endTime: new Date(),
phases: [
{ phaseType: 'phaseType1', phaseStatus: 'phaseStatus1', durationInSeconds: 7200 },
{ phaseType: 'phaseType2', phaseStatus: 'phaseStatus2', durationInSeconds: 78 },
{ phaseType: 'phaseType3', phaseStatus: 'phaseStatus3', durationInSeconds: 15 },
{ phaseType: 'phaseType4', phaseStatus: 'phaseStatus4' },
]
};

beforeAll(() => {
process.env['GITHUB_STEP_SUMMARY'] = '/dev/null';
jest.useFakeTimers();
});

Expand All @@ -64,19 +89,16 @@ describe('CodeBuildJob class functionality', () => {
const job = new CodeBuildJob({ projectName: 'test' });

startBuild.mockReturnValueOnce(createAWSResponse({
build: {
id: 'test:testStreamID',
logs: { cloudWatchLogs: { status: 'ENABLED' } },
},
build: buildDesc,
} as StartBuildOutput));

stopBuild.mockReturnValue(createAWSResponse({ build: {} } as StopBuildOutput));

batchGetBuilds
.mockReturnValueOnce(createAWSResponse({ builds: [ { currentPhase: 'QUEUED', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { currentPhase: 'PROVISIONING', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { currentPhase: 'BUILD', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { currentPhase: 'COMPLETED', buildStatus: 'SUCCEEDED' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { ...buildDesc, currentPhase: 'QUEUED', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { ...buildDesc, currentPhase: 'PROVISIONING', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { ...buildDesc, currentPhase: 'BUILD', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { ...buildDesc, currentPhase: 'COMPLETED', buildStatus: 'SUCCEEDED' } ] } as BatchGetBuildsOutput))

await job.startBuild();
expect(loggerStart).not.toBeCalled();
Expand Down Expand Up @@ -113,10 +135,10 @@ describe('CodeBuildJob class functionality', () => {
stopBuild.mockReturnValue(createAWSResponse({ build: {} } as StopBuildOutput));

batchGetBuilds
.mockReturnValueOnce(createAWSResponse({ builds: [ { currentPhase: 'QUEUED', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { currentPhase: 'PROVISIONING', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { currentPhase: 'BUILD', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { currentPhase: 'COMPLETED', buildStatus: 'SUCCEEDED' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { ...buildDesc, currentPhase: 'QUEUED', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { ...buildDesc, currentPhase: 'PROVISIONING', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { ...buildDesc, currentPhase: 'BUILD', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { ...buildDesc, currentPhase: 'COMPLETED', buildStatus: 'SUCCEEDED' } ] } as BatchGetBuildsOutput))

await job.startBuild();
expect(loggerStart).not.toBeCalled();
Expand Down Expand Up @@ -153,10 +175,10 @@ describe('CodeBuildJob class functionality', () => {
stopBuild.mockReturnValue(createAWSResponse({ build: {} } as StopBuildOutput));

batchGetBuilds
.mockReturnValueOnce(createAWSResponse({ builds: [ { currentPhase: 'QUEUED', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { currentPhase: 'PROVISIONING', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { currentPhase: 'BUILD', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { currentPhase: 'COMPLETED', buildStatus: 'FAILED' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { ...buildDesc, currentPhase: 'QUEUED', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { ...buildDesc, currentPhase: 'PROVISIONING', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { ...buildDesc, currentPhase: 'BUILD', buildStatus: 'IN_PROGRESS' } ] } as BatchGetBuildsOutput))
.mockReturnValueOnce(createAWSResponse({ builds: [ { ...buildDesc, currentPhase: 'COMPLETED', buildStatus: 'FAILED' } ] } as BatchGetBuildsOutput))

await job.startBuild();
expect(loggerStart).not.toBeCalled();
Expand Down

0 comments on commit ca3849d

Please sign in to comment.