summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.changeset/happy-peas-attend.md18
-rw-r--r--examples/basics/src/layouts/Layout.astro1
-rw-r--r--examples/blog/src/components/BaseHead.astro1
-rw-r--r--examples/component/demo/src/pages/index.astro1
-rw-r--r--examples/docs/src/components/HeadCommon.astro1
-rw-r--r--examples/env-vars/src/pages/index.astro1
-rw-r--r--examples/framework-alpine/src/pages/index.astro1
-rw-r--r--examples/framework-multiple/src/pages/index.astro1
-rw-r--r--examples/framework-preact/src/pages/index.astro1
-rw-r--r--examples/framework-react/src/pages/index.astro1
-rw-r--r--examples/framework-solid/src/pages/index.astro1
-rw-r--r--examples/framework-svelte/src/pages/index.astro1
-rw-r--r--examples/framework-vue/src/pages/index.astro1
-rw-r--r--examples/minimal/src/pages/index.astro1
-rw-r--r--examples/non-html-pages/src/pages/index.astro1
-rw-r--r--examples/portfolio/src/components/MainHead.astro1
-rw-r--r--examples/subpath/src/pages/index.astro1
-rw-r--r--examples/with-nanostores/src/layouts/Layout.astro1
-rw-r--r--examples/with-tailwindcss/src/pages/index.astro1
-rw-r--r--examples/with-vite-plugin-pwa/src/pages/index.astro1
-rw-r--r--packages/astro/src/@types/astro.ts10
-rw-r--r--packages/astro/src/runtime/server/index.ts3
-rw-r--r--packages/astro/test/astro-generator.test.js23
-rw-r--r--packages/astro/test/fixtures/astro-generator/package.json8
-rw-r--r--packages/astro/test/fixtures/astro-generator/src/pages/index.astro14
-rw-r--r--pnpm-lock.yaml6
26 files changed, 101 insertions, 0 deletions
diff --git a/.changeset/happy-peas-attend.md b/.changeset/happy-peas-attend.md
new file mode 100644
index 000000000..af3af1bfc
--- /dev/null
+++ b/.changeset/happy-peas-attend.md
@@ -0,0 +1,18 @@
+---
+'astro': patch
+---
+
+Adds `Astro.generator` which can be used to add a [`<meta name="generator">`](https://html.spec.whatwg.org/multipage/semantics.html#meta-generator) tag.
+
+```astro
+<html>
+ <head>
+ <meta name="generator" content={Astro.generator} />
+ </head>
+ <body>
+ <footer>
+ <p>Built with <a href="https://astro.build">{Astro.generator}</a></p>
+ </footer>
+ </body>
+</html>
+```
diff --git a/examples/basics/src/layouts/Layout.astro b/examples/basics/src/layouts/Layout.astro
index 9a46f2d8e..c75726968 100644
--- a/examples/basics/src/layouts/Layout.astro
+++ b/examples/basics/src/layouts/Layout.astro
@@ -12,6 +12,7 @@ const { title } = Astro.props as Props;
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
+ <meta name="generator" content={Astro.generator} />
<title>{title}</title>
</head>
<body>
diff --git a/examples/blog/src/components/BaseHead.astro b/examples/blog/src/components/BaseHead.astro
index 80de975b1..af6fd380b 100644
--- a/examples/blog/src/components/BaseHead.astro
+++ b/examples/blog/src/components/BaseHead.astro
@@ -14,6 +14,7 @@ const { title, description } = Astro.props;
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
+<meta name="generator" content={Astro.generator} />
<!-- Primary Meta Tags -->
<title>{title}</title>
diff --git a/examples/component/demo/src/pages/index.astro b/examples/component/demo/src/pages/index.astro
index bfdf495a8..f0704e56b 100644
--- a/examples/component/demo/src/pages/index.astro
+++ b/examples/component/demo/src/pages/index.astro
@@ -6,6 +6,7 @@ import * as Component from '@example/my-component';
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<title>Welcome to Astro</title>
<style is:global>
h {
diff --git a/examples/docs/src/components/HeadCommon.astro b/examples/docs/src/components/HeadCommon.astro
index 275aa315a..143345c68 100644
--- a/examples/docs/src/components/HeadCommon.astro
+++ b/examples/docs/src/components/HeadCommon.astro
@@ -6,6 +6,7 @@ import '../styles/index.css';
<!-- Global Metadata -->
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
+<meta name="generator" content={Astro.generator} />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="alternate icon" type="image/x-icon" href="/favicon.ico" />
diff --git a/examples/env-vars/src/pages/index.astro b/examples/env-vars/src/pages/index.astro
index 35a441c63..db0369979 100644
--- a/examples/env-vars/src/pages/index.astro
+++ b/examples/env-vars/src/pages/index.astro
@@ -12,6 +12,7 @@ console.log({ SSR, PUBLIC_SOME_KEY });
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<title>Astro</title>
</head>
<body>
diff --git a/examples/framework-alpine/src/pages/index.astro b/examples/framework-alpine/src/pages/index.astro
index 7e0fc33ee..575606e24 100644
--- a/examples/framework-alpine/src/pages/index.astro
+++ b/examples/framework-alpine/src/pages/index.astro
@@ -10,6 +10,7 @@ import Counter from '../components/Counter.astro';
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<style>
html,
diff --git a/examples/framework-multiple/src/pages/index.astro b/examples/framework-multiple/src/pages/index.astro
index 48c4e15d0..87f85d2dd 100644
--- a/examples/framework-multiple/src/pages/index.astro
+++ b/examples/framework-multiple/src/pages/index.astro
@@ -19,6 +19,7 @@ import SvelteCounter from '../components/SvelteCounter.svelte';
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
</head>
<body>
diff --git a/examples/framework-preact/src/pages/index.astro b/examples/framework-preact/src/pages/index.astro
index d9daa1acd..2810ca658 100644
--- a/examples/framework-preact/src/pages/index.astro
+++ b/examples/framework-preact/src/pages/index.astro
@@ -10,6 +10,7 @@ import Counter from '../components/Counter';
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<style>
html,
diff --git a/examples/framework-react/src/pages/index.astro b/examples/framework-react/src/pages/index.astro
index 8593264c9..4810006a6 100644
--- a/examples/framework-react/src/pages/index.astro
+++ b/examples/framework-react/src/pages/index.astro
@@ -13,6 +13,7 @@ const someProps = {
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<style>
html,
diff --git a/examples/framework-solid/src/pages/index.astro b/examples/framework-solid/src/pages/index.astro
index ce5961a5f..160c74227 100644
--- a/examples/framework-solid/src/pages/index.astro
+++ b/examples/framework-solid/src/pages/index.astro
@@ -10,6 +10,7 @@ import Counter from '../components/Counter';
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<style>
html,
diff --git a/examples/framework-svelte/src/pages/index.astro b/examples/framework-svelte/src/pages/index.astro
index 2cc0fed69..08379ff89 100644
--- a/examples/framework-svelte/src/pages/index.astro
+++ b/examples/framework-svelte/src/pages/index.astro
@@ -10,6 +10,7 @@ import Counter from '../components/Counter.svelte';
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<style>
html,
diff --git a/examples/framework-vue/src/pages/index.astro b/examples/framework-vue/src/pages/index.astro
index 98a667f77..8d0b88665 100644
--- a/examples/framework-vue/src/pages/index.astro
+++ b/examples/framework-vue/src/pages/index.astro
@@ -10,6 +10,7 @@ import Counter from '../components/Counter.vue';
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<style>
html,
diff --git a/examples/minimal/src/pages/index.astro b/examples/minimal/src/pages/index.astro
index 4389d5d25..554de1a39 100644
--- a/examples/minimal/src/pages/index.astro
+++ b/examples/minimal/src/pages/index.astro
@@ -5,6 +5,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<title>Astro</title>
</head>
<body>
diff --git a/examples/non-html-pages/src/pages/index.astro b/examples/non-html-pages/src/pages/index.astro
index 6d3873c44..18fe9b9da 100644
--- a/examples/non-html-pages/src/pages/index.astro
+++ b/examples/non-html-pages/src/pages/index.astro
@@ -2,6 +2,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<title>Astro</title>
</head>
<body>
diff --git a/examples/portfolio/src/components/MainHead.astro b/examples/portfolio/src/components/MainHead.astro
index 956f167ed..ea21f76d2 100644
--- a/examples/portfolio/src/components/MainHead.astro
+++ b/examples/portfolio/src/components/MainHead.astro
@@ -9,6 +9,7 @@ const {
<meta charset="UTF-8" />
<meta name="description" property="og:description" content={description} />
<meta name="viewport" content="width=device-width" />
+<meta name="generator" content={Astro.generator} />
<title>{title}</title>
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
diff --git a/examples/subpath/src/pages/index.astro b/examples/subpath/src/pages/index.astro
index d0fca73f5..d69690eca 100644
--- a/examples/subpath/src/pages/index.astro
+++ b/examples/subpath/src/pages/index.astro
@@ -11,6 +11,7 @@ import Time from '../components/Time.jsx';
<meta charset="utf-8" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<title>Welcome to Astro</title>
</head>
diff --git a/examples/with-nanostores/src/layouts/Layout.astro b/examples/with-nanostores/src/layouts/Layout.astro
index 0eb4ecb76..5282ddf90 100644
--- a/examples/with-nanostores/src/layouts/Layout.astro
+++ b/examples/with-nanostores/src/layouts/Layout.astro
@@ -14,6 +14,7 @@ const { title } = Astro.props as Props;
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
+ <meta name="generator" content={Astro.generator} />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<title>{title}</title>
</head>
diff --git a/examples/with-tailwindcss/src/pages/index.astro b/examples/with-tailwindcss/src/pages/index.astro
index 72b24edb9..a36b41eda 100644
--- a/examples/with-tailwindcss/src/pages/index.astro
+++ b/examples/with-tailwindcss/src/pages/index.astro
@@ -11,6 +11,7 @@ import Button from '../components/Button.astro';
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
+ <meta name="generator" content={Astro.generator} />
<title>Astro + TailwindCSS</title>
</head>
diff --git a/examples/with-vite-plugin-pwa/src/pages/index.astro b/examples/with-vite-plugin-pwa/src/pages/index.astro
index 94596d8df..4a9bca7e2 100644
--- a/examples/with-vite-plugin-pwa/src/pages/index.astro
+++ b/examples/with-vite-plugin-pwa/src/pages/index.astro
@@ -6,6 +6,7 @@
<meta charset="utf-8" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width" />
+ <meta name="generator" content={Astro.generator} />
<title>Welcome to Astro</title>
</head>
diff --git a/packages/astro/src/@types/astro.ts b/packages/astro/src/@types/astro.ts
index 1a4b64b3b..28b46bdc8 100644
--- a/packages/astro/src/@types/astro.ts
+++ b/packages/astro/src/@types/astro.ts
@@ -249,6 +249,16 @@ export interface AstroGlobalPartial {
* [Astro reference](https://docs.astro.build/en/reference/api-reference/#astrosite)
*/
site: URL | undefined;
+ /**
+ * Returns a string with the current version of Astro.
+ *
+ * Useful for using `<meta name="generator" content={Astro.generator} />` or crediting Astro in a site footer.
+ *
+ * [HTML Specification for `generator`](https://html.spec.whatwg.org/multipage/semantics.html#meta-generator)
+ *
+ * [Astro reference](https://docs.astro.build/en/reference/api-reference/#astrogenerator)
+ */
+ generator: string;
}
type ServerConfig = {
diff --git a/packages/astro/src/runtime/server/index.ts b/packages/astro/src/runtime/server/index.ts
index 150937a9d..df3de955a 100644
--- a/packages/astro/src/runtime/server/index.ts
+++ b/packages/astro/src/runtime/server/index.ts
@@ -38,6 +38,8 @@ const htmlBooleanAttributes =
const htmlEnumAttributes = /^(contenteditable|draggable|spellcheck|value)$/i;
// Note: SVG is case-sensitive!
const svgEnumAttributes = /^(autoReverse|externalResourcesRequired|focusable|preserveAlpha)$/i;
+// process.env.PACKAGE_VERSION is injected when we build and publish the astro package.
+const ASTRO_VERSION = process.env.PACKAGE_VERSION ?? 'development';
// INVESTIGATE:
// 2. Less anys when possible and make it well known when they are needed.
@@ -530,6 +532,7 @@ export function createAstro(
const projectRoot = new URL(projectRootStr);
return {
site,
+ generator: `Astro v${ASTRO_VERSION}`,
fetchContent: createDeprecatedFetchContentFn(),
glob: createAstroGlobFn(),
// INVESTIGATE is there a use-case for multi args?
diff --git a/packages/astro/test/astro-generator.test.js b/packages/astro/test/astro-generator.test.js
new file mode 100644
index 000000000..1ab7fd30c
--- /dev/null
+++ b/packages/astro/test/astro-generator.test.js
@@ -0,0 +1,23 @@
+import { expect } from 'chai';
+import * as cheerio from 'cheerio';
+import { loadFixture } from './test-utils.js';
+
+describe('Astro generator', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: './fixtures/astro-generator/',
+ });
+ await fixture.build();
+ });
+
+ describe('build', () => {
+ it('Defines Astro.generator', async () => {
+ const html = await fixture.readFile(`/index.html`);
+ const $ = cheerio.load(html);
+
+ expect($('meta[name="generator"]').attr('content')).to.match(/^Astro v/);
+ });
+ });
+});
diff --git a/packages/astro/test/fixtures/astro-generator/package.json b/packages/astro/test/fixtures/astro-generator/package.json
new file mode 100644
index 000000000..5fe696624
--- /dev/null
+++ b/packages/astro/test/fixtures/astro-generator/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "@test/astro-generator",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "astro": "workspace:*"
+ }
+}
diff --git a/packages/astro/test/fixtures/astro-generator/src/pages/index.astro b/packages/astro/test/fixtures/astro-generator/src/pages/index.astro
new file mode 100644
index 000000000..4d86ac540
--- /dev/null
+++ b/packages/astro/test/fixtures/astro-generator/src/pages/index.astro
@@ -0,0 +1,14 @@
+---
+let title = 'My App'
+---
+
+<html>
+ <head>
+ <meta name="generator" content={Astro.generator}>
+ </head>
+ <body>
+ <footer>
+ Built with <a href="https://astro.build">{Astro.generator}</a>
+ </footer>
+ </body>
+</html>
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 20d664cb9..cae292be0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1189,6 +1189,12 @@ importers:
'@astrojs/preact': link:../../../../integrations/preact
astro: link:../../..
+ packages/astro/test/fixtures/astro-generator:
+ specifiers:
+ astro: workspace:*
+ dependencies:
+ astro: link:../../..
+
packages/astro/test/fixtures/astro-get-static-paths:
specifiers:
astro: workspace:*