3131GOLANGCI_LINT_PACKAGE  ?= github.com/golangci/golangci-lint/v2/cmd/
[email protected] 3232GXZ_PACKAGE  ?= github.com/ulikunitz/xz/cmd/
[email protected] 3333MISSPELL_PACKAGE  ?= github.com/golangci/misspell/cmd/
[email protected] 34- SWAGGER_PACKAGE  ?= github.com/go-swagger/go-swagger/cmd/swagger@v0.32.3 
34+ SWAGGER_PACKAGE  ?= github.com/go-swagger/go-swagger/cmd/swagger@717e3cb29becaaf00e56953556c6d80f8a01b286 
3535XGO_PACKAGE  ?= src.techknowlogick.com/xgo@latest
3636GO_LICENSES_PACKAGE  ?= github.com/google/go-licenses@v1
3737GOVULNCHECK_PACKAGE  ?= golang.org/x/vuln/cmd/govulncheck@v1
@@ -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)
@@ -127,7 +136,7 @@ GO_TEST_PACKAGES ?= $(filter-out $(shell $(GO) list code.gitea.io/gitea/models/m
127136MIGRATE_TEST_PACKAGES  ?= $(shell  $(GO )  list code.gitea.io/gitea/models/migrations/...) 
128137
129138WEBPACK_SOURCES  := $(shell  find web_src/js web_src/css -type f) 
130- WEBPACK_CONFIGS  := webpack.config.js  tailwind.config.js 
139+ WEBPACK_CONFIGS  := webpack.config.ts  tailwind.config.ts 
131140WEBPACK_DEST  := public/assets/js/index.js public/assets/css/index.css
132141WEBPACK_DEST_ENTRIES  := public/assets/js public/assets/css public/assets/fonts
133142
@@ -153,9 +162,9 @@ TAR_EXCLUDES := .git data indexers queues log node_modules $(EXECUTABLE) $(DIST)
153162GO_DIRS  := build cmd models modules routers services tests
154163WEB_DIRS  := web_src/js web_src/css
155164
156- ESLINT_FILES  := web_src/js tools *.js *. ts *.cjs tests/e2e
165+ ESLINT_FILES  := web_src/js tools *.ts *.cjs tests/e2e
157166STYLELINT_FILES  := web_src/css web_src/js/components/*.vue
158- SPELLCHECK_FILES  := $(GO_DIRS )  $(WEB_DIRS )  templates options/locale/locale_en-US.ini .github $(filter-out  CHANGELOG.md, $(wildcard  * .go * .js  * . md * .yml * .yaml * .toml) )  $(filter-out  tools/misspellings.csv, $(wildcard  tools/* ) ) 
167+ SPELLCHECK_FILES  := $(GO_DIRS )  $(WEB_DIRS )  templates options/locale/locale_en-US.ini .github $(filter-out  CHANGELOG.md, $(wildcard  * .go * .md * .yml * .yaml * .toml) )  $(filter-out  tools/misspellings.csv, $(wildcard  tools/* ) ) 
159168EDITORCONFIG_FILES  := templates .github/workflows options/locale/locale_en-US.ini
160169
161170GO_SOURCES  := $(wildcard  * .go) 
@@ -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) " ;  \ 
@@ -230,7 +238,7 @@ node-check:
230238
231239.PHONY : clean-all
232240clean-all : clean # # delete backend, frontend and integration files
233- 	rm -rf $(WEBPACK_DEST_ENTRIES )  node_modules tools/node_modules 
241+ 	rm -rf $(WEBPACK_DEST_ENTRIES )  node_modules
234242
235243.PHONY : clean
236244clean : # # delete backend and integration files
@@ -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
@@ -407,7 +415,7 @@ lint-actions: ## lint action workflow files
407415
408416.PHONY : lint-templates
409417lint-templates : .venv node_modules # # lint template files
410- 	@node tools/lint-templates-svg.js 
418+ 	@node tools/lint-templates-svg.ts 
411419	@uv run --frozen djlint $(shell  find templates -type f -iname '* .tmpl') 
412420
413421.PHONY : lint-yaml
@@ -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
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,13 +852,9 @@ 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
850- tools/node_modules : tools/package.json
851- 	cd  tools &&  pnpm install
852- 	@touch tools/node_modules
853- 
854858.venv : uv.lock
855859	uv sync
856860	@touch .venv
@@ -860,16 +864,16 @@ update: update-js update-py ## update js and py dependencies
860864
861865.PHONY : update-js
862866update-js : node-check | node_modules # # update js dependencies
863- 	pnpm exec  updates -u -f package.json
867+ 	$( NODE_VARS )   pnpm exec  updates -u -f package.json
864868	rm -rf node_modules pnpm-lock.yaml
865- 	pnpm install
866- 	pnpm exec  nolyfill install
867- 	pnpm install
869+ 	$( NODE_VARS )   pnpm install
870+ 	$( NODE_VARS )   pnpm exec  nolyfill install
871+ 	$( NODE_VARS )   pnpm install
868872	@touch node_modules
869873
870874.PHONY : update-py
871875update-py : node-check | node_modules # # update py dependencies
872- 	pnpm exec  updates -u -f pyproject.toml
876+ 	$( NODE_VARS )   pnpm exec  updates -u -f pyproject.toml
873877	rm -rf .venv uv.lock
874878	uv sync
875879	@touch .venv
@@ -881,13 +885,13 @@ $(WEBPACK_DEST): $(WEBPACK_SOURCES) $(WEBPACK_CONFIGS) pnpm-lock.yaml
881885	@$(MAKE )  -s node-check node_modules
882886	@rm -rf $(WEBPACK_DEST_ENTRIES ) 
883887	@echo " Running webpack..." 
884- 	@BROWSERSLIST_IGNORE_OLD_DATA=true pnpm exec  webpack
888+ 	@BROWSERSLIST_IGNORE_OLD_DATA=true $( NODE_VARS )   pnpm exec  webpack --disable-interpret 
885889	@touch $(WEBPACK_DEST ) 
886890
887891.PHONY : svg
888892svg : node-check | node_modules # # build svg files
889893	rm -rf $(SVG_DEST_DIR ) 
890- 	node tools/generate-svg.js 
894+ 	node tools/generate-svg.ts 
891895
892896.PHONY : svg-check
893897svg-check : svg
@@ -901,7 +905,7 @@ svg-check: svg
901905
902906.PHONY : lockfile-check
903907lockfile-check :
904- 	pnpm install --frozen-lockfile
908+ 	$( NODE_VARS )   pnpm install --frozen-lockfile
905909	@diff=$$(git diff --color=always pnpm-lock.yaml ) ;  \ 
906910	if  [ -n  " $$ diff" ;  then  \
907911		echo  " pnpm-lock.yaml is inconsistent with package.json" ;  \ 
@@ -925,8 +929,8 @@ generate-gitignore: ## update gitignore files
925929	$(GO )  run build/generate-gitignores.go
926930
927931.PHONY : generate-images
928- generate-images : | node_modules tools/node_modules  # # generate images (requires cairo development packages) 
929- 	cd  tools &&  node generate-images.js  $(TAGS ) 
932+ generate-images : | node_modules # # generate images
933+ 	cd  tools &&  node generate-images.ts  $(TAGS ) 
930934
931935.PHONY : generate-manpage
932936generate-manpage : # # generate manpage
0 commit comments