name: Deploy Documentation Site on: push: branches: - main pull_request: branches: - main env: NODE_VERSION: '20.x' REGISTRY: 'ghcr.io' IMAGE_NAME: hjdave2/docs-site jobs: # 代码检查与测试 build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: 'npm' - name: Install dependencies run: npm ci - name: Build run: npm run build - name: Lint run: npm run lint if: always() # 构建 Docker 镜像并部署 deploy: needs: build runs-on: ubuntu-latest if: github.ref == 'refs/heads/main' steps: - name: Checkout uses: actions/checkout@v4 - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=sha,prefix= type=raw,value=latest - name: Build and push Docker image uses: docker/build-push-action@v5 with: context: . platforms: linux/amd64 push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max - name: Deploy to server uses: appleboy/ssh-action@master with: host: ${{ secrets.DEPLOY_HOST }} username: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_SSH_KEY }} script: | cd /var/www/docs-site docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest docker stop docs-site || true docker rm docs-site || true docker run -d --name docs-site \ -p 3000:3000 \ -e NODE_ENV=production \ -e HOST=0.0.0.0 \ -v /var/www/docs-site/.env:/app/.env \ --restart always \ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest docker system prune -af --volumes