diff --git a/.github/workflows/vmui.yml b/.github/workflows/vmui.yml index dbf8afdab4..52bc72aa89 100644 --- a/.github/workflows/vmui.yml +++ b/.github/workflows/vmui.yml @@ -34,33 +34,39 @@ jobs: - name: Code checkout uses: actions/checkout@v6 - - name: Setup Node - uses: actions/setup-node@v6 + - name: Cache node_modules + id: cache + uses: actions/cache@v5 with: - node-version: '24.x' + path: app/vmui/packages/vmui/node_modules + key: vmui-deps-${{ runner.os }}-${{ hashFiles('app/vmui/packages/vmui/package-lock.json', 'app/vmui/Dockerfile-build') }} + restore-keys: | + vmui-deps-${{ runner.os }}- - - name: Cache node-modules - uses: actions/cache@v4 - with: - path: | - app/vmui/packages/vmui/node_modules - key: vmui-artifacts-${{ runner.os }}-${{ hashFiles('package-lock.json') }} - restore-keys: vmui-artifacts-${{ runner.os }}- + - name: Install dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: make vmui-install - name: Run lint id: lint run: make vmui-lint continue-on-error: true + env: + VMUI_SKIP_INSTALL: true - name: Run tests id: test run: make vmui-test continue-on-error: true + env: + VMUI_SKIP_INSTALL: true - name: Run typecheck id: typecheck run: make vmui-typecheck continue-on-error: true + env: + VMUI_SKIP_INSTALL: true - name: Annotate Code Linting Results uses: ataylorme/eslint-annotate-action@v3 diff --git a/app/vmui/Makefile b/app/vmui/Makefile index ec6061c677..d856dc0d47 100644 --- a/app/vmui/Makefile +++ b/app/vmui/Makefile @@ -1,18 +1,26 @@ # All these commands must run from repository root. - copy-metricsql-docs: cp docs/victoriametrics/MetricsQL.md app/vmui/packages/vmui/src/assets/MetricsQL.md vmui-package-base-image: docker build -t vmui-builder-image -f app/vmui/Dockerfile-build ./app/vmui -vmui-build: copy-metricsql-docs vmui-package-base-image +vmui-run-npm-command: vmui-package-base-image docker run --rm \ --user $(shell id -u):$(shell id -g) \ --mount type=bind,src="$(shell pwd)/app/vmui",dst=/build \ -w /build/packages/vmui \ --entrypoint=/bin/bash \ - vmui-builder-image -c "npm install && npm run build" + vmui-builder-image -c "[ \"$$VMUI_SKIP_INSTALL\" = \"true\" ] || npm ci; $(NPM_COMMAND)" + +vmui-install: + NPM_COMMAND="true" $(MAKE) vmui-run-npm-command + +vmui-package-base-image: + docker build -t vmui-builder-image -f app/vmui/Dockerfile-build ./app/vmui + +vmui-build: copy-metricsql-docs + NPM_COMMAND="npm run build" $(MAKE) vmui-run-npm-command vmui-release: vmui-build docker build -t ${DOCKER_NAMESPACE}/vmui:latest -f app/vmui/Dockerfile-web ./app/vmui/packages/vmui @@ -30,11 +38,11 @@ vmui-update: vmui-build vmui-install-dependencies: cd app/vmui/packages/vmui && npm ci -vmui-lint: vmui-install-dependencies - cd app/vmui/packages/vmui && npm run lint +vmui-lint: + NPM_COMMAND="npm run lint" $(MAKE) vmui-run-npm-command -vmui-typecheck: vmui-install-dependencies - cd app/vmui/packages/vmui && npm run typecheck +vmui-typecheck: + NPM_COMMAND="npm run typecheck" $(MAKE) vmui-run-npm-command -vmui-test: vmui-install-dependencies - cd app/vmui/packages/vmui && npm run test +vmui-test: + NPM_COMMAND="npm run test" $(MAKE) vmui-run-npm-command