Compare commits

..

4 commits

Author SHA1 Message Date
unknown
141149e794 Some more work 2022-06-23 15:07:06 -04:00
unknown
cebad76cad Start of streaming 2022-06-23 14:32:27 -04:00
unknown
5f32bf9ef9 Adds a changeset 2022-06-23 09:10:52 -04:00
unknown
c1c7c3f31b Remove post-rendering head injection 2022-06-23 09:06:30 -04:00
3871 changed files with 46257 additions and 221846 deletions

View file

@ -6,7 +6,5 @@
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
"onlyUpdatePeerDependentsWhenOutOfRange": true
}
"ignore": ["@example/*", "@test/*"]
}

View file

@ -1,5 +0,0 @@
---
'astro': patch
---
Fixed an issue where the transitions router did not work within framework components.

View file

@ -0,0 +1,23 @@
---
'astro': patch
---
Allow TypeScript inside script tags
This makes it so that you can use TypeScript inside of script tags like so:
```html
<script>
interface Person {
name: string;
}
const person: Person = {
name: 'Astro'
};
console.log(person);
</script>
```
Note that the the VSCode extension does not currently support this, however.

View file

@ -0,0 +1,5 @@
---
'astro': patch
---
Allow specifying entryFileNames for client JS

View file

@ -0,0 +1,11 @@
---
'astro': patch
---
Moves head injection to happen during rendering
This change makes it so that head injection; to insert component stylesheets, hoisted scripts, for example, to happen during rendering than as a post-rendering step.
This is to enable streaming. This change will only be noticeable if you are rendering your `<head>` element inside of a framework component. If that is the case then the head items will be injected before the first non-head element in an Astro file instead.
In the future we may offer a `<Astro.Head>` component as a way to control where these scripts/styles are inserted.

View file

@ -1,5 +0,0 @@
---
'@astrojs/cloudflare': patch
---
fixes `AdvancedRuntime` & `DirectoryRuntime` types to work woth Cloudflare caches

View file

@ -1,13 +0,0 @@
FROM mcr.microsoft.com/devcontainers/javascript-node:0-18
# Install playwright
RUN npm install -g @playwright/test
# Install latest pnpm
RUN npm install -g pnpm
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
&& curl -sSL https://dl.google.com/linux/direct/google-chrome-stable_current_$(dpkg --print-architecture).deb -o /tmp/chrome.deb \
&& apt-get -y install /tmp/chrome.deb
COPY welcome-message.txt /usr/local/etc/vscode-dev-containers/first-run-notice.txt

View file

@ -1,34 +0,0 @@
{
"name": "Basics",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/basics",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Blog",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/blog",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,21 +0,0 @@
{
"name": "Component Template",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/component",
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"customizations": {
"codespaces": {
"openFiles": ["src/MyComponent.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,27 +0,0 @@
{
"name": "Contribute to Astro",
"build": {
"dockerfile": "Dockerfile"
},
"features": {
"ghcr.io/devcontainers/features/desktop-lite:1": {}
},
"postCreateCommand": "pnpm install && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Astro tests": "pnpm run test"
},
"customizations": {
"codespaces": {
"openFiles": ["README.md", "CONTRIBUTING.md"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Docs Site",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/docs",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,5 +0,0 @@
👋 Welcome to "Astro" in GitHub Codespaces!
🛠️ Your environment is fully setup with all the required software.
🚀 The example app should automatically start soon in a new terminal tab.

View file

@ -1,6 +0,0 @@
FROM mcr.microsoft.com/devcontainers/javascript-node:0-18
# Install latest pnpm
RUN npm install -g pnpm
COPY example-welcome-message.txt /usr/local/etc/vscode-dev-containers/first-run-notice.txt

View file

@ -1,34 +0,0 @@
{
"name": "Alpine",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/framework-alpine",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Lit",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/framework-lit",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Kitchen Sink (Multiple Frameworks)",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/framework-multiple",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Preact",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/framework-preact",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "React",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/framework-react",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Solid",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/framework-solid",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Svelte",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/framework-svelte",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Vue",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/framework-vue",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Hackernews",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/hackernews",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/[...stories].astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,21 +0,0 @@
{
"name": "Integration Package",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/integration",
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"customizations": {
"codespaces": {
"openFiles": ["index.ts"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Minimal",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/minimal",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Non-HTML Pages",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/non-html-pages",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Portfolio",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/portfolio",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "SSR",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/ssr",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,4 +0,0 @@
👋 Welcome to Astro!
🛠️ Your environment is fully setup with all required software installed. Tests will
be running shortly in a separate terminal tab.

View file

@ -1,34 +0,0 @@
{
"name": "Markdown with Plugins",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/with-markdown-plugins",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.md"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Markdown with Shiki",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/with-markdown-shiki",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.md"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "MDX",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/with-mdx",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.mdx"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Nanostores",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/with-nanostores",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Tailwind",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/with-tailwindcss",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Vite PWA",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/with-vite-plugin-pwa",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,34 +0,0 @@
{
"name": "Vitest",
"build": {
"dockerfile": "../examples.Dockerfile"
},
"workspaceFolder": "/workspaces/astro/examples/with-vitest",
"portsAttributes": {
"4321": {
"label": "Application",
"onAutoForward": "openPreview"
}
},
"forwardPorts": [4321],
"postCreateCommand": "pnpm install && cd /workspaces/astro && pnpm run build",
"waitFor": "postCreateCommand",
"postAttachCommand": {
"Server": "pnpm start --host"
},
"customizations": {
"codespaces": {
"openFiles": ["src/pages/index.astro"]
},
"vscode": {
"extensions": ["astro-build.astro-vscode", "esbenp.prettier-vscode"]
}
}
}

View file

@ -1,7 +1,7 @@
**/*.d.ts
packages/**/*.min.js
packages/**/dist/**/*
packages/**/fixtures/**/*
packages/webapi/**/*
packages/astro/vendor/vite/**/*
examples/**/*
scripts/**/*

View file

@ -1,98 +1,22 @@
const { builtinModules } = require('module');
module.exports = {
extends: [
'plugin:@typescript-eslint/recommended-type-checked',
'plugin:@typescript-eslint/stylistic-type-checked',
'prettier',
],
parser: '@typescript-eslint/parser',
parserOptions: {
project: ['./packages/*/tsconfig.json', './tsconfig.eslint.json'],
tsconfigRootDir: __dirname,
},
extends: ['plugin:@typescript-eslint/recommended', 'prettier'],
plugins: ['@typescript-eslint', 'prettier', 'no-only-tests'],
rules: {
// These off/configured-differently-by-default rules fit well for us
'@typescript-eslint/array-type': ['error', { default: 'array-simple' }],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_', ignoreRestSiblings: true },
],
'no-only-tests/no-only-tests': 'error',
'@typescript-eslint/no-shadow': ['error'],
'no-console': 'warn',
// Todo: do we want these?
'@typescript-eslint/array-type': 'off',
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/class-literal-property-style': 'off',
'@typescript-eslint/consistent-indexed-object-style': 'off',
'@typescript-eslint/consistent-type-definitions': 'off',
'@typescript-eslint/dot-notation': 'off',
'@typescript-eslint/no-base-to-string': 'off',
'@typescript-eslint/camelcase': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-floating-promises': 'off',
'@typescript-eslint/no-misused-promises': 'off',
'@typescript-eslint/no-redundant-type-constituents': 'off',
'@typescript-eslint/no-this-alias': 'off',
'@typescript-eslint/no-unsafe-argument': 'off',
'@typescript-eslint/no-unsafe-assignment': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
'@typescript-eslint/no-unsafe-return': 'off',
'@typescript-eslint/prefer-nullish-coalescing': 'off',
'@typescript-eslint/prefer-optional-chain': 'off',
'@typescript-eslint/prefer-string-starts-ends-with': 'off',
'@typescript-eslint/require-await': 'off',
'@typescript-eslint/restrict-plus-operands': 'off',
'@typescript-eslint/restrict-template-expressions': 'off',
'@typescript-eslint/sort-type-constituents': 'off',
'@typescript-eslint/unbound-method': 'off',
'@typescript-eslint/no-explicit-any': 'off',
// These rules enabled by the preset configs don't work well for us
'@typescript-eslint/await-thenable': 'off',
'prefer-const': 'off',
},
overrides: [
{
// Ensure Node builtins aren't included in Astro's server runtime
files: ['packages/astro/src/runtime/**/*.ts'],
rules: {
'no-restricted-imports': [
'error',
{
paths: [...builtinModules],
patterns: ['node:*'],
},
],
},
},
{
files: ['packages/**/test/*.js', 'packages/**/*.js'],
env: {
mocha: true,
},
globals: {
globalThis: false, // false means read-only
},
rules: {
'no-console': 'off',
},
},
{
files: ['packages/integrations/**/*.ts'],
rules: {
'no-console': ['error', { allow: ['warn', 'error', 'info', 'debug'] }],
},
},
{
files: ['benchmark/**/*.js'],
rules: {
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'no-console': 'off',
'@typescript-eslint/no-use-before-define': 'off',
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/no-this-alias': 'off',
'no-console': 'warn',
'prefer-const': 'off',
'no-shadow': 'off',
'@typescript-eslint/no-shadow': ['error'],
'no-only-tests/no-only-tests': 'error',
},
},
],
};

View file

@ -2,5 +2,3 @@
6ddd7678ffb6598ae6e263706813cb5e94535f02
# prettier config update
1335797903a57716e9a02b0ffd8ca636b3883c62
# Manually format .astro files in example projects (#3862)
59e8c71786fd1c154904b3fefa7d26d88f4d92d2

4
.github/CODEOWNERS vendored
View file

@ -1,3 +1 @@
README.md @withastro/maintainers-docs
packages/astro/src/@types/astro.ts @withastro/maintainers-docs
packages/astro/src/core/errors/errors-data.ts @withastro/maintainers-docs
* @snowpackjs/maintainers

View file

@ -1,5 +1,6 @@
name: "\U0001F41B Bug Report"
description: Report an issue or possible bug
title: "\U0001F41B BUG:"
labels: []
assignees: []
body:
@ -10,20 +11,35 @@ body:
Thank you for taking the time to file a bug report! Please fill out this form as completely as possible.
✅ I am using the **latest version of Astro** and all plugins.
✅ I am using a version of Node that Astro supports (`>=18.14.1`)
- type: textarea
id: astro-info
✅ I am using a version of Node that supports ESM (`v14.15.0+`, or `v16.0.0+`)
- type: input
id: astro-version
attributes:
label: Astro Info
description: Run the command `astro info` in your terminal and paste the output here. Please review the data before submitting in case there is any sensitive information you don't want to share.
render: block
label: What version of `astro` are you using?
placeholder: 0.0.0
validations:
required: true
- type: input
id: browser
id: ssr-adapter
attributes:
label: If this issue only occurs in one browser, which browser is a problem?
placeholder: Chrome, Firefox, Safari
label: Are you using an SSR adapter? If so, which one?
placeholder: None, or Netlify, Vercel, Cloudflare, etc.
validations:
required: true
- type: input
id: package-manager
attributes:
label: What package manager are you using?
placeholder: npm, yarn, pnpm
validations:
required: true
- type: input
id: os
attributes:
label: What operating system are you using?
placeholder: Mac, Windows, Linux
validations:
required: true
- type: textarea
id: bug-description
attributes:
@ -31,18 +47,11 @@ body:
description: A clear and concise description of what the bug is.
validations:
required: true
- type: textarea
id: bug-expectation
attributes:
label: What's the expected result?
description: Describe what you expect to happen.
validations:
required: true
- type: input
id: bug-reproduction
attributes:
label: Link to Minimal Reproducible Example
description: 'Use [astro.new](https://astro.new) to create a minimal reproduction of the problem. **A minimal reproduction is required** so that others can help debug your issue. If a report is vague (e.g. just a generic error message) and has no reproduction, it may be auto-closed. Not sure how to create a minimal example? [Read our guide](https://docs.astro.build/en/guides/troubleshooting/#creating-minimal-reproductions)'
description: 'Use [astro.new](https://astro.new) to create a minimal reproduction of the problem. **A minimal reproduction is required** so that others can help debug your issue. If a report is vague (e.g. just a generic error message) and has no reproduction, it may be auto-closed.'
placeholder: 'https://stackblitz.com/abcd1234'
validations:
required: true

View file

@ -4,7 +4,7 @@ contact_links:
url: https://github.com/withastro/docs
about: File an issue or make an improvement to the docs website.
- name: 💡 Ideas for New Features, Improvements and RFCs
url: https://github.com/withastro/roadmap/discussions
url: https://github.com/withastro/rfcs/discussions
about: Propose and discuss future improvements to Astro
- name: 👾 Chat
url: https://astro.build/chat

View file

@ -12,9 +12,6 @@
## Docs
<!-- Could this affect a users behavior? We probably need to update docs! -->
<!-- If docs will be needed or youre not sure, uncomment the next line: -->
<!-- /cc @withastro/maintainers-docs for feedback! -->
<!-- Is this a visible change? You probably need to update docs! -->
<!-- DON'T DELETE THIS SECTION! If no docs added, explain why.-->
<!-- https://github.com/withastro/docs -->

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.8 KiB

View file

@ -1 +0,0 @@
<svg fill="none" height="40" viewBox="0 0 240 40" width="240" xmlns="http://www.w3.org/2000/svg"><g fill="#fff"><path clip-rule="evenodd" d="m31 40-4-10.6-4 10.6h-2l5-13.2-4-10.5-9 23.7h-2l10-26.4-4.5-11.8-14.5 38.2h-2l15.2-40h2.6l4.2 11 4.2-11h2.6l3.7 9.7 3.7-9.7h2.6l4.2 11 4.2-11h2.6l15.2 40h-2l-14.5-38.2-4.5 11.8 10 26.4h-2l-9-23.7-4 10.5 5 13.2h-2l-4-10.6-4 10.6zm1.5-25-4.5 11.7 4.5 11.9 4.5-11.8zm-5-13.2-4.5 11.8 4 10.6 4.5-11.9zm10 0-4 10.5 4.5 11.9 4-10.6z" fill-rule="evenodd"/><path d="m97.7259 17.956v11.044h2.7061v-15.4h-2.8821l-4.686 7.282-4.686-7.282h-2.882v15.4h2.662v-11l4.818 7.216h.088z"/><path d="m121.687 21.278c0-1.0853-.198-2.112-.594-3.08s-.946-1.8113-1.65-2.53-1.547-1.2833-2.53-1.694c-.982-.4253-2.068-.638-3.256-.638s-2.273.2127-3.256.638c-.982.4253-1.833 1.0047-2.552 1.738-.718.7187-1.276 1.562-1.672 2.53s-.594 1.9947-.594 3.08.198 2.112.594 3.08.946 1.8113 1.65 2.53 1.548 1.2907 2.53 1.716c.983.4107 2.068.616 3.256.616s2.274-.2127 3.256-.638c.983-.4253 1.834-.9973 2.552-1.716.719-.7333 1.276-1.584 1.672-2.552s.594-1.9947.594-3.08zm-2.838.044c0 .748-.132 1.4593-.396 2.134-.249.66-.601 1.2393-1.056 1.738-.454.484-1.004.8727-1.65 1.166-.63.2787-1.327.418-2.09.418-.762 0-1.466-.1467-2.112-.44-.645-.2933-1.202-.6893-1.672-1.188-.454-.4987-.814-1.078-1.078-1.738-.249-.6747-.374-1.386-.374-2.134s.125-1.452.374-2.112c.264-.6747.624-1.254 1.078-1.738.455-.4987.998-.8873 1.628-1.166.646-.2933 1.35-.44 2.112-.44.763 0 1.467.1467 2.112.44.646.2933 1.196.6893 1.65 1.188.47.4987.829 1.0853 1.078 1.76.264.66.396 1.364.396 2.112z"/><path d="m137.585 24.248-8.25-10.648h-2.508v15.4h2.662v-10.956l8.492 10.956h2.266v-15.4h-2.662z"/><path d="m161.5 21.278c0-1.0853-.198-2.112-.594-3.08s-.946-1.8113-1.65-2.53-1.548-1.2833-2.53-1.694c-.983-.4253-2.068-.638-3.256-.638s-2.274.2127-3.256.638c-.983.4253-1.834 1.0047-2.552 1.738-.719.7187-1.276 1.562-1.672 2.53s-.594 1.9947-.594 3.08.198 2.112.594 3.08.946 1.8113 1.65 2.53 1.547 1.2907 2.53 1.716c.982.4107 2.068.616 3.256.616s2.273-.2127 3.256-.638c.982-.4253 1.833-.9973 2.552-1.716.718-.7333 1.276-1.584 1.672-2.552s.594-1.9947.594-3.08zm-2.838.044c0 .748-.132 1.4593-.396 2.134-.25.66-.602 1.2393-1.056 1.738-.455.484-1.005.8727-1.65 1.166-.631.2787-1.328.418-2.09.418-.763 0-1.467-.1467-2.112-.44-.646-.2933-1.203-.6893-1.672-1.188-.455-.4987-.814-1.078-1.078-1.738-.25-.6747-.374-1.386-.374-2.134s.124-1.452.374-2.112c.264-.6747.623-1.254 1.078-1.738.454-.4987.997-.8873 1.628-1.166.645-.2933 1.349-.44 2.112-.44.762 0 1.466.1467 2.112.44.645.2933 1.195.6893 1.65 1.188.469.4987.828 1.0853 1.078 1.76.264.66.396 1.364.396 2.112z"/><path d="m180.367 26.866v-6.468h-6.556v2.354h3.938v2.882c-.469.352-1.027.638-1.672.858-.631.2053-1.313.308-2.046.308-.792 0-1.511-.1393-2.156-.418-.631-.2787-1.181-.66-1.65-1.144-.455-.4987-.807-1.0853-1.056-1.76s-.374-1.408-.374-2.2c0-.748.125-1.452.374-2.112.264-.66.616-1.2393 1.056-1.738.455-.4987.983-.8873 1.584-1.166.616-.2933 1.276-.44 1.98-.44.484 0 .924.044 1.32.132.411.0733.785.1833 1.122.33.337.132.66.3007.968.506s.609.4327.902.682l1.716-2.046c-.396-.3373-.807-.6307-1.232-.88-.411-.264-.851-.484-1.32-.66s-.983-.308-1.54-.396c-.543-.1027-1.151-.154-1.826-.154-1.159 0-2.229.2127-3.212.638-.968.4253-1.804 1.0047-2.508 1.738-.704.7187-1.254 1.562-1.65 2.53-.381.968-.572 1.9947-.572 3.08 0 1.1293.191 2.178.572 3.146s.917 1.8113 1.606 2.53c.704.704 1.547 1.2613 2.53 1.672.983.396 2.075.594 3.278.594.675 0 1.32-.066 1.936-.198.616-.1173 1.188-.286 1.716-.506.543-.22 1.041-.4767 1.496-.77.469-.2933.895-.6013 1.276-.924z"/><path d="m198.829 29-4.158-5.83c.543-.1467 1.034-.352 1.474-.616.455-.2787.843-.6087 1.166-.99.323-.396.572-.8433.748-1.342.191-.5133.286-1.0927.286-1.738 0-.748-.132-1.4227-.396-2.024-.264-.616-.645-1.1293-1.144-1.54-.484-.4253-1.085-.748-1.804-.968-.704-.2347-1.496-.352-2.376-.352h-6.864v15.4h2.706v-5.368h3.388l3.784 5.368zm-3.234-10.362c0 .792-.286 1.4227-.858 1.892s-1.342.704-2.31.704h-3.96v-5.17h3.938c1.012 0 1.797.22 2.354.66.557.4253.836 1.0633.836 1.914z"/><path d="m211.934 13.49h-2.508l-6.776 15.51h2.772l1.584-3.718h7.282l1.562 3.718h2.86zm1.364 9.394h-5.302l2.64-6.16z"/><path d="m236.31 17.956v11.044h2.706v-15.4h-2.882l-4.686 7.282-4.686-7.282h-2.882v15.4h2.662v-11l4.818 7.216h.088z"/></g></svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -1 +0,0 @@
<svg fill="none" height="40" viewBox="0 0 240 40" width="240" xmlns="http://www.w3.org/2000/svg"><g fill="#000"><path clip-rule="evenodd" d="m31 40-4-10.6-4 10.6h-2l5-13.2-4-10.5-9 23.7h-2l10-26.4-4.5-11.8-14.5 38.2h-2l15.2-40h2.6l4.2 11 4.2-11h2.6l3.7 9.7 3.7-9.7h2.6l4.2 11 4.2-11h2.6l15.2 40h-2l-14.5-38.2-4.5 11.8 10 26.4h-2l-9-23.7-4 10.5 5 13.2h-2l-4-10.6-4 10.6zm1.5-25-4.5 11.7 4.5 11.9 4.5-11.8zm-5-13.2-4.5 11.8 4 10.6 4.5-11.9zm10 0-4 10.5 4.5 11.9 4-10.6z" fill-rule="evenodd"/><path d="m97.7259 17.956v11.044h2.7061v-15.4h-2.8821l-4.686 7.282-4.686-7.282h-2.882v15.4h2.662v-11l4.818 7.216h.088z"/><path d="m121.687 21.278c0-1.0853-.198-2.112-.594-3.08s-.946-1.8113-1.65-2.53-1.547-1.2833-2.53-1.694c-.982-.4253-2.068-.638-3.256-.638s-2.273.2127-3.256.638c-.982.4253-1.833 1.0047-2.552 1.738-.718.7187-1.276 1.562-1.672 2.53s-.594 1.9947-.594 3.08.198 2.112.594 3.08.946 1.8113 1.65 2.53 1.548 1.2907 2.53 1.716c.983.4107 2.068.616 3.256.616s2.274-.2127 3.256-.638c.983-.4253 1.834-.9973 2.552-1.716.719-.7333 1.276-1.584 1.672-2.552s.594-1.9947.594-3.08zm-2.838.044c0 .748-.132 1.4593-.396 2.134-.249.66-.601 1.2393-1.056 1.738-.454.484-1.004.8727-1.65 1.166-.63.2787-1.327.418-2.09.418-.762 0-1.466-.1467-2.112-.44-.645-.2933-1.202-.6893-1.672-1.188-.454-.4987-.814-1.078-1.078-1.738-.249-.6747-.374-1.386-.374-2.134s.125-1.452.374-2.112c.264-.6747.624-1.254 1.078-1.738.455-.4987.998-.8873 1.628-1.166.646-.2933 1.35-.44 2.112-.44.763 0 1.467.1467 2.112.44.646.2933 1.196.6893 1.65 1.188.47.4987.829 1.0853 1.078 1.76.264.66.396 1.364.396 2.112z"/><path d="m137.585 24.248-8.25-10.648h-2.508v15.4h2.662v-10.956l8.492 10.956h2.266v-15.4h-2.662z"/><path d="m161.5 21.278c0-1.0853-.198-2.112-.594-3.08s-.946-1.8113-1.65-2.53-1.548-1.2833-2.53-1.694c-.983-.4253-2.068-.638-3.256-.638s-2.274.2127-3.256.638c-.983.4253-1.834 1.0047-2.552 1.738-.719.7187-1.276 1.562-1.672 2.53s-.594 1.9947-.594 3.08.198 2.112.594 3.08.946 1.8113 1.65 2.53 1.547 1.2907 2.53 1.716c.982.4107 2.068.616 3.256.616s2.273-.2127 3.256-.638c.982-.4253 1.833-.9973 2.552-1.716.718-.7333 1.276-1.584 1.672-2.552s.594-1.9947.594-3.08zm-2.838.044c0 .748-.132 1.4593-.396 2.134-.25.66-.602 1.2393-1.056 1.738-.455.484-1.005.8727-1.65 1.166-.631.2787-1.328.418-2.09.418-.763 0-1.467-.1467-2.112-.44-.646-.2933-1.203-.6893-1.672-1.188-.455-.4987-.814-1.078-1.078-1.738-.25-.6747-.374-1.386-.374-2.134s.124-1.452.374-2.112c.264-.6747.623-1.254 1.078-1.738.454-.4987.997-.8873 1.628-1.166.645-.2933 1.349-.44 2.112-.44.762 0 1.466.1467 2.112.44.645.2933 1.195.6893 1.65 1.188.469.4987.828 1.0853 1.078 1.76.264.66.396 1.364.396 2.112z"/><path d="m180.367 26.866v-6.468h-6.556v2.354h3.938v2.882c-.469.352-1.027.638-1.672.858-.631.2053-1.313.308-2.046.308-.792 0-1.511-.1393-2.156-.418-.631-.2787-1.181-.66-1.65-1.144-.455-.4987-.807-1.0853-1.056-1.76s-.374-1.408-.374-2.2c0-.748.125-1.452.374-2.112.264-.66.616-1.2393 1.056-1.738.455-.4987.983-.8873 1.584-1.166.616-.2933 1.276-.44 1.98-.44.484 0 .924.044 1.32.132.411.0733.785.1833 1.122.33.337.132.66.3007.968.506s.609.4327.902.682l1.716-2.046c-.396-.3373-.807-.6307-1.232-.88-.411-.264-.851-.484-1.32-.66s-.983-.308-1.54-.396c-.543-.1027-1.151-.154-1.826-.154-1.159 0-2.229.2127-3.212.638-.968.4253-1.804 1.0047-2.508 1.738-.704.7187-1.254 1.562-1.65 2.53-.381.968-.572 1.9947-.572 3.08 0 1.1293.191 2.178.572 3.146s.917 1.8113 1.606 2.53c.704.704 1.547 1.2613 2.53 1.672.983.396 2.075.594 3.278.594.675 0 1.32-.066 1.936-.198.616-.1173 1.188-.286 1.716-.506.543-.22 1.041-.4767 1.496-.77.469-.2933.895-.6013 1.276-.924z"/><path d="m198.829 29-4.158-5.83c.543-.1467 1.034-.352 1.474-.616.455-.2787.843-.6087 1.166-.99.323-.396.572-.8433.748-1.342.191-.5133.286-1.0927.286-1.738 0-.748-.132-1.4227-.396-2.024-.264-.616-.645-1.1293-1.144-1.54-.484-.4253-1.085-.748-1.804-.968-.704-.2347-1.496-.352-2.376-.352h-6.864v15.4h2.706v-5.368h3.388l3.784 5.368zm-3.234-10.362c0 .792-.286 1.4227-.858 1.892s-1.342.704-2.31.704h-3.96v-5.17h3.938c1.012 0 1.797.22 2.354.66.557.4253.836 1.0633.836 1.914z"/><path d="m211.934 13.49h-2.508l-6.776 15.51h2.772l1.584-3.718h7.282l1.562 3.718h2.86zm1.364 9.394h-5.302l2.64-6.16z"/><path d="m236.31 17.956v11.044h2.706v-15.4h-2.882l-4.686 7.282-4.686-7.282h-2.882v15.4h2.662v-11l4.818 7.216h.088z"/></g></svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -1 +1 @@
<svg viewBox="0 0 147 40" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><radialGradient id="a" cx="-779.0521" cy="1839.7205" gradientTransform="matrix(0 38.301 44.1228 0 -81154.2578 29839.2441)" gradientUnits="userSpaceOnUse" r="1.0011"><stop offset="0" stop-color="#20c6b7"/><stop offset="1" stop-color="#4d9abf"/></radialGradient><path clip-rule="evenodd" d="m53.37 12.98.12 2.2c1.4-1.7 3.24-2.55 5.53-2.55 3.95 0 5.96 2.27 6.03 6.8v12.57h-4.26v-12.32c0-1.21-.26-2.1-.78-2.68s-1.37-.87-2.55-.87c-1.72 0-3 .78-3.84 2.34v13.53h-4.26v-19.02zm24.38 19.37c-2.7 0-4.89-.85-6.57-2.56-1.68-1.7-2.52-3.98-2.52-6.81v-.53c0-1.9.36-3.59 1.1-5.09.73-1.49 1.76-2.66 3.08-3.49s2.79-1.25 4.42-1.25c2.58 0 4.58.83 5.99 2.48s2.11 3.99 2.11 7.01v1.72h-12.4c.13 1.57.65 2.81 1.57 3.73s2.07 1.37 3.46 1.37c1.95 0 3.54-.79 4.77-2.37l2.3 2.2c-.76 1.14-1.77 2.02-3.04 2.65s-2.69.94-4.27.94zm-.51-16.29c-1.17 0-2.11.41-2.83 1.23s-1.18 1.96-1.38 3.43h8.12v-.32c-.09-1.43-.47-2.51-1.14-3.24-.67-.74-1.59-1.1-2.77-1.1zm16.76-7.7v4.62h3.35v3.16h-3.35v10.62c0 .73.14 1.25.43 1.57s.8.48 1.54.48c.5 0 1-.06 1.49-.18v3.31c-.97.27-1.9.4-2.81.4-3.27 0-4.91-1.81-4.91-5.43v-10.77h-3.12v-3.16h3.12v-4.63zm11.14 23.64h-4.26v-27h4.26zm9.17 0h-4.26v-19.02h4.26zm-4.52-23.96c0-.65.21-1.2.62-1.63.42-.43 1.01-.65 1.78-.65s1.37.22 1.79.65.63.98.63 1.64c0 .64-.21 1.18-.63 1.61s-1.02.64-1.79.64-1.36-.21-1.78-.64c-.41-.44-.62-.98-.62-1.62zm10.66 23.96v-15.86h-2.89v-3.16h2.89v-1.74c0-2.11.58-3.74 1.75-4.89s2.81-1.72 4.91-1.72c.75 0 1.54.11 2.39.32l-.1 3.34c-.54-.1-1.08-.15-1.63-.14-2.04 0-3.05 1.05-3.05 3.15v1.69h3.86v3.16h-3.86v15.85zm17.87-6.12 3.86-12.9h4.54l-7.54 21.9c-1.16 3.2-3.12 4.8-5.89 4.8-.62 0-1.3-.11-2.05-.32v-3.31l.81.05c1.07 0 1.88-.2 2.43-.59.54-.39.97-1.05 1.29-1.98l.61-1.64-6.66-18.93h4.6z" fill="#fff" fill-rule="evenodd"/><path d="m27.89 14.14-.01-.01c-.01 0-.02-.01-.02-.01-.02-.02-.03-.06-.03-.09l.77-4.73 3.62 3.63-3.77 1.6c-.01 0-.02.01-.03.01h-.02s-.01-.01-.02-.02c-.14-.16-.31-.29-.49-.38zm5.26-.29 3.88 3.88c.81.81 1.21 1.21 1.35 1.67.02.07.04.14.05.21l-9.26-3.92s-.01 0-.01-.01c-.04-.02-.08-.03-.08-.07s.04-.06.08-.07l.01-.01zm5.12 7c-.2.38-.59.77-1.25 1.43l-4.37 4.37-5.65-1.18-.03-.01c-.05-.01-.1-.02-.1-.06-.04-.47-.28-.9-.66-1.19-.02-.02-.02-.06-.01-.09v-.01l1.06-6.53v-.02c.01-.05.01-.11.06-.11.46-.06.88-.3 1.16-.67.01-.01.01-.02.03-.03.03-.01.07 0 .1.01zm-6.62 6.8-7.19 7.19 1.23-7.56v-.01c0-.01 0-.02.01-.03.01-.02.04-.03.06-.04h.01c.27-.11.51-.29.69-.52.02-.03.05-.06.09-.06h.03zm-8.71 8.71-.81.81-8.95-12.94s-.01-.01-.01-.01c-.01-.02-.03-.04-.03-.06s.01-.03.02-.04l.01-.01c.03-.04.05-.08.07-.12l.02-.03c.01-.02.03-.05.05-.06s.05-.01.07 0l9.92 2.05c.03 0 .05.02.08.03.01.01.02.03.02.04.14.53.52.97 1.03 1.17.03.01.02.05 0 .08-.01.01-.01.03-.01.05-.12.74-1.19 7.27-1.48 9.04zm-1.69 1.69c-.6.59-.95.9-1.35 1.03-.39.12-.81.12-1.21 0-.47-.15-.87-.55-1.67-1.36l-8.99-8.99 2.35-3.64c.01-.02.02-.03.04-.05s.06-.01.09 0c.54.16 1.12.13 1.64-.08.03-.01.05-.02.07 0l.03.03zm-14.09-10.19-2.06-2.06 4.07-1.74c.01 0 .02-.01.03-.01.03 0 .05.03.07.07.04.06.08.12.13.18l.01.02c.01.02 0 .03-.01.05zm-2.98-2.97-2.61-2.61c-.44-.44-.77-.77-.99-1.04l7.94 1.65h.03c.05.01.1.02.1.06 0 .05-.06.07-.11.09l-.02.01zm-4.05-5c.01-.17.04-.33.09-.5.15-.47.55-.87 1.36-1.67l3.34-3.34c1.54 2.23 3.08 4.46 4.63 6.69.03.04.06.08.03.11-.15.16-.29.34-.4.53-.01.02-.03.05-.05.06-.01.01-.03 0-.04 0zm5.68-6.4 4.49-4.49c.42.19 1.96.83 3.33 1.41 1.04.44 1.99.84 2.29.97.03.01.06.02.07.05.01.02 0 .04 0 .06-.14.66.05 1.35.52 1.83.03.03 0 .07-.03.11l-.01.02-4.56 7.06c-.01.02-.02.04-.04.05s-.06.01-.09 0c-.18-.05-.36-.07-.54-.07-.16 0-.34.03-.52.06-.02 0-.04.01-.05 0-.02-.01-.03-.03-.05-.05zm5.4-5.4 5.81-5.81c.81-.81 1.21-1.21 1.67-1.36.39-.12.81-.12 1.21 0 .47.15.87.55 1.67 1.36l1.26 1.26-4.14 6.4c-.01.02-.02.03-.04.05s-.06.01-.09 0c-.66-.2-1.38-.06-1.92.37-.03.03-.07.01-.1 0-.53-.24-4.73-2.01-5.33-2.27zm12.5-3.67 3.82 3.82-.92 5.7v.02c0 .01 0 .03-.01.04-.01.02-.03.02-.05.03-.2.06-.38.15-.55.27-.01.01-.01.01-.02.02s-.02.02-.04.02c-.01 0-.03 0-.04-.01l-5.82-2.47-.01-.01c-.04-.02-.08-.03-.08-.07-.03-.32-.14-.64-.31-.91-.03-.05-.06-.09-.03-.14zm-3.93 8.6 5.45 2.31c.03.01.06.03.08.06.01.02.01.04 0 .06-.02.08-.03.17-.03.26v.15c0 .04-.04.05-.08.07h-.01c-.86.37-12.13 5.17-12.15 5.17s-.03 0-.05-.02c-.03-.03 0-.07.03-.11 0-.01.01-.01.01-.02l4.48-6.94.01-.01c.03-.04.06-.09.1-.09l.05.01c.1.01.19.03.28.03.68 0 1.31-.33 1.69-.9.01-.02.02-.03.03-.04.04-.01.08 0 .11.01zm-6.25 9.19 12.28-5.24s.02 0 .03.02c.07.07.12.11.18.15l.03.02c.02.01.05.03.05.06v.02l-1.05 6.46v.03c-.01.05-.01.11-.06.11-.57.04-1.08.36-1.37.85v.01c-.01.02-.03.05-.05.06s-.05.01-.07 0l-9.79-2.02c-.02-.02-.16-.53-.18-.53z" fill="url(#a)"/></svg>
<svg viewBox="0 0 147 40" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><radialGradient id="a" cx="-779.0521" cy="1839.7205" gradientTransform="matrix(0 38.301 44.1228 0 -81154.2578 29839.2441)" gradientUnits="userSpaceOnUse" r="1.0011"><stop offset="0" stop-color="#20c6b7"/><stop offset="1" stop-color="#4d9abf"/></radialGradient><path clip-rule="evenodd" d="m53.37 12.98.12 2.2c1.4-1.7 3.24-2.55 5.53-2.55 3.95 0 5.96 2.27 6.03 6.8v12.57h-4.26v-12.32c0-1.21-.26-2.1-.78-2.68s-1.37-.87-2.55-.87c-1.72 0-3 .78-3.84 2.34v13.53h-4.26v-19.02zm24.38 19.37c-2.7 0-4.89-.85-6.57-2.56-1.68-1.7-2.52-3.98-2.52-6.81v-.53c0-1.9.36-3.59 1.1-5.09.73-1.49 1.76-2.66 3.08-3.49s2.79-1.25 4.42-1.25c2.58 0 4.58.83 5.99 2.48s2.11 3.99 2.11 7.01v1.72h-12.4c.13 1.57.65 2.81 1.57 3.73s2.07 1.37 3.46 1.37c1.95 0 3.54-.79 4.77-2.37l2.3 2.2c-.76 1.14-1.77 2.02-3.04 2.65s-2.69.94-4.27.94zm-.51-16.29c-1.17 0-2.11.41-2.83 1.23s-1.18 1.96-1.38 3.43h8.12v-.32c-.09-1.43-.47-2.51-1.14-3.24-.67-.74-1.59-1.1-2.77-1.1zm16.76-7.7v4.62h3.35v3.16h-3.35v10.62c0 .73.14 1.25.43 1.57s.8.48 1.54.48c.5 0 1-.06 1.49-.18v3.31c-.97.27-1.9.4-2.81.4-3.27 0-4.91-1.81-4.91-5.43v-10.77h-3.12v-3.16h3.12v-4.63zm11.14 23.64h-4.26v-27h4.26zm9.17 0h-4.26v-19.02h4.26zm-4.52-23.96c0-.65.21-1.2.62-1.63.42-.43 1.01-.65 1.78-.65s1.37.22 1.79.65.63.98.63 1.64c0 .64-.21 1.18-.63 1.61s-1.02.64-1.79.64-1.36-.21-1.78-.64c-.41-.44-.62-.98-.62-1.62zm10.66 23.96v-15.86h-2.89v-3.16h2.89v-1.74c0-2.11.58-3.74 1.75-4.89s2.81-1.72 4.91-1.72c.75 0 1.54.11 2.39.32l-.1 3.34c-.54-.1-1.08-.15-1.63-.14-2.04 0-3.05 1.05-3.05 3.15v1.69h3.86v3.16h-3.86v15.85zm17.87-6.12 3.86-12.9h4.54l-7.54 21.9c-1.16 3.2-3.12 4.8-5.89 4.8-.62 0-1.3-.11-2.05-.32v-3.31l.81.05c1.07 0 1.88-.2 2.43-.59.54-.39.97-1.05 1.29-1.98l.61-1.64-6.66-18.93h4.6z" fill="#ffffff" fill-rule="evenodd"/><path d="m27.89 14.14-.01-.01c-.01 0-.02-.01-.02-.01-.02-.02-.03-.06-.03-.09l.77-4.73 3.62 3.63-3.77 1.6c-.01 0-.02.01-.03.01h-.02s-.01-.01-.02-.02c-.14-.16-.31-.29-.49-.38zm5.26-.29 3.88 3.88c.81.81 1.21 1.21 1.35 1.67.02.07.04.14.05.21l-9.26-3.92s-.01 0-.01-.01c-.04-.02-.08-.03-.08-.07s.04-.06.08-.07l.01-.01zm5.12 7c-.2.38-.59.77-1.25 1.43l-4.37 4.37-5.65-1.18-.03-.01c-.05-.01-.1-.02-.1-.06-.04-.47-.28-.9-.66-1.19-.02-.02-.02-.06-.01-.09v-.01l1.06-6.53v-.02c.01-.05.01-.11.06-.11.46-.06.88-.3 1.16-.67.01-.01.01-.02.03-.03.03-.01.07 0 .1.01zm-6.62 6.8-7.19 7.19 1.23-7.56v-.01c0-.01 0-.02.01-.03.01-.02.04-.03.06-.04h.01c.27-.11.51-.29.69-.52.02-.03.05-.06.09-.06h.03zm-8.71 8.71-.81.81-8.95-12.94s-.01-.01-.01-.01c-.01-.02-.03-.04-.03-.06s.01-.03.02-.04l.01-.01c.03-.04.05-.08.07-.12l.02-.03c.01-.02.03-.05.05-.06s.05-.01.07 0l9.92 2.05c.03 0 .05.02.08.03.01.01.02.03.02.04.14.53.52.97 1.03 1.17.03.01.02.05 0 .08-.01.01-.01.03-.01.05-.12.74-1.19 7.27-1.48 9.04zm-1.69 1.69c-.6.59-.95.9-1.35 1.03-.39.12-.81.12-1.21 0-.47-.15-.87-.55-1.67-1.36l-8.99-8.99 2.35-3.64c.01-.02.02-.03.04-.05s.06-.01.09 0c.54.16 1.12.13 1.64-.08.03-.01.05-.02.07 0l.03.03zm-14.09-10.19-2.06-2.06 4.07-1.74c.01 0 .02-.01.03-.01.03 0 .05.03.07.07.04.06.08.12.13.18l.01.02c.01.02 0 .03-.01.05zm-2.98-2.97-2.61-2.61c-.44-.44-.77-.77-.99-1.04l7.94 1.65h.03c.05.01.1.02.1.06 0 .05-.06.07-.11.09l-.02.01zm-4.05-5c.01-.17.04-.33.09-.5.15-.47.55-.87 1.36-1.67l3.34-3.34c1.54 2.23 3.08 4.46 4.63 6.69.03.04.06.08.03.11-.15.16-.29.34-.4.53-.01.02-.03.05-.05.06-.01.01-.03 0-.04 0zm5.68-6.4 4.49-4.49c.42.19 1.96.83 3.33 1.41 1.04.44 1.99.84 2.29.97.03.01.06.02.07.05.01.02 0 .04 0 .06-.14.66.05 1.35.52 1.83.03.03 0 .07-.03.11l-.01.02-4.56 7.06c-.01.02-.02.04-.04.05s-.06.01-.09 0c-.18-.05-.36-.07-.54-.07-.16 0-.34.03-.52.06-.02 0-.04.01-.05 0-.02-.01-.03-.03-.05-.05zm5.4-5.4 5.81-5.81c.81-.81 1.21-1.21 1.67-1.36.39-.12.81-.12 1.21 0 .47.15.87.55 1.67 1.36l1.26 1.26-4.14 6.4c-.01.02-.02.03-.04.05s-.06.01-.09 0c-.66-.2-1.38-.06-1.92.37-.03.03-.07.01-.1 0-.53-.24-4.73-2.01-5.33-2.27zm12.5-3.67 3.82 3.82-.92 5.7v.02c0 .01 0 .03-.01.04-.01.02-.03.02-.05.03-.2.06-.38.15-.55.27-.01.01-.01.01-.02.02s-.02.02-.04.02c-.01 0-.03 0-.04-.01l-5.82-2.47-.01-.01c-.04-.02-.08-.03-.08-.07-.03-.32-.14-.64-.31-.91-.03-.05-.06-.09-.03-.14zm-3.93 8.6 5.45 2.31c.03.01.06.03.08.06.01.02.01.04 0 .06-.02.08-.03.17-.03.26v.15c0 .04-.04.05-.08.07h-.01c-.86.37-12.13 5.17-12.15 5.17s-.03 0-.05-.02c-.03-.03 0-.07.03-.11 0-.01.01-.01.01-.02l4.48-6.94.01-.01c.03-.04.06-.09.1-.09l.05.01c.1.01.19.03.28.03.68 0 1.31-.33 1.69-.9.01-.02.02-.03.03-.04.04-.01.08 0 .11.01zm-6.25 9.19 12.28-5.24s.02 0 .03.02c.07.07.12.11.18.15l.03.02c.02.01.05.03.05.06v.02l-1.05 6.46v.03c-.01.05-.01.11-.06.11-.57.04-1.08.36-1.37.85v.01c-.01.02-.03.05-.05.06s-.05.01-.07 0l-9.79-2.02c-.02-.02-.16-.53-.18-.53z" fill="url(#a)"/></svg>

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -1 +0,0 @@
<svg viewBox="0 0 360.27 79.35" xmlns="http://www.w3.org/2000/svg"><g fill="#fff"><path d="m52.16 4.07c-2.4-3.98-7.57-5.26-11.55-2.86-1.17.71-2.16 1.69-2.86 2.86l-11.86 20.31c18.43 9.2 30.6 27.48 31.98 48.04h-8.32c-1.38-17.62-11.98-33.19-27.86-40.94l-10.97 18.97c8.92 4 15.18 12.26 16.63 21.93h-19.12c-.75-.05-1.32-.71-1.27-1.46.01-.19.07-.37.15-.54l5.3-9.01c-1.79-1.5-3.85-2.66-6.05-3.42l-5.24 9.01c-2.28 3.9-.96 8.91 2.95 11.19.03.02.07.04.1.06 1.24.7 2.64 1.07 4.07 1.08h26.18c.98-12.21-4.49-24.04-14.42-31.2l4.16-7.21c12.54 8.61 19.6 23.22 18.56 38.4h22.18c1.05-23-10.21-44.83-29.57-57.3l8.41-14.41c.39-.65 1.23-.87 1.89-.49.96.52 36.57 62.65 37.23 63.37.37.66.13 1.49-.53 1.86-.21.12-.45.18-.7.17h-8.58c.11 2.29.11 4.58 0 6.86h8.61c4.57.03 8.29-3.65 8.32-8.22 0-.03 0-.06 0-.09 0-1.44-.38-2.86-1.12-4.11z"/><path d="m223.91 50.96-26.59-34.34h-6.63v46.04h6.72v-35.29l27.35 35.28h5.87v-46.04h-6.72zm-66.98-8.54h23.84v-5.98h-23.86v-13.86h26.9v-5.98h-33.75v46.05h34.09v-5.98h-27.24zm-28.03-5.84c-9.28-2.23-11.87-4-11.87-8.29 0-3.86 3.41-6.47 8.49-6.47 4.63.14 9.09 1.75 12.74 4.59l3.6-5.1c-4.62-3.62-10.35-5.53-16.22-5.41-9.12 0-15.48 5.41-15.48 13.1 0 8.29 5.41 11.15 15.24 13.55 8.76 2.02 11.44 3.89 11.44 8.09s-3.6 6.79-9.17 6.79c-5.54-.03-10.88-2.12-14.95-5.87l-4.05 4.85c5.22 4.49 11.89 6.95 18.77 6.94 9.87 0 16.22-5.32 16.22-13.53-.06-6.95-4.17-10.68-14.76-13.24zm223.62-19.97-13.86 21.62-13.76-21.62h-8.04l18.18 27.84v18.22h6.92v-18.43l18.31-27.62zm-116.45 6.24h15.08v39.82h6.92v-39.82h15.08v-6.23h-37.06zm69.08 21.84c6.95-1.93 10.81-6.79 10.81-13.75 0-8.85-6.47-14.41-16.9-14.41h-20.47v46.11h6.85v-16.55h11.62l11.68 16.58h8l-12.61-17.69zm-19.73-4.51v-17.48h12.92c6.74 0 10.59 3.19 10.59 8.72s-4.13 8.76-10.52 8.76z"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.9 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.9 KiB

View file

@ -1 +1 @@
<svg fill="#fff" viewBox="0 0 284 65" xmlns="http://www.w3.org/2000/svg"><path d="m37.59.25 36.95 64h-73.9z"/><path d="m129.97 5.25-27.71 48-27.71-48h10.39l17.32 30 17.32-30z"/><path d="m188.88 17.25v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10v14.8h-9v-34h9v9.2c0-5.08 5.91-9.2 13.2-9.2z"/><path d="m200.88 34.25c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10z"/><path d="m274.36 5.25h9v46h-9z"/><path d="m268.36 34.24c0-10.79-7.96-17.99-19-17.99s-19 7.2-19 18 8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5zm-28.45-3.49c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5z"/><path d="m141.68 16.25c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5z"/></svg>
<svg fill="#ffffff" viewBox="0 0 284 65" xmlns="http://www.w3.org/2000/svg"><path d="m37.59.25 36.95 64h-73.9z"/><path d="m129.97 5.25-27.71 48-27.71-48h10.39l17.32 30 17.32-30z"/><path d="m188.88 17.25v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10v14.8h-9v-34h9v9.2c0-5.08 5.91-9.2 13.2-9.2z"/><path d="m200.88 34.25c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10z"/><path d="m274.36 5.25h9v46h-9z"/><path d="m268.36 34.24c0-10.79-7.96-17.99-19-17.99-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5zm-28.45-3.49c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5z"/><path d="m141.68 16.25c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1 +1 @@
<svg viewBox="0 0 284 65" xmlns="http://www.w3.org/2000/svg"><path d="m37.59.25 36.95 64h-73.9z"/><path d="m129.97 5.25-27.71 48-27.71-48h10.39l17.32 30 17.32-30z"/><path d="m188.88 17.25v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10v14.8h-9v-34h9v9.2c0-5.08 5.91-9.2 13.2-9.2z"/><path d="m200.88 34.25c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10z"/><path d="m274.36 5.25h9v46h-9z"/><path d="m268.36 34.24c0-10.79-7.96-17.99-19-17.99s-19 7.2-19 18 8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5zm-28.45-3.49c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5z"/><path d="m141.68 16.25c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5z"/></svg>
<svg viewBox="0 0 284 65" xmlns="http://www.w3.org/2000/svg"><path d="m37.59.25 36.95 64h-73.9z"/><path d="m129.97 5.25-27.71 48-27.71-48h10.39l17.32 30 17.32-30z"/><path d="m188.88 17.25v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10v14.8h-9v-34h9v9.2c0-5.08 5.91-9.2 13.2-9.2z"/><path d="m200.88 34.25c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10z"/><path d="m274.36 5.25h9v46h-9z"/><path d="m268.36 34.24c0-10.79-7.96-17.99-19-17.99-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5zm-28.45-3.49c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5z"/><path d="m141.68 16.25c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

11
.github/extract-artifacts.sh vendored Executable file
View file

@ -0,0 +1,11 @@
cd artifacts
mkdir -p ../tmp/packages
mv * ../tmp/packages
cd ../tmp
tar -cvzpf artifacts.tar.gz *
mv artifacts.tar.gz ../artifacts.tar.gz
cd ..
tar -xvzpf artifacts.tar.gz
rm -rf artifacts
rm -rf tmp
rm -f artifacts.tar.gz

22
.github/labeler.yml vendored
View file

@ -1,37 +1,37 @@
# See https://github.com/actions/labeler
'pkg: example':
example:
- examples/**/*
'🚨 action':
- .github/workflows/**
'pkg: astro':
core:
- packages/astro/**
'pkg: create-astro':
create-astro:
- packages/create-astro/**
'feat: markdown':
markdown:
- packages/markdown/**
'pkg: integration':
integration:
- packages/integrations/**
'pkg: lit':
framework-lit:
- packages/integrations/lit/**
'pkg: preact':
framework-preact:
- packages/integrations/preact/**
'pkg: react':
framework-react:
- packages/integrations/react/**
'pkg: solid':
framework-solid:
- packages/integrations/solid/**
'pkg: svelte':
framework-svelte:
- packages/integrations/svelte/**
'pkg: vue':
framework-vue:
- packages/integrations/vue/**

View file

@ -1,5 +1,5 @@
import { build } from 'esbuild';
import { existsSync } from 'node:fs';
import { existsSync } from 'fs';
const CLIENT_RUNTIME_PATH = 'packages/astro/src/runtime/client/';
@ -23,9 +23,7 @@ export default async function checkBundleSize({ github, context }) {
...context.repo,
pull_number: PR_NUM,
});
const clientRuntimeFiles = files.filter((file) => {
return file.filename.startsWith(CLIENT_RUNTIME_PATH) && file.status !== 'removed'
});
const clientRuntimeFiles = files.filter(({ filename }) => filename.startsWith(CLIENT_RUNTIME_PATH));
if (clientRuntimeFiles.length === 0) return;
const table = [

View file

@ -1,105 +0,0 @@
name: Benchmark
on:
issue_comment:
types: [created]
workflow_dispatch:
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
FORCE_COLOR: true
jobs:
benchmark:
if: ${{ github.repository_owner == 'withastro' && github.event.issue.pull_request && startsWith(github.event.comment.body, '!bench') }}
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
PR-BENCH: ${{ steps.benchmark-pr.outputs.BENCH_RESULT }}
MAIN-BENCH: ${{ steps.benchmark-main.outputs.BENCH_RESULT }}
steps:
# https://github.com/actions/checkout/issues/331#issuecomment-1438220926
- uses: actions/checkout@v3
with:
persist-credentials: false
ref: refs/pull/${{ github.event.issue.number }}/head
- name: Setup PNPM
uses: pnpm/action-setup@v2
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: "pnpm"
- name: Install dependencies
run: pnpm install
- name: Build Packages
run: pnpm run build
- name: Get bench command
id: bench-command
env:
# protects from untrusted user input and command injection
COMMENT: ${{ github.event.comment.body }}
run: |
benchcmd=$(echo "$COMMENT" | grep '!bench' | awk -F ' ' '{print $2}')
echo "bench=$benchcmd" >> $GITHUB_OUTPUT
shell: bash
- name: Run benchmark
id: benchmark-pr
run: |
result=$(pnpm run --silent benchmark ${{ steps.bench-command.outputs.bench }})
processed=$(node ./benchmark/ci-helper.js "$result")
echo "BENCH_RESULT<<BENCHEOF" >> $GITHUB_OUTPUT
echo "### PR Benchmark" >> $GITHUB_OUTPUT
echo "$processed" >> $GITHUB_OUTPUT
echo "BENCHEOF" >> $GITHUB_OUTPUT
shell: bash
# main benchmark
- uses: actions/checkout@v3
with:
persist-credentials: false
ref: "main"
- name: Install
run: |
pnpm install
- name: Build Packages
run: pnpm run build
- name: Run benchmark
id: benchmark-main
run: |
result=$(pnpm run --silent benchmark ${{ steps.bench-command.outputs.bench }})
processed=$(node ./benchmark/ci-helper.js "$result")
echo "BENCH_RESULT<<BENCHEOF" >> $GITHUB_OUTPUT
echo "### Main Benchmark" >> $GITHUB_OUTPUT
echo "$processed" >> $GITHUB_OUTPUT
echo "BENCHEOF" >> $GITHUB_OUTPUT
shell: bash
output-benchmark:
if: ${{ github.repository_owner == 'withastro' && github.event.issue.pull_request && startsWith(github.event.comment.body, '!bench') }}
needs: [benchmark]
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Comment PR
uses: peter-evans/create-or-update-comment@v2
continue-on-error: true
with:
issue-number: ${{ github.event.issue.number }}
body: |
${{ needs.benchmark.outputs.PR-BENCH }}
${{ needs.benchmark.outputs.MAIN-BENCH }}
edit-mode: replace

View file

@ -1,88 +0,0 @@
name: Check mergeability
on: pull_request
permissions:
pull-requests: write
checks: write
statuses: write
jobs:
check:
runs-on: ubuntu-latest
steps:
- name: Check if there is already a block on this PR
id: blocked
uses: actions/github-script@v6
env:
issue_number: ${{ github.event.number }}
with:
script: |
const { data: reviews } = await github.rest.pulls.listReviews({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: process.env.issue_number,
});
for (const review of reviews) {
if (review.user.login === 'github-actions[bot]' && review.state === 'CHANGES_REQUESTED') {
return 'true'
}
}
return 'false'
result-encoding: string
- uses: actions/checkout@v3
if: steps.blocked.outputs.result != 'true'
with:
fetch-depth: 0
- name: Get changed files in the .changeset folder
id: changed-files
uses: tj-actions/changed-files@v35
if: steps.blocked.outputs.result != 'true'
with:
files: |
.changeset/**/*.md
- name: Check if any changesets contain minor changes
id: minor
if: steps.blocked.outputs.result != 'true'
run: |
echo "Checking for changesets marked as minor"
echo '::set-output name=found::false'
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
if grep -q "'astro': minor" "$file"; then
echo '::set-output name=found::true'
echo "$file has a minor release tag"
fi
done
- name: Add label
uses: actions/github-script@v6
if: steps.minor.outputs.found == 'true'
env:
issue_number: ${{ github.event.number }}
with:
script: |
github.rest.issues.addLabels({
issue_number: process.env.issue_number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['semver: minor']
});
- name: Change PR Status
uses: actions/github-script@v6
if: steps.minor.outputs.found == 'true'
env:
issue_number: ${{ github.event.number }}
with:
script: |
github.rest.pulls.createReview({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: process.env.issue_number,
event: 'REQUEST_CHANGES',
body: 'This PR is blocked because it contains a `minor` changeset. A reviewer will merge this at the next release if approved.'
});

View file

@ -1,50 +0,0 @@
name: Examples astro check
on:
workflow_dispatch:
push:
branches:
- main
merge_group:
pull_request:
paths:
- "examples/**"
- ".github/workflows/check.yml"
- "scripts/smoke/check.js"
- "packages/astro/src/@types/astro.ts"
env:
ASTRO_TELEMETRY_DISABLED: true
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
FORCE_COLOR: true
jobs:
check:
name: astro check
runs-on: ubuntu-latest
timeout-minutes: 7
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Setup PNPM
uses: pnpm/action-setup@v2
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
cache: "pnpm"
- name: Install dependencies
run: pnpm install
- name: Build
run: pnpm run build
- name: Status
run: git status
- name: astro check
run: pnpm run test:check-examples

View file

@ -1,137 +1,89 @@
name: CI
on:
workflow_dispatch:
push:
branches:
- main
merge_group:
pull_request:
paths-ignore:
- ".vscode/**"
- "**/*.md"
- ".github/ISSUE_TEMPLATE/**"
- '.vscode/**'
# Automatically cancel older in-progress jobs on the same branch
# Automatically cancel in-progress actions on the same branch
concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request_target' && github.head_ref || github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
FORCE_COLOR: true
ASTRO_TELEMETRY_DISABLED: true
# 7 GiB by default on GitHub, setting to 6 GiB
# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources
NODE_OPTIONS: --max-old-space-size=6144
jobs:
# Build primes out Turbo build cache and pnpm cache
build:
name: "Build: ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
timeout-minutes: 3
strategy:
matrix:
OS: [ubuntu-latest, windows-latest]
NODE_VERSION: [18]
fail-fast: true
steps:
# Disable crlf so all OS can share the same Turbo cache
# https://github.com/actions/checkout/issues/135
- name: Disable git crlf
run: git config --global core.autocrlf false
- name: Checkout
uses: actions/checkout@v3
- name: Setup PNPM
uses: pnpm/action-setup@v2
- name: Setup node@${{ matrix.NODE_VERSION }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.NODE_VERSION }}
cache: "pnpm"
- name: Install dependencies
run: pnpm install
# Only build in ubuntu as windows can share the build cache.
# Also only build in core repo as forks don't have access to the Turbo cache.
- name: Build Packages
if: ${{ matrix.os == 'ubuntu-latest' && github.repository_owner == 'withastro' }}
run: pnpm run build
# Lint can run in parallel with Build.
lint:
name: Lint
runs-on: ubuntu-latest
timeout-minutes: 5
needs: build
steps:
- name: Disable git crlf
run: git config --global core.autocrlf false
- name: Checkout
- name: Check out repository
uses: actions/checkout@v3
- name: Setup PNPM
uses: pnpm/action-setup@v2
uses: pnpm/action-setup@v2.2.1
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
cache: "pnpm"
node-version: 16
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build Packages
run: pnpm run build
- name: Status
run: git status
- name: Lint
# Lint autofix cannot run on forks, so just skip those! See https://github.com/wearerequired/lint-action/issues/13
- name: Lint (External)
if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.owner.login != github.repository_owner }}
run: pnpm run lint
- name: Format Check
run: pnpm run format --check
test:
name: "Test: ${{ matrix.os }} (node@${{ matrix.NODE_VERSION }})"
runs-on: ${{ matrix.os }}
timeout-minutes: 25
needs: build
strategy:
matrix:
OS: [ubuntu-latest]
NODE_VERSION: [18, 20.5.1]
include:
- os: macos-latest
NODE_VERSION: 18
- os: windows-latest
NODE_VERSION: 18.17.1
fail-fast: false
# Otherwise, run lint autofixer
- name: Lint
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.owner.login == github.repository_owner }}
uses: wearerequired/lint-action@v1.11.1
env:
NODE_VERSION: ${{ matrix.NODE_VERSION }}
steps:
- name: Disable git crlf
run: git config --global core.autocrlf false
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
eslint: true
prettier: false
auto_fix: true
git_name: github-actions[bot]
git_email: github-actions[bot]@users.noreply.github.com
commit_message: 'chore(lint): ${linter} fix'
github_token: ${{ secrets.GITHUB_TOKEN }}
neutral_check_on_warning: true
# Checks that the formatter runs successfully on all files
# In the future, we may have this fail PRs on unformatted code
- name: Format Check
run: yarn format --list
# Build installs all devDependencies and runs our full build pipeline.
# We upload all `dist/` artifacts to GitHub, which can be shared by all dependent jobs.
build:
name: Build Packages
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup PNPM
uses: pnpm/action-setup@v2
uses: pnpm/action-setup@v2.2.1
- name: Setup node@${{ matrix.NODE_VERSION }}
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.NODE_VERSION }}
cache: "pnpm"
node-version: 16
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
@ -139,112 +91,204 @@ jobs:
- name: Build Packages
run: pnpm run build
- name: Upload Package Artifacts
uses: actions/upload-artifact@v3
with:
name: artifacts
path: |
packages/*/dist/**
packages/*/*/dist/**
packages/webapi/mod.js
packages/webapi/mod.js.map
if-no-files-found: error
# Test depends on Build's output, which allows us to skip any build process!
test:
name: 'Test: ${{ matrix.os }} (node@${{ matrix.node_version }})'
runs-on: ${{ matrix.os }}
env:
ASTRO_TELEMETRY_DISABLED: true
strategy:
matrix:
os: [ubuntu-latest]
node_version: [14, 16]
include:
- os: windows-latest
node_version: 16
- os: macos-latest
node_version: 16
fail-fast: false
needs:
- build
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup PNPM
uses: pnpm/action-setup@v2.2.1
- name: Setup node@${{ matrix.node_version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node_version }}
cache: 'pnpm'
- name: Use Deno
uses: denoland/setup-deno@v1
with:
deno-version: v1.19.3
- name: Download Build Artifacts
uses: actions/download-artifact@v3
- name: Extract Artifacts
run: ./.github/extract-artifacts.sh
- name: Install dependencies
run: pnpm install
- name: Test
run: pnpm run test
e2e:
name: "Test (E2E): ${{ matrix.os }} (node@${{ matrix.NODE_VERSION }})"
name: 'E2E: ${{ matrix.os }} (node@${{ matrix.node_version }})'
runs-on: ${{ matrix.os }}
timeout-minutes: 25
needs: build
env:
ASTRO_TELEMETRY_DISABLED: true
strategy:
matrix:
OS: [ubuntu-latest, windows-latest]
NODE_VERSION: [18.17.1]
os: [ubuntu-latest]
node_version: [14, 16]
include:
- os: windows-latest
node_version: 16
- os: macos-latest
node_version: 16
fail-fast: false
env:
NODE_VERSION: ${{ matrix.NODE_VERSION }}
needs:
- build
steps:
- name: Disable git crlf
run: git config --global core.autocrlf false
- name: Checkout
uses: actions/checkout@v3
- name: Setup PNPM
uses: pnpm/action-setup@v2
uses: pnpm/action-setup@v2.2.1
- name: Setup node@${{ matrix.NODE_VERSION }}
- name: Setup node@${{ matrix.node_version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.NODE_VERSION }}
cache: "pnpm"
node-version: ${{ matrix.node_version }}
cache: 'pnpm'
- name: Download Build Artifacts
uses: actions/download-artifact@v3
- name: Extract Artifacts
run: ./.github/extract-artifacts.sh
- name: Install dependencies
run: pnpm install
- name: Build Packages
run: pnpm run build
- name: Test
run: pnpm run test:e2e
smoke:
name: "Test (Smoke): ${{ matrix.os }} (node@${{ matrix.NODE_VERSION }})"
name: 'Test (Smoke) ${{ matrix.os }}'
runs-on: ${{ matrix.os }}
timeout-minutes: 25
needs: build
strategy:
matrix:
OS: [ubuntu-latest, windows-latest]
NODE_VERSION: [18]
env:
NODE_VERSION: ${{ matrix.NODE_VERSION }}
os: [windows-latest, ubuntu-latest]
needs:
- build
steps:
- name: Disable git crlf
run: git config --global core.autocrlf false
- name: Checkout
uses: actions/checkout@v3
with:
submodules: 'recursive'
- name: Update submodules
run: git submodule update --remote
- name: Setup PNPM
uses: pnpm/action-setup@v2
uses: pnpm/action-setup@v2.2.1
- name: Setup node@${{ matrix.NODE_VERSION }}
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.NODE_VERSION }}
cache: "pnpm"
node-version: 14
cache: 'pnpm'
- name: Checkout docs
uses: actions/checkout@v3
with:
repository: withastro/docs
path: smoke/docs
- name: Download Build Artifacts
uses: actions/download-artifact@v3
- name: Extract Artifacts
run: ./.github/extract-artifacts.sh
- name: Install dependencies
run: pnpm install --no-frozen-lockfile
# Reset lockfile changes so that Turbo can reuse the old build cache
- name: Reset lockfile changes
run: git reset --hard
- name: Build Packages
run: pnpm run build
- name: Remove docs translations except for English and Korean
run: find smoke/docs/src/content/docs ! -name 'en' ! -name 'ko' -type d -mindepth 1 -maxdepth 1 -exec rm -rf {} +
- name: Check if docs changed
id: changes
uses: dorny/paths-filter@v2
with:
filters: |
docs:
- 'packages/integrations/*/README.md'
- 'packages/astro/src/@types/astro.ts'
- 'packages/astro/src/core/errors/errors-data.ts'
- name: Build autogenerated docs pages from current astro branch
if: ${{ steps.changes.outputs.docs == 'true' }}
run: cd smoke/docs && pnpm docgen && pnpm docgen:errors && pnpm docgen:integrations
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SOURCE_REPO: ${{ github.event.pull_request.head.repo.full_name || github.event.repository.full_name }}
SOURCE_BRANCH: ${{ github.head_ref || github.ref_name }}
- name: Test
run: pnpm run test:smoke
- name: Memory Leak Test
run: |
node ./scripts/memory/mk.js
node --expose-gc ./scripts/memory/index.js --ci
# Changelog can only run _after_ build.
# We download all `dist/` artifacts from GitHub to skip the build process.
changelog:
name: Changelog PR or Release
if: ${{ (github.ref_name == 'main' || github.head_ref == 'next') && github.repository_owner == 'withastro' }}
needs: [build]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
env:
SKIP_OG: true
PUBLIC_TWO_LANG: true
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Setup PNPM
uses: pnpm/action-setup@v2.2.1
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 16
cache: 'pnpm'
- name: Download Build Artifacts
uses: actions/download-artifact@v3
- name: Extract Artifacts
run: ./.github/extract-artifacts.sh
- name: Install dependencies
run: pnpm install
- name: Create Release Pull Request or Publish
id: changesets
uses: changesets/action@v1
with:
# Note: pnpm install after versioning is necessary to refresh lockfile
version: pnpm run version
publish: pnpm exec changeset publish
commit: '[ci] release'
title: '[ci] release'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Generate Notification
id: notification
if: steps.changesets.outputs.published == 'true'
run: message=$(node scripts/notify/index.js '${{ steps.changesets.outputs.publishedPackages }}') && echo ::set-output name=message::${message//$'\n'/'%0A'}
- name: Discord Notification
if: steps.changesets.outputs.published == 'true'
id: discord-notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.2
with:
args: ${{ steps.notification.outputs.message }}

View file

@ -1,44 +0,0 @@
name: Cleanup cache
on:
schedule:
- cron: "0 11 * * *"
pull_request:
types:
- closed
jobs:
cleanup:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v3
- name: Cleanup caches older than 5 days
if: github.event_name == 'schedule'
uses: MyAlbum/purge-cache@v2
with:
max-age: 432000
# https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#force-deleting-cache-entries
- name: Cleanup on PR close
if: github.event_name == 'pull_request'
run: |
gh extension install actions/gh-actions-cache
REPO=${{ github.repository }}
BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge"
echo "Fetching list of cache key"
cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH -L 100 | cut -f 1 )
## Setting this to not fail the workflow while deleting cache keys.
set +e
echo "Deleting caches..."
for cacheKey in $cacheKeysForPR
do
gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
done
echo "Done"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -1,15 +1,31 @@
name: Format
name: 'Format Code'
on:
workflow_dispatch:
push:
branches:
- main
jobs:
prettier:
if: github.repository_owner == 'withastro'
uses: withastro/automation/.github/workflows/format.yml@main
format:
runs-on: ubuntu-latest
steps:
- name: Check out code using Git
uses: actions/checkout@v3
with:
command: "format:ci"
secrets: inherit
ref: ${{ github.head_ref }}
- name: Setup PNPM
uses: pnpm/action-setup@v2.2.1
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 16
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Format code
run: pnpm run format:ci
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: '[ci] format'
branch: ${{ github.head_ref }}

View file

@ -1,30 +0,0 @@
name: Issue Labeled
on:
issues:
types: [labeled]
jobs:
reply-labeled:
if: github.repository == 'withastro/astro'
runs-on: ubuntu-latest
steps:
- name: remove triage
if: contains(github.event.label.description, '(priority)') && contains(github.event.issue.labels.*.name, 'needs triage')
uses: actions-cool/issues-helper@v3
with:
actions: "remove-labels"
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
labels: "needs triage"
- name: needs repro
if: github.event.label.name == 'needs repro'
uses: actions-cool/issues-helper@v3
with:
actions: "create-comment, remove-labels"
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
Hello @${{ github.event.issue.user.login }}. Please provide a [minimal reproduction](https://stackoverflow.com/help/minimal-reproducible-example) using a GitHub repository or [StackBlitz](https://astro.new). Issues marked with `needs repro` will be closed if they have no activity within 3 days.
labels: "needs triage"

View file

@ -1,18 +0,0 @@
name: Close Issues (needs repro)
on:
schedule:
- cron: "0 0 * * *"
jobs:
close-issues:
if: github.repository == 'withastro/astro'
runs-on: ubuntu-latest
steps:
- name: needs repro
uses: actions-cool/issues-helper@v3
with:
actions: "close-issues"
token: ${{ secrets.GITHUB_TOKEN }}
labels: "needs repro"
inactive-day: 3

View file

@ -1,23 +0,0 @@
name: Label issues
on:
issues:
types:
- reopened
- opened
jobs:
label_issues:
runs-on: ubuntu-latest
if: github.repository == 'withastro/astro'
permissions:
issues: write
steps:
- uses: actions/github-script@v6
with:
script: |
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ["needs triage"]
})

34
.github/workflows/issue.yml vendored Normal file
View file

@ -0,0 +1,34 @@
name: Auto Assign Issues to Project
on:
issues:
types: [opened]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
auto_assign_issues:
runs-on: ubuntu-latest
name: Auto-assign new issues to projects
steps:
- name: Assign Bugs to the Bug Tracker
uses: srggrs/assign-one-project-github-action@1.3.1
if: github.event.action == 'opened' && startsWith(github.event.issue.title, '🐛 BUG:')
with:
project: 'https://github.com/withastro/astro/projects/2'
column_name: 'Needs Triage'
- name: Assign RFCs to the RFC Tracker
uses: srggrs/assign-one-project-github-action@1.3.1
if: github.event.action == 'opened' && startsWith(github.event.issue.title, '💡 RFC:')
with:
project: 'https://github.com/withastro/astro/projects/3'
column_name: 'Discussing'
- name: Assign RFCs to the Docs Tracker
uses: srggrs/assign-one-project-github-action@1.3.1
if: github.event.action == 'opened' && startsWith(github.event.issue.title, '📘 DOC:')
with:
project: 'https://github.com/withastro/astro/projects/5'
column_name: 'TODO'

View file

@ -1,7 +1,6 @@
name: Main Checks
on:
workflow_dispatch:
push:
branches:
- main
@ -17,12 +16,22 @@ concurrency:
jobs:
congrats:
name: congratsbot
if: ${{ github.repository_owner == 'withastro' && github.event.head_commit.message != '[ci] format' }}
uses: withastro/automation/.github/workflows/congratsbot.yml@main
with:
EMOJIS: '🎉,🎊,🧑‍🚀,🥳,🙌,🚀,👏,<:houston_golden:1068575433647456447>,<:astrocoin:894990669515489301>,<:astro_pride:1130501345326157854>'
secrets:
if: ${{ github.repository_owner == 'withastro' }}
runs-on: ubuntu-latest
steps:
- id: setup
env:
MESSAGE: ${{ github.event.commits[0].message }}
run: |
TRIMMED=$(echo "$MESSAGE" | sed '1!d;q')
echo "::set-output name=COMMIT_MSG::${TRIMMED}"
- name: Send a Discord notification when a PR is merged
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_CONGRATS }}
# DISCORD_AVATAR: ${{ github.event.pull_request.user.avatar_url }}
uses: Ilshidur/action-discord@0.3.2
with:
args: "**Merged!** ${{ github.event.commits[0].author.name }}: [`${{ steps.setup.outputs.COMMIT_MSG }}`](<https://github.com/withastro/astro/commit/${{ github.event.commits[0].id }}>)"
check_for_update:
name: Check for Updates
@ -33,13 +42,13 @@ jobs:
- uses: actions/checkout@v3
- name: Setup PNPM
uses: pnpm/action-setup@v2
uses: pnpm/action-setup@v2.2.1
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
cache: "pnpm"
node-version: 16
cache: 'pnpm'
- name: Install dependencies
run: pnpm install

View file

@ -1,13 +1,69 @@
name: Nightly
name: 'Nightly'
on:
schedule:
# Run every Monday at 12:00 UTC
- cron: "0 12 * * 1"
# * is a special character in YAML so you have to quote this string
- cron: '0 12 * * *'
workflow_dispatch:
jobs:
stat:
if: github.repository_owner == 'withastro'
runs-on: ubuntu-latest
steps:
- name: Check out code using Git
uses: actions/checkout@v3
- name: Setup PNPM
uses: pnpm/action-setup@v2.2.1
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 16
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Collect stats
run: node scripts/stats/index.js
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: '[ci] collect stats'
branch: ${{ github.head_ref }}
lockfile:
if: github.repository_owner == 'withastro'
uses: withastro/automation/.github/workflows/lockfile.yml@main
secrets: inherit
runs-on: ubuntu-latest
steps:
- name: Check out code using Git
uses: actions/checkout@v3
- name: Setup PNPM
uses: pnpm/action-setup@v2.2.1
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 16
cache: 'pnpm'
- name: Upgrade recursive
run: pnpm upgrade --recursive
- name: Create Pull Request
id: createpr
uses: peter-evans/create-pull-request@v3
with:
branch: ci/lockfile
token: ${{ secrets.NIGHTLY_PERSONAL_GITHUB_TOKEN }}
commit-message: '[ci] update lockfile'
title: '[ci] update lockfile'
body: >
This PR is auto-generated by a nightly GitHub action.
It should automatically be merged if tests pass.

View file

@ -1,73 +0,0 @@
name: Release
on:
push:
branches:
- main
- "1-legacy"
- "2-legacy"
- next
defaults:
run:
shell: bash
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
FORCE_COLOR: true
jobs:
changelog:
name: Changelog PR or Release
if: ${{ github.repository_owner == 'withastro' }}
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write
steps:
- uses: actions/checkout@v3
- name: Setup PNPM
uses: pnpm/action-setup@v2
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
cache: "pnpm"
- name: Install dependencies
run: pnpm install
- name: Build Packages
run: pnpm run build
- name: Create Release Pull Request or Publish
id: changesets
uses: changesets/action@v1
with:
# Note: pnpm install after versioning is necessary to refresh lockfile
version: pnpm run version
publish: pnpm exec changeset publish
commit: "[ci] release"
title: "[ci] release"
env:
# Needs access to push to main
GITHUB_TOKEN: ${{ secrets.FREDKBOT_GITHUB_TOKEN }}
# Needs access to publish to npm
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Generate Notification
id: notification
if: steps.changesets.outputs.published == 'true'
run: message=$(node scripts/notify/index.js '${{ steps.changesets.outputs.publishedPackages }}') && echo ::set-output name=message::${message//$'\n'/'%0A'}
- name: Discord Notification
if: steps.changesets.outputs.published == 'true'
id: discord-notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.2
with:
args: ${{ steps.notification.outputs.message }}

View file

@ -1,12 +1,9 @@
name: Scripts
on:
workflow_dispatch:
pull_request:
branches:
- "main"
paths:
- "packages/astro/src/runtime/client/**/*"
- 'main'
# Automatically cancel in-progress actions on the same branch
concurrency:
@ -32,13 +29,13 @@ jobs:
path: main
- name: Setup PNPM
uses: pnpm/action-setup@v2
uses: pnpm/action-setup@v2.2.1
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
cache: "pnpm"
node-version: 16
cache: 'pnpm'
- name: Install dependencies
run: pnpm install

View file

@ -1,109 +0,0 @@
name: Create a Snapshot Release
on:
workflow_dispatch:
issue_comment:
types: [created]
defaults:
run:
shell: bash
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
FORCE_COLOR: true
jobs:
snapshot-release:
name: Create a snapshot release of a pull request
if: ${{ github.repository_owner == 'withastro' && github.event.issue.pull_request && startsWith(github.event.comment.body, '!preview') }}
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
issues: write
pull-requests: write
steps:
- name: "Check if user has admin access (only admins can publish snapshot releases)."
uses: "lannonbr/repo-permission-check-action@2.0.0"
with:
permission: "admin"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Extract the snapshot name from comment body
id: getSnapshotName
uses: actions/github-script@v6
with:
script: |
const splitComment = context.payload.comment.body.split(' ');
splitComment.length !== 2 && (github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: 'Invalid comment format. Expected: "!preview <one-word-snapshot-name>"',
}) || core.setFailed('Invalid comment format. Expected: "!preview <one-word-snapshot-name>"'));
return splitComment[1].trim();
result-encoding: string
- name: resolve pr refs
id: refs
uses: eficode/resolve-pr-refs@main
with:
token: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@v3
with:
ref: ${{ steps.refs.outputs.head_ref }}
- name: Setup PNPM
uses: pnpm/action-setup@v2
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
registry-url: "https://registry.npmjs.org"
cache: "pnpm"
- name: Install dependencies
run: pnpm install
- name: Build Packages
run: pnpm run build
- name: Bump Package Versions
id: changesets
run: |
pnpm exec changeset version --snapshot ${{ steps.getSnapshotName.outputs.result }} > changesets.output.txt 2>&1
echo ::set-output name=result::`cat changesets.output.txt`
env:
# Needs access to run the script
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish Release
id: publish
run: |
pnpm run release --tag next--${{ steps.getSnapshotName.outputs.result }} > publish.output.txt 2>&1
echo "Release complete"
cat publish.output.txt
echo ::set-output name=result::`cat publish.output.txt`
env:
# Needs access to publish to npm
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Pull Request Notification
uses: actions/github-script@v6
env:
MESSAGE: ${{ steps.publish.outputs.result }}
with:
script: |
console.log(process.env.MESSAGE);
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '```\n' + process.env.MESSAGE + '\n```',
})

View file

@ -1,51 +0,0 @@
name: Hosted tests
on:
schedule:
- cron: '0 0 * * 0'
env:
ASTRO_TELEMETRY_DISABLED: true
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
VERCEL_ORG_ID: ${{ secrets.VERCEL_TEST_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_TEST_PROJECT_ID }}
VERCEL_TOKEN: ${{ secrets.VERCEL_TEST_TOKEN }}
FORCE_COLOR: true
jobs:
test:
name: Run tests
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Setup PNPM
uses: pnpm/action-setup@v2
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
cache: "pnpm"
- name: Install dependencies
run: pnpm install
- name: Build Astro
run: pnpm turbo build --filter astro --filter @astrojs/vercel
- name: Build test project
working-directory: ./packages/integrations/vercel/test/hosted/hosted-astro-project
run:
pnpm run build
- name: Deploy to Vercel
working-directory: ./packages/integrations/vercel/test/hosted/hosted-astro-project
run:
pnpm dlx vercel --prod --prebuilt
- name: Test
run:
pnpm run test:e2e:hosts

13
.gitignore vendored
View file

@ -3,17 +3,12 @@ dist/
*.tsbuildinfo
.DS_Store
.vercel
.netlify
_site/
scripts/smoke/*-main/
scripts/memory/project/src/pages/
benchmark/projects/
benchmark/results/
*.log
package-lock.json
.turbo/
.eslintcache
.pnpm-store
# ignore top-level vscode settings
/.vscode/settings.json
@ -27,11 +22,3 @@ packages/integrations/**/.netlify/
# exclude IntelliJ/WebStorm stuff
.idea
# ignore content collection generated files
packages/**/test/**/fixtures/**/.astro/
packages/**/test/**/fixtures/**/env.d.ts
packages/**/e2e/**/fixtures/**/.astro/
packages/**/e2e/**/fixtures/**/env.d.ts
examples/**/.astro/
examples/**/env.d.ts

8
.gitmodules vendored Normal file
View file

@ -0,0 +1,8 @@
[submodule "smoke/docs"]
path = smoke/docs
url = git@github.com:withastro/docs.git
branch = main
[submodule "smoke/astro.build"]
path = smoke/astro.build
url = git@github.com:withastro/astro.build.git
branch = main

8
.gitpod.Dockerfile vendored Normal file
View file

@ -0,0 +1,8 @@
FROM gitpod/workspace-node
# Install latest pnpm
RUN pnpm i -g pnpm
# Install deno in gitpod
RUN curl -fsSL https://deno.land/x/install/install.sh | sh
RUN /home/gitpod/.deno/bin/deno completions bash > /home/gitpod/.bashrc.d/90-deno && echo 'export DENO_INSTALL="/home/gitpod/.deno"' >> /home/gitpod/.bashrc.d/90-deno && echo 'export PATH="$DENO_INSTALL/bin:$PATH"' >> /home/gitpod/.bashrc.d/90-deno

View file

@ -1,11 +1,9 @@
---
image:
file: .gitpod.Dockerfile
# Commands to start on workspace startup
tasks:
- before: |
# Get latest pnpm version, in case the custom docker image was not updated
# Until this issue gets resolved - https://github.com/gitpod-io/gitpod/issues/12551
curl -fsSL https://get.pnpm.io/install.sh | SHELL=`which bash` bash -
init: |
- init: |
pnpm install
pnpm run build
command: |
@ -16,7 +14,7 @@ vscode:
- esbenp.prettier-vscode
- dbaeumer.vscode-eslint
ports:
- port: 4321
- port: 3000
onOpen: open-preview
github:
prebuilds:

View file

@ -3,9 +3,6 @@
# Convert context URL to an array
mapfile -t CONTEXT_URL_ITEMS < <(echo "$GITPOD_WORKSPACE_CONTEXT_URL" | tr '/' '\n')
# Install latest pnpm
curl -fsSL https://get.pnpm.io/install.sh | SHELL=`which bash` bash -
# Check if Gitpod started from a specific example directory in the repository
if [ "${CONTEXT_URL_ITEMS[7]}" = "examples" ]; then
EXAMPLE_PROJECT=${CONTEXT_URL_ITEMS[8]}
@ -18,9 +15,9 @@ else
fi
# Wait for VSCode to be ready (port 23000)
gp ports await 23000 > /dev/null 2>&1
gp await-port 23000 > /dev/null 2>&1
echo "Loading example project: $EXAMPLE_PROJECT"
echo "Loading example project:" $EXAMPLE_PROJECT
# Go to the requested example project
cd "$GITPOD_REPO_ROOT"/examples/"$EXAMPLE_PROJECT" || exit

25
.npmrc
View file

@ -2,13 +2,20 @@
prefer-workspace-packages=true
link-workspace-packages=true
save-workspace-protocol=false # This prevents the examples to have the `workspace:` prefix
auto-install-peers=false
# `github-slugger` is used by `vite-plugin-markdown-legacy`.
# Temporarily hoist this until we remove the feature.
public-hoist-pattern[]=github-slugger
# Vite's esbuild optimizer has trouble optimizing `@astrojs/lit/client-shim.js`
# which imports this dependency.
public-hoist-pattern[]=@webcomponents/template-shadowroot
# There's a lit dependency duplication somewhere causing multiple Lit versions error.
public-hoist-pattern[]=*lit*
shamefully-hoist=true
# TODO: We would like to move to individual opt-in hoisting, but Astro was not originally
# written with this in mind. In the future, it would be good to hoist individual packages only.
# public-hoist-pattern[]=autoprefixer
# public-hoist-pattern[]=astro
# public-hoist-pattern[]=remark-*
# public-hoist-pattern[]=rehype-*
# public-hoist-pattern[]=react
# public-hoist-pattern[]=react-dom
# public-hoist-pattern[]=preact
# public-hoist-pattern[]=preact-render-to-string
# public-hoist-pattern[]=vue
# public-hoist-pattern[]=svelte
# public-hoist-pattern[]=solid-js
# public-hoist-pattern[]=lit
# public-hoist-pattern[]=@webcomponents/template-shadowroot

2
.nvmrc
View file

@ -1 +1 @@
18.14.1
14.18.1

View file

@ -1,6 +1,6 @@
# Benchmark artifacts
benchmark/projects/
benchmark/results/
# To be removed with ".astro" parsing is ready
# Also, be sure to remove "pluginSearchDirs" from config
**/*.astro
# Deep Directories
**/dist
@ -9,10 +9,14 @@ benchmark/results/
**/fixtures
**/vendor
**/.vercel
examples/docs/**/*.md
examples/blog/**/*.md
# Directories
.github
.changeset
# Files
README.md
packages/webapi/mod.d.ts
pnpm-lock.yaml

17
.prettierrc.json Normal file
View file

@ -0,0 +1,17 @@
{
"printWidth": 100,
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "es5",
"useTabs": true,
"overrides": [
{
"files": [".*", "*.json", "*.md", "*.toml", "*.yml"],
"options": {
"useTabs": false
}
}
],
"pluginSearchDirs": ["./assets"]
}

76
CODE_OF_CONDUCT.md Normal file
View file

@ -0,0 +1,76 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
- The use of sexualized language or imagery and unwelcome sexual attention or
advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic
address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
All complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
See [GOVERNANCE.md](GOVERNANCE.md#Moderation) for instructions on reporting a Code of Conduct violation and a full description of the review process.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq

View file

@ -7,17 +7,17 @@ We welcome contributions of any size and skill level. As an open source project,
## Quick Guide
### Prerequisites
### Prerequisite
```shell
node: "^>=18.14.1"
pnpm: "^8.6.12"
node: "^14.15.0 || >=16.0.0"
pnpm: "^7.0.0"
# otherwise, your build will fail
```
### Setting up your local repo
Astro uses pnpm workspaces, so you should **always run `pnpm install` from the top-level project directory**. Running `pnpm install` in the top-level project root will install dependencies for `astro`, and every package in the repo.
Astro uses pnpm workspaces, so you should **always run `pnpm install` from the top-level project directory.** running `pnpm install` in the top-level project root will install dependencies for `astro`, and every package in the repo.
```shell
git clone && cd ...
@ -31,23 +31,6 @@ In [#2254](https://github.com/withastro/astro/pull/2254) a `.git-blame-ignore-re
git config --local blame.ignoreRevsFile .git-blame-ignore-revs
```
To automatically handle merge conflicts in `pnpm-lock.yaml`, you should run the following commands locally.
```shell
pnpm add -g @pnpm/merge-driver
pnpm dlx npm-merge-driver install --driver-name pnpm-merge-driver --driver "pnpm-merge-driver %A %O %B %P" --files pnpm-lock.yaml
```
### Using GitHub Codespaces for development
To get started, create a codespace for this repository by clicking this 👇
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro)
Your new codespace will open in a web-based version of Visual Studio Code. All development dependencies will be preinstalled, and the tests will run automatically ensuring you've got a green base from which to start working.
**Note**: Dev containers is now an open spec which is supported by [GitHub Codespaces](https://github.com/codespaces) and [other supporting tools](https://containers.dev/supporting).
### Development
```shell
@ -57,27 +40,11 @@ pnpm run dev
pnpm run build
```
**How can I test my changes while contributing to the repository?**
During the development process, you may want to test your changes to ensure they are working as expected. Here are a few ways to do it:
1. Run any of the examples in the `/examples` folder. They are linked to use the local Astro source code, so you can see the effects of your changes.
```shell
pnpm --filter @example/minimal run dev
```
2. Write a test and run it. This is useful if you're making a specific fix and want to see if your changes are working as expected.
3. Create a separate project and use your local Astro through [`pnpm link`](https://pnpm.io/cli/link). This is helpful if you're making bigger changes and want to test them in a separate project.
Overall, it's up to personal preference which method to use. For smaller changes, using the examples folder may be sufficient. For larger changes, using a separate project may be more appropriate.
#### Debugging Vite
You can debug vite by prefixing any command with `DEBUG` like so:
```shell
```
DEBUG=vite:* astro dev # debug everything in Vite
DEBUG=vite:[name] astro dev # debug specific process, e.g. "vite:deps" or "vite:transform"
```
@ -87,12 +54,9 @@ DEBUG=vite:[name] astro dev # debug specific process, e.g. "vite:deps" or "vit
```shell
# run this in the top-level project root to run all tests
pnpm run test
# run only a few tests in the `astro` package, great for working on a single feature
# (example - `pnpm run test:match "cli"` runs `cli.test.js`)
# run only a few tests, great for working on a single feature
# (example - `pnpm run test:match "RSS"` runs `astro-rss.test.js`)
pnpm run test:match "$STRING_MATCH"
# run tests on another package
# (example - `pnpm --filter @astrojs/rss run test` runs `packages/astro-rss/test/rss.test.js`)
pnpm --filter $STRING_MATCH run test
```
#### E2E tests
@ -137,25 +101,22 @@ pnpm exec changeset
### Running benchmarks
We have benchmarks to keep performance under control. They are located in the `benchmarks` directory, and it exposes a CLI you can use to run them.
You can run all available benchmarks sequentially by running (from the project root):
We have benchmarks to keep performance under control. You can run these by running (from the project root):
```shell
pnpm run benchmark
pnpm run benchmark --filter astro
```
To run a specific benchmark only, you can add the name of the benchmark after the command:
Which will fail if the performance has regressed by **10%** or more.
To update the times cd into the `packages/astro` folder and run the following:
```shell
pnpm run benchmark memory
node test/benchmark/build.bench.js --save
node test/benchmark/dev.bench.js --save
```
Use `pnpm run benchmark --help` to see all available options.
To run these benchmarks in a PR on GitHub instead of using the CLI, you can comment `!bench`. The benchmarks will run on both the PR branch and the `main` branch, and the results will be posted as a new comment.
To run only a specific benchmark on CI, add its name after the command in your comment, for example, `!bench memory`.
Which will update the build and dev benchmarks.
## Code Structure
@ -168,7 +129,7 @@ Server-side rendering (SSR) can be complicated. The Astro package (`packages/ast
- `core/`: Code that executes **in the top-level scope** (in Node). Within, youll find code that powers the `astro build` and `astro dev` commands, as well as top-level SSR code.
- `runtime/`: Code that executes **in different scopes** (i.e. not in a pure Node context). Youll have to think about code differently here.
- `client/`: Code that executes **in the browser.** Astros partial hydration code lives here, and only browser-compatible code can be used.
- `server/`: Code that executes **inside Vites SSR.** Though this is a Node environment inside, this will be executed independently of `core/` and may have to be structured differently.
- `server/`: Code that executes **inside Vites SSR.** Though this is a Node environment inside, this will be executed independently from `core/` and may have to be structured differently.
- `vite-plugin-*/`: Any Vite plugins that Astro needs to run. For the most part, these also execute within Vite similar to `src/runtime/server/`, but its also helpful to think about them as independent modules. _Note: at the moment these are internal while theyre in development_
### Thinking about SSR
@ -181,24 +142,9 @@ There are 3 contexts in which code executes:
Understanding in which environment code runs, and at which stage in the process, can help clarify thinking about what Astro is doing. It also helps with debugging, for instance, if youre working within `src/core/`, you know that your code isnt executing within Vite, so you dont have to debug Vites setup. But you will have to debug vite inside `runtime/server/`.
## Branches
### `main`
Active Astro development happens on the [`main`](https://github.com/withastro/astro/tree/main) branch. `main` always reflects the latest code.
> **Note:**
> During certain periods, we put `main` into a [**prerelease**](https://github.com/changesets/changesets/blob/main/docs/prereleases.md#prereleases) state. Read more about [Releasing Astro](#releasing-astro).
### `latest`
The **stable** release of Astro can always be found on the [`latest`](https://github.com/withastro/astro/tree/latest) branch. `latest` is automatically updated every time we publish a stable (not prerelease) version of Astro.
By default, `create-astro` and [astro.new](https://astro.new) point to this branch.
## Releasing Astro
_Note: Only [core maintainers (L3+)](https://github.com/withastro/.github/blob/main/GOVERNANCE.md#level-3-l3---core) can release new versions of Astro._
_Note: Only [core maintainers (L3+)](https://github.com/withastro/astro/blob/main/GOVERNANCE.md#level-3-l3---core-maintainer) can release new versions of Astro._
The repo is set up with automatic releases, using the changeset GitHub action & bot.
@ -208,37 +154,30 @@ To release a new version of Astro, find the `Version Packages` PR, read it over,
Our release tool `changeset` has a feature for releasing "snapshot" releases from a PR or custom branch. These are npm package publishes that live temporarily, so that you can give users a way to test a PR before merging. This can be a great way to get early user feedback while still in the PR review process.
To run `changeset version` locally, you'll need to create a GitHub [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) and set it as a `GITHUB_TOKEN` environment variable.
To release a snapshot, run the following locally:
```shell
# Notes:
# - YYY should be a keyword to identify this release. Ex: `--snapshot routing` & `--tag next--routing`
# - Use npm/npx instead of pnpm, since npm handles registry login, authentication and publishing.
# - Adding GITHUB_TOKEN in the command adds that token to your bash history. Set a short expiration!
# Note: XXX should be a keyword to identify this release. Ex: `--snapshot routing` & `--tag next--routing`
# 1: Tag the new release versions
GITHUB_TOKEN=XXX npx changeset version --snapshot YYY
# 2: Review the diff, and make sure that you're not releasing more than you need to.
# 1:
pnpm exec changeset version --snapshot XXX
# 2: (Manual) review the diff, and make sure that you're not releasing more than you need to.
git checkout -- examples/
# 3: Release
npm run release --tag next--YYY
# 4: If you're satisfied, you can now throw out all local changes
# 3:
pnpm run release --tag next--XXX
# 4: (Manual) review the publish, and if you're happy then you can throw out all local changes
git reset --hard
```
By default, every package with a changeset will be released. If you only want to target a smaller subset of packages for release, you can consider clearing out the `.changesets` directory to replace all existing changesets with a single changeset of only the packages that you want to release. Just be sure not to commit or push this to `main`, since it will destroy existing changesets that you will still want to eventually release.
Full documentation: https://github.com/changesets/changesets/blob/main/docs/snapshot-releases.md
Full documentation: https://github.com/atlassian/changesets/blob/main/docs/snapshot-releases.md
### Releasing `astro@next` (aka "prerelease mode")
Sometimes, the repo will enter into "prerelease mode". In prerelease mode, our normal release process will publish npm versions under the `next` dist-tag, instead of the default `latest` tag. We do this from time-to-time to test large features before sharing them with the larger Astro audience.
While in prerelease mode, follow the normal release process to release `astro@next` instead of `astro@latest`. To release `astro@latest` instead, see [Releasing `astro@latest` while in prerelease mode](#releasing-astrolatest-while-in-prerelease-mode).
While in prerelease mode, follow the normal release process to release `astro@next` instead of `astro@latest`. To release `astro@latest` instead, see [Releasing `astro@latest` while in prerelease mode](#user-content-releasing-astrolatest-while-in-prerelease-mode).
Full documentation: https://github.com/changesets/changesets/blob/main/docs/prereleases.md
Full documentation: https://github.com/atlassian/changesets/blob/main/docs/prereleases.md
### Entering prerelease mode

40
FUNDING.md Normal file
View file

@ -0,0 +1,40 @@
# Astro Project Funding
_Last Updated: 02-09-2022_
## Raising Funds
Astro is an MIT licensed open source project and completely free to use. However, the amount of effort needed to maintain and develop new features for Astro is not sustainable without proper financial backing. We need your help to achieve this.
Learn more about sponsorship on our [Open Collective.](https://opencollective.com/astrodotbuild).
### Why Open Collective?
- **Full Transparency.** Everyone gets to see where money is coming from and where it's going.
- **Individual and Corporate Sponsors.** Open Collective makes it easy for both individuals and companies to sponsor open source projects.
- **Potential Tax Benefits.** Because funds are paid to the Open Source Collective, a 501(c)(6) organization in the U.S., there may be tax benefits for some donors (please check with your accountant).
- **Automatic Invoicing.** For corporate sponsors, Open Collective automatically generates and sends invoices for tracking purposes.
- **Open Participation.** Anyone can request reimbursement for funds spent helping the Astro project and Astro can pay out to anyone.
_List borrowed from [ESLint: "Funding ESLint's Future."](https://eslint.org/blog/2019/02/funding-eslint-future)_
## Distributing Funds
100% of money raised is invested back into the community. Every dollar spent **must** support and/or improve Astro in some way.
See all past expenses on our [Open Collective.](https://opencollective.com/astrodotbuild)
Below is a (non-exhaustive) list of how we plan to distribute raised funds:
- **Swag!** Creating stickers, t-shirts, etc. for sponsors and community members.
- **Improve documentation.**
- **Improve translations.**
- **Improve website.**
- **User research.**
- **Sponsoring conferences.**
- **Sponsoring community members to represent Astro at meetups, conferences, etc.**
- **Dedicated support for GitHub, Discord, Stack Overflow, etc.**
## Eligibility
**Employees of The Astro Technology Company are not eligible to receive funds from Open Collective.** These funds exist solely to serve the larger Astro community.

12
FUNDING.yml Normal file
View file

@ -0,0 +1,12 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: astrodotbuild
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

463
GOVERNANCE.md Normal file
View file

@ -0,0 +1,463 @@
# Governance
This document outlines the governance model for Astro. This includes detailed descriptions of different roles, nomination processes, code review processes, and Code of Conduct enforcement.
👉 **All community members must follow the [Code of Conduct (CoC)](CODE_OF_CONDUCT.md).**
Consequences for CoC violations are detailed in [Moderation](#moderation).
👉 **Want to trigger a vote, nomination, or perform some other action?**
Scroll down to [Playbook](#governance-playbook).
## Get Involved
**Anything that supports the Astro community is a valuable contribution!**
All types of contribution are meaningful. This can include code changes, type fixes, Discord activity, and even posting about Astro to your personal blog. No contribution is too small!
Anyone can become an Astro contributor (yes, even you!). Engineering ability is not required. Our goal is to recognize all contributors to the project regardless of skill, experience or background.
## Contributor Levels
We recognize different levels of contribution as four different **Contributor Levels.** Because each level comes with a new set of privileges and responsibilities, you may also see these levels referred to as **Contributor Roles**.
Contributor levels are available to **all members** of the Astro community, regardless of coding skill or experience.
Two important things that we look for in a contributor are:
- **Being here** - Everyone's time is valuable, and the fact that you're here and contributing to Astro is amazing! Thank you for being a part of this project with us.
- **Being a positive member of our community** - Go above and beyond our [Code of Conduct](CODE_OF_CONDUCT.md) and commit to healthy communication across pull requests, issue discussions, Discord conversations, and any interactions outside of our community (ex: no Twitter bullies allowed :)
All Contributor roles are granted for as long as the individual wishes to engage with the project.
Contributors can voluntarily leave the project at any time. See [Retiring a Role](#retiring-a-role-alumni) below for more information.
In extreme cases -- such as a Code of Conduct violation -- a role may be revoked by a project Steward at their discretion.
Each new Contributor level unlocks new privileges and responsibilities both on Discord and on GitHub. Below is a summary of each level.
### Level 1 - Contributor
Have you done something (big or small) to contribute to the health, success, or growth of Astro? **Congratulations, you're officially recognized as a contributor to the project!**
#### Examples of recognized contributions
- **GitHub:** Submitting a merged pull request.
- **GitHub:** Filing a detailed bug report or RFC.
- **GitHub:** Updating documentation or fixing a typo.
- Helping people on GitHub, Discord, etc.
- Answering questions on Stack Overflow, Twitter, etc.
- Blogging, Vlogging, Podcasting, and Livestreaming about Astro.
- This list is incomplete! Similar contributions are also recognized.
#### Privileges
- New role on [Discord](https://astro.build/chat): `@contributor`
- New name color on Discord: **light blue**.
- Invitations to contributor-only events, sticker drops, and the occasional swag drop.
#### Responsibilities
This role does not require any extra responsibilities nor time commitment. We hope you stick around and keep participating in our community!
If you're interested in reaching the next level and becoming a **Maintainer**, you can explore some of those responsibilities in the [next section](#level-2-l2---maintainer).
#### Nomination Process
You may self-nominate by sending the message `!contribute` in any Discord channel. If you do this, please share a second message with a link or description of your contribution so that people can recognize you for the contribution.
You may also be granted this role automatically if you are active and helpful on Discord.
### Level 2 (L2) - Maintainer
The **Maintainer** role is available to contributors who want to join the team and take part in the long-term maintenance and growth of Astro.
The Maintainer role is critical to the long-term health of Astro. Maintainers act as the first line of defense when it comes to new issues, pull requests and Discord activity. Maintainers are most likely the first people that a user will interact with on Discord or GitHub.
**Maintainers are not required to write code!** Some Maintainers spend most of their time inside of Discord, maintaining a healthy community there. Others work on technical documentation, support, or design.
**A Maintainer has moderation privileges!** All maintainers are trusted with the ability to help moderate our Discord and GitHub communities for things like spam. There is also a special (optional, opt-in) `@mods` role open to maintainers who are also interested in helping out when a community member reaches out for moderation help.
#### Recognized Contributions
There is no strict minimum number of contributions needed to reach this level, as long as you can show **sustained** involvement over some amount of time (at least a few months).
- **GitHub:** Submitting multiple non-trivial pull requests and RFCs
- **GitHub:** Reviewing multiple non-trivial pull requests and RFCs
- **Discord:** Supporting users in Discord, especially in the #support channel
- **Discord:** Active participation in RFC calls and other events
- **GitHub + Discord:** Triaging and confirming user issues
- This list is incomplete! Similar contributions are also recognized.
#### Privileges
- All privileges of the [Contributor role](#level-1---contributor), plus...
- Invitation to the `@maintainer` role on [Discord](https://astro.build/chat)
- Invitation to the private `#maintainers` channel on Discord.
- Invitation to the `withastro` organization on GitHub.
- Invitation to the `@maintainers` team on GitHub.
- New name color on Discord: **blue**.
- Ability to moderate Discord to remove spam, harmful speech, etc.
- Ability to join the `@mods` role on Discord (optional, opt-in).
- Ability to push branches directly to the `withastro` GitHub organization (personal forks no longer needed).
- Ability to review GitHub PRs.
- Ability to merge _some_ GitHub PRs.
- Ability to vote on _some_ initiatives (see [Voting](#voting) below).
#### Responsibilities
- Participate in the project as a team player.
- Bring a friendly, welcoming voice to the Astro community.
- Be active on Discord, especially in the #support channel.
- Triage new issues.
- Review pull requests.
- Merge some, non-trivial community pull requests.
- Merge your own pull requests (once reviewed and approved).
#### Nomination
- To be nominated, a nominee is expected to already be performing some of the responsibilities of a Maintainer.
- You can be nominated by any existing Maintainer (L2 or above).
- Once nominated, there will be a vote by existing Maintainers.
- See [vote rules & requirements](#voting) for info on how the vote works.
### Level 3 (L3) - Core
The **Core** role is available to community members who have a larger-than-usual impact on the Astro project and community. They are seen as leaders in the project and are listened to by the wider Astro community, often before they have even reached this level. A Core member is recognized for contributing a significant amount of time and energy to the project through issues, pull requests, bug fixes, implementing advanced enhancements/features, and/or actively posting on Discord.
Not every contributor will reach this level, and that's okay! L2 Maintainers still have significant responsibility and privileges within our community.
#### Privileges
- All privileges of the [Maintainer role](#level-2---maintainer), plus...
- `@core` role on [Discord](https://astro.build/chat)
- New name color on Discord: **yellow**.
- Invitation to the private `#core` channel on Discord.
- Invitation to the `core` team on GitHub.
- Ability to vote on most initiatives (see [Voting](#voting) below).
#### Responsibilities
- All of the responsibilities of L2, including...
- Ownership over specific part(s) of the project.
- Ownership over the long-term health and success of Astro.
- Leadership as a role-model to other maintainers and community members.
#### Nomination
- To be nominated, a nominee is expected to already be performing some of the responsibilities of a Core member.
- You can be nominated by any existing Core member (L3 or above).
- Once nominated, there will be a vote by existing Core members.
- See [vote rules & requirements](#voting) for info on how the vote works.
#### Special Membership Type: Core Residency
**Core Residency** is a special type of Core membership that is limited in the following way(s):
- No voting abilities.
- No nomination abilities.
- Can be revoked at any time by the project Steward.
Because of these limitations, this type of Core membership is useful for anyone who has been brought in to work on or contribute to the Astro project without rising through our normal contributor levels. For example: an Astro designer or developer advocate hired by The Astro Technology Company to assist the community could be nominated for a Core Residency role without having a previously earned contributor level.
A Core Residency nomination must still be approved through the normal Core nomination and voting process. During the nomination, the Project Steward will state that the nomination is for the Core Residency designation. The project Steward is the only one who can officially make this designation during the nomination process.
A Core Residency member can become a full Core member (with all limitations removed) through the normal Core nomination and voting procedure.
If a Core Residency member has their membership revoked, the project Steward may choose to impose a waiting period of some number of days, during which the member can not be re-nominated to become a full Core member.
### Level 4 - Project Steward
The **Steward** is an additional role bestowed to 1 (or more) Core member of the project.
The role of Steward is mainly an administrative one. Stewards control and maintain sensitive project assets, assist in resolving conflicts, and act as tiebreakers in the event of disagreements.
In extremely rare cases, a Steward can act unilaterally when they believe it is in the project's best interest and can prove that the issue cannot be resolved through normal governance procedure. The steward must publicly state their reason for unilateral action before taking it.
The project Steward is currently: **@FredKSchott**
#### Responsibilities
- Access to the [@astrodotbuild Twitter account](https://twitter.com/astrodotbuild)
- Administration privileges on the [astro GitHub org](https://github.com/snowpackjs)
- Administration privileges on the [astro Discord server](https://astro.build/chat)
- Publish access to the [`astro` npm package](https://www.npmjs.com/package/astro)
- Domain registrar and DNS access to `astro.build` and all other domains
- Administration access to the `astro.build` Vercel account
- Ability to initiate a [vote](GOVERNANCE.md#voting)
- Ability to veto [votes](GOVERNANCE.md#voting) and resolve voting deadlocks
- Define project direction and planning
- Ability to decide on moderation decisions
- Access to the `*@astro.build` email address
#### Nomination
- Stewards cannot be self-nominated.
- Only Core members are eligible.
- New Stewards will be added based on a unanimous vote by the existing Steward(s).
- In the event that someone is unreachable then the decision will be deferred.
## Other Roles
### Project Teams
Besides our contributor levels described above, there are additional roles and teams available that community members are welcome to join. Roles are a great way to organize around different projects and initiatives in our community. For example:
- `@team-docs` runs the `#docs` channel and organizes the growth and development of Astro documentation.
- `@i18n-gang` runs the `#docs-i18n` channel and organizes translations in several languages.
- `@support-squad` runs the `#support-threads` channel and helps anyone who needs help using Astro.
Many of these team roles can be browsed and joined automatically by visiting the `#manage-roles` channel in our Discord. Getting involved with a team is a great way to start contributing to Astro!
### Moderator
**Moderator** is a special role available to Maintainers (L2 and above). While all maintainers are granted permissions to moderate for bad behavior across our community, a Moderator actively takes on this the responsibility. For example, a community member may ping moderators (via the `@mods` role) to resolve spam posts or Code of Conduct violations.
Trivial tasks (like removing spam) can be acted on unilaterally by a Moderator. Other non-trivial tasks (like assisting with or resolving a Code of Conduct violation) should involve the entire Moderator team (and in some cases, the project Steward).
#### Privileges
- `@mods` role on [Discord](https://astro.build/chat)
- Invitation to the private `#moderators` channel on Discord
- Invitation to the `staff` team on GitHub.
#### Nomination
Any Maintainer (L2 and above) can self-nominate by messaging the project Steward (`@steward`) on Discord.
### Technical Steering Committee (TSC)
The **TSC** is a special role available to Core members (L3 and above). TSC members are responsible for the growth and maintenance of the Astro codebase.
TSC members are guardians over the Astro codebase. Their duty is to ensure code quality, correctness and security.
A TSC member guides the direction of the project and ensures a healthy future for the Astro codebase. TSC members are ultimately responsible for technical decision making when it comes to any changes to the Astro codebase.
A TSC member has significant sway in software design decisions. For this reason, coding experience is critical for this role. TSC membership is one of the only roles that requires a significant contribution history of code to the Astro project on GitHub.
#### Privileges
- `@tsc` role on [Discord](https://astro.build/chat)
- Invitation to the private `#tsc` channel on Discord
- Invitation to the `tsc` team on GitHub.
- Ability to merge all GitHub PRs.
- Ability to vote on RFCs and technical initiatives (see [Voting](#voting) below).
#### Responsibilities
- Participating in RFC discussions and technical meetings.
- Assisting with design and implementation of non-trivial GitHub PRs.
- Reviewing and merging larger, non-trivial PRs.
- Maintaining and improving overall codebase architecture.
- Tracking and ensuring progress of open pull requests.
- Mentoring and guiding other community contributors.
#### Nomination
- To be nominated, a nominee is expected to already be active in technical discussions and performing some of the responsibilities of a TSC member.
- You can be nominated by any existing Core member (L3 or above). Note: This includes all existing TSC members as well.
- Once nominated, there will be a vote by existing Core members.
- See [vote rules & requirements](#voting) for info on how this vote works.
### Staff
**Staff** is a special designation for employees of [The Astro Technology Company](https://astro.build/company).
#### Privileges
- `@staff` role on [Discord](https://astro.build/chat)
- New name color on Discord: **yellow**.
- Invitation to some private channels on Discord, at the discretion of the project Steward.
- Invitation to the `staff` team on GitHub.
Staff membership does not grant any additional abilities when it comes to voting and project governance. A Staff member is still eligible for other roles in the community and may still vote as defined by their other roles. For example, a Staff member who is also a part of `@core` will be able to vote as any other `@core` member would.
### Alumni
**Alumni** is a special designation for Maintainers (L2 and above) who have stepped away from the project and no longer contribute regularly. See [Retiring a Role](#retiring-a-role-alumni) below for more information.
#### Privileges
- `@alumni` role on [Discord](https://astro.build/chat)
- New name color on Discord: **light blue**.
- Invitation to the private `#alumni` channel on Discord.
## Retiring a Role (Alumni)
Contributor roles are granted for as long as the person wishes to engage with the project. However, over time an active community member may choose to step away from the Astro project to work on other things. Moving on from a project is a natural and well-understood part of any open source community, and we celebrate it!
**Alumni** is a special designation and role for any person who was once an active maintainer (L2 or above) but is now no longer actively involved. By retiring and joining Alumni you trade-in your current set of roles, privileges, and responsibilities for a new, special Alumni role (which comes with its own set of Privileges, as described above).
As a Maintainer (L2 or above) you can retire your role at any time by pinging the project Steward and requesting Alumni status. You can initiate this action yourself if you know ahead-of-time that you need to step away from the project. Or, if you have gone several months without interacting with the Astro community, the project Steward may actively reach out to you to discuss retiring as a way to make room for new contributors.
As an Alumni member, you are still a part of the Astro community and can continue to be a part of our Discord, GitHub, and anywhere else. You may also request to have your old roles reinstated at any time through the normal nomination & voting process for that role.
Rejoining the project as a contributor (L1 or above) will automatically remove you from the Alumni role.
# Governance Playbook
## Voting
Certain project decisions (like governance changes and membership nominations) require a vote. Below are the changes that require a vote, and the rules that govern that vote.
The project Steward may initiate a vote for any unlisted project decision. [General Rules](#general-rules) will apply, along with any addition rules provided at the steward's discretion. If this unlisted project decision is expected to be repeated in the future, voting rules should be agreed on and then added to this document.
### General Voting Rules
- Members may abstain from any vote.
- Members who do not vote within 3 days will automatically abstain.
- Stewards may reduce the 3 day automatic abstain for urgent decisions.
- Stewards reserve the right to veto approval with a publicly disclosed reason.
## Voting: Maintainer (L2) Nomination
This process kicks off once a valid nomination has been made. See ["Maintainer - Nomination Process"](#nomination-process) above for more details on nomination.
**Who can vote:** All Maintainers (L2 and above).
1. A vote thread should be created in Discord #maintainers channel (the private channel for all maintainers).
2. A vote thread can be created by any Maintainer, Core member, or the Steward.
3. Once a vote thread is created, existing Maintainers can discuss the nomination in private.
4. The normal 3 day voting & discussion window begins with the thread creation.
5. Voting can be done in the thread (visible to other voters) or in a private DM to the project Steward.
6. Once the vote is complete, the thread is deleted.
7. The vote must receive an overwhelming majority (70%+) to pass.
8. **If the vote passes:** the nominee will be made a Maintainer and all privileges will be made available to them.
9. **If the vote fails:** the project Steward is responsible for informing the nominee with constructive, actionable feedback. (Note: this is not required if the nomination was made in the `#core` channel, or if the nominee was otherwise not made aware of their nomination).
#### Draft message to send to accepted maintainer, informing them of the decision:
```
Hey ${NAME}!
**I have some exciting news — you have been awarded the role of Maintainer (L2 Contributor) in the Astro community!**
Some background: ${PERSON} nominated you for the role in the (private) #maintainers channel, and the consensus was overwhelmingly positive. Some quotes from the nomination thread that sum up the impact you've had so far:
- ...
- ...
- ...
We would be thrilled to have your help building the future of Astro. There is no required time commitment: you can continue to contribute as often or as little as you'd like. This is mainly a chance to recognize your contributions and give you more privileges in Discord and GitHub.
Let me know if youre interested in accepting this invitation. If so, well start getting your roles up to date. And if you have any questions, feel free to let me know.
Best,
${MY_NAME}
*PS: As a reminder, our Governance document describes the following privileges and responsibilities for the **L2 - Maintainer** role: https://github.com/withastro/astro/blob/main/GOVERNANCE.md*
```
## Voting: Core Member (L3) Nomination
This process kicks off once a valid nomination has been made. See ["Core Member - Nomination Process"](#nomination-process) above for more details on nomination.
**Who can vote:** All Core members (L3 and above).
1. A vote thread should be created in Discord `#core` channel (the private channel for Core members).
2. A vote thread can be created by any Core member, or the Steward.
3. Once a vote thread is created, existing Core members can discuss the nomination in private.
4. The normal 3 day voting & discussion window begins with the thread creation.
5. Voting can be done in the thread (visible to other voters) or in a private DM to the project Steward.
6. Once the vote is complete, the thread is deleted.
7. The vote must receive an overwhelming majority (70%+) to pass.
8. **If the vote passes:** the nominee will be made a Core Member and all privileges will be made available to them.
9. **If the vote fails:** the project Steward is responsible for informing the nominee with constructive, actionable feedback. (Note: this is not required if the nomination was made in the #core channel, or if the nominee was otherwise not made aware of their nomination).
#### Draft message to send to accepted maintainer, informing them of the decision:
```
Hey $NAME!
I have some exciting news—youve been nominated and accepted as a member of the Astro Core team! The Core team held a vote and overwhelmingly agree that you would be a great addition to the team. Congratulations! Thanks for all of your significant contributions to Astro to date and your continued dedication to this project and our community. We would be thrilled to have your help ensuring a healthy future for Astro!
Please let me know if youre interested in accepting this invitation. If so, well start getting your roles and permissions up to date.
As a reminder, our Governance document describes the following privileges and responsibilities for a **Core Member**:
#### Privileges
$COPY_AND_PASTE_FROM_ABOVE
#### Responsibilities
$COPY_AND_PASTE_FROM_ABOVE
```
## Voting: Governance Change
A vote is initiated once a pull request to the GOVERNANCE.md file is submitted by a Core Member.
If the pull request submitter is not a Core Member, the PR can be closed by any Maintainer without a vote. However, any Core Member may request a vote on that PR, in which case a vote is initiated.
**Who can vote:** Core members (L3 and above). All Maintainers are encouraged to discuss and voice their opinion in the pull request discussion. Core members should take the opinions of Maintainers into consideration when voting.
1. The pull request discussion thread is used to discuss the governance change.
2. The normal 3 day voting & discussion window begins with either the PR creation or the removal of `WIP:` from the PR title if the PR was created as a draft.
3. Voting can be done in the pull request via a review of either **Approve (For)** or **Change Requested (Against)**.
4. The vote must receive a simple majority (50%+) to pass.
5. **If the vote passes:** the PR is merged and the changes take effect immediately.
6. **If the vote fails:** the PR is closed and no change occurs.
## Voting: RFC Proposals
Astro features are discussed using a model called [Consensus-seeking decision-making](https://en.wikipedia.org/wiki/Consensus-seeking_decision-making). This model attempts to achieve consensus on all significant changes to Astro, but has a fallback voting procedure in place if consensus appears unattainable.
**Who can vote:** All [TSC](#technical-steering-committee-tsc) members.
1. Anyone can submit an RFC to suggest changes to Astro.
2. A trivial change can be discussed and approved entirely within the RFC GitHub issue, as long as there are no objections from Core or TSC members. This is not considered a formal vote.
3. A non-trivial, significant change should be discussed within the RFC and approved during an RFC meeting call. In some cases, an RFC may be approved outside of an RFC meeting using Pull Request reviews as a proxy for votes.
4. During an RFC meeting, the person leading the call will attempt to achieve consensus on the RFC proposal.
5. **If consensus is reached:** the RFC is approved.
6. **If consensus is not reached:** The RFC author and TSC members must make all reasonable attempts to resolve issues and reach consensus in GitHub or a follow-up RFC meeting. The process of reaching consensus can take time, and should not be rushed as long as all participants are making a reasonable effort to respond.
7. **If consensus still cannot be reached:** The project Steward may invoke [rough consensus](https://en.wikipedia.org/wiki/Rough_consensus) to resolve an RFC that has not achieved absolute consensus, as described below (borrowed from the [IETF](https://datatracker.ietf.org/doc/html/rfc2418)):
> Working groups make decisions through a "rough consensus" process. Astro consensus does not require that all participants agree although this is, of course, preferred. In general, the dominant view of the TSC shall prevail. (However, "dominance" is not to be determined on the basis of volume or persistence, but rather a more general sense of agreement). Consensus can be determined by a show of hands, humming, or any other means on which the TSC agrees (by rough consensus, of course). Note that 51% of the TSC does not qualify as "rough consensus" and 99% is better than rough. It is up to the project Steward to determine if rough consensus has been reached.
## Moderation
Outlined below is the process for Code of Conduct violation reviews.
### Reporting
Anyone may report a violation. Violations can be reported in the following ways:
- In private, via email to one or more stewards.
- In private, via direct message to a project steward on Discord.
- In public, via a GitHub comment (mentioning `@snowpackjs/maintainers`).
- In public, via the project Discord server (mentioning `staff`).
### Who gets involved?
Each report will be assigned reviewers. These will initially be all project [stewards](#stewards).
In the event of any conflict of interest - ie. stewards who are personally connected to a situation, they must immediately recuse themselves.
At request of the reporter and if deemed appropriate by the reviewers, another neutral third-party may be involved in the review and decision process.
### Review
If a report doesnt contain enough information, the reviewers will strive to obtain all relevant data before acting.
The reviewers will then review the incident and determine, to the best of their ability:
- What happened.
- Whether this event constitutes a Code of Conduct violation.
- Who, if anyone, was involved in the violation.
- Whether this is an ongoing situation.
The reviewers should aim to have a resolution agreed very rapidly; if not agreed within a week, they will inform the parties of the planned date.
### Resolution
Responses will be determined by the reviewers on the basis of the information gathered and of the potential consequences. It may include:
- taking no further action
- issuing a reprimand (private or public)
- asking for an apology (private or public)
- permanent ban from the GitHub org and Discord server
- revoked contributor status
---
Inspired by [ESLint](https://eslint.org/docs/6.0.0/maintainer-guide/governance), [Rome](https://github.com/rome/tools/blob/main/GOVERNANCE.md) and [Blitz](https://blitzjs.com/docs/maintainers).

View file

@ -1,7 +1,6 @@
![Build the web you want](.github/assets/banner.png 'Build the web you want')
<p align="center">
<br/>
<img src="assets/social/banner-minimal.png" alt="Astro logo">
<br/><br/>
<a href="https://astro.build">Astro</a> is a website build tool for the modern web &mdash;
<br/>
powerful developer experience meets lightweight output.
@ -10,30 +9,25 @@
## Install
The **recommended** way to install the latest version of Astro is by running the command below:
```bash
# Recommended!
npm create astro@latest
```
You can also install Astro **manually** by running this command instead:
```bash
# Manual:
npm install --save-dev astro
```
Looking for help? Start with our [Getting Started](https://docs.astro.build/en/getting-started/) guide.
Looking for quick examples? [Open a starter project](https://astro.new/) right in your browser.
## Documentation
Visit our [official documentation](https://docs.astro.build/).
Visit our [offical documentation](https://docs.astro.build/).
## Support
Having trouble? Get help in the official [Astro Discord](https://astro.build/chat).
## Contributing
**New contributors welcome!** Check out our [Contributors Guide](CONTRIBUTING.md) for help getting started.
@ -48,50 +42,84 @@ Join us on [Discord](https://astro.build/chat) to meet other maintainers. We'll
| [create-astro](packages/create-astro) | [![create-astro version](https://img.shields.io/npm/v/create-astro.svg?label=%20)](packages/create-astro/CHANGELOG.md) |
| [@astrojs/react](packages/integrations/react) | [![astro version](https://img.shields.io/npm/v/@astrojs/react.svg?label=%20)](packages/integrations/react/CHANGELOG.md) |
| [@astrojs/preact](packages/integrations/preact) | [![astro version](https://img.shields.io/npm/v/@astrojs/preact.svg?label=%20)](packages/integrations/preact/CHANGELOG.md) |
| [@astrojs/solid-js](packages/integrations/solid) | [![astro version](https://img.shields.io/npm/v/@astrojs/solid-js.svg?label=%20)](packages/integrations/solid/CHANGELOG.md) |
| [@astrojs/solid-js](packages/integrations/solid) | [![astro version](https://img.shields.io/npm/v/@astrojs/solid-js.svg?label=%20)](packages/integrations/solid-js/CHANGELOG.md) |
| [@astrojs/svelte](packages/integrations/svelte) | [![astro version](https://img.shields.io/npm/v/@astrojs/svelte.svg?label=%20)](packages/integrations/svelte/CHANGELOG.md) |
| [@astrojs/vue](packages/integrations/vue) | [![astro version](https://img.shields.io/npm/v/@astrojs/vue.svg?label=%20)](packages/integrations/vue/CHANGELOG.md) |
| [@astrojs/lit](packages/integrations/lit) | [![astro version](https://img.shields.io/npm/v/@astrojs/lit.svg?label=%20)](packages/integrations/lit/CHANGELOG.md) |
| [@astrojs/node](packages/integrations/node) | [![astro version](https://img.shields.io/npm/v/@astrojs/node.svg?label=%20)](packages/integrations/node/CHANGELOG.md) |
| [@astrojs/deno](packages/integrations/deno) | [![astro version](https://img.shields.io/npm/v/@astrojs/deno.svg?label=%20)](packages/integrations/deno/CHANGELOG.md) |
| [@astrojs/netlify](packages/integrations/netlify) | [![astro version](https://img.shields.io/npm/v/@astrojs/netlify.svg?label=%20)](packages/integrations/netlify/CHANGELOG.md) |
| [@astrojs/vercel](packages/integrations/vercel) | [![astro version](https://img.shields.io/npm/v/@astrojs/vercel.svg?label=%20)](packages/integrations/vercel/CHANGELOG.md) |
| [@astrojs/cloudflare](packages/integrations/cloudflare) | [![astro version](https://img.shields.io/npm/v/@astrojs/cloudflare.svg?label=%20)](packages/integrations/cloudflare/CHANGELOG.md) |
| [@astrojs/partytown](packages/integrations/partytown) | [![astro version](https://img.shields.io/npm/v/@astrojs/partytown.svg?label=%20)](packages/integrations/partytown/CHANGELOG.md) |
| [@astrojs/sitemap](packages/integrations/sitemap) | [![astro version](https://img.shields.io/npm/v/@astrojs/sitemap.svg?label=%20)](packages/integrations/sitemap/CHANGELOG.md) |
| [@astrojs/tailwind](packages/integrations/tailwind) | [![astro version](https://img.shields.io/npm/v/@astrojs/tailwind.svg?label=%20)](packages/integrations/tailwind/CHANGELOG.md) |
| [@astrojs/alpinejs](packages/integrations/alpinejs) | [![astro version](https://img.shields.io/npm/v/@astrojs/alpinejs.svg?label=%20)](packages/integrations/alpinejs/CHANGELOG.md) |
| [@astrojs/mdx](packages/integrations/mdx) | [![astro version](https://img.shields.io/npm/v/@astrojs/mdx.svg?label=%20)](packages/integrations/mdx/CHANGELOG.md) |
| [@astrojs/prefetch](packages/integrations/prefetch) | [![astro version](https://img.shields.io/npm/v/@astrojs/prefetch.svg?label=%20)](packages/integrations/prefetch/CHANGELOG.md) |
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/6178/badge)](https://bestpractices.coreinfrastructure.org/projects/6178)
| [@astrojs/turbolinks](packages/integrations/turbolinks) | [![astro version](https://img.shields.io/npm/v/@astrojs/turbolinks.svg?label=%20)](packages/integrations/turbolinks/CHANGELOG.md) |
Several official projects are maintained outside of this repo:
| Project | Repository |
| ------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| [@astrojs/compiler](https://github.com/withastro/compiler) | [withastro/compiler](https://github.com/withastro/compiler) |
| [@astrojs/compiler](packages/integrations/compiler) | [withastro/compiler](https://github.com/withastro/compiler) |
| [Astro Language Tools](https://github.com/withastro/language-tools) | [withastro/language-tools](https://github.com/withastro/language-tools) |
## Links
- [License (MIT)](LICENSE)
- [Code of Conduct](https://github.com/withastro/.github/blob/main/CODE_OF_CONDUCT.md)
- [Open Governance & Voting](https://github.com/withastro/.github/blob/main/GOVERNANCE.md)
- [Project Funding](https://github.com/withastro/.github/blob/main/FUNDING.md)
- [Code of Conduct](CODE_OF_CONDUCT.md)
- [Open Governance & Voting](GOVERNANCE.md)
- [Project Funding](FUNDING.md)
- [Website](https://astro.build/)
## Sponsors
Astro is free, open source software made possible by these wonderful sponsors.
Astro is generously supported by Netlify, Vercel, and several other amazing organizations.
[❤️ Sponsor Astro! ❤️](https://github.com/withastro/.github/blob/main/FUNDING.md)
[❤️ Sponsor Astro! ❤️](FUNDING.md)
<p align="center">
<a target="_blank" href="https://github.com/sponsors/withastro">
### Platinum Sponsors
[![Astro's sponsors.](https://astro.build/sponsors.png "Astro's sponsors.
Platinum sponsors: Vercel, storyblok, Netlify, Ship Shape, Google Chrome
Gold sponsors: divRIOTS, DEEPGRAM, Transloadit, CloudCannon
Sponsors: Monogram, Qoddi, Dimension")](https://github.com/sponsors/withastro)
<table>
<tbody>
<tr>
<td align="center"><a href="https://www.netlify.com/#gh-light-mode-only" target="_blank"><img width="147" height="40" src="https://raw.githubusercontent.com/withastro/astro/main/.github/assets/netlify.svg#gh-light-mode-only" alt="Netlify" /></a><a href="https://www.netlify.com/#gh-dark-mode-only" target="_blank"><img width="147" height="40" src="https://raw.githubusercontent.com/withastro/astro/main/.github/assets/netlify-dark.svg#gh-dark-mode-only" alt="Netlify" />
</a></td>
<td align="center"><a href="https://www.vercel.com/#gh-light-mode-only" target="_blank"><img width="150" height="34" src="https://raw.githubusercontent.com/withastro/astro/main/.github/assets/vercel.svg#gh-light-mode-only" alt="Vercel" /></a><a href="https://www.vercel.com/#gh-dark-mode-only"><img width="150" height="34" src="https://raw.githubusercontent.com/withastro/astro/main/.github/assets/vercel-dark.svg#gh-dark-mode-only" alt="Vercel" />
</a></td>
</tr>
</tbody>
</table>
### Gold Sponsors
<table>
<tbody>
<tr>
<td align="center">
<a href="https://divRIOTS.com#gh-light-mode-only" target="_blank">
<img width="150" height="40" src="https://raw.githubusercontent.com/withastro/astro/main/.github/assets/divriots.svg#gh-light-mode-only" alt="divRIOTS" />
</a>
</p>
<a href="https://divRIOTS.com#gh-dark-mode-only" target="_blank">
<img width="150" height="40" src="https://raw.githubusercontent.com/withastro/astro/main/.github/assets/divriots-dark.svg#gh-dark-mode-only" alt="divRIOTS" />
</a>
</td>
<td align="center">
<a href="https://stackupdigital.co.uk/#gh-light-mode-only" target="_blank">
<img width="162" height="40" src="https://raw.githubusercontent.com/withastro/astro/main/.github/assets/stackup.svg#gh-light-mode-only" alt="StackUp Digital" />
</a>
<a href="https://stackupdigital.co.uk/#gh-dark-mode-only" target="_blank">
<img width="130" height="32" src="https://raw.githubusercontent.com/withastro/astro/main/.github/assets/stackup-dark.svg#gh-dark-mode-only" alt="StackUp Digital" />
</a>
</td>
</tr>
</tbody>
</table>
### Sponsors
<table>
<tbody>
<tr>
<td align="center"><a href="https://sentry.io" target="_blank"><img width="147" height="40" src="https://raw.githubusercontent.com/withastro/astro/main/.github/assets/sentry.svg" alt="Sentry" /></a></td><td align="center"><a href="https://qoddi.com" target="_blank"><img width="147" height="40" src="https://devcenter.qoddi.com/wp-content/uploads/2021/11/blog-transparent-logo-1.png" alt="Qoddi App Platform" /></a></td>
</tr>
</tbody>
</table>

View file

@ -1,25 +0,0 @@
# Astro Security
## Reporting a Vulnerability
To report a security issue, please email security@astro.build with a detailed description of the issue, the steps you took to create the issue, affected versions, and, if known, mitigations for the issue.
Please remember to include everything required for us to reproduce the issue, including but not limited to a publicly accessible git repository and/or StackBlitz repository. All code samples shared with our Security team will only be used to verify and diagnose the issue and will not be publicly shared with anyone outside of Astro's teams. Astro's Security Team members may share information only within the Astro teams on a need-to-know basis to fix the related issue in Astro.
Our Security team will acknowledge receiving your email within 3 working days.
<ins>**If you think you've found a security issue, please DO NOT report, discuss, or describe it on Discord, GitHub, or any other public forum; without prior contact and acknowledgment of Astro's Security team.**<ins>
This project follows a 90 day disclosure timeline.
**_This is detrimental to the safety of all Astro users. No exceptions._**
## Embargo Policy
The information members and others receive through participation in this group must not be made public, shared, or even hinted otherwise, except with prior explicit approval (which shall be handled on a case-by-case basis). This holds true until the agreed-upon public disclosure date/time is satisfied.
As a clarifying example, this policy forbids Astro Security members from sharing list information with their employers; unless prior arrangements have been made directly with an employer.
In the unfortunate event that you share the information beyond what is allowed by this policy, you must urgently inform the Astro Security Team of exactly what information leaked and to whom, as well as the steps that will be taken to prevent future leaks.
**Repeated offenses may lead to the removal from the Security or Astro team.**

View file

@ -1,16 +0,0 @@
# Defined below are the security contacts for this repo.
#
# They are the contact point for triaging and handling of incoming
# Security issues.
#
# The below names agree to abide by the
# [Embargo Policy](https://github.com/withastro/astro/blob/master/SECURITY.md)
# and will be removed and replaced if they violate that agreement.
#
# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE
# INSTRUCTIONS AT https://github.com/withastro/astro/blob/master/SECURITY.md
Randall T. Vasquez (@ran-dall)
Matthew Phillips (@matthewp)
Nate Moore (@natemoo-re)
Fred K. Schott (@fks)

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
<path fill="#FF5D01" fill-rule="evenodd" d="M4.428 14.135c-.312.997-.467 1.495-.429 1.968.036.417.178.818.413 1.165.266.392.7.682 1.57 1.261l3.839 2.56c.775.516 1.163.775 1.582.876.37.09.757.09 1.128.003.42-.1.81-.357 1.588-.87L18 18.533c.878-.581 1.318-.87 1.588-1.266A2.43 2.43 0 0020 16.095c.039-.477-.122-.978-.44-1.982l-3.4-10.7c-.165-.52-.247-.779-.405-.972a1.296 1.296 0 00-.523-.382c-.23-.092-.502-.092-1.047-.092H9.754c-.547 0-.822 0-1.053.094a1.29 1.29 0 00-.524.384c-.158.194-.239.455-.401.977L4.428 14.136zm9.93-9.897c.13.162.198.383.331.82l2.919 9.588a12.146 12.146 0 00-3.49-1.18l-1.9-6.423a.248.248 0 00-.474 0l-1.878 6.418a12.128 12.128 0 00-3.505 1.184l2.934-9.588c.133-.439.2-.658.331-.82.116-.143.267-.254.437-.323.194-.078.423-.078.881-.078h2.095c.458 0 .688 0 .882.078.17.069.32.18.437.324zm-2.263 11.557c1.106 0 2.067-.28 2.548-.692a2.1 2.1 0 01-.155 1.636c-.308.57-.755.853-1.158 1.108-.506.321-.941.598-.941 1.34 0 .245.056.479.157.686a1.868 1.868 0 01-1.151-1.725v-.046c0-.512.001-1.143-.722-1.143a.765.765 0 00-.766.764c-.812-.813-.741-1.983-.741-1.983 0-.239.024-.611.131-.936.302.568 1.44.99 2.798.99z" clip-rule="evenodd"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

15
assets/brand/icon-32.svg Normal file
View file

@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 32 32">
<path fill="url(#a)" fill-rule="evenodd" d="m20.4 2.4.6 1.5 5.4 17.8c-2-1-4.2-1.8-6.5-2.2l-3.5-12a.5.5 0 0 0-.9 0l-3.5 12c-2.3.4-4.4 1.1-6.5 2.2L11 3.9c.2-.8.4-1.2.6-1.5.2-.3.5-.5.8-.6.4-.2.8-.2 1.6-.2h4c.8 0 1.2 0 1.6.2.3 0 .6.3.8.6Z" clip-rule="evenodd"/>
<path fill="#FF5D01" fill-rule="evenodd" d="M21 22.5c-.9.8-2.6 1.3-4.7 1.3-2.5 0-4.6-.8-5.2-1.8-.2.6-.2 1.3-.2 1.7 0 0-.2 2.2 1.3 3.7 0-.8.7-1.4 1.5-1.4 1.3 0 1.3 1 1.3 2v.2c0 1.4.9 2.6 2.1 3.2a3 3 0 0 1-.3-1.3c0-1.4.9-1.9 1.8-2.5.7-.5 1.6-1 2.1-2a3.9 3.9 0 0 0 .3-3Z" clip-rule="evenodd"/>
<path fill="url(#b)" fill-rule="evenodd" d="M21 22.5c-.9.8-2.6 1.3-4.7 1.3-2.5 0-4.6-.8-5.2-1.8-.2.6-.2 1.3-.2 1.7 0 0-.2 2.2 1.3 3.7 0-.8.7-1.4 1.5-1.4 1.3 0 1.3 1 1.3 2v.2c0 1.4.9 2.6 2.1 3.2a3 3 0 0 1-.3-1.3c0-1.4.9-1.9 1.8-2.5.7-.5 1.6-1 2.1-2a3.9 3.9 0 0 0 .3-3Z" clip-rule="evenodd"/>
<defs>
<linearGradient id="a" x1="22.1" x2="16" y1=".7" y2="21.7" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff"/>
<stop offset="1" stop-color="#F9FAFB"/>
</linearGradient>
<linearGradient id="b" x1="25" x2="19.8" y1="16.3" y2="27.4" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF1639"/>
<stop offset="1" stop-color="#FF1639" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Some files were not shown because too many files have changed in this diff Show more