Initial commit: Gaming Hub foundation

Plugin-based Discord bot framework with web frontend:
- Core: Discord.js client, SSE broadcast, JSON persistence
- Plugin system: lifecycle hooks (init, onReady, routes, snapshot, destroy)
- Web: React 19 + Vite 6 + TypeScript, tab-based navigation
- Docker: multi-stage build (Node 24, static ffmpeg, yt-dlp)
- GitLab CI: Kaniko with LAN registry caching

Ready for plugin development.
This commit is contained in:
Claude Code 2026-03-05 22:52:13 +01:00
parent 1ae431dd2f
commit ae1c41f0ae
19 changed files with 954 additions and 0 deletions

63
.gitlab-ci.yml Normal file
View file

@ -0,0 +1,63 @@
stages:
- build
variables:
INTERNAL_REGISTRY: "10.10.10.10:9080"
IMAGE_NAME: "$INTERNAL_REGISTRY/$CI_PROJECT_PATH"
CI_SERVER_URL: "http://10.10.10.10:9080"
GITLAB_FEATURES: ""
docker-build:
stage: build
image:
name: gcr.io/kaniko-project/executor:v1.23.2-debug
entrypoint: [""]
rules:
- if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH
before_script:
- mkdir -p /kaniko/.docker
- |
cat > /kaniko/.docker/config.json <<EOF
{
"auths": {
"$INTERNAL_REGISTRY": {
"username": "$CI_REGISTRY_USER",
"password": "$CI_REGISTRY_PASSWORD"
}
}
}
EOF
script:
- |
if [ "$CI_COMMIT_REF_NAME" = "main" ]; then
TAG="main"
VERSION="1.0.0"
CHANNEL="stable"
elif [ "$CI_COMMIT_REF_NAME" = "feature/nightly" ] || [ "$CI_COMMIT_REF_NAME" = "nightly" ]; then
TAG="nightly"
VERSION="1.0.0-nightly"
CHANNEL="nightly"
else
CLEAN_TAG=$(echo "$CI_COMMIT_REF_NAME" | sed 's/\//-/g')
TAG="$CLEAN_TAG"
VERSION="1.0.0-dev"
CHANNEL="dev"
fi
DESTINATIONS="--destination=$IMAGE_NAME:$CI_COMMIT_SHA --destination=$IMAGE_NAME:$TAG"
if [ "$CI_COMMIT_REF_NAME" = "main" ]; then
DESTINATIONS="$DESTINATIONS --destination=$IMAGE_NAME:latest"
fi
echo "Building for channel $CHANNEL with version $VERSION and tag $TAG"
echo "Using registry image: $IMAGE_NAME"
/kaniko/executor \
--context "$CI_PROJECT_DIR" \
--dockerfile "$CI_PROJECT_DIR/Dockerfile" \
--build-arg "VITE_BUILD_CHANNEL=$CHANNEL" \
--build-arg "VITE_APP_VERSION=$VERSION" \
--cache=true \
--cache-repo="$IMAGE_NAME/cache" \
--insecure-registry=$INTERNAL_REGISTRY \
$DESTINATIONS