@@ -27,11 +27,11 @@ XGO_VERSION := go-1.25.x
2727
2828AIR_PACKAGE ?= github.com/air-verse/air@v1
2929EDITORCONFIG_CHECKER_PACKAGE ?= github.com/editorconfig-checker/editorconfig-checker/v3/cmd/editorconfig-checker@v3
30- GOFUMPT_PACKAGE ?= mvdan.cc/gofumpt@v0.8.0
30+ GOFUMPT_PACKAGE ?= mvdan.cc/gofumpt@v0.9.1
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 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) or greater to build. You can get it at https://nodejs.org/en/download/" ; \
@@ -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 --flag unstable_native_nodejs_ts_config $(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 --flag unstable_native_nodejs_ts_config $(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