diff --git a/.github/workflows/deploy-vps.yml b/.github/workflows/deploy-vps.yml new file mode 100644 index 000000000..bd6f6000c --- /dev/null +++ b/.github/workflows/deploy-vps.yml @@ -0,0 +1,69 @@ +name: Deploy to VPS + +on: + push: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" + +jobs: + build-and-deploy: + name: Build and Deploy + runs-on: ubuntu-latest + timeout-minutes: 30 + + steps: + - name: Check out + uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build Docker image + uses: docker/build-push-action@v6 + with: + context: . + push: false + load: true + tags: | + clickclack:latest + clickclack:${{ github.sha }} + build-args: | + CLICKCLACK_WEB_VERSION=${{ github.sha }} + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Install SSH key + uses: shimataro/ssh-key-action@v2 + with: + key: ${{ secrets.VPS_SSH_KEY }} + known_hosts: ${{ secrets.VPS_KNOWN_HOSTS }} + config: | + Host vps-nova + HostName ${{ secrets.VPS_HOST }} + User ${{ secrets.VPS_USER }} + IdentityFile ~/.ssh/id_rsa + StrictHostKeyChecking no + + - name: Ship image to VPS + run: docker save clickclack:latest | gzip | ssh vps-nova 'gunzip | docker load' + + - name: Restart on VPS + run: | + ssh vps-nova bash << 'EOF' + set -e + cd /opt/clickclack + grep -q "image: clickclack:" docker-compose.yml && \ + sed -i "s|image: clickclack:.*|image: clickclack:latest|" docker-compose.yml || true + chown -R 1000:1000 /opt/clickclack/data/ + docker compose up -d --no-deps clickclack + echo "Deployed clickclack:latest" + docker ps --filter name=clickclack --format "table {{.Image}}\t{{.Status}}" + EOF diff --git a/apps/web/src/ChatApp.svelte b/apps/web/src/ChatApp.svelte index e36eaa90b..957d20568 100644 --- a/apps/web/src/ChatApp.svelte +++ b/apps/web/src/ChatApp.svelte @@ -161,6 +161,12 @@ let status = "loading"; let authRequired = false; let desktopAuthStatus = ""; + const authSlides = [ + "/login/login-image-1.png", + "/login/login-image-2.png", + "/login/login-image-3.png", + ]; + let authSlideIndex = 0; let connected = false; let realtimeError = ""; let realtimeInitializedWorkspaceID = ""; @@ -379,11 +385,15 @@ void goto(route, { keepFocus: true, noScroll: true }); }); const stopDesktopQuickCompose = desktop?.onQuickCompose(() => focusActiveComposer()); + const authSlider = window.setInterval(() => { + authSlideIndex = (authSlideIndex + 1) % authSlides.length; + }, 4000); mobileNavMedia.addEventListener("change", handleMobileNavBreakpoint); return () => { mobileNavMedia.removeEventListener("change", handleMobileNavBreakpoint); stopDesktopNavigate?.(); stopDesktopQuickCompose?.(); + window.clearInterval(authSlider); }; }); @@ -4063,6 +4073,7 @@ + Totum Chat @@ -4072,36 +4083,57 @@ {/if}
-
-
-
cc
-
- ClickClack - OpenClaw workspace chat +
+
+ {#each authSlides as slide, index} + + {/each} +
+

Conversas, times e agentes organizados em um único espaço.

+
+ {#each authSlides as _, index} + + {/each}
-
-

Welcome.

-

Sign in with GitHub to join the guest room.

+
+
+ +
+

Bem-vindo ao Totum Chat.

+

Escolha seu provedor de acesso para entrar no seu espaço.

+
+ + {#if !desktop} + + {/if} +

{desktopAuthStatus || "Use a conta GitHub autorizada para o seu workspace."}

+
- - {#if !desktop} - - {/if} -

{desktopAuthStatus || "Any GitHub account can join."}

{:else} diff --git a/apps/web/src/app.html b/apps/web/src/app.html index d6ece6244..0e9b7caa7 100644 --- a/apps/web/src/app.html +++ b/apps/web/src/app.html @@ -5,7 +5,7 @@ - ClickClack + Totum Chat