Compare commits

..

22 Commits

Author SHA1 Message Date
03f74a8181 feat: release 3.6.0
Some checks failed
renovate / renovate (push) Successful in 30s
test-build / guarddog (push) Successful in 1m3s
test-build / build (push) Failing after 1m10s
release-image-harbor / build (push) Failing after 1m30s
release-image-harbor / release (push) Has been skipped
release-image-gitea / build (push) Failing after 2m10s
release-image-gitea / release (push) Has been skipped
2026-03-12 12:42:45 -05:00
405fdf297c feat: replace timeago with dayjs
All checks were successful
renovate / renovate (push) Successful in 49s
test-build / guarddog (push) Successful in 1m8s
test-build / build (push) Successful in 3m24s
2026-03-12 12:35:23 -05:00
5b6b6e479f feat: responsive for small screen 2026-03-11 22:44:11 -05:00
04344808bd feat: enable security feature
All checks were successful
test-build / guarddog (push) Successful in 20s
renovate / renovate (push) Successful in 35s
test-build / build (push) Successful in 2m13s
release-image-gitea / build (push) Successful in 2m27s
release-image-gitea / release (push) Successful in 5m2s
release-image-harbor / build (push) Successful in 1m17s
release-image-harbor / release (push) Successful in 2m35s
2026-03-11 21:50:38 -05:00
6ec27345c3 feat: release 3.5.0 2026-03-11 19:44:49 -05:00
5e02443409 feat: remove security feature 2026-03-11 19:44:30 -05:00
8184d42942 feat: release 3.3.0
All checks were successful
test-build / guarddog (push) Successful in 45s
renovate / renovate (push) Successful in 51s
test-build / build (push) Successful in 5m44s
release-image-gitea / build (push) Successful in 1m7s
release-image-harbor / build (push) Successful in 1m45s
release-image-gitea / release (push) Successful in 3m14s
release-image-harbor / release (push) Successful in 3m11s
2026-03-11 19:31:54 -05:00
04dfecc099 feat: disable security feature 2026-03-11 19:31:35 -05:00
ec10d45fd0 feat: release 3.2.0
All checks were successful
test-build / guarddog (push) Successful in 43s
test-build / build (push) Successful in 1m28s
release-image-gitea / build (push) Successful in 1m29s
release-image-harbor / build (push) Successful in 1m44s
release-image-gitea / release (push) Successful in 4m38s
renovate / renovate (push) Successful in 1m3s
release-image-harbor / release (push) Successful in 6m0s
2026-03-11 18:54:42 -05:00
ceb70c7049 feat: add client:load
Some checks failed
renovate / renovate (push) Successful in 29s
test-build / build (push) Has been cancelled
test-build / guarddog (push) Has been cancelled
2026-03-11 18:54:07 -05:00
4dbc5d12a3 feat: remove static robots 2026-03-11 18:53:56 -05:00
b55c3a0e31 feat: remove partytown int
All checks were successful
test-build / guarddog (push) Successful in 17s
renovate / renovate (push) Successful in 23s
test-build / build (push) Successful in 1m25s
2026-03-11 02:04:32 -05:00
e63abf03ef feat: remove partytown int
Some checks failed
renovate / renovate (push) Successful in 25s
test-build / build (push) Failing after 29s
test-build / guarddog (push) Successful in 42s
2026-03-11 02:01:40 -05:00
a7e7e5b0e8 feat: add security feature
Some checks failed
test-build / guarddog (push) Successful in 23s
renovate / renovate (push) Successful in 43s
test-build / build (push) Failing after 1m50s
2026-03-11 01:49:07 -05:00
96724d0016 chore(deps): update deps 2026-03-11 01:47:26 -05:00
30b2e980c0 feat: change cache path
All checks were successful
test-build / guarddog (push) Successful in 20s
renovate / renovate (push) Successful in 34s
test-build / build (push) Successful in 1m9s
2026-03-11 01:25:58 -05:00
113f42ca21 feat: setup node
All checks were successful
test-build / guarddog (push) Successful in 25s
renovate / renovate (push) Successful in 59s
test-build / build (push) Successful in 1m31s
release-image-gitea / build (push) Successful in 1m33s
release-image-harbor / build (push) Successful in 1m48s
release-image-gitea / release (push) Successful in 3m53s
release-image-harbor / release (push) Successful in 4m40s
2026-03-11 01:09:20 -05:00
1f2820e4b4 feat: convert to bun
Some checks failed
test-build / guarddog (push) Successful in 19s
renovate / renovate (push) Successful in 53s
test-build / build (push) Failing after 1m20s
2026-03-11 01:03:51 -05:00
dc088306ce feat: update workflow to major version
All checks were successful
test-build / guarddog (push) Successful in 13s
renovate / renovate (push) Successful in 40s
test-build / build (push) Successful in 1m57s
2026-03-11 00:15:25 -05:00
f6c1cf1bf5 chore(deps): update deps
All checks were successful
renovate / renovate (push) Successful in 30s
test-build / guarddog (push) Successful in 25s
test-build / build (push) Successful in 2m10s
2026-03-11 00:00:51 -05:00
962f354208 feat: release 3.0.0, major astro update to 6.0
Some checks failed
renovate / renovate (push) Successful in 44s
test-build / guarddog (push) Successful in 1m6s
test-build / build (push) Has been cancelled
2026-03-10 23:58:53 -05:00
bf43212afc Merge pull request 'fix(deps): update astro monorepo (major)' (#376) from renovate/major-astro-monorepo into main
Some checks failed
test-build / guarddog (push) Successful in 21s
renovate / renovate (push) Successful in 36s
test-build / build (push) Failing after 3m19s
Reviewed-on: #376
2026-03-11 04:55:31 +00:00
17 changed files with 3010 additions and 12956 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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
View File

@@ -10,8 +10,6 @@ node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# environment variables
.env

3
.npmrc
View File

@@ -1,3 +0,0 @@
registry=https://registry.npmjs.org/
engine-strict=true
save-exact=true

View File

@@ -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"]

View File

@@ -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/).

View File

@@ -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({

2938
bun.lock Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +0,0 @@
onlyBuiltDependencies:
- swup

View File

@@ -1,4 +0,0 @@
User-agent: *
Allow: /
Sitemap: https://www.alexlebens.dev/sitemap-index.xml

View File

@@ -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>

View File

@@ -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}

View File

@@ -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>

View File

@@ -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, };