diff --git a/.github/read-me.md b/.github/read-me.md index 36d77eefc6..0595bdc54e 100644 --- a/.github/read-me.md +++ b/.github/read-me.md @@ -105,6 +105,61 @@ Most workflows use minimal permissions. The comment-triggered workflows require: - `pull-requests: write` - To post comments and reactions - `actions: write` - To trigger other workflows +## Manually Triggering Workflows + +Many workflows support manual triggering via `workflow_dispatch`, which allows you to run them on-demand from any branch. + +### Using the GitHub UI + +**Important**: The "Run workflow" button only appears for workflows that exist on the **default branch (master)**. If you've added or modified a workflow in a feature branch, you won't see the button until the workflow is merged to master. + +To manually trigger a workflow in the GitHub UI: + +1. Go to the **Actions** tab in the repository +2. Select the workflow from the left sidebar (e.g., "JS unit tests for Renderer package") +3. Click the **"Run workflow"** dropdown button (top right) +4. Select the branch you want to run it on +5. Configure any input parameters (e.g., `force_run` to bypass change detection) +6. Click **"Run workflow"** + +### Using the GitHub CLI + +You can trigger workflows from the command line without waiting for them to be merged to master: + +```bash +# Basic manual trigger on current branch +gh workflow run package-js-tests.yml + +# Trigger on a specific branch (e.g., master) +gh workflow run package-js-tests.yml --ref master + +# Trigger with force_run parameter to bypass change detection +gh workflow run package-js-tests.yml --ref master -f force_run=true + +# List available workflows +gh workflow list + +# View recent workflow runs +gh run list --workflow=package-js-tests.yml +``` + +### Workflows Supporting Manual Triggers + +The following workflows can be manually triggered with `workflow_dispatch`: + +- **`package-js-tests.yml`** - Accepts `force_run` parameter (boolean) to bypass change detection +- **`lint-js-and-ruby.yml`** - Accepts `force_run` parameter (boolean) to bypass change detection +- **`playwright.yml`** - Can be triggered manually (does not accept `force_run` parameter) + +Other workflows may also support `workflow_dispatch`. Check individual workflow files in `.github/workflows/` for `workflow_dispatch` configuration and available input parameters. + +### Why Use Manual Triggers? + +- **Test workflow changes** before merging (via CLI only until merged to master) +- **Re-run CI on master** without making a new commit +- **Force full test suite** on a branch using `force_run=true` +- **Debug CI issues** by running workflows on specific commits + ## Conditional Execution Many workflows use change detection to skip unnecessary jobs: diff --git a/.github/workflows/pro-test-package-and-gem.yml b/.github/workflows/pro-test-package-and-gem.yml index eb094d8d67..3a45732976 100644 --- a/.github/workflows/pro-test-package-and-gem.yml +++ b/.github/workflows/pro-test-package-and-gem.yml @@ -240,6 +240,10 @@ jobs: sudo yarn global add yalc yarn install --frozen-lockfile --no-progress --no-emoji + - name: Setup test environment for node-renderer tests + working-directory: . + run: bash packages/react-on-rails-pro-node-renderer/scripts/setup-test-env.sh + - name: Run JS unit tests for Pro package run: yarn workspace react-on-rails-pro-node-renderer run ci env: diff --git a/packages/react-on-rails-pro-node-renderer/package.json b/packages/react-on-rails-pro-node-renderer/package.json index fe88a15ab9..49e05dd576 100644 --- a/packages/react-on-rails-pro-node-renderer/package.json +++ b/packages/react-on-rails-pro-node-renderer/package.json @@ -118,6 +118,7 @@ "./tests/helper.ts" ], "testEnvironment": "node", + "testTimeout": 30000, "transform": { "^.+\\.[jt]sx?$": "babel-jest" } diff --git a/packages/react-on-rails-pro-node-renderer/scripts/setup-test-env.sh b/packages/react-on-rails-pro-node-renderer/scripts/setup-test-env.sh new file mode 100755 index 0000000000..cc7c8076e3 --- /dev/null +++ b/packages/react-on-rails-pro-node-renderer/scripts/setup-test-env.sh @@ -0,0 +1,62 @@ +#!/bin/bash +set -e + +# The node-renderer tests expect webpack bundles at spec/dummy/ssr-generated/ +# but they're only built in react_on_rails_pro/spec/dummy/ssr-generated/ +# This script copies them to the expected location for testing. +# +# This is necessary because: +# 1. The Pro dummy app (react_on_rails_pro/spec/dummy) has webpack configured +# 2. The node-renderer tests need to reference those built bundles +# 3. Tests run in packages/react-on-rails-pro-node-renderer/tests/ +# 4. Test fixtures reference bundles at spec/dummy/ssr-generated (workspace root dummy app) + +echo "Setting up test environment for react-on-rails-pro-node-renderer..." + +# Determine the script's directory +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PACKAGE_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +WORKSPACE_ROOT="$(cd "$PACKAGE_DIR/../.." && pwd)" +PRO_DUMMY="$WORKSPACE_ROOT/react_on_rails_pro/spec/dummy" +ROOT_DUMMY="$WORKSPACE_ROOT/spec/dummy" + +# Check if bundles exist in Pro dummy +if [ ! -f "$PRO_DUMMY/ssr-generated/server-bundle.js" ] || [ ! -f "$PRO_DUMMY/ssr-generated/rsc-bundle.js" ]; then + echo "ERROR: Test bundles not found in $PRO_DUMMY/ssr-generated/" + echo "Please run 'yarn build:test' in react_on_rails_pro/spec/dummy first." + exit 1 +fi + +# Create directories for bundle copies +echo "Creating bundle directories..." +mkdir -p "$ROOT_DUMMY/ssr-generated" +mkdir -p "$ROOT_DUMMY/public/webpack/test" + +# Copy bundles to expected locations +echo "Copying bundles to test locations..." +cp "$PRO_DUMMY/ssr-generated"/*.js "$ROOT_DUMMY/ssr-generated/" + +# Copy or create manifest files +echo "Copying manifest files..." +if [ -f "$PRO_DUMMY/public/webpack/test/react-client-manifest.json" ]; then + cp "$PRO_DUMMY/public/webpack/test/react-client-manifest.json" "$ROOT_DUMMY/public/webpack/test/" +else + echo "{}" > "$ROOT_DUMMY/public/webpack/test/react-client-manifest.json" +fi + +if [ -f "$PRO_DUMMY/ssr-generated/react-server-client-manifest.json" ]; then + cp "$PRO_DUMMY/ssr-generated/react-server-client-manifest.json" "$ROOT_DUMMY/ssr-generated/" +else + echo "{}" > "$ROOT_DUMMY/ssr-generated/react-server-client-manifest.json" +fi + +echo "✓ Test environment setup complete!" +echo "" +echo "Bundles copied from:" +echo " $PRO_DUMMY/ssr-generated/" +echo "To:" +echo " $ROOT_DUMMY/ssr-generated/" +echo "" +echo "You can now run tests with:" +echo " cd packages/react-on-rails-pro-node-renderer" +echo " yarn test tests/htmlStreaming.test.js" diff --git a/packages/react-on-rails-pro-node-renderer/tests/vm.test.ts b/packages/react-on-rails-pro-node-renderer/tests/vm.test.ts index 03e615ab81..d3214fc481 100644 --- a/packages/react-on-rails-pro-node-renderer/tests/vm.test.ts +++ b/packages/react-on-rails-pro-node-renderer/tests/vm.test.ts @@ -193,7 +193,8 @@ describe('buildVM and runInVM', () => { }); test('FriendsAndGuests bundle for commit 1a7fe417 requires supportModules false', async () => { - expect.assertions(10); + // Testing 5 components with 3 assertions each (HTML structure, no rendering errors, length check) + expect.assertions(15); const project = 'friendsandguests'; const commit = '1a7fe417'; @@ -215,7 +216,8 @@ describe('buildVM and runInVM', () => { ); const welcomePageRenderingResult = await runInVM(welcomePageComponentRenderingRequest, serverBundlePath); // React 19 removed data-react-checksum, verify component rendered successfully - expect(welcomePageRenderingResult as string).toContain('<'); + expect(welcomePageRenderingResult as string).toContain('