diff --git a/.github/workflows/smoke-test.yml b/.github/workflows/smoke-test.yml new file mode 100644 index 000000000..49e4943f3 --- /dev/null +++ b/.github/workflows/smoke-test.yml @@ -0,0 +1,37 @@ +name: smoke-test + +on: + # Always run smoke tests upon a successful + # "ci" job completion on "main". + workflow_run: + workflows: ['ci'] + branches: [main] + types: [completed] + # Also allow on-demand smoke test runs. + # Useful when testing a particular branch + # for compatibility with the examples. + workflow_dispatch: + +jobs: + examples: + if: ${{ github.event.workflow_run.conclusion == 'success' }} + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Set up PNPM + uses: pnpm/action-setup@v2 + with: + version: 7.12 + + - name: Install dependencies + run: pnpm install + + - name: Test examples + run: ./config/scripts/smoke-test.sh diff --git a/.gitignore b/.gitignore index f8458255a..db26fa845 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,8 @@ stats.html msw-*.tgz .husky/_ .env -**/test-results \ No newline at end of file +**/test-results + +# Smoke test temporary files. +/package.json.copy +/examples \ No newline at end of file diff --git a/config/scripts/smoke-test.sh b/config/scripts/smoke-test.sh new file mode 100755 index 000000000..f3b2650ab --- /dev/null +++ b/config/scripts/smoke-test.sh @@ -0,0 +1,41 @@ +#!/bin/bash +set -e + +COMMIT_HASH=$(git rev-parse HEAD) +MSW_VERSION="0.0.0-$COMMIT_HASH" +echo "Latest commit: $COMMIT_HASH" +echo "In-progress MSW version: $MSW_VERSION" + +PKG_JSON_COPY="package.json.copy" +cp package.json $PKG_JSON_COPY + +pnpm version $MSW_VERSION --no-git-tag-version --allow-same-version + +echo "" +echo "Packing MSW..." +pnpm pack + +EXAMPLES_REPO=https://github.com/mswjs/examples.git +EXAMPLES_DIR=./examples +echo "" +echo "Cloning the examples from "$EXAMPLES_REPO"..." + +if [[ -d "$EXAMPLES_DIR" ]]; then + echo "Examples already cloned, skipping..." +else + git clone $EXAMPLES_REPO $EXAMPLES_DIR +fi + +echo "" +echo "Installing dependencies..." +cd $EXAMPLES_DIR +pnpm install + +echo "" +echo "Linking MSW..." +pnpm add msw --filter="with-*" file:../../../msw-$MSW_VERSION.tgz +pnpm ls msw + +echo "" +echo "Running tests..." +CI=1 pnpm test ; (cd ../ && mv $PKG_JSON_COPY ./package.json)