ci: report daily turbo integration test results from this repo (#58965)
### What? A follow up for #58267 and #58394. We no longer need the git branch for history it's stored in datadog now and we also decided that we no longer need slack reporting. Closes PACK-2039 --------- Co-authored-by: Tim Neutkens <tim@timneutkens.nl>
This commit is contained in:
parent
63a578f1c3
commit
15215d4c96
32 changed files with 15289 additions and 43058 deletions
|
@ -20,9 +20,6 @@ packages/react-refresh-utils/**/*.js
|
||||||
packages/react-dev-overlay/lib/**
|
packages/react-dev-overlay/lib/**
|
||||||
**/__tmp__/**
|
**/__tmp__/**
|
||||||
.github/actions/next-stats-action/.work
|
.github/actions/next-stats-action/.work
|
||||||
.github/actions/validate-docs-links/lib/index.js
|
|
||||||
.github/actions/needs-triage/index.js
|
|
||||||
.github/actions/*/index.mjs
|
|
||||||
packages/next-codemod/transforms/__testfixtures__/**/*
|
packages/next-codemod/transforms/__testfixtures__/**/*
|
||||||
packages/next-codemod/transforms/__tests__/**/*
|
packages/next-codemod/transforms/__tests__/**/*
|
||||||
packages/next-codemod/**/*.js
|
packages/next-codemod/**/*.js
|
||||||
|
@ -40,4 +37,4 @@ bench/nested-deps/**
|
||||||
bench/nested-deps-app-router/**
|
bench/nested-deps-app-router/**
|
||||||
packages/next-bundle-analyzer/index.d.ts
|
packages/next-bundle-analyzer/index.d.ts
|
||||||
examples/with-typescript-graphql/lib/gql/
|
examples/with-typescript-graphql/lib/gql/
|
||||||
test/development/basic/hmr/components/parse-error.js
|
test/development/basic/hmr/components/parse-error.js
|
||||||
|
|
1
.github/actions/needs-triage/.gitignore
vendored
1
.github/actions/needs-triage/.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
lib/
|
|
2
.github/actions/needs-triage/action.yaml
vendored
2
.github/actions/needs-triage/action.yaml
vendored
|
@ -3,4 +3,4 @@ description: 'vercel/next.js specific auto-labeling action'
|
||||||
author: 'Next.js team'
|
author: 'Next.js team'
|
||||||
runs:
|
runs:
|
||||||
using: 'node20'
|
using: 'node20'
|
||||||
main: 'index.js'
|
main: 'dist/index.js'
|
||||||
|
|
4
.github/actions/needs-triage/package.json
vendored
4
.github/actions/needs-triage/package.json
vendored
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"exports": "./index.js",
|
"exports": "./dist/index.js",
|
||||||
"files": [
|
"files": [
|
||||||
"src"
|
"src"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "pnpm types && ncc -m -o . build lib/index.js --license licenses.txt",
|
"build": "pnpm types && ncc build lib/index.js -m -o dist --license licenses.txt",
|
||||||
"types": "tsc"
|
"types": "tsc"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -17,4 +17,4 @@ inputs:
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: node20
|
using: node20
|
||||||
main: index.js
|
main: dist/index.js
|
||||||
|
|
13764
.github/actions/next-integration-stat/dist/index.js
vendored
Normal file
13764
.github/actions/next-integration-stat/dist/index.js
vendored
Normal file
File diff suppressed because one or more lines are too long
42783
.github/actions/next-integration-stat/index.js
vendored
42783
.github/actions/next-integration-stat/index.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
"name": "next-integration-stat",
|
"name": "next-integration-stat",
|
||||||
"private": true,
|
"private": true,
|
||||||
"main": "src/index.js",
|
"main": "dist/index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "eslint src/",
|
"lint": "eslint src/",
|
||||||
"pack": "ncc -t -o . build src/index.ts",
|
"build": "ncc build src/index.ts -t -o dist",
|
||||||
"lint:prettier": "prettier -c . --cache --ignore-path=../../../.prettierignore"
|
"lint:prettier": "prettier -c . --cache --ignore-path=../../../.prettierignore"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -19,5 +19,10 @@
|
||||||
"node-fetch": "^2.6.8",
|
"node-fetch": "^2.6.8",
|
||||||
"semver": "^7.3.8",
|
"semver": "^7.3.8",
|
||||||
"strip-ansi": "^7.0.1"
|
"strip-ansi": "^7.0.1"
|
||||||
}
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18.17.0",
|
||||||
|
"pnpm": "8.9.0"
|
||||||
|
},
|
||||||
|
"packageManager": "pnpm@8.9.0"
|
||||||
}
|
}
|
||||||
|
|
162
.github/actions/next-integration-stat/src/index.ts
vendored
162
.github/actions/next-integration-stat/src/index.ts
vendored
|
@ -14,12 +14,6 @@ type Job = Awaited<
|
||||||
ReturnType<Octokit['rest']['actions']['listJobsForWorkflowRun']>
|
ReturnType<Octokit['rest']['actions']['listJobsForWorkflowRun']>
|
||||||
>['data']['jobs'][number]
|
>['data']['jobs'][number]
|
||||||
|
|
||||||
type ExistingComment =
|
|
||||||
| Awaited<
|
|
||||||
ReturnType<Octokit['rest']['issues']['listComments']>
|
|
||||||
>['data'][number]
|
|
||||||
| undefined
|
|
||||||
|
|
||||||
// A comment marker to identify the comment created by this action.
|
// A comment marker to identify the comment created by this action.
|
||||||
const BOT_COMMENT_MARKER = `<!-- __marker__ next.js integration stats __marker__ -->`
|
const BOT_COMMENT_MARKER = `<!-- __marker__ next.js integration stats __marker__ -->`
|
||||||
// Header for the test report.
|
// Header for the test report.
|
||||||
|
@ -113,112 +107,6 @@ async function fetchJobLogsFromWorkflow(
|
||||||
return { logs, job }
|
return { logs, job }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store a json payload to share via slackapi/slack-github-action into Slack channel
|
|
||||||
async function createSlackPostSummary(payload: {
|
|
||||||
shortCurrentNextJsVersion: string
|
|
||||||
sha: string
|
|
||||||
currentTestFailedSuiteCount: number
|
|
||||||
currentTestPassedSuiteCount: number
|
|
||||||
currentTestTotalSuiteCount: number
|
|
||||||
currentTestFailedCaseCount: number
|
|
||||||
currentTestPassedCaseCount: number
|
|
||||||
currentTestTotalCaseCount: number
|
|
||||||
suiteCountDiff?: number | null
|
|
||||||
caseCountDiff?: number | null
|
|
||||||
baseResults?: TestResultManifest
|
|
||||||
shortBaseNextJsVersion?: string
|
|
||||||
baseTestFailedSuiteCount?: number | null
|
|
||||||
baseTestPassedSuiteCount?: number | null
|
|
||||||
baseTestTotalSuiteCount?: number | null
|
|
||||||
baseTestFailedCaseCount?: number | null
|
|
||||||
baseTestPassedCaseCount?: number | null
|
|
||||||
baseTestTotalCaseCount?: number | null
|
|
||||||
}) {
|
|
||||||
const {
|
|
||||||
suiteCountDiff,
|
|
||||||
caseCountDiff,
|
|
||||||
baseResults,
|
|
||||||
sha,
|
|
||||||
shortBaseNextJsVersion,
|
|
||||||
shortCurrentNextJsVersion,
|
|
||||||
baseTestFailedSuiteCount,
|
|
||||||
baseTestPassedSuiteCount,
|
|
||||||
baseTestTotalSuiteCount,
|
|
||||||
baseTestFailedCaseCount,
|
|
||||||
baseTestPassedCaseCount,
|
|
||||||
baseTestTotalCaseCount,
|
|
||||||
currentTestFailedSuiteCount,
|
|
||||||
currentTestPassedSuiteCount,
|
|
||||||
currentTestTotalSuiteCount,
|
|
||||||
currentTestFailedCaseCount,
|
|
||||||
currentTestPassedCaseCount,
|
|
||||||
currentTestTotalCaseCount,
|
|
||||||
} = payload
|
|
||||||
let resultsSummary = ''
|
|
||||||
if (
|
|
||||||
Number.isSafeInteger(suiteCountDiff) &&
|
|
||||||
Number.isSafeInteger(caseCountDiff)
|
|
||||||
) {
|
|
||||||
if (suiteCountDiff === 0) {
|
|
||||||
resultsSummary += 'No changes in suite count.'
|
|
||||||
} else if (suiteCountDiff > 0) {
|
|
||||||
resultsSummary += `↓ ${suiteCountDiff} suites are fixed`
|
|
||||||
} else if (suiteCountDiff < 0) {
|
|
||||||
resultsSummary += `↑ ${suiteCountDiff} suites are newly failed`
|
|
||||||
}
|
|
||||||
|
|
||||||
if (caseCountDiff === 0) {
|
|
||||||
resultsSummary += 'No changes in test cases count.'
|
|
||||||
} else if (caseCountDiff > 0) {
|
|
||||||
resultsSummary += `↓ ${caseCountDiff} test cases are fixed`
|
|
||||||
} else if (caseCountDiff < 0) {
|
|
||||||
resultsSummary += `↑ ${caseCountDiff} test cases are newly failed`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let baseTestSuiteText = 'Summary without base'
|
|
||||||
let baseTestCaseText = 'Summary without base'
|
|
||||||
|
|
||||||
if (
|
|
||||||
Number.isSafeInteger(baseTestFailedSuiteCount) &&
|
|
||||||
Number.isSafeInteger(baseTestPassedSuiteCount) &&
|
|
||||||
Number.isSafeInteger(baseTestTotalSuiteCount)
|
|
||||||
) {
|
|
||||||
baseTestSuiteText = `:red_circle: ${baseTestFailedSuiteCount} / :large_green_circle: ${baseTestPassedSuiteCount} (Total: ${baseTestTotalSuiteCount})`
|
|
||||||
baseTestCaseText = `:red_circle: ${baseTestFailedCaseCount} / :large_green_circle: ${baseTestPassedCaseCount} (Total: ${baseTestTotalCaseCount})`
|
|
||||||
}
|
|
||||||
|
|
||||||
const slackPayloadJson = JSON.stringify(
|
|
||||||
{
|
|
||||||
title: 'Next.js integration test status with Turbopack',
|
|
||||||
// Derived from https://github.com/orgs/community/discussions/25470#discussioncomment-4720013
|
|
||||||
actionUrl: baseResults
|
|
||||||
? `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`
|
|
||||||
: 'Daily test run',
|
|
||||||
shaUrl: baseResults
|
|
||||||
? `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/commit/${sha}`
|
|
||||||
: sha,
|
|
||||||
baseResultsRef: baseResults?.ref ?? 'N/A',
|
|
||||||
shortBaseNextJsVersion: shortBaseNextJsVersion ?? 'N/A',
|
|
||||||
// We're limited to 20 variables in Slack workflows, so combine these as text.
|
|
||||||
baseTestSuiteText,
|
|
||||||
baseTestCaseText,
|
|
||||||
sha: sha.substring(0, 7),
|
|
||||||
shortCurrentNextJsVersion,
|
|
||||||
currentTestSuiteText: `:red_circle: ${currentTestFailedSuiteCount} / :large_green_circle: ${currentTestPassedSuiteCount} (Total: ${currentTestTotalSuiteCount})`,
|
|
||||||
currentTestCaseText: `:red_circle: ${currentTestFailedCaseCount} / :large_green_circle: ${currentTestPassedCaseCount} (Total: ${currentTestTotalCaseCount})`,
|
|
||||||
resultsSummary,
|
|
||||||
},
|
|
||||||
null,
|
|
||||||
2
|
|
||||||
)
|
|
||||||
console.log(
|
|
||||||
'Storing slack payload to ./slack-payload.json to report into Slack channel.',
|
|
||||||
slackPayloadJson
|
|
||||||
)
|
|
||||||
fs.writeFileSync('./slack-payload.json', slackPayloadJson)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Collect necessary inputs to run actions,
|
// Collect necessary inputs to run actions,
|
||||||
async function getInputs(): Promise<{
|
async function getInputs(): Promise<{
|
||||||
token: string
|
token: string
|
||||||
|
@ -608,8 +496,7 @@ function getTestSummary(
|
||||||
sha: string,
|
sha: string,
|
||||||
shouldDiffWithMain: boolean,
|
shouldDiffWithMain: boolean,
|
||||||
baseResults: TestResultManifest | null,
|
baseResults: TestResultManifest | null,
|
||||||
jobResults: TestResultManifest,
|
jobResults: TestResultManifest
|
||||||
shouldShareTestSummaryToSlack: boolean
|
|
||||||
) {
|
) {
|
||||||
// Read current tests summary
|
// Read current tests summary
|
||||||
const {
|
const {
|
||||||
|
@ -669,19 +556,6 @@ function getTestSummary(
|
||||||
if (!baseResults) {
|
if (!baseResults) {
|
||||||
console.log("There's no base to compare")
|
console.log("There's no base to compare")
|
||||||
|
|
||||||
if (shouldShareTestSummaryToSlack) {
|
|
||||||
createSlackPostSummary({
|
|
||||||
shortCurrentNextJsVersion,
|
|
||||||
sha,
|
|
||||||
currentTestPassedSuiteCount,
|
|
||||||
currentTestFailedSuiteCount,
|
|
||||||
currentTestTotalSuiteCount,
|
|
||||||
currentTestFailedCaseCount,
|
|
||||||
currentTestPassedCaseCount,
|
|
||||||
currentTestTotalCaseCount,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return `### Test summary
|
return `### Test summary
|
||||||
| | Current (${sha}) | Diff |
|
| | Current (${sha}) | Diff |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
|
@ -798,29 +672,6 @@ function getTestSummary(
|
||||||
console.log('Newly failed tests', JSON.stringify(newFailedTests, null, 2))
|
console.log('Newly failed tests', JSON.stringify(newFailedTests, null, 2))
|
||||||
console.log('Fixed tests', JSON.stringify(fixedTests, null, 2))
|
console.log('Fixed tests', JSON.stringify(fixedTests, null, 2))
|
||||||
|
|
||||||
if (shouldShareTestSummaryToSlack) {
|
|
||||||
createSlackPostSummary({
|
|
||||||
shortCurrentNextJsVersion,
|
|
||||||
sha,
|
|
||||||
currentTestPassedSuiteCount,
|
|
||||||
currentTestFailedSuiteCount,
|
|
||||||
currentTestTotalSuiteCount,
|
|
||||||
currentTestFailedCaseCount,
|
|
||||||
currentTestPassedCaseCount,
|
|
||||||
currentTestTotalCaseCount,
|
|
||||||
suiteCountDiff,
|
|
||||||
caseCountDiff,
|
|
||||||
baseResults,
|
|
||||||
shortBaseNextJsVersion,
|
|
||||||
baseTestFailedCaseCount,
|
|
||||||
baseTestFailedSuiteCount,
|
|
||||||
baseTestPassedCaseCount,
|
|
||||||
baseTestPassedSuiteCount,
|
|
||||||
baseTestTotalCaseCount,
|
|
||||||
baseTestTotalSuiteCount,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -871,14 +722,6 @@ async function run() {
|
||||||
shouldExpandResultMessages,
|
shouldExpandResultMessages,
|
||||||
} = await getInputs()
|
} = await getInputs()
|
||||||
|
|
||||||
// determine if we want to report summary into slack channel.
|
|
||||||
// As a first step, we'll only report summary when the test is run against release-to-release. (no main branch regressions yet)
|
|
||||||
const shouldReportSlack =
|
|
||||||
process.env.NEXT_TURBO_FORCE_SKIP_SLACK_UPDATE === 'true'
|
|
||||||
? false
|
|
||||||
: process.env.NEXT_TURBO_FORCE_SLACK_UPDATE === 'true' ||
|
|
||||||
(!prNumber && !shouldDiffWithMain)
|
|
||||||
|
|
||||||
// Collect current PR's failed test results
|
// Collect current PR's failed test results
|
||||||
const jobResults = await getJobResults(octokit, token, sha)
|
const jobResults = await getJobResults(octokit, token, sha)
|
||||||
|
|
||||||
|
@ -996,8 +839,7 @@ async function run() {
|
||||||
sha,
|
sha,
|
||||||
shouldDiffWithMain,
|
shouldDiffWithMain,
|
||||||
noBaseComparison ? null : baseResults,
|
noBaseComparison ? null : baseResults,
|
||||||
jobResults,
|
jobResults
|
||||||
shouldReportSlack
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
3
.github/actions/next-stats-action/.gitignore
vendored
3
.github/actions/next-stats-action/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
||||||
**/node_modules
|
|
||||||
out.md
|
|
||||||
.work
|
|
|
@ -6,7 +6,7 @@
|
||||||
"src"
|
"src"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "ncc -m -o . build src/index.mjs --license licenses.txt"
|
"build": "ncc build src/index.mjs -m -o dist --license licenses.txt"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vercel/ncc": "0.34.0"
|
"@vercel/ncc": "0.34.0"
|
||||||
|
|
5
.github/actions/upload-turboyet-data/action.yml
vendored
Normal file
5
.github/actions/upload-turboyet-data/action.yml
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
name: 'upload-turboyet-data'
|
||||||
|
description: 'Uploads data for Are We Turbo Yet? to Vercel KV'
|
||||||
|
runs:
|
||||||
|
using: 'node20'
|
||||||
|
main: 'dist/index.js'
|
1275
.github/actions/upload-turboyet-data/dist/index.js
vendored
Normal file
1275
.github/actions/upload-turboyet-data/dist/index.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
.github/actions/upload-turboyet-data/dist/index.js.map
vendored
Normal file
1
.github/actions/upload-turboyet-data/dist/index.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
1
.github/actions/upload-turboyet-data/dist/sourcemap-register.js
vendored
Normal file
1
.github/actions/upload-turboyet-data/dist/sourcemap-register.js
vendored
Normal file
File diff suppressed because one or more lines are too long
19
.github/actions/upload-turboyet-data/package.json
vendored
Normal file
19
.github/actions/upload-turboyet-data/package.json
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"name": "upload-turboyet-data-action",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"build": "ncc build src/main.js -o dist --source-map"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@vercel/kv": "^0.2.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@vercel/ncc": "^0.36.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18.17.0",
|
||||||
|
"pnpm": "8.9.0"
|
||||||
|
},
|
||||||
|
"packageManager": "pnpm@8.9.0"
|
||||||
|
}
|
90
.github/actions/upload-turboyet-data/src/main.js
vendored
Normal file
90
.github/actions/upload-turboyet-data/src/main.js
vendored
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
const fs = require('fs/promises')
|
||||||
|
const path = require('path')
|
||||||
|
|
||||||
|
const { createClient } = require('@vercel/kv')
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
try {
|
||||||
|
const file = path.join(
|
||||||
|
process.cwd(),
|
||||||
|
'./test-results/nextjs-test-results.json'
|
||||||
|
)
|
||||||
|
|
||||||
|
let passingTests = ''
|
||||||
|
let failingTests = ''
|
||||||
|
let passCount = 0
|
||||||
|
let failCount = 0
|
||||||
|
|
||||||
|
const contents = await fs.readFile(file, 'utf-8')
|
||||||
|
const results = JSON.parse(contents)
|
||||||
|
let { ref } = results
|
||||||
|
const currentDate = new Date()
|
||||||
|
const isoString = currentDate.toISOString()
|
||||||
|
const timestamp = isoString.slice(0, 19).replace('T', ' ')
|
||||||
|
|
||||||
|
for (const result of results.result) {
|
||||||
|
let suitePassCount = 0
|
||||||
|
let suiteFailCount = 0
|
||||||
|
|
||||||
|
suitePassCount += result.data.numPassedTests
|
||||||
|
suiteFailCount += result.data.numFailedTests
|
||||||
|
|
||||||
|
let suiteName = result.data.testResults[0].name
|
||||||
|
// remove "/home/runner/work/turbo/turbo/" from the beginning of suiteName
|
||||||
|
suiteName = suiteName.slice(30)
|
||||||
|
if (suitePassCount > 0) {
|
||||||
|
passingTests += `${suiteName}\n`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (suiteFailCount > 0) {
|
||||||
|
failingTests += `${suiteName}\n`
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const assertionResult of result.data.testResults[0]
|
||||||
|
.assertionResults) {
|
||||||
|
let assertion = assertionResult.fullName.replaceAll('`', '\\`')
|
||||||
|
if (assertionResult.status === 'passed') {
|
||||||
|
passingTests += `* ${assertion}\n`
|
||||||
|
} else if (assertionResult.status === 'failed') {
|
||||||
|
failingTests += `* ${assertion}\n`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
passCount += suitePassCount
|
||||||
|
failCount += suiteFailCount
|
||||||
|
|
||||||
|
if (suitePassCount > 0) {
|
||||||
|
passingTests += `\n`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (suiteFailCount > 0) {
|
||||||
|
failingTests += `\n`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const kv = createClient({
|
||||||
|
url: process.env.TURBOYET_KV_REST_API_URL,
|
||||||
|
token: process.env.TURBOYET_KV_REST_API_TOKEN,
|
||||||
|
})
|
||||||
|
|
||||||
|
const testRun = `${ref}\t${timestamp}\t${passCount}/${
|
||||||
|
passCount + failCount
|
||||||
|
}`
|
||||||
|
|
||||||
|
console.log('TEST RESULT')
|
||||||
|
console.log(testRun)
|
||||||
|
|
||||||
|
await kv.rpush('test-runs', testRun)
|
||||||
|
console.log('SUCCESSFULLY SAVED RUNS')
|
||||||
|
|
||||||
|
await kv.set('passing-tests', passingTests)
|
||||||
|
console.log('SUCCESSFULLY SAVED PASSING')
|
||||||
|
|
||||||
|
await kv.set('failing-tests', failingTests)
|
||||||
|
console.log('SUCCESSFULLY SAVED FAILING')
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
File diff suppressed because one or more lines are too long
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"exports": "./lib/index.js",
|
"exports": "./dist/index.js",
|
||||||
"files": [
|
"files": [
|
||||||
"src"
|
"src"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "pnpm types && ncc -m -o ./lib build src/index.ts --license licenses.txt",
|
"build": "pnpm types && ncc build src/index.ts -m -o ./dist --license licenses.txt",
|
||||||
"types": "tsc"
|
"types": "tsc"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
99
.github/pnpm-lock.yaml
vendored
99
.github/pnpm-lock.yaml
vendored
|
@ -25,6 +25,37 @@ importers:
|
||||||
specifier: 5.1.6
|
specifier: 5.1.6
|
||||||
version: 5.1.6
|
version: 5.1.6
|
||||||
|
|
||||||
|
actions/next-integration-stat:
|
||||||
|
dependencies:
|
||||||
|
'@actions/core':
|
||||||
|
specifier: ^1.10.0
|
||||||
|
version: 1.10.0
|
||||||
|
'@actions/exec':
|
||||||
|
specifier: ^1.1.1
|
||||||
|
version: 1.1.1
|
||||||
|
'@actions/github':
|
||||||
|
specifier: ^5.1.1
|
||||||
|
version: 5.1.1
|
||||||
|
node-fetch:
|
||||||
|
specifier: ^2.6.8
|
||||||
|
version: 2.6.12
|
||||||
|
semver:
|
||||||
|
specifier: ^7.3.8
|
||||||
|
version: 7.5.4
|
||||||
|
strip-ansi:
|
||||||
|
specifier: ^7.0.1
|
||||||
|
version: 7.1.0
|
||||||
|
devDependencies:
|
||||||
|
'@types/node':
|
||||||
|
specifier: ^18.11.18
|
||||||
|
version: 18.16.19
|
||||||
|
'@vercel/ncc':
|
||||||
|
specifier: 0.34.0
|
||||||
|
version: 0.34.0
|
||||||
|
typescript:
|
||||||
|
specifier: ^4.4.4
|
||||||
|
version: 4.9.5
|
||||||
|
|
||||||
actions/next-stats-action:
|
actions/next-stats-action:
|
||||||
dependencies:
|
dependencies:
|
||||||
async-sema:
|
async-sema:
|
||||||
|
@ -81,6 +112,16 @@ importers:
|
||||||
specifier: 0.34.0
|
specifier: 0.34.0
|
||||||
version: 0.34.0
|
version: 0.34.0
|
||||||
|
|
||||||
|
actions/upload-turboyet-data:
|
||||||
|
dependencies:
|
||||||
|
'@vercel/kv':
|
||||||
|
specifier: ^0.2.3
|
||||||
|
version: 0.2.4
|
||||||
|
devDependencies:
|
||||||
|
'@vercel/ncc':
|
||||||
|
specifier: ^0.36.0
|
||||||
|
version: 0.36.1
|
||||||
|
|
||||||
actions/validate-docs-links:
|
actions/validate-docs-links:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@actions/core':
|
'@actions/core':
|
||||||
|
@ -130,6 +171,12 @@ packages:
|
||||||
uuid: 8.3.2
|
uuid: 8.3.2
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@actions/exec@1.1.1:
|
||||||
|
resolution: {integrity: sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==}
|
||||||
|
dependencies:
|
||||||
|
'@actions/io': 1.1.3
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@actions/github@5.1.1:
|
/@actions/github@5.1.1:
|
||||||
resolution: {integrity: sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==}
|
resolution: {integrity: sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==}
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -147,6 +194,10 @@ packages:
|
||||||
tunnel: 0.0.6
|
tunnel: 0.0.6
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@actions/io@1.1.3:
|
||||||
|
resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@octokit/auth-token@2.5.0:
|
/@octokit/auth-token@2.5.0:
|
||||||
resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==}
|
resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==}
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -287,11 +338,34 @@ packages:
|
||||||
resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==}
|
resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@upstash/redis@1.24.3:
|
||||||
|
resolution: {integrity: sha512-gw6d4IA1biB4eye5ESaXc0zOlVQI94aptsBvVcTghYWu1kRmOrJFoMFEDCa8p5uzluyYAOFCuY2GWLR6O4ZoIw==}
|
||||||
|
dependencies:
|
||||||
|
crypto-js: 4.2.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@vercel/kv@0.2.4:
|
||||||
|
resolution: {integrity: sha512-wbIOOXhg6MzmNMzKFSWbbLAS65hCZcJN33z1coENzI1M0fOX55yE9v9LwVGqkzdItp3eZsv6pYvwcmGtllyLTw==}
|
||||||
|
engines: {node: '>=14.6'}
|
||||||
|
dependencies:
|
||||||
|
'@upstash/redis': 1.24.3
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@vercel/ncc@0.34.0:
|
/@vercel/ncc@0.34.0:
|
||||||
resolution: {integrity: sha512-G9h5ZLBJ/V57Ou9vz5hI8pda/YQX5HQszCs3AmIus3XzsmRn/0Ptic5otD3xVST8QLKk7AMk7AqpsyQGN7MZ9A==}
|
resolution: {integrity: sha512-G9h5ZLBJ/V57Ou9vz5hI8pda/YQX5HQszCs3AmIus3XzsmRn/0Ptic5otD3xVST8QLKk7AMk7AqpsyQGN7MZ9A==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@vercel/ncc@0.36.1:
|
||||||
|
resolution: {integrity: sha512-S4cL7Taa9yb5qbv+6wLgiKVZ03Qfkc4jGRuiUQMQ8HGBD5pcNRnHeYM33zBvJE4/zJGjJJ8GScB+WmTsn9mORw==}
|
||||||
|
hasBin: true
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/ansi-regex@6.0.1:
|
||||||
|
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/argparse@1.0.10:
|
/argparse@1.0.10:
|
||||||
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
|
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -380,6 +454,10 @@ packages:
|
||||||
which: 1.3.1
|
which: 1.3.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/crypto-js@4.2.0:
|
||||||
|
resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/delayed-stream@1.0.0:
|
/delayed-stream@1.0.0:
|
||||||
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
|
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
|
||||||
engines: {node: '>=0.4.0'}
|
engines: {node: '>=0.4.0'}
|
||||||
|
@ -954,6 +1032,14 @@ packages:
|
||||||
lru-cache: 6.0.0
|
lru-cache: 6.0.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/semver@7.5.4:
|
||||||
|
resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
hasBin: true
|
||||||
|
dependencies:
|
||||||
|
lru-cache: 6.0.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/shebang-command@1.2.0:
|
/shebang-command@1.2.0:
|
||||||
resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
|
resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
@ -982,6 +1068,13 @@ packages:
|
||||||
resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==}
|
resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/strip-ansi@7.1.0:
|
||||||
|
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
dependencies:
|
||||||
|
ansi-regex: 6.0.1
|
||||||
|
dev: false
|
||||||
|
|
||||||
/strip-bom-string@1.0.0:
|
/strip-bom-string@1.0.0:
|
||||||
resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
|
resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
@ -1024,6 +1117,12 @@ packages:
|
||||||
engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
|
engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/typescript@4.9.5:
|
||||||
|
resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
|
||||||
|
engines: {node: '>=4.2.0'}
|
||||||
|
hasBin: true
|
||||||
|
dev: true
|
||||||
|
|
||||||
/typescript@5.1.6:
|
/typescript@5.1.6:
|
||||||
resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==}
|
resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==}
|
||||||
engines: {node: '>=14.17'}
|
engines: {node: '>=14.17'}
|
||||||
|
|
2
.github/workflows/build_and_test.yml
vendored
2
.github/workflows/build_and_test.yml
vendored
|
@ -91,7 +91,7 @@ jobs:
|
||||||
node-version: 18
|
node-version: 18
|
||||||
- run: corepack enable
|
- run: corepack enable
|
||||||
- name: 'Run link checker'
|
- name: 'Run link checker'
|
||||||
run: node ./.github/actions/validate-docs-links/lib
|
run: node ./.github/actions/validate-docs-links/dist/index.js
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
|
10
.github/workflows/nextjs-integration-test.yml
vendored
10
.github/workflows/nextjs-integration-test.yml
vendored
|
@ -16,12 +16,6 @@ on:
|
||||||
diff_base:
|
diff_base:
|
||||||
type: string
|
type: string
|
||||||
default: 'main'
|
default: 'main'
|
||||||
force_post_to_slack:
|
|
||||||
type: boolean
|
|
||||||
# Skip posting to slack regardless of the conditions.
|
|
||||||
skip_post_to_slack:
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
|
|
||||||
# Workflow-common env variables
|
# Workflow-common env variables
|
||||||
env:
|
env:
|
||||||
|
@ -169,9 +163,6 @@ jobs:
|
||||||
uses: ./.github/actions/next-integration-stat
|
uses: ./.github/actions/next-integration-stat
|
||||||
with:
|
with:
|
||||||
diff_base: ${{ inputs.diff_base }}
|
diff_base: ${{ inputs.diff_base }}
|
||||||
env:
|
|
||||||
NEXT_TURBO_FORCE_SLACK_UPDATE: '${{ inputs.force_post_to_slack }}'
|
|
||||||
NEXT_TURBO_FORCE_SKIP_SLACK_UPDATE: '${{ inputs.skip_post_to_slack }}'
|
|
||||||
|
|
||||||
- name: Store artifacts
|
- name: Store artifacts
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
|
@ -181,7 +172,6 @@ jobs:
|
||||||
nextjs-test-results.json
|
nextjs-test-results.json
|
||||||
failed-test-path-list.json
|
failed-test-path-list.json
|
||||||
passed-test-path-list.json
|
passed-test-path-list.json
|
||||||
slack-payload.json
|
|
||||||
|
|
||||||
upload_test_report:
|
upload_test_report:
|
||||||
needs: [test-dev, test-integration]
|
needs: [test-dev, test-integration]
|
||||||
|
|
|
@ -12,11 +12,6 @@ on:
|
||||||
type: string
|
type: string
|
||||||
default: 'canary'
|
default: 'canary'
|
||||||
|
|
||||||
post_to_slack:
|
|
||||||
description: Post test results to Slack
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# Trigger actual next.js integration tests.
|
# Trigger actual next.js integration tests.
|
||||||
next_js_integration:
|
next_js_integration:
|
||||||
|
@ -28,40 +23,11 @@ jobs:
|
||||||
with:
|
with:
|
||||||
diff_base: 'none'
|
diff_base: 'none'
|
||||||
version: ${{ inputs.version || 'canary' }}
|
version: ${{ inputs.version || 'canary' }}
|
||||||
skip_post_to_slack: ${{ github.event_name != 'schedule' && inputs.post_to_slack != true }}
|
|
||||||
|
|
||||||
# Upload test results to branch.
|
# Upload test results to KV, but only for scheduled runs.
|
||||||
upload_test_results:
|
upload_test_results:
|
||||||
name: Upload test results
|
name: Upload test results
|
||||||
needs: [next_js_integration]
|
needs: [next_js_integration]
|
||||||
if: ${{ github.event_name == 'schedule' }} && always()
|
if: ${{ github.event_name == 'schedule' }} && always()
|
||||||
uses: ./.github/workflows/upload-nextjs-integration-test-results.yml
|
uses: ./.github/workflows/upload-nextjs-integration-test-results.yml
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
with:
|
|
||||||
is_main_branch: true
|
|
||||||
|
|
||||||
# post_to_slack:
|
|
||||||
# needs: [next_js_integration]
|
|
||||||
# name: Post results to Slack
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
# if: always()
|
|
||||||
# steps:
|
|
||||||
# - name: Download summary.md artifact
|
|
||||||
# uses: actions/download-artifact@v3
|
|
||||||
# with:
|
|
||||||
# name: test-results
|
|
||||||
# - name: Check if summary file was generated
|
|
||||||
# id: summary_check
|
|
||||||
# run: |
|
|
||||||
# if stat slack-payload.json; then
|
|
||||||
# echo "should_continue=true" >> $GITHUB_OUTPUT
|
|
||||||
# else
|
|
||||||
# echo "should_continue=false" >> $GITHUB_OUTPUT
|
|
||||||
# fi
|
|
||||||
# - name: Send test data to Slack workflow
|
|
||||||
# if: steps.summary_check.outputs.should_continue == 'true'
|
|
||||||
# uses: slackapi/slack-github-action@v1.23.0
|
|
||||||
# with:
|
|
||||||
# payload-file-path: './slack-payload.json'
|
|
||||||
# env:
|
|
||||||
# SLACK_WEBHOOK_URL: ${{ secrets.NEXT_TURBO_INTEGRATION_SLACK_WEBHOOK_URL }}
|
|
||||||
|
|
|
@ -1,16 +1,10 @@
|
||||||
# Reusable workflow to upload next.js integration test result to specific branch `nextjs-integration-test-data`
|
# Reusable workflow to upload next.js integration test results to KV for https://areweturboyet.com/
|
||||||
# This workflow assumes `next-integration-test` workflow has been executed and test results are stored in `test-results/main` directory.
|
# This workflow assumes the `next-integration-test` workflow has been executed
|
||||||
|
# and test reports have been uploaded to the `test-results` artifact.
|
||||||
name: Update next.js integration test results
|
name: Update next.js integration test results
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
|
||||||
# Boolean flag to indicate if this workflow is triggered by default branch update.
|
|
||||||
# If this flag is set to true, then the workflow will upload test results to subpath `/main`.
|
|
||||||
# Otherwise, the workflow will upload test results to subpath `/${nextjs-version}`.
|
|
||||||
is_main_branch:
|
|
||||||
required: true
|
|
||||||
type: boolean
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
@ -18,53 +12,25 @@ jobs:
|
||||||
name: Upload test results
|
name: Upload test results
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
# Download test results into the `test-results` directory from the artifact created by `nextjs-integration-test`.
|
||||||
uses: actions/checkout@v3
|
- name: Download test results artifact
|
||||||
with:
|
|
||||||
ref: nextjs-integration-test-data
|
|
||||||
|
|
||||||
- name: Git pull
|
|
||||||
run: |
|
|
||||||
git pull --depth=1 --no-tags origin nextjs-integration-test-data
|
|
||||||
|
|
||||||
# First, grab test results into `test-results/main` directory from artifact stored by `next-integration-test`.
|
|
||||||
- name: Grab test results
|
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: test-results
|
name: test-results
|
||||||
path: test-results/main
|
path: test-results
|
||||||
|
|
||||||
# Read next.js version from test results, set necessary environment variables.
|
# Read next.js version from test results, set necessary environment variables.
|
||||||
- name: Print test results
|
- name: Print test results
|
||||||
run: |
|
run: |
|
||||||
rm -rf ./test-results/main/slack-payload.json
|
::group::Passed test paths
|
||||||
ls -al ./test-results/main
|
cat ./test-results/passed-test-path-list.json
|
||||||
echo "Print failed test path list:"
|
::endgroup::
|
||||||
cat ./test-results/main/failed-test-path-list.json
|
|
||||||
echo "Print passed test path list:"
|
|
||||||
cat ./test-results/main/passed-test-path-list.json
|
|
||||||
echo "NEXTJS_VERSION=$(cat ./test-results/main/nextjs-test-results.json | jq .nextjsVersion | tr -d '"' | cut -d ' ' -f2)" >> $GITHUB_ENV
|
|
||||||
echo "SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
|
||||||
echo "RESULT_SUBPATH=$(if ${{ inputs.is_main_branch }}; then echo 'main'; else echo ${{ env.NEXTJS_VERSION }}; fi)" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# Copy test results to `${date}-${nextjs-version}-${sha-short}.json`.
|
::group::Failed test paths
|
||||||
# If workflow is not coming from main branch update, then we need to move test results to subpath `/${nextjs-version}`.
|
cat ./test-results/failed-test-path-list.json
|
||||||
- name: Congifure subpath
|
::endgroup::
|
||||||
run: |
|
|
||||||
echo "Configured test result subpath for ${{ env.RESULT_SUBPATH }} / ${{ env.NEXTJS_VERSION }} / ${{ env.SHA_SHORT }}"
|
|
||||||
mkdir -p test-results/${{ env.RESULT_SUBPATH }}
|
|
||||||
cp -v test-results/main/nextjs-test-results.json test-results/${{ env.RESULT_SUBPATH }}/$(date '+%Y%m%d%H%M')-${{ env.NEXTJS_VERSION }}-${{ env.SHA_SHORT }}.json
|
|
||||||
mv -fvn test-results/main/failed-test-path-list.json test-results/${{ env.RESULT_SUBPATH }}/failed-test-path-list.json
|
|
||||||
ls -al ./test-results
|
|
||||||
ls -al ./test-results/${{ env.RESULT_SUBPATH }}
|
|
||||||
|
|
||||||
- name: Push data to branch
|
- name: 'Upload results to "Are We Turbo Yet" KV'
|
||||||
uses: stefanzweifel/git-auto-commit-action@v4
|
|
||||||
with:
|
|
||||||
file_pattern: test-results/**
|
|
||||||
commit_message: 'test(integration): Integration test results for ${{ env.NEXTJS_VERSION }} (${{ env.SHA_SHORT }})'
|
|
||||||
|
|
||||||
- name: 'Upload Are We Turbo Yet data'
|
|
||||||
env:
|
env:
|
||||||
TURBOYET_KV_REST_API_URL: ${{ secrets.TURBOYET_KV_REST_API_URL }}
|
TURBOYET_KV_REST_API_URL: ${{ secrets.TURBOYET_KV_REST_API_URL }}
|
||||||
TURBOYET_KV_REST_API_TOKEN: ${{ secrets.TURBOYET_KV_REST_API_TOKEN }}
|
TURBOYET_KV_REST_API_TOKEN: ${{ secrets.TURBOYET_KV_REST_API_TOKEN }}
|
||||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,5 +1,6 @@
|
||||||
# build output
|
# build output
|
||||||
dist
|
dist
|
||||||
|
!.github/actions/*/dist
|
||||||
.next
|
.next
|
||||||
target
|
target
|
||||||
packages/next/wasm/@next
|
packages/next/wasm/@next
|
||||||
|
|
|
@ -16,9 +16,6 @@ packages/next/src/bundles/webpack/packages/*.runtime.js
|
||||||
packages/next/src/bundles/webpack/packages/lazy-compilation-*.js
|
packages/next/src/bundles/webpack/packages/lazy-compilation-*.js
|
||||||
|
|
||||||
.github/actions/next-stats-action/.work
|
.github/actions/next-stats-action/.work
|
||||||
.github/actions/validate-docs-links/lib/index.js
|
|
||||||
.github/actions/needs-triage/index.js
|
|
||||||
.github/actions/*/index.mjs
|
|
||||||
|
|
||||||
packages/next-swc/crates/**/tests/**/output*
|
packages/next-swc/crates/**/tests/**/output*
|
||||||
packages/next-swc/crates/core/tests/loader/issue-32553/input.js
|
packages/next-swc/crates/core/tests/loader/issue-32553/input.js
|
||||||
|
|
Loading…
Reference in a new issue