diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 69fc56e1..e5603fe6 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -1,4 +1,4 @@ -name: Deploy Docs site to Pages +name: Deploy Docs site to Live site on: push: @@ -21,7 +21,7 @@ defaults: jobs: # Build job - build: + build-test: runs-on: ubuntu-latest steps: - name: Checkout @@ -32,43 +32,70 @@ jobs: with: bun-version: latest # or "latest", "canary", - - name: Setup Pages - uses: actions/configure-pages@v4 - with: - # Automatically inject basePath in your Next.js configuration file and disable - # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized). - # - # You may remove this line if you want to manage the configuration yourself. - static_site_generator: next - - name: Install dependencies with Bun run: bun install - name: Build with Next.js - run: bun run build + run: bun run build - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: documentation/occupi-docs/out + build-push-docker: + name: Build and Push Documentation Docker Image + runs-on: ubuntu-latest + needs: build-test - # Deployment job - deploy: - name: Deploy to GitHub Pages - needs: build + steps: + - name: Checkout code + uses: actions/checkout@v4 - # Grant GITHUB_TOKEN the permissions required to make a Pages deployment - permissions: - pages: write # to deploy to Pages - id-token: write # to verify the deployment originates from an appropriate source + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 - # Deploy to the github-pages environment - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - runs-on: ubuntu-latest - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: documentation/occupi-docs + file: documentation/occupi-docs/Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ secrets.DOCKER_USERNAME }}/occupi-documentation:latest + + deploy: + name: Deploy Documentation + runs-on: ubuntu-latest + needs: build-push-docker + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Copy files to VM + uses: appleboy/scp-action@v0.1.5 + with: + host: ${{ secrets.VM_IP }} + username: ${{ secrets.VM_USERNAME }} + key: ${{ secrets.VM_SSH_KEY }} + source: "documentation/occupi-docs/docker-compose.yml,documentation/occupi-docs/Dockerfile" + target: "/home/${{ secrets.VM_USERNAME }}/occupi-docs" + + # SSH to VM and run commands + - name: SSH to VM + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.VM_IP }} + username: ${{ secrets.VM_USERNAME }} + key: ${{ secrets.VM_SSH_KEY }} + script: | + cd /home/${{ secrets.VM_USERNAME }}/occupi-docs/documentation/occupi-docs + echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin + DOCKER_USERNAME=${{ secrets.DOCKER_USERNAME }} docker compose -f docker-compose.yml down + DOCKER_USERNAME=${{ secrets.DOCKER_USERNAME }} docker compose -f docker-compose.yml pull + DOCKER_USERNAME=${{ secrets.DOCKER_USERNAME }} docker compose -f docker-compose.yml up -d diff --git a/documentation/occupi-docs/Dockerfile b/documentation/occupi-docs/Dockerfile new file mode 100644 index 00000000..70aa20b3 --- /dev/null +++ b/documentation/occupi-docs/Dockerfile @@ -0,0 +1,23 @@ +# Use the official bun image as a base +FROM oven/bun:latest + +# Set the current working directory inside the container +WORKDIR /app + +# copy bun.lockb package.json +COPY bun.lockb package.json ./ + +# install dependencies +RUN bun install + +# copy the source code into the container +COPY . . + +# Build the next.js application +RUN bun run build + +# Expose the port the app runs on +EXPOSE 3001 + +# Command to run the executable +CMD ["bun", "start"] diff --git a/documentation/occupi-docs/docker-compose.yml b/documentation/occupi-docs/docker-compose.yml new file mode 100644 index 00000000..5ba7815c --- /dev/null +++ b/documentation/occupi-docs/docker-compose.yml @@ -0,0 +1,15 @@ +services: + occupi-documentation: + image: $DOCKER_USERNAME/occupi-documentation:latest + container_name: occupi-documentation + build: + context: . + dockerfile: Dockerfile + ports: + - "3001:3000" + networks: + - webnet + +networks: + webnet: + external: true \ No newline at end of file diff --git a/documentation/occupi-docs/next.config.js b/documentation/occupi-docs/next.config.js index 7e78379d..6055e895 100644 --- a/documentation/occupi-docs/next.config.js +++ b/documentation/occupi-docs/next.config.js @@ -3,28 +3,7 @@ const withNextra = require('nextra')({ themeConfig: './theme.config.jsx' }) -const isDev = process.env.NODE_ENV === 'development'; -const isBackend = process.env.APP_ENV === 'backend'; - -const prodConfig = { - basePath: '/occupi', - assetPrefix: '/occupi/', - output: 'export', - images: { - unoptimized: true - } -}; - -const backendConfig = { - basePath: '/documentation', - assetPrefix: '/documentation/', - output: 'export', - images: { - unoptimized: true - } -} - -module.exports = withNextra(isDev ? {} : isBackend ? backendConfig : prodConfig); +module.exports = withNextra({}); // If you have other Next.js configurations, you can pass them as the parameter: // module.exports = withNextra({ /* other next.js config */ }) \ No newline at end of file diff --git a/documentation/occupi-docs/package.json b/documentation/occupi-docs/package.json index 4244a056..5ba5c8cd 100644 --- a/documentation/occupi-docs/package.json +++ b/documentation/occupi-docs/package.json @@ -3,9 +3,8 @@ "version": "0.0.1", "description": "Occupi documentation", "scripts": { - "dev": "NODE_ENV=development next dev", + "dev": "next dev", "build": "next build", - "buildbackend": "APP_ENV=backend next build", "start": "next start" }, "dependencies": {