name: CI/CD on: push: branches: [main, dev] pull_request: branches: [main, dev] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 - name: Install dependencies run: npm ci - name: Build run: npm run build deploy: runs-on: ubuntu-latest needs: build if: gitea.ref == 'refs/heads/main' steps: - uses: actions/checkout@v4 - name: Build & push Docker image run: | echo "${{ secrets.REGISTRY_PASSWORD }}" | \ docker login git.${{ secrets.DOMAIN }} \ -u ${{ secrets.REGISTRY_USER }} --password-stdin docker build -t git.${{ secrets.DOMAIN }}/${{ secrets.REGISTRY_USER }}/testapp:latest . docker push git.${{ secrets.DOMAIN }}/${{ secrets.REGISTRY_USER }}/testapp:latest - name: Deploy to VPS run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/key chmod 600 ~/.ssh/key ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts ssh -i ~/.ssh/key \ ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} \ "cd ~/programs/testapp && docker compose pull && docker compose up -d"