From 1a8f41ecde9a578c3a1db9a0e27fd0821f78b341 Mon Sep 17 00:00:00 2001 From: Atridad Lahiji Date: Tue, 14 Oct 2025 11:42:40 -0600 Subject: [PATCH] Added deploy for Docs --- .github/workflows/deploy_docs.yml | 38 +++++++++ .../workflows/{deploy.yml => deploy_sync.yml} | 6 +- docs/.dockerignore | 79 +++++++++++++++++++ docs/.vscode/extensions.json | 4 - docs/.vscode/launch.json | 11 --- docs/Dockerfile | 78 ++++++++++++++++++ docs/docker-compose.yml | 8 ++ docs/pnpm-workspace.yaml | 3 + 8 files changed, 209 insertions(+), 18 deletions(-) create mode 100644 .github/workflows/deploy_docs.yml rename .github/workflows/{deploy.yml => deploy_sync.yml} (90%) create mode 100644 docs/.dockerignore delete mode 100644 docs/.vscode/extensions.json delete mode 100644 docs/.vscode/launch.json create mode 100644 docs/Dockerfile create mode 100644 docs/docker-compose.yml create mode 100644 docs/pnpm-workspace.yaml diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml new file mode 100644 index 0000000..79e98b1 --- /dev/null +++ b/.github/workflows/deploy_docs.yml @@ -0,0 +1,38 @@ +name: Ascently - Docs Deploy +on: + push: + branches: [main] + paths: ["docs/**"] + pull_request: + branches: [main] + paths: ["docs/**"] + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ secrets.REPO_HOST }} + username: ${{ github.repository_owner }} + password: ${{ secrets.DEPLOY_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: ./docs + platforms: linux/amd64 + push: true + tags: | + ${{ secrets.REPO_HOST }}/${{ github.repository_owner }}/ascently-docs:${{ github.sha }} + ${{ secrets.REPO_HOST }}/${{ github.repository_owner }}/ascently-docs:latest diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy_sync.yml similarity index 90% rename from .github/workflows/deploy.yml rename to .github/workflows/deploy_sync.yml index 1389566..a6624a4 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy_sync.yml @@ -1,4 +1,4 @@ -name: Ascently Docker Deploy +name: Ascently - Sync Deploy on: push: branches: [main] @@ -14,7 +14,7 @@ jobs: packages: write steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v5 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 @@ -27,7 +27,7 @@ jobs: password: ${{ secrets.DEPLOY_TOKEN }} - name: Build and push sync-server - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v6 with: context: ./sync file: ./sync/Dockerfile diff --git a/docs/.dockerignore b/docs/.dockerignore new file mode 100644 index 0000000..86c3082 --- /dev/null +++ b/docs/.dockerignore @@ -0,0 +1,79 @@ +# Node modules +node_modules +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Environment files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Build output +dist +.astro + +# IDE files +.vscode +.idea +*.swp +*.swo + +# OS files +.DS_Store +Thumbs.db + +# Git +.git +.gitignore + +# Docker +Dockerfile +docker-compose.yml +.dockerignore + +# Documentation +README.md +*.md + +# Cache directories +.cache +.parcel-cache + +# Logs +*.log + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Dependency directories +jspm_packages/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# Temporary folders +tmp/ +temp/ diff --git a/docs/.vscode/extensions.json b/docs/.vscode/extensions.json deleted file mode 100644 index 22a1505..0000000 --- a/docs/.vscode/extensions.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "recommendations": ["astro-build.astro-vscode"], - "unwantedRecommendations": [] -} diff --git a/docs/.vscode/launch.json b/docs/.vscode/launch.json deleted file mode 100644 index d642209..0000000 --- a/docs/.vscode/launch.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "command": "./node_modules/.bin/astro dev", - "name": "Development server", - "request": "launch", - "type": "node-terminal" - } - ] -} diff --git a/docs/Dockerfile b/docs/Dockerfile new file mode 100644 index 0000000..0e4e8d0 --- /dev/null +++ b/docs/Dockerfile @@ -0,0 +1,78 @@ +FROM node:24-alpine AS base + +# Install system dependencies +RUN apk add --no-cache \ + python3 \ + make \ + g++ \ + libc6-compat \ + vips-dev \ + curl + +# Install pnpm globally +RUN npm install -g pnpm + +# Configure pnpm +RUN pnpm config set store-dir /.pnpm-store +RUN pnpm config set network-timeout 300000 +RUN pnpm config set fetch-retries 10 +RUN pnpm config set fetch-retry-factor 2 + +FROM base AS deps + +WORKDIR /app + +# Copy package files +COPY package.json pnpm-lock.yaml ./ + +# Install dependencies with retry logic +RUN --mount=type=cache,id=pnpm,target=/.pnpm-store \ + pnpm install --frozen-lockfile || \ + (sleep 5 && pnpm install --frozen-lockfile) || \ + (sleep 10 && pnpm install --frozen-lockfile --no-frozen-lockfile) + +FROM base AS build-deps + +WORKDIR /app + +# Copy package files +COPY package.json pnpm-lock.yaml ./ + +# Install all dependencies including dev dependencies +RUN --mount=type=cache,id=pnpm,target=/.pnpm-store \ + pnpm install --frozen-lockfile || \ + (sleep 5 && pnpm install --frozen-lockfile) || \ + (sleep 10 && pnpm install --frozen-lockfile --no-frozen-lockfile) + +FROM build-deps AS builder + +# Copy source code +COPY . . + +# Build the application +RUN pnpm run build + +FROM node:20-alpine AS runtime + +# Install pnpm for runtime +RUN npm install -g pnpm + +WORKDIR /app + +# Copy built application +COPY --from=builder /app/dist ./dist + +# Copy production dependencies and package files +COPY --from=deps /app/node_modules ./node_modules +COPY package.json pnpm-lock.yaml ./ + +# Set environment variables +ENV HOST=0.0.0.0 \ + PORT=4321 \ + NODE_ENV=production + +# Expose port +EXPOSE 4321 + +# Start the application using Astro preview +CMD ["pnpm", "run", "preview", "--host", "0.0.0.0"] diff --git a/docs/docker-compose.yml b/docs/docker-compose.yml new file mode 100644 index 0000000..438bdf1 --- /dev/null +++ b/docs/docker-compose.yml @@ -0,0 +1,8 @@ +services: + app: + image: ${IMAGE} + ports: + - "${APP_PORT}:4321" + environment: + NODE_ENV: production + restart: unless-stopped diff --git a/docs/pnpm-workspace.yaml b/docs/pnpm-workspace.yaml new file mode 100644 index 0000000..d0b7dbe --- /dev/null +++ b/docs/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +onlyBuiltDependencies: + - esbuild + - sharp