diff --git a/.github/workflows/studio-e2e-test.yml b/.github/workflows/studio-e2e-test.yml new file mode 100644 index 0000000000000..1403a3814943e --- /dev/null +++ b/.github/workflows/studio-e2e-test.yml @@ -0,0 +1,93 @@ +name: Studio E2E Tests +on: + push: + branches: [master] + paths: + - 'packages/pg-meta/**/*' + - 'apps/studio/**' + - 'e2e/studio/**' + - 'pnpm-lock.yaml' + pull_request: + paths: + - 'packages/pg-meta/**/*' + - 'apps/studio/**' + - 'e2e/studio/**' + - 'pnpm-lock.yaml' + - '.github/workflows/studio-e2e-test.yml' + +# Cancel old builds on new commit for same workflow + branch/PR +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +permissions: + contents: write + +jobs: + test: + timeout-minutes: 60 + runs-on: ubuntu-latest + # Make the job non-blocking + continue-on-error: true + # Require approval only for external contributors + environment: ${{ github.event.pull_request.author_association != 'MEMBER' && 'Studio E2E Tests' || '' }} + + env: + EMAIL: ${{ secrets.CI_EMAIL }} + PASSWORD: ${{ secrets.CI_PASSWORD }} + PROJECT_REF: ${{ secrets.CI_PROJECT_REF }} + NEXT_PUBLIC_IS_PLATFORM: true + NEXT_PUBLIC_API_URL: https://api.supabase.green + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_STUDIO_HOSTED_PROJECT_ID }} + NEXT_PUBLIC_HCAPTCHA_SITE_KEY: 10000000-ffff-ffff-ffff-000000000001 + + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + run_install: false + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm i + + - name: Install Vercel CLI + run: pnpm add --global vercel@latest + + - name: Pull Vercel Environment Information (Preview) + run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} + + - name: Build Project Artifacts for Vercel + run: vercel build --token=${{ secrets.VERCEL_TOKEN }} + + - name: Deploy Project to Vercel and Get URL + id: deploy_vercel + run: | + DEPLOY_URL=$(vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }}) + echo "Vercel Preview URL: $DEPLOY_URL" + echo "DEPLOY_URL=$DEPLOY_URL" >> $GITHUB_OUTPUT + + - name: Install Playwright Browsers + run: pnpm -C e2e/studio exec playwright install --with-deps + + - name: Run Playwright tests + id: playwright + env: + AUTHENTICATION: true + STUDIO_URL: ${{ steps.deploy_vercel.outputs.DEPLOY_URL }}/dashboard + run: pnpm e2e + + - uses: actions/upload-artifact@v4 + if: always() + with: + name: playwright-artifacts + path: | + e2e/studio/playwright-report/ + e2e/studio/test-results/ + retention-days: 7 diff --git a/apps/docs/content/guides/auth/quickstarts/react.mdx b/apps/docs/content/guides/auth/quickstarts/react.mdx index bc06bf2e736dc..d60a17e4e5145 100644 --- a/apps/docs/content/guides/auth/quickstarts/react.mdx +++ b/apps/docs/content/guides/auth/quickstarts/react.mdx @@ -27,22 +27,21 @@ hideToc: true + - + Create a React app using [Vite](https://vitejs.dev/). - Create a React app using the `create-react-app` command. + - + - + ```bash name=Terminal + npm create vite@latest my-app -- --template react - ```bash name=Terminal - npx create-react-app my-app - ``` + ``` - - - + + diff --git a/apps/docs/content/guides/realtime/postgres-changes.mdx b/apps/docs/content/guides/realtime/postgres-changes.mdx index a75c940404d79..395deda2828cd 100644 --- a/apps/docs/content/guides/realtime/postgres-changes.mdx +++ b/apps/docs/content/guides/realtime/postgres-changes.mdx @@ -1570,7 +1570,7 @@ supabase schema: 'public', table: 'colors', filter: PostgresChangeFilter( - type: PostgresChangeFilterType.lte, + type: PostgresChangeFilterType.inFilter, column: 'name', value: ['red', 'blue', 'yellow'], ), diff --git a/apps/docs/public/humans.txt b/apps/docs/public/humans.txt index 604be8a1f41af..fdd236e51a019 100644 --- a/apps/docs/public/humans.txt +++ b/apps/docs/public/humans.txt @@ -64,6 +64,7 @@ Kamil Ogórek Kang Ming Tay Karan S Karlo Ison +Katerina Skroumpelou Kevin Brolly Kevin Grüneberg Lakshan Perera diff --git a/apps/www/_blog/2025-07-18-persistent-storage-for-faster-edge-functions.mdx b/apps/www/_blog/2025-07-18-persistent-storage-for-faster-edge-functions.mdx new file mode 100644 index 0000000000000..ad80a67b047fc --- /dev/null +++ b/apps/www/_blog/2025-07-18-persistent-storage-for-faster-edge-functions.mdx @@ -0,0 +1,153 @@ +--- +title: 'Persistent Storage and 97% Faster Cold Starts for Edge Functions' +description: 'Mount S3-compatible buckets as persistent file storage in Edge Functions with up to 97% faster cold start times.' +categories: + - product + - launch-week + - edge-functions +tags: + - launch-week + - edge-functions + - storage +date: '2025-07-18:00:00' +toc_depth: 3 +author: laktek,nyannyacha +image: launch-week-15/day-5-persistent-storage-for-functions/og.jpg +thumb: launch-week-15/day-5-persistent-storage-for-functions/thumb.png +launchweek: '15' +--- + +Today, we are introducing Persistent Storage and up to 97% faster cold start times for Edge Functions. Previously, Edge Functions only supported ephemeral file storage by writing to `/tmp` directory. Many common libraries for performing tasks, such as zipping/unzipping files and image transformations, are built to work with persistent file storage, so making them work with Edge Functions required extra steps. + +The persistent storage option is built on top of the S3 protocol. It allows you to mount any [S3-compatible bucket](https://supabase.com/docs/guides/storage/s3/compatibility), including [Supabase Storage Buckets](https://supabase.com/docs/guides/storage), as a directory for your Edge Functions. You can perform operations such as reading and writing files to the mounted buckets as you would in a POSIX file system. + +```tsx +// read from S3 bucket +const data = await Deno.readFile('/s3/my-bucket/results.csv') + +// make a directory +await Deno.mkdir('/s3/my-bucket/sub-dir') + +// write to S3 bucket +await Deno.writeTextFile('/s3/my-bucket/demo.txt', 'hello world') +``` + +
+