diff --git a/.env b/.env
index 5c1a29f..e068092 100644
--- a/.env
+++ b/.env
@@ -1,2 +1,2 @@
-VITE_LAST_BUILD_DATE=20260616
-VITE_LAST_SUCCESSFUL_COMMIT=13aa686
+VITE_LAST_BUILD_DATE=20260623
+VITE_LAST_SUCCESSFUL_COMMIT=f531e1b
diff --git a/.woodpecker.yml b/.woodpecker.yml
new file mode 100644
index 0000000..67f1e0a
--- /dev/null
+++ b/.woodpecker.yml
@@ -0,0 +1,65 @@
+when:
+ - event: push
+ branch: main
+ - event: manual
+
+steps:
+ notify-start:
+ image: python:3.12-alpine
+ environment:
+ DEPLOY_TARGET_URL: http://bone-kingdom.tabitha.tealthrone/
+ DISCORD_DEPLOY_WEBHOOK_URL:
+ from_secret: discord_deploy_webhook_url
+ commands:
+ - apk add --no-cache curl
+ - sh scripts/woodpecker/notify-discord.sh started "Bone Kingdom Deploy Started" 5793266
+
+ validate:
+ image: node:24-bookworm
+ commands:
+ - npm ci
+ - npm run lint
+ - npm run test -- --runInBand
+ - npm run web:build
+
+ deploy:
+ image: alpine:3.20
+ environment:
+ DEPLOY_TARGET_URL: http://bone-kingdom.tabitha.tealthrone/
+ volumes:
+ - /Users/Tabitha/.openclaw/workspace_father/blb-throne-of-the-bone-king/dist/renderer:/deploy-target
+ commands:
+ - apk add --no-cache curl rsync
+ - test -d dist/renderer
+ - mkdir -p /deploy-target
+ - rsync -a --delete dist/renderer/ /deploy-target/
+ - curl -fsS "$DEPLOY_TARGET_URL" >/tmp/bone-kingdom-index.html
+ - grep -q '
' /tmp/bone-kingdom-index.html
+ depends_on:
+ - validate
+
+ notify-success:
+ image: python:3.12-alpine
+ environment:
+ DEPLOY_TARGET_URL: http://bone-kingdom.tabitha.tealthrone/
+ DISCORD_DEPLOY_WEBHOOK_URL:
+ from_secret: discord_deploy_webhook_url
+ commands:
+ - apk add --no-cache curl
+ - sh scripts/woodpecker/notify-discord.sh succeeded "Bone Kingdom Deploy Succeeded" 5763719
+ depends_on:
+ - deploy
+ when:
+ status: [success]
+
+ notify-failure:
+ image: python:3.12-alpine
+ environment:
+ DEPLOY_TARGET_URL: http://bone-kingdom.tabitha.tealthrone/
+ DISCORD_DEPLOY_WEBHOOK_URL:
+ from_secret: discord_deploy_webhook_url
+ commands:
+ - apk add --no-cache curl
+ - sh scripts/woodpecker/notify-discord.sh failed "Bone Kingdom Deploy Failed" 15158332
+ when:
+ status: [failure]
diff --git a/__tests__/changelogData.test.ts b/__tests__/changelogData.test.ts
index 894360b..11490cd 100644
--- a/__tests__/changelogData.test.ts
+++ b/__tests__/changelogData.test.ts
@@ -8,7 +8,7 @@ describe('changelog data', () => {
it('provides valid changelog entries', () => {
expect(isChangelogEntries(changelogEntries)).toBe(true);
expect(changelogEntries.length).toBeGreaterThan(0);
- expect(changelogEntries[0]).toEqual(
+ expect(changelogEntries).toContainEqual(
expect.objectContaining({
id: 'build-metadata-changelog-poc',
title: 'Build Metadata and Changelog Scaffold',
diff --git a/package-lock.json b/package-lock.json
index 5009666..68336e5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "BlbThroneOfTheBoneKing",
- "version": "0.0.2",
+ "version": "0.0.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "BlbThroneOfTheBoneKing",
- "version": "0.0.2",
+ "version": "0.0.3",
"dependencies": {
"@react-native-async-storage/async-storage": "^3.1.1",
"@react-native/new-app-screen": "0.85.3",
diff --git a/package.json b/package.json
index e397b7d..b6c3a60 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "BlbThroneOfTheBoneKing",
- "version": "0.0.2",
+ "version": "0.0.3",
"private": true,
"main": "dist/electron/main.js",
"scripts": {
diff --git a/scripts/woodpecker/notify-discord.sh b/scripts/woodpecker/notify-discord.sh
new file mode 100755
index 0000000..72915ed
--- /dev/null
+++ b/scripts/woodpecker/notify-discord.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+set -eu
+
+status="${1:-unknown}"
+title="${2:-Bone Kingdom deploy update}"
+color="${3:-5793266}"
+target_url="${DEPLOY_TARGET_URL:-http://bone-kingdom.tabitha.tealthrone/}"
+commit="${CI_COMMIT_SHA:-unknown}"
+short_commit="$(printf '%s' "$commit" | cut -c 1-12)"
+branch="${CI_COMMIT_BRANCH:-unknown}"
+repo="${CI_REPO:-jacob-mathison/blb-throne-of-the-bone-king}"
+build_url="${CI_PIPELINE_URL:-${CI_BUILD_LINK:-http://localhost:13580/}}"
+
+if [ -z "${DISCORD_DEPLOY_WEBHOOK_URL:-}" ]; then
+ echo "DISCORD_DEPLOY_WEBHOOK_URL is not configured; skipping Discord notification."
+ exit 0
+fi
+
+python3 - "$status" "$title" "$color" "$target_url" "$repo" "$branch" "$short_commit" "$build_url" <<'PY' > /tmp/discord-payload.json
+import json
+import sys
+
+status, title, color, target_url, repo, branch, short_commit, build_url = sys.argv[1:9]
+payload = {
+ "content": f"Bone Kingdom deploy status: {status}",
+ "embeds": [
+ {
+ "title": title,
+ "url": target_url,
+ "color": int(color),
+ "fields": [
+ {"name": "Status", "value": status, "inline": True},
+ {"name": "Repo", "value": repo, "inline": True},
+ {"name": "Branch", "value": branch, "inline": True},
+ {"name": "Commit", "value": short_commit, "inline": True},
+ {"name": "Target", "value": target_url, "inline": False},
+ {"name": "Build", "value": build_url, "inline": False},
+ ],
+ }
+ ],
+}
+print(json.dumps(payload))
+PY
+
+curl -fsS \
+ -H "Content-Type: application/json" \
+ --data-binary @/tmp/discord-payload.json \
+ "$DISCORD_DEPLOY_WEBHOOK_URL"
diff --git a/src/data/changelog.json b/src/data/changelog.json
index e2c59f8..db14690 100644
--- a/src/data/changelog.json
+++ b/src/data/changelog.json
@@ -1,4 +1,16 @@
[
+ {
+ "id": "woodpecker-deploy-pipeline",
+ "version": "0.0.2-20260623-f531e1b",
+ "createdAt": "2026-06-23",
+ "title": "Woodpecker Deploy Pipeline",
+ "summary": "Added a Woodpecker pipeline for validating, building, notifying, and deploying the hosted web app.",
+ "changes": [
+ "Added deploy lifecycle Discord notifications for start, success, and failure states.",
+ "Added Woodpecker validation for lint, tests, and the Vite web build.",
+ "Added a deployment step that syncs the built renderer bundle to the local nginx host."
+ ]
+ },
{
"id": "build-metadata-changelog-poc",
"version": "0.0.1-20260616-13aa686",