feat: support knowledge base document manage API #785
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and Publish | |
on: | |
pull_request: | |
branches: | |
- main | |
types: | |
- opened | |
- synchronize | |
- reopened | |
- labeled | |
- unlabeled | |
push: | |
branches: | |
- main | |
tags: | |
- '*' | |
workflow_dispatch: | |
inputs: | |
tag: | |
description: "The tag to build the image with. Format *.*.*((beta|rc)*)?" | |
required: true | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
docker-metadata: | |
name: Generate docker metadata | |
runs-on: ubuntu-latest | |
if: ${{ (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'require-build')) || (github.event_name != 'pull_request' && !cancelled()) }} | |
outputs: | |
tags: ${{steps.meta.outputs.tags}} | |
labels: ${{steps.meta.outputs.labels}} | |
annotations: ${{steps.meta.outputs.annotations}} | |
platforms: | | |
linux/amd64 | |
${{(startsWith(github.ref, 'refs/tags/') && 'linux/arm64') || ''}} | |
should-build-frontend: ${{steps.decide.outputs.should-build-frontend}} | |
should-build-backend: ${{steps.decide.outputs.should-build-backend}} | |
e2e-frontend: ${{steps.decide.outputs.e2e-frontend}} | |
e2e-backend: ${{steps.decide.outputs.e2e-backend}} | |
permissions: | |
contents: read | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: lts/* | |
cache: npm | |
cache-dependency-path: .github/actions/*/package-lock.json | |
- run: npm ci | |
working-directory: .github/actions/decide | |
- name: Decide | |
id: decide | |
uses: ./.github/actions/decide/ | |
with: | |
pr-e2e-frontend-label-prefix: 'e2e-frontend:' | |
pr-e2e-backend-label-prefix: 'e2e-backend:' | |
- name: Docker metadata | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
github-token: ${{ github.token }} | |
images: "{0}/{1}" | |
tags: | | |
type=raw,value=branch-{{branch}},enable=${{ !startsWith(github.ref, 'refs/tags/') && !startsWith(github.ref, 'refs/pull/') }} | |
type=sha,prefix=sha-,format=long,suffix=-dev,enable=${{ !startsWith(github.ref, 'refs/tags/') }} | |
type=sha,prefix=sha-,format=long,enable=${{ startsWith(github.ref, 'refs/tags/') }} | |
type=ref,event=pr | |
type=pep440,value=${{inputs.tag || github.ref_name}},pattern={{version}} | |
type=pep440,value=${{inputs.tag || github.ref_name}},pattern={{major}}.{{minor}} | |
type=pep440,value=${{inputs.tag || github.ref_name}},pattern={{major}} | |
build-backend: | |
name: Build and Push Backend Image | |
runs-on: ubuntu-latest | |
needs: docker-metadata | |
if: ${{needs.docker-metadata.outputs.should-build-backend == 'true'}} | |
permissions: | |
contents: read | |
packages: write | |
attestations: write | |
id-token: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Login to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.RELEASE_DOCKERHUB_USERNAME }} | |
password: ${{ secrets.RELEASE_DOCKERHUB_TOKEN }} | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build and push backend | |
uses: docker/build-push-action@v6 | |
with: | |
context: backend | |
platforms: ${{needs.docker-metadata.outputs.platforms}} | |
push: true | |
tags: ${{format(needs.docker-metadata.outputs.tags, secrets.RELEASE_DOCKERHUB_USERNAME, 'backend')}} | |
labels: ${{needs.docker-metadata.outputs.labels}} | |
annotations: ${{needs.docker-metadata.outputs.annotations}} | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
build-frontend: | |
name: Build and Push Frontend Image | |
runs-on: ubuntu-latest | |
needs: docker-metadata | |
if: ${{needs.docker-metadata.outputs.should-build-frontend == 'true'}} | |
permissions: | |
contents: read | |
packages: write | |
attestations: write | |
id-token: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Login to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.RELEASE_DOCKERHUB_USERNAME }} | |
password: ${{ secrets.RELEASE_DOCKERHUB_TOKEN }} | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build and push frontend | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ./frontend/Dockerfile | |
platforms: ${{needs.docker-metadata.outputs.platforms}} | |
push: true | |
tags: ${{format(needs.docker-metadata.outputs.tags, secrets.RELEASE_DOCKERHUB_USERNAME, 'frontend')}} | |
labels: ${{needs.docker-metadata.outputs.labels}} | |
annotations: ${{needs.docker-metadata.outputs.annotations}} | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
e2e-test: | |
name: E2E Test | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
defaults: | |
run: | |
working-directory: e2e | |
needs: | |
- docker-metadata | |
- build-backend | |
- build-frontend | |
if: | | |
!cancelled() && | |
needs.docker-metadata.outputs.e2e-backend && | |
needs.docker-metadata.outputs.e2e-frontend && | |
!contains(needs.*.result, 'failure') && | |
!contains(needs.*.result, 'cancelled') | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: lts/* | |
cache: npm | |
cache-dependency-path: e2e/package-lock.json | |
- name: Install dependencies | |
run: npm ci | |
- name: Install Playwright Browsers | |
run: npx playwright install --with-deps chromium | |
- name: Fetch Images | |
run: ./prepare-test.sh | |
env: | |
E2E_DOCKER_TAG_FRONTEND: ${{needs.docker-metadata.outputs.e2e-frontend}} | |
E2E_DOCKER_TAG_BACKEND: ${{needs.docker-metadata.outputs.e2e-backend}} | |
- name: Run tests | |
run: ./start-test.sh | |
env: | |
E2E_DOCKER_TAG_FRONTEND: ${{needs.docker-metadata.outputs.e2e-frontend}} | |
E2E_DOCKER_TAG_BACKEND: ${{needs.docker-metadata.outputs.e2e-backend}} | |
E2E_LLM_PROVIDER: ${{vars.E2E_LLM_PROVIDER}} | |
E2E_LLM_MODEL: ${{vars.E2E_LLM_MODEL || ''}} | |
E2E_LLM_CREDENTIALS: ${{secrets.E2E_LLM_CREDENTIALS}} | |
E2E_EMBEDDING_PROVIDER: ${{vars.E2E_EMBEDDING_PROVIDER || 'openai'}} | |
E2E_EMBEDDING_MODEL: ${{vars.E2E_EMBEDDING_MODEL || ''}} | |
E2E_EMBEDDING_CREDENTIALS: ${{secrets.E2E_EMBEDDING_CREDENTIALS}} | |
E2E_RERANKER_PROVIDER: ${{vars.E2E_RERANKER_PROVIDER || 'jinaai'}} | |
E2E_RERANKER_MODEL: ${{vars.E2E_RERANKER_MODEL || ''}} | |
E2E_RERANKER_CREDENTIALS: ${{secrets.E2E_RERANKER_CREDENTIALS}} | |
- uses: actions/upload-artifact@v4 | |
if: "!cancelled()" | |
with: | |
name: e2e-report | |
path: e2e/playwright-report/ | |
retention-days: 30 | |
e2e-test-deploy: | |
name: "Deploy E2E Test Results" | |
runs-on: ubuntu-latest | |
needs: e2e-test | |
if: "!(contains(needs.*.result, 'skipped')) && !cancelled()" | |
defaults: | |
run: | |
working-directory: e2e | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: e2e-report | |
path: e2e/playwright-report/ | |
- name: Deploy Test Results to Vercel | |
id: deploy-test-result | |
run: | | |
deploy_message=$(./deploy-test-result.sh) | |
echo "deploy-message=${deploy_message}" >> $GITHUB_OUTPUT | |
if: "!cancelled()" | |
env: | |
VERCEL_TOKEN: ${{secrets.E2E_VERCEL_TOKEN}} | |
VERCEL_ORG_ID: ${{secrets.E2E_VERCEL_ORG_ID}} | |
VERCEL_PROJECT_ID: ${{secrets.E2E_VERCEL_PROJECT_ID}} | |
VERCEL_CLI_ARGS: ${{(github.ref == 'refs/heads/main' && '--prod') || ''}} | |
- name: Find PR Comment | |
uses: peter-evans/find-comment@v3 | |
if: github.event.pull_request.number | |
id: find-comment | |
with: | |
issue-number: ${{ github.event.pull_request.number }} | |
comment-author: 'github-actions[bot]' | |
body-includes: E2E Result Deployment | |
- name: Upsert Comment on PR | |
uses: peter-evans/create-or-update-comment@v4 | |
if: github.event.pull_request.number | |
with: | |
comment-id: ${{ steps.find-comment.outputs.comment-id }} | |
issue-number: ${{ github.event.pull_request.number }} | |
body: | | |
### E2E Result Deployment | |
${{steps.deploy-test-result.outputs.deploy-message}} | |
edit-mode: replace |