Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions dev-packages/e2e-tests/test-applications/astro-7/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# build output
dist/

# generated types
.astro/

# dependencies
node_modules/

# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# environment variables
.env
.env.production

# macOS-specific files
.DS_Store

# jetbrains setting folder
.idea/

test-results
24 changes: 24 additions & 0 deletions dev-packages/e2e-tests/test-applications/astro-7/astro.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import sentry from '@sentry/astro';
// @ts-check
import { defineConfig } from 'astro/config';

import node from '@astrojs/node';

// https://astro.build/config
export default defineConfig({
integrations: [
sentry({
debug: true,
sourceMapsUploadOptions: {
enabled: false,
},
}),
],
output: 'server',
security: {
allowedDomains: [{ hostname: 'localhost' }],
},
adapter: node({
mode: 'standalone',
}),
});
28 changes: 28 additions & 0 deletions dev-packages/e2e-tests/test-applications/astro-7/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"name": "astro-7",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"build": "astro build",
"preview": "astro preview",
"astro": "astro",
"start": "node ./dist/server/entry.mjs",
"test:build": "pnpm install && pnpm build",
"test:assert": "TEST_ENV=production playwright test"
},
"dependencies": {
"@astrojs/node": "^11.0.0-alpha.0",
"@playwright/test": "~1.56.0",
"@sentry-internal/test-utils": "link:../../../test-utils",
"@sentry/astro": "file:../../packed/sentry-astro-packed.tgz",
"astro": "beta"
},
"volta": {
"node": "22.22.0",
"extends": "../../package.json"
},
"sentryTest": {
"optional": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { getPlaywrightConfig } from '@sentry-internal/test-utils';

const testEnv = process.env.TEST_ENV;

if (!testEnv) {
throw new Error('No test env defined');
}

const config = getPlaywrightConfig({
startCommand: 'pnpm start',
});

export default config;
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import * as Sentry from '@sentry/astro';

Sentry.init({
dsn: import.meta.env.PUBLIC_E2E_TEST_DSN,
environment: 'qa',
tracesSampleRate: 1.0,
tunnel: 'http://localhost:3031/', // proxy server
integrations: [
Sentry.browserTracingIntegration({
beforeStartSpan: opts => {
if (opts.name.startsWith('/blog/')) {
return {
...opts,
name: window.location.pathname,
};
}
return opts;
},
}),
],
debug: true,
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import * as Sentry from '@sentry/astro';

Sentry.init({
dsn: import.meta.env.PUBLIC_E2E_TEST_DSN,
environment: 'qa',
tracesSampleRate: 1.0,
tunnel: 'http://localhost:3031/', // proxy server
debug: true,
});
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---

---

<img alt="User avatar" src="/favicon.svg" />
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
---
import astroLogo from '../assets/astro.svg';
import background from '../assets/background.svg';
---

<div id="container">
<img id="background" src={background.src} alt="" fetchpriority="high" />
<main>
<section id="hero">
<a href="https://astro.build"><img src={astroLogo.src} width="115" height="48" alt="Astro Homepage" /></a>
<h1>
To get started, open the <code><pre>src/pages</pre></code> directory in your project.
</h1>
<section id="links">
<a class="button" href="https://docs.astro.build">Read our docs</a>
<a href="https://astro.build/chat"
>Join our Discord <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 127.14 96.36"
><path
fill="currentColor"
d="M107.7 8.07A105.15 105.15 0 0 0 81.47 0a72.06 72.06 0 0 0-3.36 6.83 97.68 97.68 0 0 0-29.11 0A72.37 72.37 0 0 0 45.64 0a105.89 105.89 0 0 0-26.25 8.09C2.79 32.65-1.71 56.6.54 80.21a105.73 105.73 0 0 0 32.17 16.15 77.7 77.7 0 0 0 6.89-11.11 68.42 68.42 0 0 1-10.85-5.18c.91-.66 1.8-1.34 2.66-2a75.57 75.57 0 0 0 64.32 0c.87.71 1.76 1.39 2.66 2a68.68 68.68 0 0 1-10.87 5.19 77 77 0 0 0 6.89 11.1 105.25 105.25 0 0 0 32.19-16.14c2.64-27.38-4.51-51.11-18.9-72.15ZM42.45 65.69C36.18 65.69 31 60 31 53s5-12.74 11.43-12.74S54 46 53.89 53s-5.05 12.69-11.44 12.69Zm42.24 0C78.41 65.69 73.25 60 73.25 53s5-12.74 11.44-12.74S96.23 46 96.12 53s-5.04 12.69-11.43 12.69Z"
></path></svg
>
</a>
</section>
</section>
</main>

<a href="https://astro.build/blog/astro-5/" id="news" class="box">
<svg width="32" height="32" fill="none" xmlns="http://www.w3.org/2000/svg"
><path
d="M24.667 12c1.333 1.414 2 3.192 2 5.334 0 4.62-4.934 5.7-7.334 12C18.444 28.567 18 27.456 18 26c0-4.642 6.667-7.053 6.667-14Zm-5.334-5.333c1.6 1.65 2.4 3.43 2.4 5.333 0 6.602-8.06 7.59-6.4 17.334C13.111 27.787 12 25.564 12 22.666c0-4.434 7.333-8 7.333-16Zm-6-5.333C15.111 3.555 16 5.556 16 7.333c0 8.333-11.333 10.962-5.333 22-3.488-.774-6-4-6-8 0-8.667 8.666-10 8.666-20Z"
fill="#111827"></path></svg
>
<h2>What's New in Astro 5.0?</h2>
<p>
From content layers to server islands, click to learn more about the new features and improvements in Astro 5.0
</p>
</a>
</div>

<style>
#background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
filter: blur(100px);
}

#container {
font-family: Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Nimbus Sans', Arial, sans-serif;
height: 100%;
}

main {
height: 100%;
display: flex;
justify-content: center;
}

#hero {
display: flex;
align-items: start;
flex-direction: column;
justify-content: center;
padding: 16px;
}

h1 {
font-size: 22px;
margin-top: 0.25em;
}

#links {
display: flex;
gap: 16px;
}

#links a {
display: flex;
align-items: center;
padding: 10px 12px;
color: #111827;
text-decoration: none;
transition: color 0.2s;
}

#links a:hover {
color: rgb(78, 80, 86);
}

#links a svg {
height: 1em;
margin-left: 8px;
}

#links a.button {
color: white;
background: linear-gradient(83.21deg, #3245ff 0%, #bc52ee 100%);
box-shadow:
inset 0 0 0 1px rgba(255, 255, 255, 0.12),
inset 0 -2px 0 rgba(0, 0, 0, 0.24);
border-radius: 10px;
}

#links a.button:hover {
color: rgb(230, 230, 230);
box-shadow: none;
}

pre {
font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace;
font-weight: normal;
background: linear-gradient(14deg, #d83333 0%, #f041ff 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin: 0;
}

h2 {
margin: 0 0 1em;
font-weight: normal;
color: #111827;
font-size: 20px;
}

p {
color: #4b5563;
font-size: 16px;
line-height: 24px;
letter-spacing: -0.006em;
margin: 0;
}

code {
display: inline-block;
background:
linear-gradient(66.77deg, #f3cddd 0%, #f5cee7 100%) padding-box,
linear-gradient(155deg, #d83333 0%, #f041ff 18%, #f5cee7 45%) border-box;
border-radius: 8px;
border: 1px solid transparent;
padding: 6px 8px;
}

.box {
padding: 16px;
background: rgba(255, 255, 255, 1);
border-radius: 16px;
border: 1px solid white;
}

#news {
position: absolute;
bottom: 16px;
right: 16px;
max-width: 300px;
text-decoration: none;
transition: background 0.2s;
backdrop-filter: blur(50px);
}

#news:hover {
background: rgba(255, 255, 255, 0.55);
}

@media screen and (max-height: 368px) {
#news {
display: none;
}
}

@media screen and (max-width: 768px) {
#container {
display: flex;
flex-direction: column;
}

#hero {
display: block;
padding-top: 10%;
}

#links {
flex-wrap: wrap;
}

#links a.button {
padding: 14px 18px;
}

#news {
right: 16px;
left: 16px;
bottom: 2.5rem;
max-width: 100%;
}

h1 {
line-height: 1.5;
}
}
</style>
39 changes: 39 additions & 0 deletions dev-packages/e2e-tests/test-applications/astro-7/src/fetch.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import type { Fetchable } from 'astro';
import { astro, FetchState } from 'astro/fetch';

// Astro 7 "advanced routing": `src/fetch.ts` lets the app own the request
// pipeline. We use it to verify that Sentry instrumentation still works when
// the user composes the pipeline themselves instead of relying on Astro's
// built-in handler.
//
// - `/fetch-custom` is handled entirely here, bypassing Astro's pipeline.
// The OTel HTTP instrumentation still creates an `http.server` span, but
// Sentry's auto-injected Astro middleware does NOT run (no route enhancement).
// - Every other request flows through Astro's full pipeline via `astro(state)`,
// which still runs Sentry's auto-injected middleware (route parametrization,
// trace meta tag injection, error capture, etc.).
export default {
async fetch(request: Request) {
const url = new URL(request.url);

if (url.pathname === '/fetch-custom') {
return new Response('handled-by-fetch-entrypoint', {
headers: {
'content-type': 'text/plain',
'x-astro-advanced-routing': 'custom',
},
});
}

const state = new FetchState(request);
const response = await astro(state);

// Tag the response so the e2e test can prove the custom pipeline ran.
try {
response.headers.set('x-astro-advanced-routing', 'pipeline');
} catch {
// Some responses may have immutable headers; ignore in that case.
}
return response;
},
} satisfies Fetchable;
Loading
Loading