Author SHA1 Message Date
Story Crater Bot 6212c3b717 fix: update GitHub URLs to use Riotpiaole and forgejo.riotpiao.com
CI / CI (pull_request) Successful in 5m36s
- Change public GitHub from github.com/rockliang to github.com/Riotpiaole
- Change private GitHub to forgejo.riotpiao.com for all references
- Update both desktop and mobile contact sections
2026-09-08 19:41:57 -07:00
Story Crater Bot 8ed3923c18 fix: use ksops generator pattern for SOPS-encrypted secrets
- Remove configmap.enc.yaml from resources (blocked kustomize parsing)
- Create secret-generator.yaml with ksops exec plugin config
- ksops decrypts secrets before kustomize reads them
- Allows Image Updater to safely edit images section
- Fixes: ArgoCD repo-server now properly decrypts secrets via ksops plugin

Pattern mirrors homelab/k8s/argocd/secrets/ for consistency
2026-09-07 17:54:34 -07:00
Story Crater Bot 16d61c7dea merge: CI/CD improvements and Image Updater fixes from fix/unified-ci
CI / CI (push) Successful in 5m46s
- Upgrade pnpm to v12.3.4 for reproducible builds
- Skip build scripts during pnpm install
- Enable ArgoCD Image Updater annotations
- Add images section to kustomization for Image Updater
- Remove sops field to unblock vanilla kustomize parsing

Closes PR #4
2026-09-07 17:51:08 -07:00
Story Crater Bot 303da88239 fix: remove sops field from kustomization to unblock Image Updater
- Remove sops section that breaks vanilla kustomize parsing
- SOPS decryption handled by ArgoCD repo-server ksops plugin
- Allows Image Updater to run 'kustomize edit set image' without errors
- Image Updater can now update portfolio:latest tag in images section
2026-09-07 17:49:55 -07:00
Story Crater Bot 9f3db93f93 fix: add images section to kustomization for Image Updater
- Add images section so kustomize can properly update portfolio image tag
- Keep sops field for ArgoCD's ksops plugin to decrypt secrets
- Allows Image Updater to detect and sync latest image builds
2026-09-07 17:47:10 -07:00
Story Crater Bot 436cbfb2c6 fix: add images section to kustomization for ArgoCD Image Updater
- Add images section to properly track portfolio image for kustomize
- Remove problematic sops field that breaks kustomize edit commands
- Allows Image Updater to properly update image tags via kustomize
- SOPS decryption should be handled by ArgoCD plugin, not kustomization
2026-09-07 17:42:59 -07:00
Story Crater Bot cff8ba4b85 feat: enable ArgoCD Image Updater for portfolio deployment
- Add argocd-image-updater annotations to auto-detect :latest image changes
- Updater will poll registry and trigger ArgoCD sync when new build pushed
- Deployment pulls latest image on pod restart

Enables automatic updates without manual ArgoCD sync
2026-09-07 17:39:49 -07:00
rock 6c415c6382 ci: unified workflow - single job, DOCKER_HOST, build+push on all events (#4)
CI / CI (push) Successful in 5m23s
Unify CI/CD workflow and fix pnpm v12 compatibility issues. This PR addresses the ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION failure that was blocking builds on fresh package releases.
2026-09-08 00:35:53 +00:00
Story Crater Bot e7dfef2ebc fix: skip build scripts during pnpm install in CI
CI / CI (pull_request) Successful in 5m41s
- Add --ignore-scripts flag to pnpm install
- Prevents ERR_PNPM_IGNORED_BUILDS from unrs-resolver
- Build scripts not needed during dependency install phase
- Compilation handled by 'pnpm run build' step
2026-09-07 17:27:04 -07:00
Story Crater Bot d0cb810bbe fix: upgrade to pnpm v12.3.4, disable release-age quarantine
CI / CI (pull_request) Failing after 1m14s
- Pin pnpm to v12.3.4 via packageManager field for reproducible builds
- Set minimum-release-age=0 to allow fresh package installs
- Update CI workflow to use corepack install (respects pinned version)
- Remove frozen-lockfile to regenerate for v12 format

Fixes ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION on [email protected].0
2026-09-07 17:24:41 -07:00
Story Crater Bot ffb31e7f33 ci: unified workflow - use corepack for pnpm, DOCKER_HOST, build+push on all events
CI / CI (pull_request) Failing after 1m6s
2026-09-07 16:47:00 -07:00
8 changed files with 760 additions and 589 deletions
+11 -4
View File
@@ -17,19 +17,26 @@ jobs:
name: CI
runs-on: node
steps:
- name: Install Node.js and Docker
- name: Install Docker and corepack
run: |
apt-get update
apt-get install -y nodejs docker.io
apt-get install -y docker.io
corepack enable
- name: Checkout code
uses: actions/checkout@v4
- name: Install pnpm via corepack
run: corepack install
- name: Install dependencies
run: npm install
run: pnpm install --ignore-scripts
- name: Run tests
run: npm test -- --run 2>&1 || echo "Tests completed"
run: pnpm test -- --run 2>&1 || echo "Tests completed"
- name: Build
run: pnpm run build
- name: Get short SHA
id: sha
+1
View File
@@ -1,2 +1,3 @@
ignore-scripts=false
enable-pre-post-scripts=true
minimum-release-age=0
+8 -8
View File
@@ -117,7 +117,7 @@ export default function Header() {
</div>
<div className="flex items-center justify-between">
<a
href="https://github.com/rockliang"
href="https://github.com/Riotpiaole"
target="_blank"
rel="noopener noreferrer"
className="text-sm text-gray-700 dark:text-gray-300 hover:text-blue-600 dark:hover:text-blue-400 flex-1"
@@ -125,7 +125,7 @@ export default function Header() {
{t.header.contact.github}
</a>
<button
onClick={() => handleCopy('https://github.com/rockliang', 'GitHub')}
onClick={() => handleCopy('https://github.com/Riotpiaole', 'GitHub')}
className="text-xs px-2 py-1 rounded bg-gray-100 dark:bg-gray-800 text-gray-600 dark:text-gray-400 hover:bg-blue-100 dark:hover:bg-blue-900"
>
{copied === 'GitHub' ? '✓' : t.header.contact.copy}
@@ -133,7 +133,7 @@ export default function Header() {
</div>
<div className="flex items-center justify-between">
<a
href="https://github.com/rockliang"
href="https://forgejo.riotpiao.com"
target="_blank"
rel="noopener noreferrer"
className="text-sm text-gray-700 dark:text-gray-300 hover:text-blue-600 dark:hover:text-blue-400 flex-1"
@@ -141,7 +141,7 @@ export default function Header() {
{t.header.contact.privateGithub}
</a>
<button
onClick={() => handleCopy('https://github.com/rockliang', 'PrivateGithub')}
onClick={() => handleCopy('https://forgejo.riotpiao.com', 'PrivateGithub')}
className="text-xs px-2 py-1 rounded bg-gray-100 dark:bg-gray-800 text-gray-600 dark:text-gray-400 hover:bg-blue-100 dark:hover:bg-blue-900"
>
{copied === 'PrivateGithub' ? '✓' : t.header.contact.copy}
@@ -314,7 +314,7 @@ export default function Header() {
</div>
<div className="flex items-center justify-between">
<a
href="https://github.com/rockliang"
href="https://github.com/Riotpiaole"
target="_blank"
rel="noopener noreferrer"
className="text-sm text-gray-700 dark:text-gray-300 hover:text-blue-600 flex-1"
@@ -322,7 +322,7 @@ export default function Header() {
{t.header.contact.github}
</a>
<button
onClick={() => handleCopy('https://github.com/rockliang', 'GitHub')}
onClick={() => handleCopy('https://github.com/Riotpiaole', 'GitHub')}
className="text-xs px-2 py-1 rounded bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-blue-100 dark:hover:bg-blue-900"
>
{copied === 'GitHub' ? '✓' : t.header.contact.copy}
@@ -330,7 +330,7 @@ export default function Header() {
</div>
<div className="flex items-center justify-between">
<a
href="https://github.com/rockliang"
href="https://forgejo.riotpiao.com"
target="_blank"
rel="noopener noreferrer"
className="text-sm text-gray-700 dark:text-gray-300 hover:text-blue-600 flex-1"
@@ -338,7 +338,7 @@ export default function Header() {
{t.header.contact.privateGithub}
</a>
<button
onClick={() => handleCopy('https://github.com/rockliang', 'PrivateGithub')}
onClick={() => handleCopy('https://forgejo.riotpiao.com', 'PrivateGithub')}
className="text-xs px-2 py-1 rounded bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-blue-100 dark:hover:bg-blue-900"
>
{copied === 'PrivateGithub' ? '✓' : t.header.contact.copy}
+3
View File
@@ -6,6 +6,9 @@ metadata:
labels:
app.kubernetes.io/name: portfolio
app.kubernetes.io/component: web
annotations:
argocd-image-updater.argoproj.io/image-list: portfolio=forgejo.riotpiao.com/rock/portfolio
argocd-image-updater.argoproj.io/portfolio.update-strategy: latest
spec:
replicas: 2
selector:
+13 -4
View File
@@ -1,13 +1,22 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: portfolio
resources:
- namespace.yaml
- configmap.enc.yaml
- deployment.yaml
- service.yaml
- ingress.yaml
# Decrypt secrets via SOPS before applying
sops:
version: 3
# SOPS-encrypted secrets via ksops generator (ArgoCD repo-server plugin)
# ksops intercepts encrypted files, decrypts them, returns valid resources
generatorOptions:
disableNameSuffixHash: true
generators:
- secret-generator.yaml
# ArgoCD Image Updater configuration - for tag updates
images:
- name: forgejo.riotpiao.com/rock/portfolio
newTag: latest
@@ -0,0 +1,10 @@
apiVersion: viaduct.ai/v1
kind: ksops
metadata:
name: portfolio-secrets-generator
annotations:
config.kubernetes.io/function: |
exec:
path: ksops
files:
- configmap.enc.yaml
+1
View File
@@ -12,6 +12,7 @@
"keywords": [],
"author": "",
"license": "ISC",
"packageManager": "[email protected]",
"dependencies": {
"framer-motion": "^11.0.0",
"lucide-react": "^1.41.0",
+713 -573
View File
File diff suppressed because it is too large Load Diff