5 Commits
Author SHA1 Message Date
Story Crater Bot cd3a4465b4 ci: add pre-verification step to catch failures early
CI / Test (push) Successful in 1m45s
CI / Build & Push Image (push) Failing after 58s
2026-09-07 08:58:51 -07:00
Story Crater Bot 46b1f82771 ci: add DOCKER_HOST env vars to fix socket connectivity
CI / Test (push) Successful in 1m29s
CI / Build & Push Image (push) Failing after 1m1s
2026-09-07 08:57:49 -07:00
rockandStory Crater Bot 19bf437d79 fix: use env vars for docker registry credentials (#3)
CI / Test (push) Successful in 1m56s
CI / Build & Push Image (push) Failing after 1m13s
Fix registry login by passing FORGEJO_REGISTRY_USER and FORGEJO_REGISTRY_TOKEN via environment variables instead of direct secret interpolation.

This is the reference implementation pattern used across all repos.

This prevents credentials from being exposed in logs or shell history while keeping the standard docker login approach.

After merge + org-level secrets configured:
- All repos inherit FORGEJO_REGISTRY_USER and FORGEJO_REGISTRY_TOKEN
- CI validates credentials exist before docker login
- Image pushed to registry on main push

---------

Co-authored-by: Story Crater Bot <[email protected]>
Reviewed-on: #3
2026-09-07 07:08:36 +00:00
Story Crater Bot 6506a639c9 fix: move LLM config to encrypted ConfigMap (CI-friendly)
CI / Test (push) Failing after 29s
CI / Build & Push Image (push) Skipped
Problem: LLM_API_URL was hardcoded to external endpoint
- Uses https://api.riotpiao.com/v1/chat/completions (TLS hairpin)
- Not externalizable for CI/different environments

Solution: Move to encrypted ConfigMap with in-cluster endpoint
- LLM_API_URL: http://api-gateway.api.svc.cluster.local:8080/v1/chat/completions
- No TLS, no nginx hairpin, direct cluster communication
- Encrypted with SOPS for security
- CI can update values.yaml and auto-deploy

Changes:
- Create configmap.enc.yaml (SOPS-encrypted)
- Update deployment.yaml to use configMapKeyRef
- Add SOPS config to kustomization.yaml
- Deployment now references portfolio-llm-config ConfigMap
2026-09-06 23:24:12 -07:00
Story Crater Bot 7389b977b4 refactor: standardize workflow name and move env to workflow level
CI / Test (push) Failing after 27s
CI / Build & Push Image (push) Skipped
- Change name to 'CI' (consistent with template)
- Move REGISTRY, IMAGE to workflow-level env (shared by both jobs)
- Compact 'on:' branches syntax
- Maintain all service-specific features (Delete old latest, build-arg)

No functional change, pure standardization to match template pattern.
2026-09-06 23:21:54 -07:00
2 changed files with 44 additions and 2 deletions
+42
View File
@@ -32,6 +32,10 @@ jobs:
needs: test needs: test
if: github.event_name == 'push' && github.ref == 'refs/heads/main' if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: node runs-on: node
env:
DOCKER_HOST: tcp://localhost:2376
DOCKER_TLS_VERIFY: "1"
DOCKER_CERT_PATH: /docker-certs/client
steps: steps:
- name: Install Node.js and Docker - name: Install Node.js and Docker
run: | run: |
@@ -47,6 +51,44 @@ jobs:
SHORT_SHA=$(git rev-parse --short HEAD) SHORT_SHA=$(git rev-parse --short HEAD)
echo "short_sha=${SHORT_SHA}" >> $GITHUB_OUTPUT echo "short_sha=${SHORT_SHA}" >> $GITHUB_OUTPUT
- name: Pre-verify Docker and Registry
run: |
echo "=== Docker Setup Verification ==="
echo "✓ DOCKER_HOST: ${DOCKER_HOST}"
echo "✓ DOCKER_TLS_VERIFY: ${DOCKER_TLS_VERIFY}"
echo "✓ DOCKER_CERT_PATH: ${DOCKER_CERT_PATH}"
echo ""
echo "=== Docker Daemon Check ==="
if ! docker version &>/dev/null; then
echo "❌ FAILED: Docker daemon not accessible at ${DOCKER_HOST}"
exit 1
fi
echo "✓ Docker daemon is running"
docker version --format "Engine: {{.Server.Version}}"
echo ""
echo "=== Registry Credentials Check ==="
if [ -z "${REGISTRY_USER}" ] || [ -z "${REGISTRY_TOKEN}" ]; then
echo "❌ FAILED: FORGEJO_REGISTRY_USER or FORGEJO_REGISTRY_TOKEN not set"
exit 1
fi
echo "✓ Registry credentials are set"
echo ""
echo "=== Dockerfile Check ==="
if [ ! -f Dockerfile ]; then
echo "❌ FAILED: Dockerfile not found"
exit 1
fi
echo "✓ Dockerfile exists"
echo ""
echo "=== Image Tag Check ==="
echo "✓ IMAGE tag will be: ${IMAGE}:${{ steps.sha.outputs.short_sha }}"
echo "✓ Latest tag will be: ${IMAGE}:latest"
echo ""
echo "=== All pre-checks passed ==="
env:
REGISTRY_USER: ${{ secrets.FORGEJO_REGISTRY_USER }}
REGISTRY_TOKEN: ${{ secrets.FORGEJO_REGISTRY_TOKEN }}
- name: Registry login - name: Registry login
run: | run: |
echo "${REGISTRY_TOKEN}" | docker login "${REGISTRY}" \ echo "${REGISTRY_TOKEN}" | docker login "${REGISTRY}" \
+2 -2
View File
@@ -14,7 +14,7 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"framer-motion": "^11.0.0", "framer-motion": "^11.0.0",
"lucide-react": "^0.344.0", "lucide-react": "^1.41.0",
"next": "^15.5.20", "next": "^15.5.20",
"react": "^19.2.7", "react": "^19.2.7",
"react-dom": "^19.2.7", "react-dom": "^19.2.7",
@@ -28,7 +28,7 @@
"@typescript-eslint/eslint-plugin": "^8.64.0", "@typescript-eslint/eslint-plugin": "^8.64.0",
"@typescript-eslint/parser": "^8.64.0", "@typescript-eslint/parser": "^8.64.0",
"autoprefixer": "^10.4.16", "autoprefixer": "^10.4.16",
"eslint": "^8.57.1", "eslint": "^9.0.0",
"eslint-config-next": "^16.2.10", "eslint-config-next": "^16.2.10",
"postcss": "^8.4.32", "postcss": "^8.4.32",
"typescript": "5.8.2" "typescript": "5.8.2"