Skip to content

Use TS for rebuild-test-project-fixture script #28242

Use TS for rebuild-test-project-fixture script

Use TS for rebuild-test-project-fixture script #28242

Workflow file for this run

name: ⚙️ CI
on:
pull_request:
push:
branches: ['next', 'release/**']
# Cancel in-progress runs of this workflow.
# See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-only-cancel-in-progress-jobs-or-runs-for-the-current-workflow.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
jobs:
detect-changes:
if: github.repository == 'redwoodjs/redwood'
name: 🔍 Detect changes
runs-on: ubuntu-latest
outputs:
onlydocs: ${{ steps.detect-changes.outputs.onlydocs }}
rsc: ${{ steps.detect-changes.outputs.rsc }}
ssr: ${{ steps.detect-changes.outputs.ssr }}
steps:
- uses: actions/checkout@v4
- name: Enable Corepack
run: corepack enable
- name: ⬢ Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: 🐈 Yarn install
working-directory: ./.github/actions/detect-changes
run: yarn install --inline-builds
env:
GITHUB_TOKEN: ${{ github.token }}
- name: 🔍 Detect changes
id: detect-changes
uses: ./.github/actions/detect-changes
check:
needs: detect-changes
if: needs.detect-changes.outputs.onlydocs == 'false'
name: ✅ Check constraints, dependencies, and package.json's
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Enable Corepack
run: corepack enable
- name: ⬢ Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: 🐈 Yarn install
working-directory: ./tasks/check
run: yarn install --inline-builds
env:
GITHUB_TOKEN: ${{ github.token }}
- name: ✅ Check constraints, dependencies, and package.json's
uses: ./tasks/check
check-skip:
needs: detect-changes
if: needs.detect-changes.outputs.onlydocs == 'true'
name: ✅ Check constraints, dependencies, and package.json's
runs-on: ubuntu-latest
steps:
- run: echo "Skipped"
build-lint-test:
needs: check
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
name: 🏗 Build, lint, test / ${{ matrix.os }} / node 18 latest
runs-on: ${{ matrix.os }}
steps:
- name: Remove the tsc problem matcher if not ubuntu-latest
if: matrix.os != 'ubuntu-latest'
run: echo "echo "::remove-matcher owner=tsc::""
- uses: actions/checkout@v4
- name: Enable Corepack
run: corepack enable
- name: ⬢ Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Enable Corepack
run: corepack enable
- name: 🐈 Set up yarn cache
uses: ./.github/actions/set-up-yarn-cache
- name: 🐈 Yarn install
run: yarn install --inline-builds
env:
GITHUB_TOKEN: ${{ github.token }}
- name: 🔨 Build
run: yarn build
- name: 🔎 Lint
run: yarn lint
- name: 🌡 Test Types
run: yarn test:types
- name: Get number of CPU cores
if: always()
id: cpu-cores
uses: SimenB/github-actions-cpu-cores@v2
- name: 🧪 Test
run: yarn test-ci ${{ steps.cpu-cores.outputs.count }}
build-lint-test-skip:
needs: detect-changes
if: needs.detect-changes.outputs.onlydocs == 'true'
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
name: 🏗 Build, lint, test / ${{ matrix.os }} / node 18 latest
runs-on: ${{ matrix.os }}
steps:
- run: echo "Skipped"
tutorial-e2e:
needs: check
strategy:
matrix:
bundler: [vite, webpack]
name: 🌲 Tutorial E2E / ${{ matrix.bundler }} / node 18 latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Enable Corepack
run: corepack enable
- name: ⬢ Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: 🐈 Set up yarn cache
uses: ./.github/actions/set-up-yarn-cache
- name: 🐈 Yarn install
run: yarn install --inline-builds
env:
GITHUB_TOKEN: ${{ github.token }}
- name: 📁 Create a temporary directory
id: createpath
run: |
project_path=$(mktemp -d -t redwood.XXXXXX)
echo "::set-output name=project_path::$project_path"
framework_path=$(pwd)
echo "::set-output name=framework_path::$framework_path"
- name: 🌲 Create a Redwood App
run: |
./tasks/run-e2e ${{ steps.createpath.outputs.project_path }} \
--no-start \
--bundler ${{ matrix.bundler }}
env:
YARN_ENABLE_IMMUTABLE_INSTALLS: false
- name: 🐙 Git init in the Redwood App directory
run: |
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
git init --initial-branch main && git add .
git commit -a --message=init
working-directory: ${{ steps.createpath.outputs.project_path }}
- name: Start server in background
run: yarn rw dev --no-generate --fwd="--no-open" &
working-directory: ${{ steps.createpath.outputs.project_path }}
- name: 🌲 Install Cypress
run: yarn run cypress install
- name: 🌲 Run cypress
uses: cypress-io/github-action@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CYPRESS_RW_PATH: "${{ steps.createpath.outputs.project_path }}"
with:
# We've already installed dependencies.
install: false
env: true
browser: chrome
record: false
wait-on: 'http://[::1]:8910'
working-directory: ./tasks/e2e
spec: |
cypress/e2e/01-tutorial/*.cy.js
cypress/e2e/04-logger/*.cy.js
tutorial-e2e-skip:
needs: detect-changes
if: needs.detect-changes.outputs.onlydocs == 'true'
strategy:
matrix:
bundler: [vite, webpack]
name: 🌲 Tutorial E2E / ${{ matrix.bundler }} / node 18 latest
runs-on: ubuntu-latest
steps:
- run: echo "Skipped"
smoke-tests:
needs: check
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
bundler: [vite, webpack]
name: 🔄 Smoke tests / ${{ matrix.os }} / ${{ matrix.bundler }} / node 18 latest
runs-on: ${{ matrix.os }}
env:
REDWOOD_CI: 1
REDWOOD_VERBOSE_TELEMETRY: 1
steps:
- uses: actions/checkout@v4
- name: Enable Corepack
run: corepack enable
- name: ⬢ Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Enable Corepack
run: corepack enable
- name: 🐈 Set up yarn cache
uses: ./.github/actions/set-up-yarn-cache
- name: 🐈 Yarn install
run: yarn install --inline-builds
env:
GITHUB_TOKEN: ${{ github.token }}
- name: 🔨 Build
run: yarn build
- name: 🌲 Set up test project
id: set-up-test-project
uses: ./.github/actions/set-up-test-project
with:
bundler: ${{ matrix.bundler }}
env:
REDWOOD_DISABLE_TELEMETRY: 1
YARN_ENABLE_IMMUTABLE_INSTALLS: false
- name: 🎭 Install playwright dependencies
run: npx playwright install --with-deps chromium
- name: 🧑‍💻 Run dev smoke tests
working-directory: ./tasks/smoke-tests/dev
run: npx playwright test
env:
REDWOOD_TEST_PROJECT_PATH: '${{ steps.set-up-test-project.outputs.test-project-path }}'
REDWOOD_DISABLE_TELEMETRY: 1
- name: 🔐 Run auth smoke tests
working-directory: ./tasks/smoke-tests/auth
run: npx playwright test
env:
REDWOOD_TEST_PROJECT_PATH: ${{ steps.set-up-test-project.outputs.test-project-path }}
REDWOOD_DISABLE_TELEMETRY: 1
- name: Run `rw build --no-prerender`
run: |
yarn rw build --no-prerender
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run `rw prerender`
run: |
yarn rw prerender --verbose
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: 🖥️ Run serve smoke tests
working-directory: tasks/smoke-tests/serve
run: npx playwright test
env:
REDWOOD_TEST_PROJECT_PATH: ${{ steps.set-up-test-project.outputs.test-project-path }}
REDWOOD_DISABLE_TELEMETRY: 1
- name: 📄 Run prerender smoke tests
working-directory: tasks/smoke-tests/prerender
run: npx playwright test
env:
REDWOOD_TEST_PROJECT_PATH: ${{ steps.set-up-test-project.outputs.test-project-path }}
REDWOOD_DISABLE_TELEMETRY: 1
- name: 📕 Run Storybook smoke tests
working-directory: tasks/smoke-tests/storybook
run: npx playwright test
env:
REDWOOD_TEST_PROJECT_PATH: ${{ steps.set-up-test-project.outputs.test-project-path }}
REDWOOD_DISABLE_TELEMETRY: 1
- name: Run `rw info`
run: |
yarn rw info
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run `rw lint`
run: |
yarn rw lint ./api/src --fix
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run "rw test api"
run: |
yarn rw test api --no-watch
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run "rw test web"
run: |
yarn rw test web --no-watch
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run "rw check"
run: |
yarn rw check
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run "rw storybook"
run: |
yarn rw sb --smoke-test
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run "rw exec"
run: |
yarn rw g script testScript && yarn rw exec testScript
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run "prisma generate"
run: |
yarn rw prisma generate
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run "rw data-migrate"
run: |
yarn rw dataMigrate up
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run "data-migrate install"
run: |
yarn rw data-migrate install
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run "prisma migrate"
run: |
yarn rw prisma migrate dev --name ci-test
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run `rw deploy --help`
run: yarn rw setup deploy --help && yarn rw deploy --help
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run `rw setup ui --help`
run: yarn rw setup --help && yarn rw setup ui --help
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run "g page"
run: |
yarn rw g page ciTest
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run "g sdl"
run: |
yarn rw g sdl userExample
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Run "rw type-check"
run: |
yarn rw type-check
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
- name: Throw Error | Run `rw g sdl <model>`
run: |
yarn rw g sdl DoesNotExist
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
continue-on-error: true
# We've disabled Replay for now but may add it back. When we do,
# we need to add this to all the smoke tests steps' env:
#
# ```
# env:
# RECORD_REPLAY_METADATA_TEST_RUN_TITLE: 🔄 Smoke tests / ${{ matrix.os }} / node 18 latest
# RECORD_REPLAY_TEST_METRICS: 1
# ```
#
# - name: Upload Replays
# if: always()
# uses: replayio/[email protected]
# with:
# api-key: rwk_cZn4WLe8106j6tC5ygNQxDpxAwCLpFo5oLQftiRN7OP
smoke-tests-skip:
needs: detect-changes
if: needs.detect-changes.outputs.onlydocs == 'true'
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
bundler: [vite, webpack]
name: 🔄 Smoke tests / ${{ matrix.os }} / ${{ matrix.bundler }} / node 18 latest
runs-on: ${{ matrix.os }}
steps:
- run: echo "Skipped"
telemetry-check:
needs: check
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
name: 🔭 Telemetry check / ${{ matrix.os }} / node 18 latest
runs-on: ${{ matrix.os }}
env:
REDWOOD_REDIRECT_TELEMETRY: "http://127.0.0.1:48619" # Random port
steps:
- uses: actions/checkout@v4
- name: Enable Corepack
run: corepack enable
- name: ⬢ Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Enable Corepack
run: corepack enable
- name: 🐈 Set up yarn cache
uses: ./.github/actions/set-up-yarn-cache
- name: 🐈 Yarn install
run: yarn install --inline-builds
env:
GITHUB_TOKEN: ${{ github.token }}
- name: 🔨 Build
run: yarn build
- name: 📢 Listen for telemetry (CRWA)
run: node ./.github/actions/telemetry_check/check.mjs --mode crwa
- name: 📢 Listen for telemetry (CLI)
run: node ./.github/actions/telemetry_check/check.mjs --mode cli
env:
YARN_ENABLE_IMMUTABLE_INSTALLS: false
telemetry-check-skip:
needs: detect-changes
if: needs.detect-changes.outputs.onlydocs == 'true'
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
name: 🔭 Telemetry check / ${{ matrix.os }} / node 18 latest
runs-on: ${{ matrix.os }}
steps:
- run: echo "Skipped"
rsc-smoke-tests:
needs: [check, detect-changes]
if: needs.detect-changes.outputs.rsc == 'true'
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
name: 🔄🐘 RSC Smoke tests / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
env:
REDWOOD_CI: 1
REDWOOD_VERBOSE_TELEMETRY: 1
steps:
- uses: actions/checkout@v4
- name: Enable Corepack
run: corepack enable
- name: ⬢ Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Enable Corepack
run: corepack enable
- name: 🐈 Set up yarn cache
uses: ./.github/actions/set-up-yarn-cache
- name: 🐈 Yarn install
run: yarn install --inline-builds
env:
GITHUB_TOKEN: ${{ github.token }}
- name: 🔨 Build
run: yarn build
- name: 🌲 Set up RSC project
id: set-up-rsc-project
uses: ./.github/actions/set-up-rsc-project
env:
REDWOOD_DISABLE_TELEMETRY: 1
YARN_ENABLE_IMMUTABLE_INSTALLS: false
- name: 🎭 Install playwright dependencies
run: npx playwright install --with-deps chromium
- name: 🐘 Run RSC smoke tests
working-directory: tasks/smoke-tests/rsc
run: npx playwright test
env:
REDWOOD_TEST_PROJECT_PATH: ${{ steps.set-up-rsc-project.outputs.rsc-project-path }}
REDWOOD_DISABLE_TELEMETRY: 1
- name: 🌲 Set up RSA smoke test
id: set-up-rsa-project
uses: ./.github/actions/set-up-rsa-project
env:
REDWOOD_DISABLE_TELEMETRY: 1
YARN_ENABLE_IMMUTABLE_INSTALLS: false
- name: 🐘 Run RSA smoke tests
working-directory: tasks/smoke-tests/rsa
run: npx playwright test
env:
REDWOOD_TEST_PROJECT_PATH: ${{ steps.set-up-rsa-project.outputs.test-project-path }}
REDWOOD_DISABLE_TELEMETRY: 1
- name: 🌲 Set up RSC external packages smoke test
id: set-up-rsc-external-packages-project
uses: ./.github/actions/set-up-rsc-external-packages-project
env:
REDWOOD_DISABLE_TELEMETRY: 1
YARN_ENABLE_IMMUTABLE_INSTALLS: false
- name: 🐘 Run RSC external packages smoke tests
working-directory: tasks/smoke-tests/rsc-external-packages
run: npx playwright test
env:
REDWOOD_TEST_PROJECT_PATH: ${{ steps.set-up-rsc-external-packages-project.outputs.test-project-path }}
REDWOOD_DISABLE_TELEMETRY: 1
rsc-smoke-tests-skip:
needs: detect-changes
if: needs.detect-changes.outputs.rsc == 'false'
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
name: 🔄🐘 RSC Smoke tests / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
steps:
- run: echo "Skipped"
ssr-smoke-tests:
needs: [check, detect-changes]
if: needs.detect-changes.outputs.ssr == 'true'
strategy:
matrix:
# TODO: add `windows-latest`.
os: [ubuntu-latest]
name: 🔁 SSR Smoke tests / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
env:
REDWOOD_CI: 1
REDWOOD_VERBOSE_TELEMETRY: 1
steps:
- uses: actions/checkout@v4
- name: Enable Corepack
run: corepack enable
- name: ⬢ Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: 🐈 Set up yarn cache
uses: ./.github/actions/set-up-yarn-cache
- name: 🐈 Yarn install
run: yarn install --inline-builds
env:
GITHUB_TOKEN: ${{ github.token }}
- name: 🔨 Build
run: yarn build
- name: 🌲 Set up test project
id: set-up-test-project
uses: ./.github/actions/set-up-test-project
with:
bundler: vite
canary: true
env:
REDWOOD_DISABLE_TELEMETRY: 1
YARN_ENABLE_IMMUTABLE_INSTALLS: false
- name: Run SSR codemods on test project
run: ./tasks/test-project/convert-to-ssr-fixture ${{ steps.set-up-test-project.outputs.test-project-path }}
env:
REDWOOD_DISABLE_TELEMETRY: 1
- name: 🎭 Install playwright dependencies
run: npx playwright install --with-deps chromium
- name: Run SSR [DEV] smoke tests
working-directory: ./tasks/smoke-tests/streaming-ssr-dev
run: npx playwright test
env:
REDWOOD_TEST_PROJECT_PATH: '${{ steps.set-up-test-project.outputs.test-project-path }}'
REDWOOD_DISABLE_TELEMETRY: 1
- name: Build for production
working-directory: ${{ steps.set-up-test-project.outputs.test-project-path }}
run: yarn rw build --no-prerender
env:
REDWOOD_DISABLE_TELEMETRY: 1
- name: Run SSR [PROD] smoke tests
working-directory: ./tasks/smoke-tests/streaming-ssr-prod
run: npx playwright test
env:
REDWOOD_TEST_PROJECT_PATH: '${{ steps.set-up-test-project.outputs.test-project-path }}'
REDWOOD_DISABLE_TELEMETRY: 1
ssr-smoke-tests-skip:
needs: detect-changes
if: needs.detect-changes.outputs.ssr == 'false'
strategy:
matrix:
# TODO: add `windows-latest`.
os: [ubuntu-latest]
name: 🔁 SSR Smoke tests / ${{ matrix.os }}
runs-on: ${{ matrix.os }}
steps:
- run: echo "Skipped"
crwa:
needs: check
name: 🌲 Create Redwood App
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: ⬢ Enable Corepack
run: corepack enable
- name: ⬢ Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: 🐈 Set up yarn cache
uses: ./.github/actions/set-up-yarn-cache
- name: 🐈 Yarn install
run: yarn install --inline-builds
env:
GITHUB_TOKEN: ${{ github.token }}
- name: 🏗️ Build
run: yarn build
- name: Set up test project
run: |
yarn build:pack
PROJECT_PATH=$(yarn set-up-test-project)
echo "PROJECT_PATH=$PROJECT_PATH" >> $GITHUB_ENV
working-directory: ./packages/create-redwood-app
env:
YARN_ENABLE_IMMUTABLE_INSTALLS: false
- name: Set up git
run: |
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
- name: e2e test
run: yarn test e2e
working-directory: ./packages/create-redwood-app
env:
PROJECT_PATH: ${{ env.PROJECT_PATH }}
- name: Prompt tests
run: |
sudo apt-get update
sudo apt-get install expect
./tests/e2e_prompts.sh
./tests/e2e_prompts_git.sh
./tests/e2e_prompts_m.sh
./tests/e2e_prompts_ts.sh
./tests/e2e_prompts_overwrite.sh
working-directory: ./packages/create-redwood-app
env:
PROJECT_PATH: ${{ env.PROJECT_PATH }}
crwa-skip:
needs: detect-changes
if: needs.detect-changes.outputs.onlydocs == 'true'
name: 🌲 Create Redwood App
runs-on: ubuntu-latest
steps:
- run: echo "Skipped"