@@ -96,6 +96,15 @@ STORED_VERSION_FILE := VERSION
9696GITHUB_REF_TYPE ?= branch
9797GITHUB_REF_NAME ?= $(shell git rev-parse --abbrev-ref HEAD)
9898
99+ # Enable typescript support in Node.js before 22.18
100+ # TODO: Remove this once we can raise the minimum Node.js version to 22.18 (alpine >= 3.23)
101+ NODE_VERSION := $(shell printf "% 03d% 03d% 03d" $(shell node -v 2>/dev/null | cut -c2- | tr '.' ' ') )
102+ ifeq ($(shell test "$(NODE_VERSION ) " -lt "022018000"; echo $$? ) ,0)
103+ NODE_VARS := NODE_OPTIONS="--experimental-strip-types"
104+ else
105+ NODE_VARS :=
106+ endif
107+
99108ifneq ($(GITHUB_REF_TYPE ) ,branch)
100109 VERSION ?= $(subst v,,$(GITHUB_REF_NAME))
101110 GITEA_VERSION ?= $(VERSION)
@@ -217,7 +226,6 @@ git-check:
217226node-check :
218227 $(eval MIN_NODE_VERSION_STR := $(shell grep -Eo '"node":.* [0-9.]+"' package.json | sed -n 's/.* [^0-9.]\([0-9.]* \) "/\1/p') )
219228 $(eval MIN_NODE_VERSION := $(shell printf "% 03d% 03d% 03d" $(shell echo '$(MIN_NODE_VERSION_STR ) ' | tr '.' ' ') ) )
220- $(eval NODE_VERSION := $(shell printf "% 03d% 03d% 03d" $(shell node -v | cut -c2- | tr '.' ' ') ;) )
221229 $(eval PNPM_MISSING := $(shell hash pnpm > /dev/null 2>&1 || echo 1) )
222230 @if [ " $( NODE_VERSION) " -lt " $( MIN_NODE_VERSION) " ]; then \
223231 echo " Gitea requires Node.js $( MIN_NODE_VERSION_STR) or greater to build. You can get it at https://nodejs.org/en/download/" ; \
@@ -338,29 +346,29 @@ lint-backend-fix: lint-go-fix lint-go-gitea-vet lint-editorconfig ## lint backen
338346
339347.PHONY : lint-js
340348lint-js : node_modules # # lint js files
341- pnpm exec eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES )
342- pnpm exec vue-tsc
349+ $( NODE_VARS ) pnpm exec eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES )
350+ $( NODE_VARS ) pnpm exec vue-tsc
343351
344352.PHONY : lint-js-fix
345353lint-js-fix : node_modules # # lint js files and fix issues
346- pnpm exec eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES ) --fix
347- pnpm exec vue-tsc
354+ $( NODE_VARS ) pnpm exec eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES ) --fix
355+ $( NODE_VARS ) pnpm exec vue-tsc
348356
349357.PHONY : lint-css
350358lint-css : node_modules # # lint css files
351- pnpm exec stylelint --color --max-warnings=0 $(STYLELINT_FILES )
359+ $( NODE_VARS ) pnpm exec stylelint --color --max-warnings=0 $(STYLELINT_FILES )
352360
353361.PHONY : lint-css-fix
354362lint-css-fix : node_modules # # lint css files and fix issues
355- pnpm exec stylelint --color --max-warnings=0 $(STYLELINT_FILES ) --fix
363+ $( NODE_VARS ) pnpm exec stylelint --color --max-warnings=0 $(STYLELINT_FILES ) --fix
356364
357365.PHONY : lint-swagger
358366lint-swagger : node_modules # # lint swagger files
359- pnpm exec spectral lint -q -F hint $(SWAGGER_SPEC )
367+ $( NODE_VARS ) pnpm exec spectral lint -q -F hint $(SWAGGER_SPEC )
360368
361369.PHONY : lint-md
362370lint-md : node_modules # # lint markdown files
363- pnpm exec markdownlint * .md
371+ $( NODE_VARS ) pnpm exec markdownlint * .md
364372
365373.PHONY : lint-spell
366374lint-spell : # # lint spelling
@@ -421,7 +429,7 @@ watch: ## watch everything and continuously rebuild
421429.PHONY : watch-frontend
422430watch-frontend : node-check node_modules # # watch frontend files and continuously rebuild
423431 @rm -rf $(WEBPACK_DEST_ENTRIES )
424- NODE_ENV=development pnpm exec webpack --watch --progress --disable-interpret
432+ NODE_ENV=development $( NODE_VARS ) pnpm exec webpack --watch --progress --disable-interpret
425433
426434.PHONY : watch-backend
427435watch-backend : go-check # # watch backend files and continuously rebuild
@@ -437,7 +445,7 @@ test-backend: ## test backend files
437445
438446.PHONY : test-frontend
439447test-frontend : node_modules # # test frontend files
440- pnpm exec vitest
448+ $( NODE_VARS ) pnpm exec vitest
441449
442450.PHONY : test-check
443451test-check :
@@ -580,7 +588,7 @@ test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test
580588
581589.PHONY : playwright
582590playwright : deps-frontend
583- pnpm exec playwright install $(PLAYWRIGHT_FLAGS )
591+ $( NODE_VARS ) pnpm exec playwright install $(PLAYWRIGHT_FLAGS )
584592
585593.PHONY : test-e2e%
586594test-e2e% : TEST_TYPE ?= e2e
@@ -844,7 +852,7 @@ deps-tools: ## install tool dependencies
844852 wait
845853
846854node_modules : pnpm-lock.yaml
847- pnpm install --frozen-lockfile
855+ $( NODE_VARS ) pnpm install --frozen-lockfile
848856 @touch node_modules
849857
850858.venv : uv.lock
@@ -856,16 +864,16 @@ update: update-js update-py ## update js and py dependencies
856864
857865.PHONY : update-js
858866update-js : node-check | node_modules # # update js dependencies
859- pnpm exec updates -u -f package.json
867+ $( NODE_VARS ) pnpm exec updates -u -f package.json
860868 rm -rf node_modules pnpm-lock.yaml
861- pnpm install
862- pnpm exec nolyfill install
863- pnpm install
869+ $( NODE_VARS ) pnpm install
870+ $( NODE_VARS ) pnpm exec nolyfill install
871+ $( NODE_VARS ) pnpm install
864872 @touch node_modules
865873
866874.PHONY : update-py
867875update-py : node-check | node_modules # # update py dependencies
868- pnpm exec updates -u -f pyproject.toml
876+ $( NODE_VARS ) pnpm exec updates -u -f pyproject.toml
869877 rm -rf .venv uv.lock
870878 uv sync
871879 @touch .venv
@@ -877,7 +885,7 @@ $(WEBPACK_DEST): $(WEBPACK_SOURCES) $(WEBPACK_CONFIGS) pnpm-lock.yaml
877885 @$(MAKE ) -s node-check node_modules
878886 @rm -rf $(WEBPACK_DEST_ENTRIES )
879887 @echo " Running webpack..."
880- @BROWSERSLIST_IGNORE_OLD_DATA=true pnpm exec webpack --disable-interpret
888+ @BROWSERSLIST_IGNORE_OLD_DATA=true $( NODE_VARS ) pnpm exec webpack --disable-interpret
881889 @touch $(WEBPACK_DEST )
882890
883891.PHONY : svg
@@ -897,7 +905,7 @@ svg-check: svg
897905
898906.PHONY : lockfile-check
899907lockfile-check :
900- pnpm install --frozen-lockfile
908+ $( NODE_VARS ) pnpm install --frozen-lockfile
901909 @diff=$$(git diff --color=always pnpm-lock.yaml ) ; \
902910 if [ -n " $$ diff" ]; then \
903911 echo " pnpm-lock.yaml is inconsistent with package.json" ; \
0 commit comments