diff --git a/.changeset/big-files-tickle.md b/.changeset/big-files-tickle.md new file mode 100644 index 00000000000..a845151cc84 --- /dev/null +++ b/.changeset/big-files-tickle.md @@ -0,0 +1,2 @@ +--- +--- diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index afef97f5473..1ba514e7810 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -50,7 +50,7 @@ jobs: with: use-turbo-cache: 'true' - name: Run tests - run: npm run test:ci + run: npm run test -- -- --maxWorkers=70% # TODO: Remove test:ci publint: name: Run publint diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eda022c7e26..b3777dd7044 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,11 +5,17 @@ on: merge_group: pull_request: branches: - - main - build/turbo-ci-poc + env: + FORCE_COLOR: '1' NODE_VERSION: '18' - SINCE_BRANCH: 'build/turbo-ci-poc' # origin/main + TURBO_ARGS: --output-logs=new-only --cache-dir=./.turbo-cache --concurrency=8 + TURBO_TOKEN: ${{ secrets.TEST_TURBO_TOKEN }} + TURBO_TEAM: ${{ secrets.TEST_TURBO_TEAM }} + TURBO_REMOTE_CACHE_SIGNATURE_KEY: 'foobar-8121639a-9e90-4a8c-9021-689a769e4945' # TODO: secrets.TEST_TURBO_REMOTE_CACHE_SIGNATURE_KEY + TURBO_REMOTE_ONLY: true + TURBO_CONCURRENCY: 8 # Available CPU in RUNNER_LARGE concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -19,128 +25,171 @@ jobs: formatting-linting: name: Formatting & Linting runs-on: ${{ vars.RUNNER_LARGE }} + env: + TURBO_REMOTE_ONLY: false + steps: - name: Checkout Repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 + show-progress: false - name: Setup NodeJS ${{ env.NODE_VERSION }} uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} - cache: "npm" - - name: Turborepo Remote Server - uses: dtinth/setup-github-actions-caching-for-turbo@v1 + - name: Cache node_modules + uses: actions/cache@v3 + id: npm-cache with: - cache-prefix: turbo- - - - name: Require Changeset - run: if [ "${{ github.event.pull_request.user.login }}" = "clerk-cookie" ]; then echo 'Skipping' && exit 0; else npx changeset status --since=${{ env.SINCE_BRANCH }}; fi + path: ./node_modules + key: ${{ runner.os }}-node-${{ env.NODE_VERSION }}-node-modules-${{ hashFiles('**/package-lock.json') }} + + - name: List Environment Details + run: | + echo "NODE_VERSION=${{ env.NODE_VERSION }}" + echo "NODE_ENV = $NODE_ENV" + echo "NODE_VERSION = $NODE_VERSION" + echo "NODE_VERSION (GH) = ${{ env.NODE_VERSION }}" + echo "NPM_VERSION = $NPM_VERSION" + echo "TURBO_ARGS = ${{ env.TURBO_ARGS}}" + echo "TURBO_TEAM = ${{ env.TURBO_TEAM }}" + echo "TURBO_TOKEN = ${{ env.TURBO_TOKEN}}" - name: Install NPM Dependencies + if: steps.npm-cache.outputs.cache-hit != 'true' run: npm ci --audit=false --fund=false + - name: Require Changeset + run: if [ "${{ github.event.pull_request.user.login }}" = "clerk-cookie" ]; then echo 'Skipping' && exit 0; else npx changeset status --since=origin/main; fi + - name: Check Formatting run: npm run format:check - name: Lint packages using publint - run: npm run lint:publint + run: npm run lint:publint -- ${{ env.TURBO_ARGS }} - name: Lint types using attw - run: npm run lint:attw + run: npm run lint:attw -- ${{ env.TURBO_ARGS }} continue-on-error: true # TODO: Remove this when all related errors are fixed - name: Run lint - run: npm run lint -- --output-logs=errors-only -- --quiet - - # unit-tests: - # name: Unit Tests - # needs: formatting-linting - # runs-on: ${{ vars.RUNNER_LARGE }} - # strategy: - # matrix: - # node-version: [ 18, 19 ] - # steps: - # - name: Checkout Repo - # uses: actions/checkout@v3 - # with: - # fetch-depth: 0 - - # - name: Setup NodeJS ${{ matrix.node-version }} - # uses: actions/setup-node@v3 - # with: - # node-version: ${{ matrix.node-version }} - # cache: "npm" - - # - name: Install NPM Dependencies - # run: npm ci --audit=false --fund=false - - # - name: Run tests - # run: npm run test:ci - - # integration-tests: - # name: Integration Tests - # needs: formatting-linting - # runs-on: ${{ vars.RUNNER_LARGE }} - # strategy: - # matrix: - # test-name: [ 'generic', 'nextjs', 'remix' ] - # services: - # verdaccio: - # image: verdaccio/verdaccio:5 - # ports: - # - 4873:4873 - # steps: - # - name: Checkout Repo - # uses: actions/checkout@v3 - # with: - # fetch-depth: 0 - - # - name: Setup NodeJS ${{ env.NODE_VERSION }} - # uses: actions/setup-node@v3 - # with: - # node-version: ${{ env.NODE_VERSION }} - # cache: "npm" - - # - name: Install NPM Dependencies - # run: | - # npm ci --audit=false --fund=false - # npm set @clerk:registry http://localhost:4873/ - - # - name: Get Playwright Version - # id: playwright-version - # run: echo "VERSION=$(node -e "console.log($(npm ls @playwright/test --json).dependencies['@playwright/test'].version)")" >> "$GITHUB_OUTPUT" - - # - name: Cache Playwright Binaries - # uses: actions/cache@v3 - # id: playwright-cache - # with: - # path: ~/.cache/ms-playwright - # key: ${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.VERSION }}}} - - # - name: Install Playwright Browsers - # if: steps.playwright-cache.outputs.cache-hit != 'true' - # run: npx playwright install --with-deps - - # - name: Publish to Verdaccio - # run: npm run release:verdaccio # Fails early if the default npm registry is used - - # - name: Install @clerk/backend in /integration - # run: (cd integration && npm init -y && npm install @clerk/backend) - - # - name: Run Playwright tests - # run: 'npm run test:integration:${{ matrix.test-name }}' - # env: - # INTEGRATION_INSTANCE_KEYS: ${{ secrets.INTEGRATION_INSTANCE_KEYS }} - # MAILSAC_API_KEY: ${{ secrets.MAILSAC_API_KEY }} - # E2E_CLERK_VERSION: 'latest' - - # - name: Upload Playwright Report for ${{ matrix.test-name }} - # uses: actions/upload-artifact@v3 - # if: always() - # with: - # name: playwright-report-${{ matrix.test-name }} - # path: playwright-report/ - # retention-days: 30 + run: npm run lint -- ${{ env.TURBO_ARGS }} -- --quiet + + unit-tests: + name: Unit Tests + needs: formatting-linting + runs-on: ${{ vars.RUNNER_LARGE }} + + strategy: + matrix: + node-version: [ 18, 20 ] + + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + show-progress: false + + - name: Setup NodeJS ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + + - name: Cache node_modules + uses: actions/cache@v3 + id: npm-cache + with: + path: ./node_modules + key: ${{ runner.os }}-node-${{ matrix.node-version }}-node-modules-${{ hashFiles('**/package-lock.json') }} + + - name: Install NPM Dependencies + if: steps.npm-cache.outputs.cache-hit != 'true' + run: npm ci --audit=false --fund=false + + - name: Run tests + run: npx turbo test ${{ env.TURBO_ARGS }} + env: + NODE_VERSION: ${{ matrix.node-version }} + + integration-tests: + name: Integration Tests + needs: formatting-linting + runs-on: ${{ vars.RUNNER_LARGE }} + + strategy: + matrix: + test-name: [ 'generic', 'nextjs', 'remix' ] + + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + show-progress: false + + - name: Setup NodeJS ${{ env.NODE_VERSION }} + uses: actions/setup-node@v3 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Cache node_modules + uses: actions/cache@v3 + id: npm-cache + with: + path: ./node_modules + key: ${{ runner.os }}-node-${{ env.NODE_VERSION }}-node-modules-${{ hashFiles('**/package-lock.json') }} + + - name: Install NPM Dependencies + if: steps.npm-cache.outputs.cache-hit != 'true' + run: npm ci --audit=false --fund=false + + - name: Get Playwright Version + id: playwright-version + run: echo "VERSION=$(node -e "console.log($(npm ls @playwright/test --json).dependencies['@playwright/test'].version)")" >> "$GITHUB_OUTPUT" + + - name: Cache Playwright Binaries + uses: actions/cache@v3 + id: playwright-cache + with: + path: ~/.cache/ms-playwright + key: ${{ runner.os }}-node-${{ env.NODE_VERSION }}-playwright-${{ steps.playwright-version.outputs.VERSION }} + + - name: Install Playwright Browsers + if: steps.playwright-cache.outputs.cache-hit != 'true' + run: npx playwright install --with-deps + + - name: Update NPM Registry + run: npm set registry http://localhost:4873/ + + - name: Run Verdaccio + run: | + nohup ./node_modules/.bin/verdaccio --config ./verdaccio.yaml & sleep 5 + ./node_modules/.bin/npm-cli-adduser -u user -p pass -e test@test.com -r http://localhost:4873/ + ./node_modules/.bin/npm-cli-login -u user -p pass -e test@test.com -r http://localhost:4873/ + + - name: Publish to Verdaccio + run: | + if [ "$(npm config get registry)" = "https://registry.npmjs.org/" ]; then echo 'Error: Using default registry' && exit 1; else npx turbo build ${{ env.TURBO_ARGS }} && npx changeset publish --no-git-tag; fi + + - name: Install @clerk/backend in /integration + working-directory: ./integration + run: npm init -y && npm install @clerk/backend + + - name: Run Playwright tests + run: npm run test:integration:${{ matrix.test-name }} + env: + INTEGRATION_INSTANCE_KEYS: ${{ secrets.INTEGRATION_INSTANCE_KEYS }} + MAILSAC_API_KEY: ${{ secrets.MAILSAC_API_KEY }} + E2E_CLERK_VERSION: 'latest' + + # - name: Upload Playwright Report for ${{ matrix.test-name }} + # uses: actions/upload-artifact@v3 + # if: always() + # with: + # name: playwright-report-${{ github.ref }}-${{ matrix.test-name }} + # path: playwright-report/ + # retention-days: 30 diff --git a/package-lock.json b/package-lock.json index 4bb590f1c5a..3be6b897c60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@commitlint/config-conventional": "^17.7.0", "@emotion/jest": "^11.11.0", "@faker-js/faker": "^8.1.0", + "@playwright/test": "^1.39.0", "@testing-library/dom": "^8.19.0", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", @@ -68,6 +69,7 @@ }, "integration": { "version": "0.0.0", + "extraneous": true, "license": "MIT", "devDependencies": { "@playwright/test": "^1.38.1", @@ -7056,11 +7058,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.38.1", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.39.0.tgz", + "integrity": "sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "playwright": "1.38.1" + "playwright": "1.39.0" }, "bin": { "playwright": "cli.js" @@ -19017,10 +19020,6 @@ "dev": true, "license": "0BSD" }, - "node_modules/integration": { - "resolved": "integration", - "link": true - }, "node_modules/internal-slot": { "version": "1.0.5", "license": "MIT", @@ -25333,11 +25332,12 @@ "license": "MIT" }, "node_modules/playwright": { - "version": "1.38.1", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz", + "integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.38.1" + "playwright-core": "1.39.0" }, "bin": { "playwright": "cli.js" @@ -25350,9 +25350,10 @@ } }, "node_modules/playwright-core": { - "version": "1.38.1", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz", + "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==", "dev": true, - "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, diff --git a/package.json b/package.json index 3ab56242dc7..b4974147812 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,6 @@ "release:verdaccio": "if [ \"$(npm config get registry)\" = \"https://registry.npmjs.org/\" ]; then echo 'Error: Using default registry' && exit 1; else TURBO_CONCURRENCY=4 npm run build && changeset publish --no-git-tag; fi", "test": "FORCE_COLOR=1 turbo test --concurrency=${TURBO_CONCURRENCY:-80%}", "test:cache:clear": "FORCE_COLOR=1 turbo test:cache:clear --continue --concurrency=${TURBO_CONCURRENCY:-80%}", - "test:ci": "FORCE_COLOR=1 turbo test --concurrency=${TURBO_CONCURRENCY:-80%}", "test:integration:base": "DEBUG=1 npx playwright test --config integration/playwright.config.ts", "test:integration:deployment:nextjs": "DEBUG=1 npx playwright test --config integration/playwright.deployments.config.ts", "test:integration:generic": "E2E_APP_ID=react.vite.* npm run test:integration:base -- --grep @generic", @@ -52,6 +51,7 @@ "@commitlint/config-conventional": "^17.7.0", "@emotion/jest": "^11.11.0", "@faker-js/faker": "^8.1.0", + "@playwright/test": "^1.39.0", "@testing-library/dom": "^8.19.0", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", diff --git a/packages/clerk-js/turbo.json b/packages/clerk-js/turbo.json index 07391097f92..2490ef4530a 100644 --- a/packages/clerk-js/turbo.json +++ b/packages/clerk-js/turbo.json @@ -39,26 +39,6 @@ "tsup.config.ts", "webpack.config.js", - "!**/__snapshots__/**", - "!coverage/**", - "!examples/**", - "!node_modules/**" - ] - }, - "test:ci": { - "dependsOn": ["build"], - "inputs": [ - "*.d.ts", - "**/package.json", - "bundlewatch.config.json", - "jest.*", - "src/**", - "tests/**", - "tsconfig.json", - "tsconfig.*.json", - "tsup.config.ts", - "webpack.config.js", - "!**/__snapshots__/**", "!coverage/**", "!examples/**", diff --git a/turbo.json b/turbo.json index debb80d97be..3f6b380e2e4 100644 --- a/turbo.json +++ b/turbo.json @@ -6,32 +6,25 @@ "globalDependencies": [ ".changeset/changelog.js", ".changeset/config.json", - ".dockerignore", ".github/**", ".jit", ".nvmrc", ".prettier*", "jest.*.ts", - "packages/eslint-config-custom/index.js", - "package.json", "package-lock.json", "tsconfig.json", "tsconfig.*.json", - "verdaccio.*.yaml" + "verdaccio.yaml" ], + "globalDotEnv": ["**/.env.local", "**/.env"], "globalEnv": [ - "CI", "CLERK_*", "GATSBY_CLERK_*", "NEXT_PUBLIC_CLERK_*", "MAILSAC_API_KEY", "NODE_ENV", - "NODE_EXTRA_CA_CERTS", "NODE_VERSION", "NPM_VERSION", - "RUNNER_ARCH", - "RUNNER_DEBUG", - "RUNNER_OS", "TZ", "VERCEL" ], @@ -72,6 +65,7 @@ }, "clean": { "dependsOn": [], + "cache": false }, "test": { @@ -98,27 +92,6 @@ "test:cache:clear": { "cache": false }, - "test:ci": { - "dependsOn": ["build"], - "inputs": [ - "*.d.ts", - "**/package.json", - "bundlewatch.config.json", - "jest.*", - "src/**", - "tests/**", - "tsconfig.json", - "tsconfig.*.json", - "tsup.config.ts", - - "!**/__snapshots__/**", - "!coverage/**", - "!examples/**", - "!node_modules/**" - ], - "outputMode": "new-only", - "outputs": [] - }, "lint": { "dependsOn": ["^build"], "outputs": [] diff --git a/verdaccio.yaml b/verdaccio.yaml new file mode 100644 index 00000000000..97478ce7f04 --- /dev/null +++ b/verdaccio.yaml @@ -0,0 +1,19 @@ +storage: ./.verdaccio/storage +auth: + htpasswd: + file: ./.verdaccio/htpasswd +uplinks: + npmjs: + url: https://registry.npmjs.org/ +packages: + '@clerk/*': + access: $all + publish: $all + 'gatsby-plugin-clerk': + access: $all + publish: $all + '**': + access: $all + publish: $all + proxy: npmjs +log: { type: stdout, format: pretty, level: http }