send failing test to axiom (#2996)
* send failing test to axiom (ubuntu) * forgot always * rename * Update .github/workflows/playwright.yml Co-authored-by: Adam Sunderland <adam@kittycad.io> * update to indivdual lines of json * another fix * tweak output * log macos too --------- Co-authored-by: Adam Sunderland <adam@kittycad.io>
This commit is contained in:
38
.github/workflows/playwright.yml
vendored
38
.github/workflows/playwright.yml
vendored
@ -83,6 +83,20 @@ jobs:
|
|||||||
uses: Swatinem/rust-cache@v2
|
uses: Swatinem/rust-cache@v2
|
||||||
with:
|
with:
|
||||||
workspaces: './src/wasm-lib'
|
workspaces: './src/wasm-lib'
|
||||||
|
- name: Install vector
|
||||||
|
run: |
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSfL https://sh.vector.dev > /tmp/vector.sh
|
||||||
|
chmod +x /tmp/vector.sh
|
||||||
|
/tmp/vector.sh -y -no-modify-path
|
||||||
|
mkdir -p /tmp/vector
|
||||||
|
cp .github/workflows/vector.toml /tmp/vector.toml
|
||||||
|
sed -i "s#GITHUB_WORKFLOW#${GITHUB_WORKFLOW}#g" /tmp/vector.toml
|
||||||
|
sed -i "s#GITHUB_REPOSITORY#${GITHUB_REPOSITORY}#g" /tmp/vector.toml
|
||||||
|
sed -i "s#GITHUB_SHA#${GITHUB_SHA}#g" /tmp/vector.toml
|
||||||
|
sed -i "s#GITHUB_REF_NAME#${GITHUB_REF_NAME}#g" /tmp/vector.toml
|
||||||
|
sed -i "s#GH_ACTIONS_AXIOM_TOKEN#${{secrets.GH_ACTIONS_AXIOM_TOKEN}}#g" /tmp/vector.toml
|
||||||
|
cat /tmp/vector.toml
|
||||||
|
${HOME}/.vector/bin/vector --config /tmp/vector.toml &
|
||||||
- name: Build Wasm (because rust diff)
|
- name: Build Wasm (because rust diff)
|
||||||
if: needs.check-rust-changes.outputs.rust-changed == 'true'
|
if: needs.check-rust-changes.outputs.rust-changed == 'true'
|
||||||
run: yarn build:wasm
|
run: yarn build:wasm
|
||||||
@ -160,6 +174,11 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
CI: true
|
CI: true
|
||||||
token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }}
|
token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }}
|
||||||
|
- name: send to axiom
|
||||||
|
if: always()
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
node playwrightProcess.mjs | tee /tmp/github-actions.log
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
@ -226,6 +245,20 @@ jobs:
|
|||||||
uses: Swatinem/rust-cache@v2
|
uses: Swatinem/rust-cache@v2
|
||||||
with:
|
with:
|
||||||
workspaces: './src/wasm-lib'
|
workspaces: './src/wasm-lib'
|
||||||
|
- name: Install vector
|
||||||
|
run: |
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSfL https://sh.vector.dev > /tmp/vector.sh
|
||||||
|
chmod +x /tmp/vector.sh
|
||||||
|
/tmp/vector.sh -y -no-modify-path
|
||||||
|
mkdir -p /tmp/vector
|
||||||
|
cp .github/workflows/vector.toml /tmp/vector.toml
|
||||||
|
sed -i "" "s#GITHUB_WORKFLOW#${GITHUB_WORKFLOW}#g" /tmp/vector.toml
|
||||||
|
sed -i "" "s#GITHUB_REPOSITORY#${GITHUB_REPOSITORY}#g" /tmp/vector.toml
|
||||||
|
sed -i "" "s#GITHUB_SHA#${GITHUB_SHA}#g" /tmp/vector.toml
|
||||||
|
sed -i "" "s#GITHUB_REF_NAME#${GITHUB_REF_NAME}#g" /tmp/vector.toml
|
||||||
|
sed -i "" "s#GH_ACTIONS_AXIOM_TOKEN#${{secrets.GH_ACTIONS_AXIOM_TOKEN}}#g" /tmp/vector.toml
|
||||||
|
cat /tmp/vector.toml
|
||||||
|
${HOME}/.vector/bin/vector --config /tmp/vector.toml &
|
||||||
- name: Build Wasm (because rust diff)
|
- name: Build Wasm (because rust diff)
|
||||||
if: needs.check-rust-changes.outputs.rust-changed == 'true'
|
if: needs.check-rust-changes.outputs.rust-changed == 'true'
|
||||||
run: yarn build:wasm
|
run: yarn build:wasm
|
||||||
@ -264,6 +297,11 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
CI: true
|
CI: true
|
||||||
token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }}
|
token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }}
|
||||||
|
- name: send to axiom
|
||||||
|
if: always()
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
node playwrightProcess.mjs | tee /tmp/github-actions.log
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
with:
|
with:
|
||||||
|
@ -20,7 +20,10 @@ export default defineConfig({
|
|||||||
/* Different amount of parallelism on CI and local. */
|
/* Different amount of parallelism on CI and local. */
|
||||||
workers: process.env.CI ? 4 : 4,
|
workers: process.env.CI ? 4 : 4,
|
||||||
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
||||||
reporter: 'html',
|
reporter: [
|
||||||
|
[process.env.CI ? 'dot' : 'list'],
|
||||||
|
['json', { outputFile: './test-results/report.json' }],
|
||||||
|
],
|
||||||
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
||||||
use: {
|
use: {
|
||||||
/* Base URL to use in actions like `await page.goto('/')`. */
|
/* Base URL to use in actions like `await page.goto('/')`. */
|
||||||
|
65
playwrightProcess.mjs
Normal file
65
playwrightProcess.mjs
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
import { readFileSync } from 'fs'
|
||||||
|
|
||||||
|
const data = readFileSync('./test-results/report.json', 'utf8')
|
||||||
|
|
||||||
|
// types, but was easier to store and run as normal js
|
||||||
|
// interface FailedTest {
|
||||||
|
// name: string;
|
||||||
|
// projectName: string;
|
||||||
|
// error: string;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// interface Spec {
|
||||||
|
// title: string;
|
||||||
|
// tests: Test[];
|
||||||
|
// }
|
||||||
|
|
||||||
|
// interface Test {
|
||||||
|
// expectedStatus: 'passed' | 'failed' | 'pending';
|
||||||
|
// projectName: string;
|
||||||
|
// title: string;
|
||||||
|
// results: {
|
||||||
|
// status: 'passed' | 'failed' | 'pending';
|
||||||
|
// error: {stack: string}
|
||||||
|
// }[]
|
||||||
|
// }
|
||||||
|
|
||||||
|
// interface Suite {
|
||||||
|
// title: string
|
||||||
|
// suites: Suite[];
|
||||||
|
// specs: Spec[];
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const processReport = (suites: Suite[]): FailedTest[] => {
|
||||||
|
// const failedTests: FailedTest[] = []
|
||||||
|
// const loopSuites = (suites: Suite[], previousName = '') => {
|
||||||
|
const processReport = (suites) => {
|
||||||
|
const failedTests = []
|
||||||
|
const loopSuites = (suites, previousName = '') => {
|
||||||
|
if (!suites) return
|
||||||
|
for (const suite of suites) {
|
||||||
|
const name = (previousName ? `${previousName} -- ` : '') + suite.title
|
||||||
|
for (const spec of suite.specs) {
|
||||||
|
for (const test of spec.tests) {
|
||||||
|
for (const result of test.results) {
|
||||||
|
if ((result.status !== 'passed') && test.expectedStatus === 'passed') {
|
||||||
|
failedTests.push({
|
||||||
|
name: (name + ' -- ' + spec.title) + (test.title ? ` -- ${test.title}` : ''),
|
||||||
|
status: result.status,
|
||||||
|
projectName: test.projectName,
|
||||||
|
error: result.error?.stack,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
loopSuites(suite.suites, name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
loopSuites(suites)
|
||||||
|
return failedTests.map(line => JSON.stringify(line)).join('\n')
|
||||||
|
}
|
||||||
|
const failedTests = processReport(JSON.parse(data).suites)
|
||||||
|
// log to stdout to be piped to axiom
|
||||||
|
console.log(failedTests)
|
||||||
|
|
Reference in New Issue
Block a user