From 49fa6d8df21762af226b9efa6b718bb8234b7cf2 Mon Sep 17 00:00:00 2001 From: hiento09 <136591877+hiento09@users.noreply.github.com> Date: Tue, 20 Feb 2024 22:19:26 +0700 Subject: [PATCH] Feature helmchart and ci jan server (#2106) * Add helm chart for jan server * Add CI for jan server --------- Co-authored-by: Hien To --- .../workflows/jan-server-build-nightly.yml | 40 +++ .github/workflows/jan-server-build.yml | 30 ++ .../workflows/template-build-jan-server.yml | 39 +++ .gitignore | 1 + charts/server/Chart.lock | 6 + charts/server/Chart.yaml | 10 + charts/server/charts/common-0.1.2.tgz | Bin 0 -> 7145 bytes charts/server/config.json | 4 + charts/server/values.yaml | 256 ++++++++++++++++++ 9 files changed, 386 insertions(+) create mode 100644 .github/workflows/jan-server-build-nightly.yml create mode 100644 .github/workflows/jan-server-build.yml create mode 100644 .github/workflows/template-build-jan-server.yml create mode 100644 charts/server/Chart.lock create mode 100644 charts/server/Chart.yaml create mode 100644 charts/server/charts/common-0.1.2.tgz create mode 100644 charts/server/config.json create mode 100644 charts/server/values.yaml diff --git a/.github/workflows/jan-server-build-nightly.yml b/.github/workflows/jan-server-build-nightly.yml new file mode 100644 index 000000000..0d1bc3ca8 --- /dev/null +++ b/.github/workflows/jan-server-build-nightly.yml @@ -0,0 +1,40 @@ +name: Jan Build Docker Nightly or Manual + +on: + push: + branches: + - main + - feature/helmchart-and-ci-jan-server + paths-ignore: + - 'README.md' + - 'docs/**' + schedule: + - cron: '0 20 * * 1,2,3' # At 8 PM UTC on Monday, Tuesday, and Wednesday which is 3 AM UTC+7 Tuesday, Wednesday, and Thursday + workflow_dispatch: + +jobs: + # Job create Update app version based on latest release tag with build number and save to output + get-update-version: + uses: ./.github/workflows/template-get-update-version.yml + + build-cpu: + uses: ./.github/workflows/template-build-jan-server.yml + permissions: + packages: write + secrets: inherit + needs: [get-update-version] + with: + dockerfile_path: ./Dockerfile + docker_image_tag: "ghcr.io/janhq/jan-server:dev-cpu-latest,ghcr.io/janhq/jan-server:dev-cpu-${{ needs.get-update-version.outputs.new_version }}" + + build-gpu: + uses: ./.github/workflows/template-build-jan-server.yml + permissions: + packages: write + secrets: inherit + needs: [get-update-version] + with: + dockerfile_path: ./Dockerfile.gpu + docker_image_tag: "ghcr.io/janhq/jan-server:dev-cuda-12.2-latest,ghcr.io/janhq/jan-server:dev-cuda-12.2-${{ needs.get-update-version.outputs.new_version }}" + + diff --git a/.github/workflows/jan-server-build.yml b/.github/workflows/jan-server-build.yml new file mode 100644 index 000000000..0665838d6 --- /dev/null +++ b/.github/workflows/jan-server-build.yml @@ -0,0 +1,30 @@ +name: Jan Build Docker + +on: + push: + tags: ["v[0-9]+.[0-9]+.[0-9]+"] + +jobs: + # Job create Update app version based on latest release tag with build number and save to output + get-update-version: + uses: ./.github/workflows/template-get-update-version.yml + + build-cpu: + permissions: + packages: write + uses: ./.github/workflows/template-build-jan-server.yml + secrets: inherit + needs: [get-update-version] + with: + dockerfile_path: ./Dockerfile + docker_image_tag: "ghcr.io/janhq/jan-server:cpu-latest,ghcr.io/janhq/jan-server:cpu-${{ needs.get-update-version.outputs.new_version }}" + + build-gpu: + permissions: + packages: write + uses: ./.github/workflows/template-build-jan-server.yml + secrets: inherit + needs: [get-update-version] + with: + dockerfile_path: ./Dockerfile.gpu + docker_image_tag: "ghcr.io/janhq/jan-server:cuda-12.2-latest,ghcr.io/janhq/jan-server:cuda-12.2-${{ needs.get-update-version.outputs.new_version }}" diff --git a/.github/workflows/template-build-jan-server.yml b/.github/workflows/template-build-jan-server.yml new file mode 100644 index 000000000..9bb772605 --- /dev/null +++ b/.github/workflows/template-build-jan-server.yml @@ -0,0 +1,39 @@ +name: build-jan-server +on: + workflow_call: + inputs: + dockerfile_path: + required: false + type: string + default: './Dockerfile' + docker_image_tag: + required: true + type: string + default: 'ghcr.io/janhq/jan-server:dev-latest' + +jobs: + build: + runs-on: ubuntu-latest + env: + REGISTRY: ghcr.io + IMAGE_NAME: janhq/jan-server + permissions: + packages: write + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Docker image + uses: docker/build-push-action@v3 + with: + context: . + file: ${{ inputs.dockerfile_path }} + push: true + tags: ${{ inputs.docker_image_tag }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 4540e5c7a..24748e08c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ error.log node_modules *.tgz +!charts/server/charts/*.tgz yarn.lock dist build diff --git a/charts/server/Chart.lock b/charts/server/Chart.lock new file mode 100644 index 000000000..915788d61 --- /dev/null +++ b/charts/server/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: oci://ghcr.io/janhq/charts + version: 0.1.2 +digest: sha256:35e98bde174130787755b0f8ea2359b7b6790d965a7157c2f7cabf1bc8c04471 +generated: "2024-02-20T16:20:37.6530108+07:00" diff --git a/charts/server/Chart.yaml b/charts/server/Chart.yaml new file mode 100644 index 000000000..fb2e1c91b --- /dev/null +++ b/charts/server/Chart.yaml @@ -0,0 +1,10 @@ +apiVersion: v2 +name: jan-server +description: A Helm chart for Kubernetes +type: application +version: 0.1.0 +appVersion: '1.0.0' +dependencies: + - name: common + version: 0.1.2 # common-chart-version + repository: oci://ghcr.io/janhq/charts diff --git a/charts/server/charts/common-0.1.2.tgz b/charts/server/charts/common-0.1.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..946617eabb1325627dba2549196eb08b2afe4abd GIT binary patch literal 7145 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