@@ -158,6 +158,9 @@ jobs:
158158 changed_bun :
159159 ${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected,
160160 ' @sentry/bun' ) }}
161+ changed_bun_integration :
162+ ${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected,
163+ ' @sentry-internal/bun-integration-tests' ) }}
161164 changed_browser_integration :
162165 ${{ needs.job_get_metadata.outputs.changed_ci == 'true' || contains(steps.checkForAffected.outputs.affected,
163166 ' @sentry-internal/browser-integration-tests' ) }}
@@ -769,6 +772,32 @@ jobs:
769772 working-directory : dev-packages/cloudflare-integration-tests
770773 run : yarn test
771774
775+ job_bun_integration_tests :
776+ name : Bun Integration Tests
777+ needs : [job_get_metadata, job_build]
778+ if : needs.job_build.outputs.changed_bun_integration == 'true' || github.event_name != 'pull_request'
779+ runs-on : ubuntu-24.04
780+ timeout-minutes : 15
781+ steps :
782+ - name : Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
783+ uses : actions/checkout@v6
784+ with :
785+ ref : ${{ env.HEAD_COMMIT }}
786+ - name : Set up Node
787+ uses : actions/setup-node@v6
788+ with :
789+ node-version-file : ' package.json'
790+ - name : Set up Bun
791+ uses : oven-sh/setup-bun@v2
792+ - name : Restore caches
793+ uses : ./.github/actions/restore-cache
794+ with :
795+ dependency_cache_key : ${{ needs.job_build.outputs.dependency_cache_key }}
796+
797+ - name : Run integration tests
798+ working-directory : dev-packages/bun-integration-tests
799+ run : yarn test
800+
772801 job_remix_integration_tests :
773802 name : Remix (Node ${{ matrix.node }}) Tests
774803 needs : [job_get_metadata, job_build]
@@ -910,7 +939,7 @@ jobs:
910939 use-installer : true
911940 token : ${{ secrets.GITHUB_TOKEN }}
912941 - name : Set up Deno
913- if : matrix.test-application == 'deno'
942+ if : matrix.test-application == 'deno' || matrix.test-application == 'deno-streamed'
914943 uses : denoland/setup-deno@v2.0.3
915944 with :
916945 deno-version : v2.1.5
@@ -930,20 +959,13 @@ jobs:
930959 if : steps.restore-tarball-cache.outputs.cache-hit != 'true'
931960 run : yarn build:tarball
932961
933- - name : Get node version
934- id : versions
935- run : |
936- echo "echo node=$(jq -r '.volta.node' dev-packages/e2e-tests/package.json)" >> $GITHUB_OUTPUT
937-
938962 - name : Validate Verdaccio
939963 run : yarn test:validate
940964 working-directory : dev-packages/e2e-tests
941965
942966 - name : Prepare Verdaccio
943967 run : yarn test:prepare
944968 working-directory : dev-packages/e2e-tests
945- env :
946- E2E_TEST_PUBLISH_SCRIPT_NODE_VERSION : ${{ steps.versions.outputs.node }}
947969
948970 - name : Copy to temp
949971 run : yarn ci:copy-to-temp ./test-applications/${{ matrix.test-application }} ${{ runner.temp }}/test-application
@@ -1047,20 +1069,13 @@ jobs:
10471069 if : steps.restore-tarball-cache.outputs.cache-hit != 'true'
10481070 run : yarn build:tarball
10491071
1050- - name : Get node version
1051- id : versions
1052- run : |
1053- echo "echo node=$(jq -r '.volta.node' dev-packages/e2e-tests/package.json)" >> $GITHUB_OUTPUT
1054-
10551072 - name : Validate Verdaccio
10561073 run : yarn test:validate
10571074 working-directory : dev-packages/e2e-tests
10581075
10591076 - name : Prepare Verdaccio
10601077 run : yarn test:prepare
10611078 working-directory : dev-packages/e2e-tests
1062- env :
1063- E2E_TEST_PUBLISH_SCRIPT_NODE_VERSION : ${{ steps.versions.outputs.node }}
10641079
10651080 - name : Copy to temp
10661081 run : yarn ci:copy-to-temp ./test-applications/${{ matrix.test-application }} ${{ runner.temp }}/test-application
@@ -1109,6 +1124,7 @@ jobs:
11091124 job_node_integration_tests,
11101125 job_node_core_integration_tests,
11111126 job_cloudflare_integration_tests,
1127+ job_bun_integration_tests,
11121128 job_browser_playwright_tests,
11131129 job_browser_loader_tests,
11141130 job_remix_integration_tests,
@@ -1125,82 +1141,25 @@ jobs:
11251141 runs-on : ubuntu-24.04
11261142 permissions :
11271143 issues : write
1144+ checks : read
11281145 steps :
11291146 - name : Check out current commit
11301147 if : github.ref == 'refs/heads/develop' && contains(needs.*.result, 'failure')
11311148 uses : actions/checkout@v6
11321149 with :
1133- sparse-checkout : .github
1150+ sparse-checkout : |
1151+ .github
1152+ scripts
11341153
11351154 - name : Create issues for failed jobs
11361155 if : github.ref == 'refs/heads/develop' && contains(needs.*.result, 'failure')
11371156 uses : actions/github-script@v7
11381157 with :
11391158 script : |
1140- const fs = require('fs');
1141-
1142- // Fetch actual job details from the API to get descriptive names
1143- const jobs = await github.paginate(github.rest.actions.listJobsForWorkflowRun, {
1144- owner: context.repo.owner,
1145- repo: context.repo.repo,
1146- run_id: context.runId,
1147- per_page: 100
1148- });
1149-
1150- const failedJobs = jobs.filter(job => job.conclusion === 'failure');
1151-
1152- if (failedJobs.length === 0) {
1153- console.log('No failed jobs found');
1154- return;
1155- }
1156-
1157- // Read and parse template
1158- const template = fs.readFileSync('.github/FLAKY_CI_FAILURE_TEMPLATE.md', 'utf8');
1159- const [, frontmatter, bodyTemplate] = template.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
1160-
1161- // Get existing open issues with Tests label
1162- const existing = await github.paginate(github.rest.issues.listForRepo, {
1163- owner: context.repo.owner,
1164- repo: context.repo.repo,
1165- state: 'open',
1166- labels: 'Tests',
1167- per_page: 100
1168- });
1169-
1170- for (const job of failedJobs) {
1171- const jobName = job.name;
1172- const jobUrl = job.html_url;
1173-
1174- // Replace template variables
1175- const vars = {
1176- 'JOB_NAME': jobName,
1177- 'RUN_LINK': jobUrl
1178- };
1179-
1180- let title = frontmatter.match(/title:\s*'(.*)'/)[1];
1181- let issueBody = bodyTemplate;
1182- for (const [key, value] of Object.entries(vars)) {
1183- const pattern = new RegExp(`\\{\\{\\s*env\\.${key}\\s*\\}\\}`, 'g');
1184- title = title.replace(pattern, value);
1185- issueBody = issueBody.replace(pattern, value);
1186- }
1187-
1188- const existingIssue = existing.find(i => i.title === title);
1189-
1190- if (existingIssue) {
1191- console.log(`Issue already exists for ${jobName}: #${existingIssue.number}`);
1192- continue;
1193- }
1194-
1195- const newIssue = await github.rest.issues.create({
1196- owner: context.repo.owner,
1197- repo: context.repo.repo,
1198- title: title,
1199- body: issueBody.trim(),
1200- labels: ['Tests']
1201- });
1202- console.log(`Created issue #${newIssue.data.number} for ${jobName}`);
1203- }
1159+ const { default: run } = await import(
1160+ `${process.env.GITHUB_WORKSPACE}/scripts/report-ci-failures.mjs`
1161+ );
1162+ await run({ github, context, core });
12041163
12051164 - name : Check for failures
12061165 if : cancelled() || contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
0 commit comments