From 7d50ccc8eef9adaea7f0f66bab3d4b073f303e00 Mon Sep 17 00:00:00 2001 From: Femaleotaku Date: Sat, 17 Oct 2026 21:21:21 +0100 Subject: [PATCH] fix: add .nvmrc + engines, ignore pycache, remove .pyc, delete empty Chart.yaml - #1465: Add .nvmrc (node 20) and engines.node >=20 to root, Backend, Frontend, and analytics package.json - #1466: Add __pycache__/ and *.py[cod] to .gitignore - #1467: git rm --cached tracked .pyc files in infrastructure/scripts/__pycache__/ - #1468: Delete empty infrastructure/k8s/Chart.yaml (canonical chart is at k8s/helm/gistpin/Chart.yaml) Closes #1465 Closes #1466 Closes #1467 Closes #1468 --- .gitignore | 4 ++++ .nvmrc | 1 + Backend/package.json | 3 +++ Frontend/package.json | 3 +++ analytics/package.json | 3 +++ infrastructure/k8s/Chart.yaml | 0 .../__pycache__/notify-changes.cpython-313.pyc | Bin 7765 -> 0 bytes .../__pycache__/parse-tf-plan.cpython-313.pyc | Bin 13752 -> 0 bytes package.json | 3 +++ 9 files changed, 17 insertions(+) create mode 100644 .nvmrc delete mode 100644 infrastructure/k8s/Chart.yaml delete mode 100644 infrastructure/scripts/__pycache__/notify-changes.cpython-313.pyc delete mode 100644 infrastructure/scripts/__pycache__/parse-tf-plan.cpython-313.pyc diff --git a/.gitignore b/.gitignore index 112c913e1..151252970 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,7 @@ infrastructure/ci/reports/ # Claude Code local config (settings, launch configs) .claude/ + +# Python bytecode +__pycache__/ +*.py[cod] diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..209e3ef4b --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20 diff --git a/Backend/package.json b/Backend/package.json index 6251f7739..e90bfa070 100644 --- a/Backend/package.json +++ b/Backend/package.json @@ -5,6 +5,9 @@ "author": "", "private": true, "license": "UNLICENSED", + "engines": { + "node": ">=20" + }, "scripts": { "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", diff --git a/Frontend/package.json b/Frontend/package.json index 92a60a7b8..80d889972 100644 --- a/Frontend/package.json +++ b/Frontend/package.json @@ -34,5 +34,8 @@ "eslint-config-next": "15.4.6", "tailwindcss": "^4", "typescript": "^5" + }, + "engines": { + "node": ">=20" } } diff --git a/analytics/package.json b/analytics/package.json index a3e511e14..593489ae9 100644 --- a/analytics/package.json +++ b/analytics/package.json @@ -31,5 +31,8 @@ "tailwindcss": "^4", "typescript": "^5", "vitest": "^2.0.0" + }, + "engines": { + "node": ">=20" } } diff --git a/infrastructure/k8s/Chart.yaml b/infrastructure/k8s/Chart.yaml deleted file mode 100644 index e69de29bb..000000000 diff --git a/infrastructure/scripts/__pycache__/notify-changes.cpython-313.pyc b/infrastructure/scripts/__pycache__/notify-changes.cpython-313.pyc deleted file mode 100644 index e2a8c87bd0f5002b1e71fbd06c564eaba2656066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7765 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 diff --git a/infrastructure/scripts/__pycache__/parse-tf-plan.cpython-313.pyc b/infrastructure/scripts/__pycache__/parse-tf-plan.cpython-313.pyc deleted file mode 100644 index 8ae1580c0de0796bc19390ae14d6c734fa4b5274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13752 zcmcIqdvF`adA|b=Z;&7!B={0_qGXDcMN*<(mSicSBjaNNn6TID=LmcI!+t9b!&Q(HguY)old8*6DQ+IXIjvZ4fxC^PUCha(@sYZPZGKR z^tXFB0HmnI&ZI|TZ*QO9e*3+5Z&y`089YDyy;bMtH!{pm$%pZ9#mwyh%P`j%fl(NN z6->ujg{5zkVxn)eVy16S;qW#ew;Z!5mSa}M$}?xogVn}x<@cbsoHud;Cs?+b^e@Hn zG5T2rTdAM3n-T0MS;d9718=wBRH_75BcoIcZloTe3Tcf{jnpf6kotrgq<+DRG$8np z)(U>4bwU7X@Jzi>yX!Q=h<1iK6KrL+6~X11QPZfYqfYbyHO^C#qKG32WsE(ucR2?oF{<*%gcAe&h>{rN)l@Vl^P(Ir4u~Ep zB^^nn6)DO`DPU@PY)n+f$y8{KdApnk(uyLkD7fvSUQ^h!@pxbT}N7)s!el zB+Xwe0BEw53Xdv@bW(4nMAdL4o>s9Wt)8^1C@A+2&>AVKp2c34+BYmIT{5^2WX`D67D-0x zjUnntgVD68M5F1{csNR_J)vmrOUo0=s3^xW`pO~+c_cQPR_K?G9aV~?l~`*0YP6NwaQXlC#&KxN*Xw~k=7TI5sgw2T>#LT|ml=^ZA_a0HDphi;6e%~NYaj(6+6yr-xz1lGNQvrs?8`_@ zj!`HmN2puE!|BL*DWz{i>C>QK%KYV0Y^jPB#N<&OgK=?eI4Xum(lV9eS}j>wu`nqq zV=)M6ESMssSgg}vOumpf4_>F#qSJyHAJ&0D2EZz#C6PqQczJ19Or;<%#z4_Js?aMQ zgT#_Sw3HMp3YKgS1yW3>5^4l{B99hPNw+dCVku|CDQPSjCtFF^PuSiNn&G697>R*? zsRV&!0n^76UA&OJ5u;HoSVuZON3afzQ|d*RQYlQ6q9Tq#E+|DPsK|hDTwYE)R*K2x z4X7-H0@H=@@>+efWl%vP87uOfYJ3`--AHz?Tng?}BT6h;K`oD~;m6ZbS}IbD@o5a8 zO8_E&E{Z9j5erjdk+2vSl`$QaR2b=%QBgfRoPcb+t0tZ>_JlHEMITaA92A>Cv=h}f z%UVF2OX8R={Zw&O8WYb0zj7ia4JQ)kOIxW^Ya%Jhsw64^H<}m|W3moT5!Fj;D2d2Y zGL@FgdWs@`Sz&n&%8z5Z1iq1ij9;V@jzVmE{r&)KoeeOK5a+M$}7TqLvjY zOo%Y7j)UOGbR>|vgq#wSORDIW&?>AmGXjdN=vS(|7?Yz3Y<^{>E^f{$kVnac8iT$V z*K~yzPYjE3stDr}^b{1@eS~sG?G*&q-HXA_E{gQc4Zpngxm?{zVvr1M%xCM$g_@FQ`y?BmsX}WM%>LX zGCSlkN(DB=Rx?{n73--n>dJ4yw9~{_uGv?vGjgqrU^XD(nbmOKWVV+bExt$C5oV8h zH8a9?a08jfK1G3F0pY4bZ|ELHOomIci|=4Hj&RS<$f7!∋IAS*WL>aS%sQ@&RG0 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" } }