Skip to content

Commit

Permalink
Maintenance (#850)
Browse files Browse the repository at this point in the history
- Replaced zod with valibot
- Updated all deps
- Removed a bunch of pnpm scripts in favor of doing things programatically
- Improved Dockerfile to reuse stages better and add a node compile cache
  • Loading branch information
beeequeue authored Mar 2, 2025
1 parent abb79f7 commit 9669e9c
Show file tree
Hide file tree
Showing 30 changed files with 1,656 additions and 2,518 deletions.
56 changes: 30 additions & 26 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,51 +1,55 @@
FROM node:22-alpine AS runtime_deps

RUN corepack enable
FROM node:22-alpine as base

WORKDIR /app

COPY package.json .
COPY pnpm-lock.yaml .
COPY .npmrc .

ENV PNPM_HOME=/pnpm
ENV CI=1
# Use production in case any dependencies use it in any way
ENV NODE_ENV=production
# Install dependencies
RUN pnpm install --frozen-lockfile

FROM node:22-alpine AS docs
# Enable node compile cache
ENV NODE_COMPILE_CACHE=/node-cc
RUN mkdir -p $NODE_COMPILE_CACHE

FROM base as base_deps

ENV CI=1

COPY .npmrc package.json pnpm-lock.yaml ./

RUN corepack enable
RUN corepack prepare --activate

WORKDIR /app
FROM base_deps as runtime_deps

# Install dependencies
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
pnpm install --frozen-lockfile --production

FROM base_deps AS docs

COPY package.json .
COPY pnpm-lock.yaml .
COPY .npmrc .
COPY docs/openapi.yaml docs/openapi.yaml

ENV CI=1
# Install dependencies
RUN pnpm install --frozen-lockfile
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
pnpm install --frozen-lockfile

RUN pnpm run docs
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
pnpm run docs

FROM node:22-alpine
FROM base

RUN corepack enable
COPY .npmrc knexfile.js package.json pnpm-lock.yaml ./
COPY src/ src/
COPY migrations/ migrations/

WORKDIR /app

COPY . .
COPY --from=runtime_deps /app/node_modules node_modules
COPY --from=runtime_deps /app/node_modules/ node_modules/
COPY --from=docs /app/redoc-static.html .

# Run with...
# Source maps enabled, since it does not affect performance from what I found
ENV NODE_OPTIONS="--enable-source-maps"
# Warnings disabled, we know what we're doing and they're annoying
ENV NODE_NO_WARNINGS=1
# Use production in case any dependencies use it in any way
ENV NODE_ENV=production

CMD ["pnpm", "--silent", "start"]
CMD ["node", "--run", "start"]
12 changes: 10 additions & 2 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import antfu from "@antfu/eslint-config"

export default antfu({
ignores: ["**/package.json"],
ignores: ["**/*.json"],
markdown: false,
stylistic: false,
jsonc: false,
jsx: false,
toml: false,
yaml: false,
test: { overrides: { "test/no-import-node-test": "off" } },
typescript: {
tsconfigPath: "tsconfig.json",
Expand All @@ -13,12 +18,15 @@ export default antfu({
"ts/consistent-type-imports": ["error", { fixStyle: "inline-type-imports" }],
"ts/no-unsafe-argument": "off",
"ts/no-unsafe-assignment": "off",
"node/prefer-global/process": "off",
"antfu/no-top-level-await": "off",
"import/consistent-type-specifier-style": "off",

"perfectionist/sort-imports": [
"error",
{
type: "natural",
internalPattern: ["@/**", "~/**"],
internalPattern: ["^@/", "^~/", "^#[a-zA-Z0-9-]+/"],
newlinesBetween: "always",
groups: [
["builtin", "builtin-type"],
Expand Down
4 changes: 4 additions & 0 deletions knexfile.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
import { mkdirSync } from "node:fs"

mkdirSync("./sqlite", { recursive: true })

/** @type5 {import("knex").Knex.Config} */
export default {
client: "better-sqlite3",
Expand Down
65 changes: 38 additions & 27 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"private": true,
"license": "AGPL-3.0-only",
"homepage": "https://arm.haglund.dev/docs",
"packageManager": "pnpm@9.13.2",
"packageManager": "pnpm@10.5.2",
"engines": {
"node": ">=22"
},
Expand All @@ -17,61 +17,72 @@
"*.{js,cjs,mjs,ts,cts,mts,json}": ["biome check --fix"]
},
"scripts": {
"dev": "onchange --initial --kill 'src/**' pnpm-lock.yaml -- pnpm --silent run start",
"dev": "node --experimental-strip-types --experimental-transform-types --watch src/index.ts",
"docs": "pnpm --package=@redocly/cli dlx redocly build-docs docs/openapi.yaml",
"docs:dev": "onchange --initial --kill docs/openapi.yaml -- pnpm --silent run docs",
"docker:build": "docker build . --tag arm-server",
"docker:start": "pnpm --silent docker:build; pnpm --silent docker:run",
"docker:run": "docker run -it --rm --name arm -p 3000:3000 arm-server",
"fetch-data": "node --experimental-strip-types --experimental-transform-types bin/update.ts --exit",
"lint": "eslint src",
"migrate": "knex migrate:latest --knexfile knexfile.js",
"migrate:create": "knex migrate:make --knexfile knexfile.js -x ts",
"start": "pnpm --silent run migrate && node --experimental-strip-types --experimental-transform-types src/index.ts",
"test": "NODE_ENV=test pnpm --silent run migrate && vitest",
"start": "node --experimental-strip-types --experimental-transform-types src/index.ts",
"test": "vitest",
"typecheck": "tsc --noEmit",
"prepare": "is-ci || simple-git-hooks"
},
"resolutions": {
"esbuild": "0.24.0"
"esbuild": "0.25.0"
},
"dependencies": {
"@hono/node-server": "1.13.7",
"@hono/node-server": "1.13.8",
"@hono/sentry": "1.2.0",
"@hono/zod-validator": "0.4.1",
"@sentry/node": "8.38.0",
"@tsconfig/node22": "22.0.0",
"@tsconfig/strictest": "2.0.5",
"better-sqlite3": "11.5.0",
"hono": "4.6.10",
"is-ci": "3.0.1",
"@hono/standard-validator": "0.1.2",
"@sentry/node": "9.3.0",
"better-sqlite3": "11.8.1",
"hono": "4.7.2",
"is-ci": "4.1.0",
"knex": "3.1.0",
"ofetch": "1.4.1",
"pino": "9.5.0",
"pino-pretty": "13.0.0",
"sucrase": "3.35.0",
"type-fest": "4.27.0",
"typescript": "5.6.3",
"zod": "3.23.8"
"pino": "9.6.0",
"valibot": "1.0.0-rc.3"
},
"devDependencies": {
"@antfu/eslint-config": "3.8.0",
"@antfu/eslint-config": "4.3.0",
"@biomejs/biome": "1.9.4",
"@standard-schema/spec": "1.0.0",
"@tsconfig/node22": "22.0.0",
"@tsconfig/strictest": "2.0.5",
"@types/json-schema": "7.0.15",
"@types/node": "22.10.10",
"@vitest/coverage-v8": "2.1.8",
"dotenv": "16.4.5",
"eslint": "9.14.0",
"@types/node": "22.13.8",
"@vitest/coverage-v8": "3.0.7",
"dotenv": "16.4.7",
"eslint": "9.21.0",
"nano-staged": "0.8.0",
"onchange": "7.1.0",
"pino-pretty": "13.0.0",
"simple-git-hooks": "2.11.1",
"tsconfig-paths": "4.2.0",
"vitest": "2.1.8"
"type-fest": "4.36.0",
"typescript": "5.8.2",
"vitest": "3.0.7"
},
"pnpm": {
"overrides": {
"@eslint/markdown": "-",
"@stylistic/eslint-plugin": "-",
"eslint-plugin-jsonc": "-",
"eslint-plugin-toml": "-",
"eslint-plugin-vue": "-",
"eslint-processor-vue-blocks": "-",
"eslint-plugin-yml": "-",
"jsonc-eslint-parser": "-",
"toml-eslint-parser": "-",
"yaml-eslint-parser": "-",
"is-core-module": "npm:@nolyfill/is-core-module@^1",
"safe-buffer": "npm:@nolyfill/safe-buffer@^1"
}
},
"onlyBuiltDependencies": ["better-sqlite3"],
"ignoredBuiltDependencies": ["@biomejs/biome", "esbuild", "simple-git-hooks"]
}
}
Loading

0 comments on commit 9669e9c

Please sign in to comment.