From 16479ba85ba6545748ee87e9ad88e50f8afb80b6 Mon Sep 17 00:00:00 2001 From: Artem Kashaev Date: Mon, 1 Dec 2025 14:32:27 +0500 Subject: [PATCH] feat: enhance CI/CD workflow for frontend build and deployment --- .gitea/workflows/build.yml | 44 ++++++++++++++++++++++++++++++++++++++ docker-compose-ci.yml | 2 ++ 2 files changed, 46 insertions(+) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index a4df63f..534411c 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -4,6 +4,7 @@ on: push: branches: - master + - frontend workflow_dispatch: jobs: @@ -13,9 +14,39 @@ jobs: - name: Checkout uses: actions/checkout@v4 + - name: Setup Node.js 24 via nvm + run: | + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash + export NVM_DIR="$HOME/.nvm" + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" + nvm install 24 + nvm use 24 + node -v + npm -v + echo "PATH=$PATH" >> $GITHUB_ENV + - name: Login to registry run: echo "${{ secrets.TOKEN }}" | docker login ${{ secrets.GIT_HOST }} -u ${{ secrets.USERNAME }} --password-stdin + - name: Build frontend bundle + working-directory: frontend + env: + CI: "false" + run: | + npm install + npm run build + + - name: Archive frontend dist + run: | + tar -czf frontend-dist.tar.gz -C frontend/dist . + + - name: Upload frontend artifact + uses: actions/upload-artifact@v3 + with: + name: frontend-dist + path: frontend-dist.tar.gz + retention-days: 7 + - name: Build and push app run: | docker build -t ${{ secrets.GIT_HOST }}/${{ gitea.repository }}:app -f app/Dockerfile . @@ -44,6 +75,19 @@ jobs: - name: Create remote deployment directory run: ssh ${{ secrets.LXC_USER }}@${{ secrets.LXC_HOST }} "mkdir -p /srv/app" + - name: Download frontend artifact + uses: actions/download-artifact@v3 + with: + name: frontend-dist + path: artifacts + + - name: Upload frontend dist to server + run: | + mkdir -p artifacts/extracted + tar -xzf artifacts/frontend-dist.tar.gz -C artifacts/extracted + ssh ${{ secrets.LXC_USER }}@${{ secrets.LXC_HOST }} "mkdir -p /srv/app/frontend/dist && rm -rf /srv/app/frontend/dist/*" + scp -r artifacts/extracted/* ${{ secrets.LXC_USER }}@${{ secrets.LXC_HOST }}:/srv/app/frontend/dist/ + - name: Deploy docker-compose-ci.yml run: scp docker-compose-ci.yml ${{ secrets.LXC_USER }}@${{ secrets.LXC_HOST }}:/srv/app/docker-compose.yml diff --git a/docker-compose-ci.yml b/docker-compose-ci.yml index fbd7412..d75a0f1 100644 --- a/docker-compose-ci.yml +++ b/docker-compose-ci.yml @@ -25,6 +25,8 @@ services: ANALYTICS_CACHE_BACKOFF_MS: ${ANALYTICS_CACHE_BACKOFF_MS} ports: - "80:8000" + volumes: + - ./frontend/dist:/opt/app/frontend/dist:ro healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost:8000/health"] interval: 30s