From aeceab7cd7b29895af125cf43e8ac0b71ed7dcc3 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Montoya Date: Tue, 25 Nov 2025 14:41:17 -0500 Subject: [PATCH 1/7] Add Docker setup with nginx for serving the game - Add Dockerfile using nginx:alpine base image - Add docker-compose.yml for easy container management - Add nginx.conf with minimal configuration and gzip compression - Service renamed to 'ui' for better naming convention --- Dockerfile | 11 +++++++++++ docker-compose.yml | 7 +++++++ nginx.conf | 17 +++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 nginx.conf diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..38d09b4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM nginx:alpine + +# Copy the HTML file +COPY index.html /usr/share/nginx/html/index.html + +# Copy nginx configuration +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# Expose port 80 +EXPOSE 80 + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..747f7dd --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,7 @@ +name: threejs-test + +services: + ui: + build: . + restart: unless-stopped + diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..2c3229d --- /dev/null +++ b/nginx.conf @@ -0,0 +1,17 @@ +server { + listen 80; + server_name localhost; + + root /usr/share/nginx/html; + index index.html; + + location / { + try_files $uri $uri/ =404; + } + + # Enable gzip compression + gzip on; + gzip_types text/html text/css application/javascript; + gzip_min_length 1000; +} + -- 2.49.1 From 4467c26f171adc22d7ca47529ae06426e5d0d922 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Montoya Date: Tue, 25 Nov 2025 15:12:45 -0500 Subject: [PATCH 2/7] Add CI workflow with Docker build and publish --- .forgejo/workflows/ci.yaml | 143 +++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 .forgejo/workflows/ci.yaml diff --git a/.forgejo/workflows/ci.yaml b/.forgejo/workflows/ci.yaml new file mode 100644 index 0000000..a5decb5 --- /dev/null +++ b/.forgejo/workflows/ci.yaml @@ -0,0 +1,143 @@ +name: Build and Publish Docker Image + +on: + pull_request: + branches: + - main + push: + branches: + - main + +jobs: + build-and-publish: + name: Build and Publish + runs-on: docker + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Fetch all history for tags + + - name: Setup Docker Buildx + run: | + docker buildx create --use || true + + - name: Login to Registry + run: | + echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login git.jusemon.com -u "${{ secrets.REGISTRY_USERNAME }}" --password-stdin + + - name: Determine Version + id: version + run: | + # Get branch name (works for both GitHub and Forgejo) + BRANCH_NAME="${GITHUB_REF#refs/heads/}" + BRANCH_NAME="${BRANCH_NAME#refs/remotes/origin/}" + if [[ -z "$BRANCH_NAME" ]]; then + BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) + fi + + # Get latest version tag + LATEST_TAG=$(git describe --tags --match 'v*.*.*' --abbrev=0 2>/dev/null || echo "v0.0.0") + LATEST_VERSION="${LATEST_TAG#v}" + + # Parse version components + IFS='.' read -r MAJOR MINOR PATCH <<< "$LATEST_VERSION" + MAJOR=${MAJOR:-0} + MINOR=${MINOR:-0} + PATCH=${PATCH:-0} + + # Determine version bump based on branch prefix + if [[ "$BRANCH_NAME" == release/* ]]; then + # Release branch: use the version from branch name or bump minor + VERSION_FROM_BRANCH=$(echo "$BRANCH_NAME" | sed -n 's|release/\(.*\)|\1|p') + if [[ -n "$VERSION_FROM_BRANCH" && "$VERSION_FROM_BRANCH" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + NEW_VERSION="$VERSION_FROM_BRANCH" + else + MINOR=$((MINOR + 1)) + PATCH=0 + NEW_VERSION="$MAJOR.$MINOR.$PATCH" + fi + elif [[ "$BRANCH_NAME" == feature/* ]]; then + # Feature branch: bump minor version + MINOR=$((MINOR + 1)) + PATCH=0 + NEW_VERSION="$MAJOR.$MINOR.$PATCH" + elif [[ "$BRANCH_NAME" == bugfix/* ]] || [[ "$BRANCH_NAME" == hotfix/* ]]; then + # Bugfix/Hotfix: bump patch version + PATCH=$((PATCH + 1)) + NEW_VERSION="$MAJOR.$MINOR.$PATCH" + elif [[ "$BRANCH_NAME" == main ]]; then + # Main branch: increment patch version from latest tag, or start at 0.1.0 if no tags exist + if [[ "$LATEST_TAG" == "v0.0.0" ]]; then + # First version + NEW_VERSION="0.1.0" + else + # Increment patch version for each merge to main + PATCH=$((PATCH + 1)) + NEW_VERSION="$MAJOR.$MINOR.$PATCH" + fi + else + # Default: bump patch + PATCH=$((PATCH + 1)) + NEW_VERSION="$MAJOR.$MINOR.$PATCH" + fi + + # For PRs, use a pre-release version + EVENT_NAME="${{ github.event_name }}" + if [[ -z "$EVENT_NAME" ]]; then + EVENT_NAME="${{ gitea.event_name }}" + fi + + if [[ "$EVENT_NAME" == "pull_request" ]]; then + PR_NUMBER="${{ github.event.pull_request.number }}" + if [[ -z "$PR_NUMBER" ]]; then + PR_NUMBER="${{ gitea.event.pull_request.number }}" + fi + if [[ -n "$PR_NUMBER" ]]; then + NEW_VERSION="${NEW_VERSION}-pr${PR_NUMBER}" + fi + fi + + echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT + echo "tag=v$NEW_VERSION" >> $GITHUB_OUTPUT + echo "Branch: $BRANCH_NAME" + echo "Latest tag: $LATEST_TAG" + echo "New version: $NEW_VERSION" + + - name: Build Docker Image + run: | + IMAGE_NAME="git.jusemon.com/jusemon/threejs-test:${{ steps.version.outputs.version }}" + docker build -t "$IMAGE_NAME" . + echo "IMAGE_NAME=$IMAGE_NAME" >> $GITHUB_ENV + + - name: Validate Image + run: | + docker run --rm -d --name test-container -p 8080:80 "$IMAGE_NAME" + sleep 2 + curl -f http://localhost:8080 || exit 1 + docker stop test-container + + - name: Push Docker Image + if: (github.event_name == 'push' || gitea.event_name == 'push') && (github.ref == 'refs/heads/main' || gitea.ref == 'refs/heads/main') + run: | + IMAGE_NAME="git.jusemon.com/jusemon/threejs-test:${{ steps.version.outputs.version }}" + docker push "$IMAGE_NAME" + + # Also tag as 'latest' for main branch + docker tag "$IMAGE_NAME" "git.jusemon.com/jusemon/threejs-test:latest" + docker push "git.jusemon.com/jusemon/threejs-test:latest" + + - name: Create Git Tag + if: (github.event_name == 'push' || gitea.event_name == 'push') && (github.ref == 'refs/heads/main' || gitea.ref == 'refs/heads/main') + run: | + git config user.name "forgejo-actions" + git config user.email "forgejo-actions@forgejo.io" + TAG="${{ steps.version.outputs.tag }}" + # Check if tag already exists + if git rev-parse "$TAG" >/dev/null 2>&1; then + echo "Tag $TAG already exists, skipping tag creation" + else + git tag -a "$TAG" -m "Release ${{ steps.version.outputs.version }}" + git push origin "$TAG" + fi + -- 2.49.1 From f4d041791c502c5ada06d3d4d175dc2f1ab84386 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Montoya Date: Tue, 25 Nov 2025 15:20:33 -0500 Subject: [PATCH 3/7] Add dind image --- .forgejo/workflows/ci.yaml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.forgejo/workflows/ci.yaml b/.forgejo/workflows/ci.yaml index a5decb5..e2a17e8 100644 --- a/.forgejo/workflows/ci.yaml +++ b/.forgejo/workflows/ci.yaml @@ -18,6 +18,29 @@ jobs: with: fetch-depth: 0 # Fetch all history for tags + - name: Check Docker availability + run: | + if command -v docker &> /dev/null; then + echo "Docker is available" + docker --version + else + echo "Docker not found. The runner may need Docker installed or configured." + echo "Please ensure your Forgejo Actions runner has Docker available." + exit 1 + fi + + # Check if Docker daemon is running + if docker info > /dev/null 2>&1; then + echo "Docker daemon is running" + docker info + else + echo "Docker daemon is not running. Attempting to start..." + # Try to start dockerd (may require privileged mode) + dockerd > /dev/null 2>&1 & + sleep 5 + docker info || (echo "Failed to start Docker daemon" && exit 1) + fi + - name: Setup Docker Buildx run: | docker buildx create --use || true -- 2.49.1 From 1f8d8a5d3bc86097d57320a76bb85fa6968b3a78 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Montoya Date: Tue, 25 Nov 2025 16:06:18 -0500 Subject: [PATCH 4/7] Using -e flag --- .forgejo/workflows/ci.yaml | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/.forgejo/workflows/ci.yaml b/.forgejo/workflows/ci.yaml index e2a17e8..20f2c20 100644 --- a/.forgejo/workflows/ci.yaml +++ b/.forgejo/workflows/ci.yaml @@ -20,26 +20,9 @@ jobs: - name: Check Docker availability run: | - if command -v docker &> /dev/null; then - echo "Docker is available" - docker --version - else - echo "Docker not found. The runner may need Docker installed or configured." - echo "Please ensure your Forgejo Actions runner has Docker available." - exit 1 - fi - - # Check if Docker daemon is running - if docker info > /dev/null 2>&1; then - echo "Docker daemon is running" - docker info - else - echo "Docker daemon is not running. Attempting to start..." - # Try to start dockerd (may require privileged mode) - dockerd > /dev/null 2>&1 & - sleep 5 - docker info || (echo "Failed to start Docker daemon" && exit 1) - fi + set -e + docker --version + docker info - name: Setup Docker Buildx run: | -- 2.49.1 From 2b4d02d27f016363ded0a17d516b36dc3448464d Mon Sep 17 00:00:00 2001 From: Juan Sebastian Montoya Date: Tue, 25 Nov 2025 16:38:42 -0500 Subject: [PATCH 5/7] Change docker image --- .forgejo/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/ci.yaml b/.forgejo/workflows/ci.yaml index 20f2c20..1c73979 100644 --- a/.forgejo/workflows/ci.yaml +++ b/.forgejo/workflows/ci.yaml @@ -11,7 +11,7 @@ on: jobs: build-and-publish: name: Build and Publish - runs-on: docker + runs-on: docker-cli steps: - name: Checkout uses: actions/checkout@v4 -- 2.49.1 From 075a3dbdedd091ff5456b414bf001e5cdf950c7a Mon Sep 17 00:00:00 2001 From: Juan Sebastian Montoya Date: Tue, 25 Nov 2025 16:55:57 -0500 Subject: [PATCH 6/7] Change docker image --- .forgejo/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/ci.yaml b/.forgejo/workflows/ci.yaml index 1c73979..68c1c56 100644 --- a/.forgejo/workflows/ci.yaml +++ b/.forgejo/workflows/ci.yaml @@ -11,7 +11,7 @@ on: jobs: build-and-publish: name: Build and Publish - runs-on: docker-cli + runs-on: ubuntu steps: - name: Checkout uses: actions/checkout@v4 -- 2.49.1 From d53a92d00f7a2caf54aae890ecc4ebad47e6dadf Mon Sep 17 00:00:00 2001 From: Juan Sebastian Montoya Date: Tue, 25 Nov 2025 17:20:52 -0500 Subject: [PATCH 7/7] Update ci workflow --- .forgejo/workflows/ci.yaml | 103 ++++++++++--------------------------- 1 file changed, 27 insertions(+), 76 deletions(-) diff --git a/.forgejo/workflows/ci.yaml b/.forgejo/workflows/ci.yaml index 68c1c56..d3be3cf 100644 --- a/.forgejo/workflows/ci.yaml +++ b/.forgejo/workflows/ci.yaml @@ -9,25 +9,35 @@ on: - main jobs: - build-and-publish: - name: Build and Publish + build-and-validate: + name: Build and Validate runs-on: ubuntu + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Build Docker Image + run: | + docker build -t threejs-test:test . + + - name: Validate Image + run: | + docker run --rm -d --name test-container -p 8080:80 threejs-test:test + sleep 2 + curl -f http://localhost:8080 || exit 1 + docker stop test-container + + publish: + name: Publish to Registry + runs-on: ubuntu + needs: build-and-validate + if: github.event_name == 'push' || gitea.event_name == 'push' steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 # Fetch all history for tags - - name: Check Docker availability - run: | - set -e - docker --version - docker info - - - name: Setup Docker Buildx - run: | - docker buildx create --use || true - - name: Login to Registry run: | echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login git.jusemon.com -u "${{ secrets.REGISTRY_USERNAME }}" --password-stdin @@ -35,13 +45,6 @@ jobs: - name: Determine Version id: version run: | - # Get branch name (works for both GitHub and Forgejo) - BRANCH_NAME="${GITHUB_REF#refs/heads/}" - BRANCH_NAME="${BRANCH_NAME#refs/remotes/origin/}" - if [[ -z "$BRANCH_NAME" ]]; then - BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) - fi - # Get latest version tag LATEST_TAG=$(git describe --tags --match 'v*.*.*' --abbrev=0 2>/dev/null || echo "v0.0.0") LATEST_VERSION="${LATEST_TAG#v}" @@ -52,61 +55,18 @@ jobs: MINOR=${MINOR:-0} PATCH=${PATCH:-0} - # Determine version bump based on branch prefix - if [[ "$BRANCH_NAME" == release/* ]]; then - # Release branch: use the version from branch name or bump minor - VERSION_FROM_BRANCH=$(echo "$BRANCH_NAME" | sed -n 's|release/\(.*\)|\1|p') - if [[ -n "$VERSION_FROM_BRANCH" && "$VERSION_FROM_BRANCH" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - NEW_VERSION="$VERSION_FROM_BRANCH" - else - MINOR=$((MINOR + 1)) - PATCH=0 - NEW_VERSION="$MAJOR.$MINOR.$PATCH" - fi - elif [[ "$BRANCH_NAME" == feature/* ]]; then - # Feature branch: bump minor version - MINOR=$((MINOR + 1)) - PATCH=0 - NEW_VERSION="$MAJOR.$MINOR.$PATCH" - elif [[ "$BRANCH_NAME" == bugfix/* ]] || [[ "$BRANCH_NAME" == hotfix/* ]]; then - # Bugfix/Hotfix: bump patch version - PATCH=$((PATCH + 1)) - NEW_VERSION="$MAJOR.$MINOR.$PATCH" - elif [[ "$BRANCH_NAME" == main ]]; then - # Main branch: increment patch version from latest tag, or start at 0.1.0 if no tags exist - if [[ "$LATEST_TAG" == "v0.0.0" ]]; then - # First version - NEW_VERSION="0.1.0" - else - # Increment patch version for each merge to main - PATCH=$((PATCH + 1)) - NEW_VERSION="$MAJOR.$MINOR.$PATCH" - fi + # Increment patch version for each merge to main, or start at 0.1.0 if no tags exist + if [[ "$LATEST_TAG" == "v0.0.0" ]]; then + # First version + NEW_VERSION="0.1.0" else - # Default: bump patch + # Increment patch version for each merge to main PATCH=$((PATCH + 1)) NEW_VERSION="$MAJOR.$MINOR.$PATCH" fi - # For PRs, use a pre-release version - EVENT_NAME="${{ github.event_name }}" - if [[ -z "$EVENT_NAME" ]]; then - EVENT_NAME="${{ gitea.event_name }}" - fi - - if [[ "$EVENT_NAME" == "pull_request" ]]; then - PR_NUMBER="${{ github.event.pull_request.number }}" - if [[ -z "$PR_NUMBER" ]]; then - PR_NUMBER="${{ gitea.event.pull_request.number }}" - fi - if [[ -n "$PR_NUMBER" ]]; then - NEW_VERSION="${NEW_VERSION}-pr${PR_NUMBER}" - fi - fi - echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT echo "tag=v$NEW_VERSION" >> $GITHUB_OUTPUT - echo "Branch: $BRANCH_NAME" echo "Latest tag: $LATEST_TAG" echo "New version: $NEW_VERSION" @@ -116,15 +76,7 @@ jobs: docker build -t "$IMAGE_NAME" . echo "IMAGE_NAME=$IMAGE_NAME" >> $GITHUB_ENV - - name: Validate Image - run: | - docker run --rm -d --name test-container -p 8080:80 "$IMAGE_NAME" - sleep 2 - curl -f http://localhost:8080 || exit 1 - docker stop test-container - - name: Push Docker Image - if: (github.event_name == 'push' || gitea.event_name == 'push') && (github.ref == 'refs/heads/main' || gitea.ref == 'refs/heads/main') run: | IMAGE_NAME="git.jusemon.com/jusemon/threejs-test:${{ steps.version.outputs.version }}" docker push "$IMAGE_NAME" @@ -134,7 +86,6 @@ jobs: docker push "git.jusemon.com/jusemon/threejs-test:latest" - name: Create Git Tag - if: (github.event_name == 'push' || gitea.event_name == 'push') && (github.ref == 'refs/heads/main' || gitea.ref == 'refs/heads/main') run: | git config user.name "forgejo-actions" git config user.email "forgejo-actions@forgejo.io" -- 2.49.1