Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ coverage/**
!coverage/.gitkeep

**/.claude/settings.local.json
dist
12 changes: 11 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
FROM docker.io/node:24-alpine
FROM docker.io/node:24-alpine AS builder

RUN apk add --no-cache pnpm
RUN mkdir -p /temp/builder
COPY . /temp/builder/
WORKDIR /temp/builder
RUN pnpm install && pnpm run build

FROM docker.io/node:24-alpine AS result

LABEL org.opencontainers.image.title="Hollo"
LABEL org.opencontainers.image.description="Federated single-user \
Expand All @@ -14,6 +22,8 @@ WORKDIR /app/
RUN pnpm install --frozen-lockfile --prod

COPY . /app/
COPY --from=builder /temp/builder/dist /app/dist
COPY src/public /app/dist/public

ARG VERSION
LABEL org.opencontainers.image.version="${VERSION}"
Expand Down
3 changes: 2 additions & 1 deletion mise.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[tools]
node = "24"
"npm:pnpm" = "latest"
"npm:pnpm" = "10.28.1"
pnpm = "latest"
8 changes: 5 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
"private": true,
"type": "module",
"scripts": {
"prod": "pnpm run migrate && tsx --env-file-if-exists=.env --dns-result-order=ipv6first bin/server.ts",
"prod": "pnpm run migrate && node --env-file-if-exists=.env --dns-result-order=ipv6first dist/server.js",
"dev": "pnpm run migrate && tsx watch --env-file-if-exists=.env --dns-result-order=ipv6first bin/server.ts",
"worker": "NODE_TYPE=worker tsx --env-file-if-exists=.env --dns-result-order=ipv6first bin/server.ts",
"worker": "NODE_TYPE=worker node --env-file-if-exists=.env --dns-result-order=ipv6first dist/server.js",
"list:routes": "tsx --env-file-if-exists=.env bin/routes.ts",
"test": "pnpm run migrate:test && vitest",
"test:ci": "vitest",
Expand All @@ -17,7 +17,8 @@
"migrate": "drizzle-kit migrate",
"migrate:test": "dotenvx run -f .env.test -- drizzle-kit migrate",
"migrate:generate": "drizzle-kit generate",
"rebuild-timelines": "tsx --env-file-if-exists=.env scripts/rebuild-timelines.ts"
"rebuild-timelines": "node --env-file-if-exists=.env dist/rebuild-timelines.js",
"build": "esbuild bin/server.ts --bundle --platform=node --outfile=dist/server.js --format=esm --packages=external && esbuild scripts/rebuild-timelines.ts --bundle --platform=node --outfile=dist/rebuild-timelines.js --format=esm --packages=external"
},
"dependencies": {
"@aws-sdk/credential-providers": "^3.975.0",
Expand Down Expand Up @@ -75,6 +76,7 @@
"@types/qrcode": "^1.5.6",
"@types/semver": "^7.7.1",
"@vitest/coverage-v8": "3.1.4",
"esbuild": "0.27.2",
"linkedom": "^0.18.12",
"timekeeper": "^2.3.1",
"typescript": "^5.9.2",
Expand Down
Loading