mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-02 13:18:18 +00:00
To improve the developer experience for front-end development, we're migrating to Next.js. In order to do this migration page-by-page, we're using static site generation via Next.js. This also helps us avoid making cross site requests from front-end to back-end for the time being, while giving a ramp to separating out server and client if needed for scale down the road.
Dev instructions for using the next.js setup are in the added README.
This adds scaffolding for including the built files in the python package as well as the docker images. Docker setup has been tested locally. In order to verify the build is working as expected, we can navigate to the {khoj_host}:42110/experimental and verify that the experiment page comes up.
This setup works with serving static files included in the src/interface/web folder from the Django app. The key bit for understanding the setup is in the yarn export command in package.json.
101 lines
3.2 KiB
YAML
101 lines
3.2 KiB
YAML
name: dockerize
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- "*"
|
|
branches:
|
|
- master
|
|
paths:
|
|
- src/khoj/**
|
|
- src/interface/web/**
|
|
- pyproject.toml
|
|
- Dockerfile
|
|
- prod.Dockerfile
|
|
- docker-compose.yml
|
|
- .github/workflows/dockerize.yml
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: 'Docker image tag'
|
|
default: 'dev'
|
|
khoj:
|
|
description: 'Build Khoj docker image'
|
|
type: boolean
|
|
default: true
|
|
khoj-cloud:
|
|
description: 'Build Khoj cloud docker image'
|
|
type: boolean
|
|
default: true
|
|
|
|
env:
|
|
# Tag Image with tag name on release
|
|
# else with user specified tag (default 'dev') if triggered via workflow
|
|
# else with run_id if triggered via a pull request
|
|
# else with 'pre' (if push to master)
|
|
DOCKER_IMAGE_TAG: ${{ github.ref_type == 'tag' && github.ref_name || github.event_name == 'workflow_dispatch' && github.event.inputs.tag || github.event_name == 'push' && github.run_id || 'pre' }}
|
|
|
|
jobs:
|
|
build:
|
|
name: Publish Khoj Docker Images
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
image:
|
|
- 'local'
|
|
- 'cloud'
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v3
|
|
with:
|
|
# Get all history to correctly infer Khoj version using hatch
|
|
fetch-depth: 0
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: docker/login-action@v2
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.repository_owner }}
|
|
password: ${{ secrets.PAT }}
|
|
|
|
- name: Get App Version
|
|
id: hatch
|
|
run: echo "version=$(pipx run hatch version)" >> $GITHUB_OUTPUT
|
|
|
|
- name: 🧹 Delete huge unnecessary tools folder
|
|
run: rm -rf /opt/hostedtoolcache
|
|
|
|
- name: 📦 Build and Push Docker Image
|
|
uses: docker/build-push-action@v2
|
|
if: (matrix.image == 'local' && github.event_name == 'workflow_dispatch') && github.event.inputs.khoj == 'true' || (matrix.image == 'local' && github.event_name == 'push')
|
|
with:
|
|
context: .
|
|
file: Dockerfile
|
|
platforms: linux/amd64, linux/arm64
|
|
push: true
|
|
tags: |
|
|
ghcr.io/${{ github.repository }}:${{ env.DOCKER_IMAGE_TAG }}
|
|
${{ github.ref_type == 'tag' && format('ghcr.io/{0}:latest', github.repository) || '' }}
|
|
build-args: |
|
|
VERSION=${{ steps.hatch.outputs.version }}
|
|
PORT=42110
|
|
|
|
- name: 📦️⛅️ Build and Push Cloud Docker Image
|
|
uses: docker/build-push-action@v2
|
|
if: (matrix.image == 'cloud' && github.event_name == 'workflow_dispatch') && github.event.inputs.khoj-cloud == 'true' || (matrix.image == 'cloud' && github.event_name == 'push')
|
|
with:
|
|
context: .
|
|
file: prod.Dockerfile
|
|
platforms: linux/amd64
|
|
push: true
|
|
tags: |
|
|
ghcr.io/${{ github.repository }}-cloud:${{ env.DOCKER_IMAGE_TAG }}
|
|
${{ github.ref_type == 'tag' && format('ghcr.io/{0}-cloud:latest', github.repository) || '' }}
|
|
build-args: |
|
|
VERSION=${{ steps.hatch.outputs.version }}
|
|
PORT=42110
|