blob: fc837116bc2f07780ef1713cfb32a3ed336dd442 [file] [log] [blame]
name: Helix CI
on:
push:
branches: [ master ]
schedule:
- cron: '0 */12 * * *'
permissions: write-all
jobs:
Merge_PR_CI:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Delete frontend-maven-plugin dir
run: rm -rf .m2\repository\com\github\eirslett
- name: Build with Maven
run: mvn clean install -Dmaven.test.skip.exec=true -DretryFailedDeploymentCount=5
- name: Run All Tests
run: mvn -q -fae test
- name: Upload to Codecov
run: bash <(curl -s https://codecov.io/bash)
if: ${{ github.repository == 'apache/helix' && github.event_name == 'push' && (success() || failure()) }}
- name: Generate Test Report
uses: dorny/test-reporter@v1
if: ${{ success() || failure() }}
with:
name: Tests Results
path: './**/target/surefire-reports/TEST-TestSuite.xml'
reporter: java-junit
- name: Upload Unit Test Results as Artifacts
if: failure()
uses: actions/upload-artifact@v2
with:
name: surefire-reports
path: ./**/target/surefire-reports/
if-no-files-found: ignore
- name: Print Tests Results
run: .github/scripts/printTestResult.sh
if: ${{ success() || failure() }}
- name: Report Failed Tests as GitHub Issues
uses: actions/github-script@v4
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const fs = require('fs');
const readline = require('readline');
var run_url = 'Unknown URL. Run ID is ' + context.runId
if (process.env.GITHUB_SERVER_URL && process.env.GITHUB_REPOSITORY && process.env.GITHUB_RUN_ID ) {
run_url = process.env.GITHUB_SERVER_URL + '/' + process.env.GITHUB_REPOSITORY + '/actions/runs/' + process.env.GITHUB_RUN_ID
}
const failureReportPath = './FailingTest.out'
// 1. Search for any test failures
if (!fs.existsSync(failureReportPath)) {
console.log('No test failure report found.')
return
}
var response = await github.issues.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['FailedTestTracking'],
state: ['all']
})
const existingIssues = response.data.filter((data) => !data.pull_request)
const lineReader = readline.createInterface({
input: fs.createReadStream('./FailingTest.out')
});
const failingTests = []
for await (const line of lineReader) {
failingTests.push(line)
}
for (failingTest of failingTests) {
// 2. Creating issues for the failing tests
console.log('Failing test identified:\n' + failingTest)
if (failingTest) {
const testInfo = failingTest.split(' ')[0]
const issueTitle = '[Failed CI Test] ' + testInfo
if (issueTitle) {
console.log('Adding comment to issue: ' + issueTitle)
var issue = null
// 2.1. Check existing test issues, create new ones for the failing tests if not exist.
for (existingIssue of existingIssues) {
if (existingIssue.title == issueTitle) {
issue = existingIssue
break
}
}
if (!issue) {
console.log('Creating issue: ' + issueTitle)
response = await github.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['FailedTestTracking'],
title: issueTitle,
body: 'This issue is created for tracking unstable test: ' + testInfo
});
issue = response.data
} else {
// 2.2. Reopen the tickets if needed.
if (issue.state != 'open') {
console.log('Reopen issue: ' + issueTitle)
await github.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
state: 'open'
});
}
}
// 2.3. Adding the most recent failure to the ticket.
console.log('Add comment to issue: ' + issueTitle)
github.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
body: 'This test fails in: ' + run_url
});
}
}
}
if: ${{ github.repository == 'apache/helix' && (success() || failure()) }}