Browse Source

chore: Update README and split current workflows (#3417)

David Höck 10 months ago
parent
commit
62d5584e48

+ 125 - 0
.github/workflows/build_and_test_branches.yml

@@ -0,0 +1,125 @@
+name: Build & Test Branches
+on:
+    push:
+        branches:
+            - major
+            - minor
+            - parallel-e2e
+env:
+    CI: true
+jobs:
+    build:
+        name: build
+        runs-on: ubuntu-latest
+        strategy:
+            matrix:
+                node: [18.x, 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: [18.x, 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:
+                image: bitnami/mariadb:10.3
+                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: [18.x, 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

+ 123 - 0
.github/workflows/build_and_test_master.yml

@@ -0,0 +1,123 @@
+name: Build & Test Master
+on:
+    push:
+        branches:
+            - master
+env:
+    CI: true
+jobs:
+    build:
+        name: build
+        runs-on: ubuntu-latest
+        strategy:
+            matrix:
+                node: [18.x, 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: [18.x, 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:
+                image: bitnami/mariadb:10.3
+                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: [18.x, 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

+ 125 - 0
.github/workflows/build_and_test_pr.yml

@@ -0,0 +1,125 @@
+name: Build & Test PR
+on:
+    pull_request:
+        branches:
+            - master
+            - major
+            - minor
+env:
+    CI: true
+jobs:
+    build:
+        name: build
+        runs-on: ubuntu-latest
+        strategy:
+            matrix:
+                node: [18.x, 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: [18.x, 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:
+                image: bitnami/mariadb:10.3
+                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: [18.x, 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

+ 66 - 0
.github/workflows/publish_and_install_branches.yml

@@ -0,0 +1,66 @@
+name: Publish & Install Branches
+on:
+    push:
+        branches:
+            - major
+            - minor
+            - parallel-e2e
+defaults:
+    run:
+        shell: bash
+jobs:
+    publish_install:
+        runs-on: ${{ matrix.os }}
+        strategy:
+            matrix:
+                os: [ubuntu-latest, windows-latest, macos-latest]
+                node-version: [18.x, 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

+ 64 - 0
.github/workflows/publish_and_install_master.yml

@@ -0,0 +1,64 @@
+name: Publish & Install Master
+on:
+    push:
+        branches:
+            - master
+defaults:
+    run:
+        shell: bash
+jobs:
+    publish_install:
+        runs-on: ${{ matrix.os }}
+        strategy:
+            matrix:
+                os: [ubuntu-latest, windows-latest, macos-latest]
+                node-version: [18.x, 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

+ 66 - 0
.github/workflows/publish_and_install_pr.yml

@@ -0,0 +1,66 @@
+name: Publish & Install PR
+on:
+    pull_request:
+        branches:
+            - master
+            - major
+            - minor
+defaults:
+    run:
+        shell: bash
+jobs:
+    publish_install:
+        runs-on: ${{ matrix.os }}
+        strategy:
+            matrix:
+                os: [ubuntu-latest, windows-latest, macos-latest]
+                node-version: [18.x, 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

+ 20 - 19
README.md

@@ -7,18 +7,17 @@ An open-source headless commerce platform built on [Node.js](https://nodejs.org)
 > Expected release of the alpha version is end of March. We're phasing out our Angular-based Admin UI with support until June 2026.
 > [Read more >>](https://vendure.io/blog/2025/02/vendure-react-admin-ui)
 
-[![Build Status](https://github.com/vendure-ecommerce/vendure/workflows/Build%20&%20Test/badge.svg)](https://github.com/vendure-ecommerce/vendure/actions) 
-[![Publish & Install](https://github.com/vendure-ecommerce/vendure/workflows/Publish%20&%20Install/badge.svg)](https://github.com/vendure-ecommerce/vendure/actions/workflows/publish_and_install.yml)
+[![Build Status](https://github.com/vendure-ecommerce/vendure/workflows/Build%20&%20Test%20Master/badge.svg?branch=master)](https://github.com/vendure-ecommerce/vendure/actions/workflows/build_and_test_master.yml)
+[![Publish & Install](https://github.com/vendure-ecommerce/vendure/workflows/Publish%20&%20Install%20Master/badge.svg?branch=master)](https://github.com/vendure-ecommerce/vendure/actions/workflows/publish_and_install_master.yml)
 [![Lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)
 
 ![vendure-github-social-banner](https://github.com/vendure-ecommerce/vendure/assets/24294584/ada25fa3-185d-45ce-896d-bece3685a829)
 
-
 ### [www.vendure.io](https://www.vendure.io/)
 
-* [Getting Started](https://docs.vendure.io/guides/getting-started/installation/): Get Vendure up and running locally in a matter of minutes with a single command
-* [Request Demo](https://vendure.io/demo)
-* [Vendure Discord](https://www.vendure.io/community): Join us on Discord for support and answers to your questions
+- [Getting Started](https://docs.vendure.io/guides/getting-started/installation/): Get Vendure up and running locally in a matter of minutes with a single command
+- [Request Demo](https://vendure.io/demo)
+- [Vendure Discord](https://www.vendure.io/community): Join us on Discord for support and answers to your questions
 
 ## Branches
 
@@ -46,8 +45,7 @@ vendure/
 ## Development
 
 > [!IMPORTANT]
-> The following instructions are for those who want to develop the Vendure core framework or plugins (e.g. if you intend to make a pull request). For instructions on how to build a project *using* Vendure, please see the [Getting Started guide](https://docs.vendure.io/guides/getting-started/installation/).
-
+> The following instructions are for those who want to develop the Vendure core framework or plugins (e.g. if you intend to make a pull request). For instructions on how to build a project _using_ Vendure, please see the [Getting Started guide](https://docs.vendure.io/guides/getting-started/installation/).
 
 ### 1. Install top-level dependencies
 
@@ -55,9 +53,9 @@ vendure/
 
 The root directory has a `package.json` which contains build-related dependencies for tasks including:
 
-* Building & deploying the docs 
-* Generating TypeScript types from the GraphQL schema
-* Linting, formatting & testing tasks to run on git commit & push
+- Building & deploying the docs
+- Generating TypeScript types from the GraphQL schema
+- Linting, formatting & testing tasks to run on git commit & push
 
 ### 2. Build all packages
 
@@ -94,10 +92,10 @@ The first step is to populate the dev server with some test data:
 cd packages/dev-server
 
 [DB=mysql|postres|sqlite] npm run populate
- ```
+```
 
 If you do not specify the `DB` variable, it will default to "mysql". If you specifically want to develop against Postgres,
-you need to run the `postgres_16` container and then run `DB=postgres npm run populate`. 
+you need to run the `postgres_16` container and then run `DB=postgres npm run populate`.
 
 ### 5. Run the dev server
 
@@ -118,6 +116,7 @@ This will auto restart when you make changes to the admin ui. You don't need thi
 to test backend changes.
 
 ### Testing your changes locally
+
 This example shows how to test changes to the `payments-plugin` package locally, but it will also work for other packages.
 
 1. Open 2 terminal windows:
@@ -130,7 +129,9 @@ This example shows how to test changes to the `payments-plugin` package locally,
 cd packages/payments-plugin
 npm run watch
 ```
+
 :warning: If you are developing changes for the `core`package, you also need to watch the `common` package:
+
 ```shell
 # Terminal 1
 # Root of the project
@@ -157,11 +158,11 @@ To debug the dev server with VS Code use the include [launch.json](/.vscode/laun
 
 Running `npm run codegen` will generate the following files:
 
-* [`packages/common/src/generated-types.ts`](./packages/common/src/generated-types.ts): Types, Inputs & resolver args relating to the Admin API
-* [`packages/common/src/generated-shop-types.ts`](./packages/common/src/generated-shop-types.ts): Types, Inputs & resolver args relating to the Shop API
-* [`packages/admin-ui/src/lib/core/src/common/generated-types.ts`](./packages/admin-ui/src/lib/core/src/common/generated-types.ts): Types & operations relating to the admin-ui queries & mutations.
-* [`packages/admin-ui/src/lib/core/src/common/introspection-result.ts`](./packages/admin-ui/src/lib/core/src/common/introspection-result.ts): Used by the Apollo Client [`IntrospectionFragmentMatcher`](https://www.apollographql.com/docs/react/data/fragments/#fragments-on-unions-and-interfaces) to correctly handle fragments in the Admin UI.
-* Also generates types used in e2e tests in those packages which feature e2e tests (core, elasticsearch-plugin, asset-server-plugin etc).
+- [`packages/common/src/generated-types.ts`](./packages/common/src/generated-types.ts): Types, Inputs & resolver args relating to the Admin API
+- [`packages/common/src/generated-shop-types.ts`](./packages/common/src/generated-shop-types.ts): Types, Inputs & resolver args relating to the Shop API
+- [`packages/admin-ui/src/lib/core/src/common/generated-types.ts`](./packages/admin-ui/src/lib/core/src/common/generated-types.ts): Types & operations relating to the admin-ui queries & mutations.
+- [`packages/admin-ui/src/lib/core/src/common/introspection-result.ts`](./packages/admin-ui/src/lib/core/src/common/introspection-result.ts): Used by the Apollo Client [`IntrospectionFragmentMatcher`](https://www.apollographql.com/docs/react/data/fragments/#fragments-on-unions-and-interfaces) to correctly handle fragments in the Admin UI.
+- Also generates types used in e2e tests in those packages which feature e2e tests (core, elasticsearch-plugin, asset-server-plugin etc).
 
 ### Testing
 
@@ -189,7 +190,7 @@ To make a release:
 
 ##### 1. `npm run publish-release`
 
-It will run `lerna publish` which will prompt for which version to update to. Although we are using [conventional commits](https://www.conventionalcommits.org), the version is not automatically being calculated from the commit messages. Therefore the next version should be manually selected. 
+It will run `lerna publish` which will prompt for which version to update to. Although we are using [conventional commits](https://www.conventionalcommits.org), the version is not automatically being calculated from the commit messages. Therefore the next version should be manually selected.
 
 Next it will build all packages to ensure the distributed files are up to date.