Browse Source

chore: Update CI workflows to support Node.js 24.x

David Höck 6 months ago
parent
commit
6704b245ef

+ 140 - 140
.github/workflows/build_and_test.yml

@@ -1,148 +1,148 @@
 name: Build & Test
 on:
-  push:
-    branches:
-      - master
-      - minor
-      - major
-    paths:
-      - 'packages/**'
-      - 'package.json'
-      - 'package-lock.json'
-  pull_request:
-    branches:
-        - master
-        - major
-        - minor
-    paths:
-        - 'packages/**'
-        - 'package.json'
-        - 'package-lock.json'
+    push:
+        branches:
+            - master
+            - minor
+            - major
+        paths:
+            - 'packages/**'
+            - 'package.json'
+            - 'package-lock.json'
+    pull_request:
+        branches:
+            - master
+            - major
+            - minor
+        paths:
+            - 'packages/**'
+            - 'package.json'
+            - 'package-lock.json'
 
 env:
-  CI: true
+    CI: true
 
 concurrency:
-  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
-  cancel-in-progress: true
+    group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
+    cancel-in-progress: true
 
 jobs:
-  codegen:
-    uses: ./.github/workflows/codegen.yml
-  build:
-    name: build
-    runs-on: ubuntu-latest
-    strategy:
-      matrix:
-        node: [ 20.x, 22.x ]
-    steps:
-      - uses: actions/checkout@v4
-      - name: Use Node.js ${{ matrix.node }}
-        uses: actions/setup-node@v4
-        with:
-          node-version: ${{ matrix.node }}
-      - name: npm install
-        run: |
-          npm install
-          npm install --os=linux --cpu=x64 sharp
-      - name: Build
-        run: npm run build
-  unit-tests:
-    name: unit tests
-    runs-on: ubuntu-latest
-    strategy:
-      matrix:
-        node: [ 20.x, 22.x ]
-    steps:
-      - uses: actions/checkout@v4
-      - name: Use Node.js ${{ matrix.node }}
-        uses: actions/setup-node@v4
-        with:
-          node-version: ${{ matrix.node }}
-      - name: npm install
-        run: |
-          npm install
-          npm install --os=linux --cpu=x64 sharp
-      - name: Build
-        run: npx lerna run ci
-      - name: Unit tests
-        run: npm run test
-  e2e-tests:
-    name: e2e tests
-    runs-on: ubuntu-latest
-    services:
-      mariadb:
-        # With v11.6.2+, a default was changed, (https://mariadb.com/kb/en/innodb-system-variables/#innodb_snapshot_isolation)
-        # which causes e2e test failures currently
-        image: bitnami/mariadb:11.5
-        env:
-          MARIADB_ROOT_USER: vendure
-          MARIADB_ROOT_PASSWORD: password
-        ports:
-          - 3306
-        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
-      mysql:
-        image: bitnami/mysql:8.0
-        env:
-          MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password
-          MYSQL_ROOT_USER: vendure
-          MYSQL_ROOT_PASSWORD: password
-        ports:
-          - 3306
-        options: --health-cmd="mysqladmin ping --silent" --health-interval=10s --health-timeout=20s --health-retries=10
-      postgres:
-        image: postgres:16
-        env:
-          POSTGRES_USER: vendure
-          POSTGRES_PASSWORD: password
-        ports:
-          - 5432
-        options: --health-cmd=pg_isready --health-interval=10s --health-timeout=5s --health-retries=3
-      elastic:
-        image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1
-        env:
-          discovery.type: single-node
-          bootstrap.memory_lock: true
-          ES_JAVA_OPTS: -Xms512m -Xmx512m
-          # Elasticsearch will force read-only mode when total available disk space is less than 5%. Since we will
-          # be running on a shared Azure instance with 84GB SSD, we easily go below 5% available even when there are still
-          # > 3GB free. So we set this value to an absolute one rather than a percentage to prevent all the Elasticsearch
-          # e2e tests from failing.
-          cluster.routing.allocation.disk.watermark.low: 500mb
-          cluster.routing.allocation.disk.watermark.high: 200mb
-          cluster.routing.allocation.disk.watermark.flood_stage: 100mb
-        ports:
-          - 9200
-        options: --health-cmd="curl --silent --fail localhost:9200/_cluster/health" --health-interval=10s --health-timeout=5s --health-retries=3
-      redis:
-        image: bitnami/redis:7.4.1
-        env:
-          ALLOW_EMPTY_PASSWORD: yes
-        ports:
-          - 6379
-    strategy:
-      fail-fast: false
-      matrix:
-        node: [ 20.x, 22.x ]
-        db: [ sqljs, mariadb, mysql, postgres ]
-    steps:
-      - uses: actions/checkout@v4
-      - name: Use Node.js ${{ matrix.node }}
-        uses: actions/setup-node@v4
-        with:
-          node-version: ${{ matrix.node }}
-      - name: npm install
-        run: |
-          npm install
-          npm install --os=linux --cpu=x64 sharp
-      - name: Build
-        run: npx lerna run ci
-      - name: e2e tests
-        env:
-          E2E_MYSQL_PORT: ${{ job.services.mysql.ports['3306'] }}
-          E2E_MARIADB_PORT: ${{ job.services.mariadb.ports['3306'] }}
-          E2E_POSTGRES_PORT: ${{ job.services.postgres.ports['5432'] }}
-          E2E_ELASTIC_PORT: ${{ job.services.elastic.ports['9200'] }}
-          E2E_REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
-          DB: ${{ matrix.db }}
-        run: npm run e2e
+    codegen:
+        uses: ./.github/workflows/codegen.yml
+    build:
+        name: build
+        runs-on: ubuntu-latest
+        strategy:
+            matrix:
+                node: [20.x, 22.x, 24.x]
+        steps:
+            - uses: actions/checkout@v4
+            - name: Use Node.js ${{ matrix.node }}
+              uses: actions/setup-node@v4
+              with:
+                  node-version: ${{ matrix.node }}
+            - name: npm install
+              run: |
+                  npm install
+                  npm install --os=linux --cpu=x64 sharp
+            - name: Build
+              run: npm run build
+    unit-tests:
+        name: unit tests
+        runs-on: ubuntu-latest
+        strategy:
+            matrix:
+                node: [20.x, 22.x, 24.x]
+        steps:
+            - uses: actions/checkout@v4
+            - name: Use Node.js ${{ matrix.node }}
+              uses: actions/setup-node@v4
+              with:
+                  node-version: ${{ matrix.node }}
+            - name: npm install
+              run: |
+                  npm install
+                  npm install --os=linux --cpu=x64 sharp
+            - name: Build
+              run: npx lerna run ci
+            - name: Unit tests
+              run: npm run test
+    e2e-tests:
+        name: e2e tests
+        runs-on: ubuntu-latest
+        services:
+            mariadb:
+                # With v11.6.2+, a default was changed, (https://mariadb.com/kb/en/innodb-system-variables/#innodb_snapshot_isolation)
+                # which causes e2e test failures currently
+                image: bitnami/mariadb:11.5
+                env:
+                    MARIADB_ROOT_USER: vendure
+                    MARIADB_ROOT_PASSWORD: password
+                ports:
+                    - 3306
+                options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
+            mysql:
+                image: bitnami/mysql:8.0
+                env:
+                    MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password
+                    MYSQL_ROOT_USER: vendure
+                    MYSQL_ROOT_PASSWORD: password
+                ports:
+                    - 3306
+                options: --health-cmd="mysqladmin ping --silent" --health-interval=10s --health-timeout=20s --health-retries=10
+            postgres:
+                image: postgres:16
+                env:
+                    POSTGRES_USER: vendure
+                    POSTGRES_PASSWORD: password
+                ports:
+                    - 5432
+                options: --health-cmd=pg_isready --health-interval=10s --health-timeout=5s --health-retries=3
+            elastic:
+                image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1
+                env:
+                    discovery.type: single-node
+                    bootstrap.memory_lock: true
+                    ES_JAVA_OPTS: -Xms512m -Xmx512m
+                    # Elasticsearch will force read-only mode when total available disk space is less than 5%. Since we will
+                    # be running on a shared Azure instance with 84GB SSD, we easily go below 5% available even when there are still
+                    # > 3GB free. So we set this value to an absolute one rather than a percentage to prevent all the Elasticsearch
+                    # e2e tests from failing.
+                    cluster.routing.allocation.disk.watermark.low: 500mb
+                    cluster.routing.allocation.disk.watermark.high: 200mb
+                    cluster.routing.allocation.disk.watermark.flood_stage: 100mb
+                ports:
+                    - 9200
+                options: --health-cmd="curl --silent --fail localhost:9200/_cluster/health" --health-interval=10s --health-timeout=5s --health-retries=3
+            redis:
+                image: bitnami/redis:7.4.1
+                env:
+                    ALLOW_EMPTY_PASSWORD: yes
+                ports:
+                    - 6379
+        strategy:
+            fail-fast: false
+            matrix:
+                node: [20.x, 22.x, 24.x]
+                db: [sqljs, mariadb, mysql, postgres]
+        steps:
+            - uses: actions/checkout@v4
+            - name: Use Node.js ${{ matrix.node }}
+              uses: actions/setup-node@v4
+              with:
+                  node-version: ${{ matrix.node }}
+            - name: npm install
+              run: |
+                  npm install
+                  npm install --os=linux --cpu=x64 sharp
+            - name: Build
+              run: npx lerna run ci
+            - name: e2e tests
+              env:
+                  E2E_MYSQL_PORT: ${{ job.services.mysql.ports['3306'] }}
+                  E2E_MARIADB_PORT: ${{ job.services.mariadb.ports['3306'] }}
+                  E2E_POSTGRES_PORT: ${{ job.services.postgres.ports['5432'] }}
+                  E2E_ELASTIC_PORT: ${{ job.services.elastic.ports['9200'] }}
+                  E2E_REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
+                  DB: ${{ matrix.db }}
+              run: npm run e2e

+ 119 - 119
.github/workflows/build_test_dashboard.yml

@@ -1,132 +1,132 @@
 name: 'Build & Test Dashboard'
 
 on:
-  push:
-    branches:
-      - minor
-      - major
-      - master
-    paths:
-      - 'packages/dashboard/**'
-      - 'package.json'
-      - 'package-lock.json'
-  pull_request:
-    branches:
-      - master
-      - major
-      - minor
-    paths:
-      - 'packages/dashboard/**'
-      - 'package.json'
-      - 'package-lock.json'
-  workflow_dispatch:
+    push:
+        branches:
+            - minor
+            - major
+            - master
+        paths:
+            - 'packages/dashboard/**'
+            - 'package.json'
+            - 'package-lock.json'
+    pull_request:
+        branches:
+            - master
+            - major
+            - minor
+        paths:
+            - 'packages/dashboard/**'
+            - 'package.json'
+            - 'package-lock.json'
+    workflow_dispatch:
 
 permissions:
-  contents: read
-  packages: write
+    contents: read
+    packages: write
 
 env:
-  NODE_OPTIONS: '--max_old_space_size=4096'
+    NODE_OPTIONS: '--max_old_space_size=4096'
 
 defaults:
-  run:
-    shell: bash
+    run:
+        shell: bash
 
 concurrency:
-  group: ${{ github.workflow }}-${{ github.ref }}
-  cancel-in-progress: true
+    group: ${{ github.workflow }}-${{ github.ref }}
+    cancel-in-progress: true
 
 jobs:
-  publish_install:
-    runs-on: ${{ matrix.os }}
-    strategy:
-      matrix:
-        os: [ ubuntu-latest ]
-        node-version: [ 22.x ]
-      fail-fast: false
-    steps:
-      - uses: actions/checkout@v4
-      - name: Use Node.js ${{ matrix.node-version }}
-        uses: actions/setup-node@v4
-        with:
-          node-version: ${{ matrix.node-version }}
-      - name: Install Verdaccio
-        run: |
-          npm install -g verdaccio
-          npm install -g wait-on
-          tmp_registry_log=`mktemp`
-          mkdir -p $HOME/.config/verdaccio
-          cp -v ./.github/workflows/verdaccio/config.yaml $HOME/.config/verdaccio/config.yaml
-          nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
-          wait-on http://localhost:4873
-          TOKEN_RES=$(curl -XPUT \
-            -H "Content-type: application/json" \
-            -d '{ "name": "test", "password": "test" }' \
-            'http://localhost:4873/-/user/org.couchdb.user:test')
-          TOKEN=$(echo "$TOKEN_RES" | jq -r '.token')
-          npm set //localhost:4873/:_authToken $TOKEN
-      - name: npm install
-        run: |
-          npm install
-        env:
-          CI: true
-      - name: Check for banned imports
-        run: |
-          cd $GITHUB_WORKSPACE/packages/dashboard
-          node scripts/check-lib-imports.js
-      - name: Build & publish dashboard
-        run: |
-          nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
-          wait-on http://localhost:4873
-          npx lerna run build --scope @vendure/common --scope @vendure/core
-          cd packages/dashboard
-          npm run build:standalone
-          npm run build
-          npm version prepatch --preid ci --no-git-tag-version --no-commit-hooks
-          npm publish --no-push --yes --tag ci --registry http://localhost:4873
-      - name: Set up new Vendure app
-        run: |
-          mkdir -p $HOME/install
-          cd $HOME/install
-          nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
-          wait-on http://localhost:4873
-          npx @vendure/create@latest test-app --ci --use-npm --log-level info
-      - name: Install dashboard
-        run: |
-          nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
-          wait-on http://localhost:4873
-          cd $HOME/install/test-app
-          npm install @vendure/dashboard@ci --registry=http://localhost:4873
-          cp -v $GITHUB_WORKSPACE/.github/workflows/scripts/vite.config.mts ./vite.config.mts
-      - name: Install Playwright
-        run: |
-          cd $GITHUB_WORKSPACE
-          npm install playwright
-          npx playwright install-deps
-          npx playwright install chromium
-      - name: Start dashboard and run tests
-        run: |
-          cd $HOME/install/test-app
-          # start the dev server in the background
-          npm run dev &
-          DEV_PID=$!
-          # Wait a moment for it to start
-          sleep 5
-          # Start the dashboard in the background
-          npx vite --port 5173 &
-          DASHBOARD_PID=$!
-          # Wait a moment for it to start
-          sleep 5
-          # Run the dashboard tests
-          node $GITHUB_WORKSPACE/.github/workflows/scripts/dashboard-tests.js
-          # Clean up dashboard process
-          kill $DASHBOARD_PID 2>/dev/null || true
-          # Clean up dev server process
-          kill $DEV_PID 2>/dev/null || true
-      - name: Upload dashboard test screenshots
-        if: always()
-        uses: actions/upload-artifact@v4
-        with:
-          name: dashboard-test-screenshots-${{ matrix.os }}-${{ matrix.node-version }}
-          path: /tmp/dashboard-test-*.png
-          retention-days: 28
+    publish_install:
+        runs-on: ${{ matrix.os }}
+        strategy:
+            matrix:
+                os: [ubuntu-latest]
+                node-version: [20.x, 22.x, 24.x]
+            fail-fast: false
+        steps:
+            - uses: actions/checkout@v4
+            - name: Use Node.js ${{ matrix.node-version }}
+              uses: actions/setup-node@v4
+              with:
+                  node-version: ${{ matrix.node-version }}
+            - name: Install Verdaccio
+              run: |
+                  npm install -g verdaccio
+                  npm install -g wait-on
+                  tmp_registry_log=`mktemp`
+                  mkdir -p $HOME/.config/verdaccio
+                  cp -v ./.github/workflows/verdaccio/config.yaml $HOME/.config/verdaccio/config.yaml
+                  nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
+                  wait-on http://localhost:4873
+                  TOKEN_RES=$(curl -XPUT \
+                    -H "Content-type: application/json" \
+                    -d '{ "name": "test", "password": "test" }' \
+                    'http://localhost:4873/-/user/org.couchdb.user:test')
+                  TOKEN=$(echo "$TOKEN_RES" | jq -r '.token')
+                  npm set //localhost:4873/:_authToken $TOKEN
+            - name: npm install
+              run: |
+                  npm install
+              env:
+                  CI: true
+            - name: Check for banned imports
+              run: |
+                  cd $GITHUB_WORKSPACE/packages/dashboard
+                  node scripts/check-lib-imports.js
+            - name: Build & publish dashboard
+              run: |
+                  nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
+                  wait-on http://localhost:4873
+                  npx lerna run build --scope @vendure/common --scope @vendure/core
+                  cd packages/dashboard
+                  npm run build:standalone
+                  npm run build
+                  npm version prepatch --preid ci --no-git-tag-version --no-commit-hooks
+                  npm publish --no-push --yes --tag ci --registry http://localhost:4873
+            - name: Set up new Vendure app
+              run: |
+                  mkdir -p $HOME/install
+                  cd $HOME/install
+                  nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
+                  wait-on http://localhost:4873
+                  npx @vendure/create@latest test-app --ci --use-npm --log-level info
+            - name: Install dashboard
+              run: |
+                  nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
+                  wait-on http://localhost:4873
+                  cd $HOME/install/test-app
+                  npm install @vendure/dashboard@ci --registry=http://localhost:4873
+                  cp -v $GITHUB_WORKSPACE/.github/workflows/scripts/vite.config.mts ./vite.config.mts
+            - name: Install Playwright
+              run: |
+                  cd $GITHUB_WORKSPACE
+                  npm install playwright
+                  npx playwright install-deps
+                  npx playwright install chromium
+            - name: Start dashboard and run tests
+              run: |
+                  cd $HOME/install/test-app
+                  # start the dev server in the background
+                  npm run dev &
+                  DEV_PID=$!
+                  # Wait a moment for it to start
+                  sleep 5
+                  # Start the dashboard in the background
+                  npx vite --port 5173 &
+                  DASHBOARD_PID=$!
+                  # Wait a moment for it to start
+                  sleep 5
+                  # Run the dashboard tests
+                  node $GITHUB_WORKSPACE/.github/workflows/scripts/dashboard-tests.js
+                  # Clean up dashboard process
+                  kill $DASHBOARD_PID 2>/dev/null || true
+                  # Clean up dev server process
+                  kill $DEV_PID 2>/dev/null || true
+            - name: Upload dashboard test screenshots
+              if: always()
+              uses: actions/upload-artifact@v4
+              with:
+                  name: dashboard-test-screenshots-${{ matrix.os }}-${{ matrix.node-version }}
+                  path: /tmp/dashboard-test-*.png
+                  retention-days: 28

+ 77 - 77
.github/workflows/publish_and_install.yml

@@ -1,85 +1,85 @@
 name: Publish & Install
 on:
-  push:
-    branches:
-      - master
-      - minor
-      - major
-    paths:
-      - 'packages/**'
-      - 'package.json'
-      - 'package-lock.json'
-  pull_request:
-    branches:
-      - master
-      - major
-      - minor
-    paths:
-      - 'packages/**'
-      - 'package.json'
-      - 'package-lock.json'
+    push:
+        branches:
+            - master
+            - minor
+            - major
+        paths:
+            - 'packages/**'
+            - 'package.json'
+            - 'package-lock.json'
+    pull_request:
+        branches:
+            - master
+            - major
+            - minor
+        paths:
+            - 'packages/**'
+            - 'package.json'
+            - 'package-lock.json'
 
 defaults:
-  run:
-    shell: bash
+    run:
+        shell: bash
 
 concurrency:
-  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
-  cancel-in-progress: true
+    group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
+    cancel-in-progress: true
 
 jobs:
-  publish_install:
-    runs-on: ${{ matrix.os }}
-    strategy:
-      matrix:
-        os: [ ubuntu-latest, windows-latest, macos-latest ]
-        node-version: [ 20.x, 22.x ]
-      fail-fast: false
-    steps:
-      - uses: actions/checkout@v4
-      - name: Use Node.js ${{ matrix.node-version }}
-        uses: actions/setup-node@v4
-        with:
-          node-version: ${{ matrix.node-version }}
-      - name: Install Verdaccio
-        run: |
-          npm install -g verdaccio
-          npm install -g wait-on
-          tmp_registry_log=`mktemp`
-          mkdir -p $HOME/.config/verdaccio
-          cp -v ./.github/workflows/verdaccio/config.yaml $HOME/.config/verdaccio/config.yaml
-          nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
-          wait-on http://localhost:4873
-          TOKEN_RES=$(curl -XPUT \
-            -H "Content-type: application/json" \
-            -d '{ "name": "test", "password": "test" }' \
-            'http://localhost:4873/-/user/org.couchdb.user:test')
-          TOKEN=$(echo "$TOKEN_RES" | jq -r '.token')
-          npm set //localhost:4873/:_authToken $TOKEN
-      - name: Windows dependencies
-        if: matrix.os == 'windows-latest'
-        run: npm install -g @angular/cli
-      - name: npm install
-        run: |
-          npm install
-        env:
-          CI: true
-      - name: Publish to Verdaccio
-        run: |
-          nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
-          wait-on http://localhost:4873
-          npx lerna publish prepatch --preid ci --no-push --no-git-tag-version --no-commit-hooks --force-publish "*" --yes --dist-tag ci --registry http://localhost:4873
-      - name: Install via @vendure/create
-        run: |
-          mkdir -p $HOME/install
-          cd $HOME/install
-          nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
-          wait-on http://localhost:4873
-          npm set registry=http://localhost:4873
-          npm dist-tag ls @vendure/create
-          npx @vendure/create@ci test-app --ci --use-npm --log-level info
-      - name: Server smoke tests
-        run: |
-          cd $HOME/install/test-app
-          npm run dev &
-          node $GITHUB_WORKSPACE/.github/workflows/scripts/smoke-tests
+    publish_install:
+        runs-on: ${{ matrix.os }}
+        strategy:
+            matrix:
+                os: [ubuntu-latest, windows-latest, macos-latest]
+                node-version: [20.x, 22.x, 24.x]
+            fail-fast: false
+        steps:
+            - uses: actions/checkout@v4
+            - name: Use Node.js ${{ matrix.node-version }}
+              uses: actions/setup-node@v4
+              with:
+                  node-version: ${{ matrix.node-version }}
+            - name: Install Verdaccio
+              run: |
+                  npm install -g verdaccio
+                  npm install -g wait-on
+                  tmp_registry_log=`mktemp`
+                  mkdir -p $HOME/.config/verdaccio
+                  cp -v ./.github/workflows/verdaccio/config.yaml $HOME/.config/verdaccio/config.yaml
+                  nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
+                  wait-on http://localhost:4873
+                  TOKEN_RES=$(curl -XPUT \
+                    -H "Content-type: application/json" \
+                    -d '{ "name": "test", "password": "test" }' \
+                    'http://localhost:4873/-/user/org.couchdb.user:test')
+                  TOKEN=$(echo "$TOKEN_RES" | jq -r '.token')
+                  npm set //localhost:4873/:_authToken $TOKEN
+            - name: Windows dependencies
+              if: matrix.os == 'windows-latest'
+              run: npm install -g @angular/cli
+            - name: npm install
+              run: |
+                  npm install
+              env:
+                  CI: true
+            - name: Publish to Verdaccio
+              run: |
+                  nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
+                  wait-on http://localhost:4873
+                  npx lerna publish prepatch --preid ci --no-push --no-git-tag-version --no-commit-hooks --force-publish "*" --yes --dist-tag ci --registry http://localhost:4873
+            - name: Install via @vendure/create
+              run: |
+                  mkdir -p $HOME/install
+                  cd $HOME/install
+                  nohup verdaccio --config $HOME/.config/verdaccio/config.yaml &
+                  wait-on http://localhost:4873
+                  npm set registry=http://localhost:4873
+                  npm dist-tag ls @vendure/create
+                  npx @vendure/create@ci test-app --ci --use-npm --log-level info
+            - name: Server smoke tests
+              run: |
+                  cd $HOME/install/test-app
+                  npm run dev &
+                  node $GITHUB_WORKSPACE/.github/workflows/scripts/smoke-tests