Compare commits
22 Commits
ef810efd24
...
3.6.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 03f74a8181 | |||
| 405fdf297c | |||
| 5b6b6e479f | |||
| 04344808bd | |||
| 6ec27345c3 | |||
| 5e02443409 | |||
| 8184d42942 | |||
| 04dfecc099 | |||
| ec10d45fd0 | |||
| ceb70c7049 | |||
| 4dbc5d12a3 | |||
| b55c3a0e31 | |||
| e63abf03ef | |||
| a7e7e5b0e8 | |||
| 96724d0016 | |||
| 30b2e980c0 | |||
| 113f42ca21 | |||
| 1f2820e4b4 | |||
| dc088306ce | |||
| f6c1cf1bf5 | |||
| 962f354208 | |||
| bf43212afc |
@@ -3,7 +3,7 @@ name: release-image-gitea
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 2.*
|
||||
- 3.*
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
@@ -14,36 +14,34 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Set up Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
version: 10.x
|
||||
bun-version: 1.3.10
|
||||
|
||||
- name: Set up Node.js
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 24.14.0
|
||||
cache: pnpm
|
||||
|
||||
- name: Install Dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
run: bun install --frozen-lockfile
|
||||
|
||||
- name: Cache Astro Build Cache
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
node_modules/.cache
|
||||
.astro/cache
|
||||
key: ${{ runner.os }}-astro-cache-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ github.sha }}
|
||||
.astro
|
||||
node_modules/.vite
|
||||
key: ${{ runner.os }}-astro-${{ hashFiles('**/*.astro', 'astro.config.mjs') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-astro-cache-${{ hashFiles('**/pnpm-lock.yaml') }}-
|
||||
${{ runner.os }}-astro-cache-
|
||||
${{ runner.os }}-astro-
|
||||
|
||||
- name: Lint Code
|
||||
run: pnpm lint
|
||||
run: bun run lint
|
||||
|
||||
- name: Build Project
|
||||
run: pnpm build
|
||||
run: bun run build
|
||||
|
||||
release:
|
||||
runs-on: ubuntu-js
|
||||
|
||||
@@ -3,7 +3,7 @@ name: release-image-harbor
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 2.*
|
||||
- 3.*
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
@@ -14,36 +14,34 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Set up Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
version: 10.x
|
||||
bun-version: 1.3.10
|
||||
|
||||
- name: Set up Node.js
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 24.14.0
|
||||
cache: pnpm
|
||||
|
||||
- name: Install Dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
run: bun install --frozen-lockfile
|
||||
|
||||
- name: Cache Astro Build Cache
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
node_modules/.cache
|
||||
.astro/cache
|
||||
key: ${{ runner.os }}-astro-cache-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ github.sha }}
|
||||
.astro
|
||||
node_modules/.vite
|
||||
key: ${{ runner.os }}-astro-${{ hashFiles('**/*.astro', 'astro.config.mjs') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-astro-cache-${{ hashFiles('**/pnpm-lock.yaml') }}-
|
||||
${{ runner.os }}-astro-cache-
|
||||
${{ runner.os }}-astro-
|
||||
|
||||
- name: Lint Code
|
||||
run: pnpm lint
|
||||
run: bun run lint
|
||||
|
||||
- name: Build Project
|
||||
run: pnpm build
|
||||
run: bun run build
|
||||
|
||||
release:
|
||||
runs-on: ubuntu-js
|
||||
|
||||
@@ -16,36 +16,34 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
- name: Set up Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
version: 10.x
|
||||
bun-version: 1.3.10
|
||||
|
||||
- name: Set up Node.js
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 24.14.0
|
||||
cache: pnpm
|
||||
|
||||
- name: Install Dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
run: bun install --frozen-lockfile
|
||||
|
||||
- name: Cache Astro Build Cache
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
node_modules/.cache
|
||||
.astro/cache
|
||||
key: ${{ runner.os }}-astro-cache-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ github.sha }}
|
||||
.astro
|
||||
node_modules/.vite
|
||||
key: ${{ runner.os }}-astro-${{ hashFiles('**/*.astro', 'astro.config.mjs') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-astro-cache-${{ hashFiles('**/pnpm-lock.yaml') }}-
|
||||
${{ runner.os }}-astro-cache-
|
||||
${{ runner.os }}-astro-
|
||||
|
||||
- name: Lint Code
|
||||
run: pnpm lint
|
||||
run: bun run lint
|
||||
|
||||
- name: Build Project
|
||||
run: pnpm build
|
||||
run: bun run build
|
||||
|
||||
- name: ntfy Failed
|
||||
uses: niniyas/ntfy-action@master
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -10,8 +10,6 @@ node_modules/
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
|
||||
# environment variables
|
||||
.env
|
||||
|
||||
3
.npmrc
3
.npmrc
@@ -1,3 +0,0 @@
|
||||
registry=https://registry.npmjs.org/
|
||||
engine-strict=true
|
||||
save-exact=true
|
||||
26
Dockerfile
26
Dockerfile
@@ -1,32 +1,30 @@
|
||||
FROM docker.io/node:24.14.0-alpine AS builder
|
||||
|
||||
ENV PNPM_HOME="/pnpm"
|
||||
ENV PATH="$PNPM_HOME:$PATH"
|
||||
RUN corepack enable
|
||||
|
||||
FROM dhi.io/bun:1.3.10-debian13-dev AS builder
|
||||
WORKDIR /app
|
||||
COPY package.json pnpm-lock.yaml ./
|
||||
|
||||
COPY package.json bun.lock ./
|
||||
|
||||
FROM builder AS prod-deps
|
||||
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile
|
||||
RUN --mount=type=cache,id=bun,target=/root/.bun/install/cache \
|
||||
bun install --production --frozen-lockfile
|
||||
|
||||
FROM prod-deps AS build-deps
|
||||
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
|
||||
FROM builder AS build-deps
|
||||
RUN --mount=type=cache,id=bun,target=/root/.bun/install/cache \
|
||||
bun install --frozen-lockfile
|
||||
|
||||
FROM build-deps AS build
|
||||
COPY . .
|
||||
RUN pnpm run build
|
||||
RUN bun run build
|
||||
|
||||
FROM dhi.io/node:24.14.0 AS runtime
|
||||
FROM dhi.io/bun:1.3.10-alpine3.22 AS runtime
|
||||
WORKDIR /app
|
||||
COPY --from=prod-deps /app/node_modules /app/node_modules
|
||||
COPY --from=build /app/dist /app/dist
|
||||
|
||||
LABEL version="2.25.0"
|
||||
LABEL version="3.6.0"
|
||||
LABEL description="Astro based personal website"
|
||||
|
||||
ENV HOST=0.0.0.0
|
||||
ENV PORT=4321
|
||||
|
||||
EXPOSE $PORT
|
||||
CMD ["node", "./dist/server/entry.mjs"]
|
||||
CMD ["bun", "run", "./dist/server/entry.mjs"]
|
||||
|
||||
@@ -7,9 +7,8 @@ Personal site used for information about myself and blog.
|
||||
|
||||
With dependencies installed, you can utilize the following npm scripts to manage your project's development lifecycle:
|
||||
|
||||
- `pnpm build`: Bundles your site into static files for production.
|
||||
- `pnpm dev`: Starts a local development server with hot reloading enabled.
|
||||
- `pnpm preview`: Serves your build output locally for preview before deployment.
|
||||
- `bun run build`: Bundles your site into static files for production.
|
||||
- `bun run dev`: Starts a local development server with hot reloading enabled.
|
||||
|
||||
For detailed help with Astro CLI commands, visit [Astro's documentation](https://docs.astro.build/en/reference/cli-reference/).
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { defineConfig } from 'astro/config';
|
||||
|
||||
import node from '@astrojs/node';
|
||||
import partytown from '@astrojs/partytown';
|
||||
import react from '@astrojs/react';
|
||||
import sitemap from '@astrojs/sitemap';
|
||||
|
||||
@@ -14,6 +13,8 @@ import { getSiteURL } from './src/support/url';
|
||||
export default defineConfig({
|
||||
site: getSiteURL(),
|
||||
|
||||
security: { csp: true },
|
||||
|
||||
image: {
|
||||
remotePatterns: [
|
||||
{ protocol: 'https', hostname: '*.alexlebens.net' },
|
||||
@@ -28,7 +29,6 @@ export default defineConfig({
|
||||
prefetch: true,
|
||||
|
||||
integrations: [
|
||||
partytown(),
|
||||
react(),
|
||||
sitemap(),
|
||||
icon({
|
||||
|
||||
10
package.json
10
package.json
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "site-profile",
|
||||
"type": "module",
|
||||
"version": "2.25.0",
|
||||
"version": "3.6.0",
|
||||
"homepage": "https://www.alexlebens.dev",
|
||||
"bugs": {
|
||||
"url": "https://gitea.alexlebens.dev/alexlebens/site-profile/issues",
|
||||
@@ -29,7 +29,6 @@
|
||||
"dependencies": {
|
||||
"@astrojs/check": "^0.9.7",
|
||||
"@astrojs/node": "^10.0.0",
|
||||
"@astrojs/partytown": "^2.1.5",
|
||||
"@astrojs/react": "^5.0.0",
|
||||
"@astrojs/rss": "^4.0.17",
|
||||
"@astrojs/sitemap": "^3.7.1",
|
||||
@@ -44,9 +43,10 @@
|
||||
"@tailwindcss/vite": "^4.2.1",
|
||||
"@types/react": "^19.2.14",
|
||||
"@types/unist": "^3.0.3",
|
||||
"astro": "^6.0.0",
|
||||
"astro": "^6.0.2",
|
||||
"astro-icon": "^1.1.5",
|
||||
"markdown-it": "14.1.1",
|
||||
"dayjs": "^1.11.20",
|
||||
"markdown-it": "^14.1.1",
|
||||
"marked": "^17.0.4",
|
||||
"marked-shiki": "^1.2.1",
|
||||
"mdast-util-to-string": "^4.0.0",
|
||||
@@ -65,7 +65,7 @@
|
||||
"@eslint-react/eslint-plugin": "^2.13.0",
|
||||
"@tailwindcss/forms": "^0.5.11",
|
||||
"@tailwindcss/typography": "^0.5.19",
|
||||
"@types/markdown-it": "14.1.2",
|
||||
"@types/markdown-it": "^14.1.2",
|
||||
"eslint": "^10.0.3",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-astro": "^1.6.0",
|
||||
|
||||
12845
pnpm-lock.yaml
generated
12845
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -1,2 +0,0 @@
|
||||
onlyBuiltDependencies:
|
||||
- swup
|
||||
@@ -1,4 +0,0 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
Sitemap: https://www.alexlebens.dev/sitemap-index.xml
|
||||
@@ -55,7 +55,7 @@ const { slug, title, description, logoLight, logoDark, count, publishDate } = As
|
||||
</svg>
|
||||
{count}
|
||||
</span>
|
||||
<span class="inline-flex items-center">
|
||||
<div class="inline-flex items-center">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="16"
|
||||
@@ -68,8 +68,10 @@ const { slug, title, description, logoLight, logoDark, count, publishDate } = As
|
||||
<circle cx="12" cy="12" r="10"></circle>
|
||||
<polyline points="12 6 12 12 16 14"></polyline>
|
||||
</svg>
|
||||
{publishDate}
|
||||
</span>
|
||||
<span>
|
||||
{publishDate}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -10,7 +10,7 @@ const { dayName, label, icon, temp } = Astro.props;
|
||||
---
|
||||
|
||||
<div class="smooth-reveal-2 group flex flex-col">
|
||||
<div class="card-base w-40">
|
||||
<div class="card-base w-32 sm:w-40">
|
||||
<div class="p-5 text-center">
|
||||
<span class="card-text-description block font-bold text-xs uppercase tracking-widest">
|
||||
{dayName}
|
||||
|
||||
@@ -6,7 +6,7 @@ import type { Post } from '@lib/directusTypes';
|
||||
import CategoryCard from '@components/cards/CategoryCard.astro';
|
||||
import LargeCategoryCard from '@components/cards/LargeCategoryCard.astro';
|
||||
import directus from '@lib/directus';
|
||||
import { timeago } from '@support/time';
|
||||
import { formatFromNow } from '@support/time';
|
||||
|
||||
const global = await directus.request(readSingleton('site_global'));
|
||||
|
||||
@@ -93,7 +93,7 @@ const categories = (await directus.request(readItems('categories')))
|
||||
logoLight={category.logoLight}
|
||||
logoDark={category.logoDark}
|
||||
count={postMap.get(category.slug)?.length ?? 0}
|
||||
publishDate={timeago(postMap.get(category.slug)?.[0]?.published_date)}
|
||||
publishDate={formatFromNow(postMap.get(category.slug)?.[0]?.published_date)}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
@@ -106,7 +106,7 @@ const categories = (await directus.request(readItems('categories')))
|
||||
logoLight={global.all_logoLight}
|
||||
logoDark={global.all_logoDark}
|
||||
count={posts.length}
|
||||
publishDate={timeago(posts[0]?.published_date)}
|
||||
publishDate={formatFromNow(posts[0]?.published_date)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,34 +1,13 @@
|
||||
import { format, register } from 'timeago.js';
|
||||
import dayjs from 'dayjs';
|
||||
import relativeTime from 'dayjs/plugin/relativeTime';
|
||||
|
||||
const TimeAgoConfiguration: string[][] = [
|
||||
['today', 'today'],
|
||||
['%s seconds ago', 'in %s seconds'],
|
||||
['1 minute ago', 'in 1 minute'],
|
||||
['%s minutes ago', 'in %s minutes'],
|
||||
['1 hour ago', 'in 1 hour'],
|
||||
['%s hours ago', 'in %s hours'],
|
||||
['1 day ago', 'in 1 day'],
|
||||
['%s days ago', 'in %s days'],
|
||||
['1 week ago', 'in 1 week'],
|
||||
['%s weeks ago', 'in %s weeks'],
|
||||
['1 month ago', 'in 1 month'],
|
||||
['%s months ago', 'in %s months'],
|
||||
['1 year ago', 'in 1 year'],
|
||||
['%s years ago', 'in %s years'],
|
||||
];
|
||||
dayjs.extend(relativeTime);
|
||||
|
||||
function timeago(date?: Date): string {
|
||||
function formatFromNow(date: Date | null): string {
|
||||
if (!date) {
|
||||
return 'today';
|
||||
return 'none';
|
||||
}
|
||||
|
||||
const localeFunc = (number: number, index: number, _?: number): [string, string] => {
|
||||
return TimeAgoConfiguration[index] as [string, string];
|
||||
};
|
||||
|
||||
register('timeago', localeFunc);
|
||||
|
||||
return format(date, 'timeago');
|
||||
return dayjs(date).fromNow()
|
||||
}
|
||||
|
||||
function formatDate(date: Date): string {
|
||||
@@ -46,4 +25,4 @@ function formatShortDate(date: Date): string {
|
||||
})
|
||||
}
|
||||
|
||||
export { formatDate, formatShortDate, timeago };
|
||||
export { formatFromNow, formatDate, formatShortDate, };
|
||||
|
||||
Reference in New Issue
Block a user