Build-And-Deploy #386
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-Deploy | |
on: | |
push: | |
branches: | |
- master | |
- next | |
schedule: | |
# Schedule a nightly build two hours after publishing the daily build | |
# of kuzu (see https://github.com/kuzudb/kuzu/blob/master/.github/workflows/build-and-deploy.yml) | |
# The kuzu daily build is scheduled at 8:00 UTC. The two hours delay | |
# should give enough time for the kuzu build to finish. | |
- cron: "0 10 * * *" | |
workflow_dispatch: | |
inputs: | |
isNightly: | |
description: "Whether the build is a nightly build?" | |
type: boolean | |
required: true | |
default: false | |
jobs: | |
lint: | |
name: Lint | |
uses: ./.github/workflows/lint.yml | |
secrets: inherit | |
docker: | |
needs: lint | |
name: Build and push Docker image | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout (default branch) | |
uses: actions/checkout@v4 | |
if: ${{ github.event_name != 'schedule'}} | |
- name: Checkout (next branch) | |
uses: actions/checkout@v4 | |
with: | |
ref: next | |
if: ${{ github.event_name == 'schedule'}} | |
- name: Prebuild - install node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: "20" | |
- name: Prebuild - update dev version | |
if: ${{ github.event_name == 'schedule' || github.event.inputs.isNightly == 'true' || github.ref_name == 'next' }} | |
working-directory: scripts | |
run: node UpdateDevVersion | |
- name: Prebuild - install dependencies | |
run: npm install | |
- name: Prebuild - generate grammar | |
run: npm run generate-grammar-prod | |
- name: Prebuild - build app | |
run: npm run build | |
- name: Prebuild - fetch datasets | |
run: npm run fetch-datasets | |
- name: Prebuild - cleanup | |
run: rm -rf node_modules .git | |
- name: Prebuild - get version | |
shell: bash | |
run: | | |
VERSION=$(node -e 'fs=require("fs");console.log(JSON.parse(fs.readFileSync("package.json")).dependencies.kuzu)') | |
echo "VERSION=$VERSION" >> $GITHUB_ENV | |
- name: Prebuild - set tag for nightly build | |
if: ${{ github.event_name == 'schedule' || github.event.inputs.isNightly == 'true' || github.ref_name == 'next' }} | |
run: echo "TAGS=kuzudb/explorer:dev" >> $GITHUB_ENV | |
- name: Prebuild - set tag for release build | |
if: ${{ github.event_name != 'schedule' && github.event.inputs.isNightly != 'true' && github.ref_name != 'next' }} | |
run: echo "TAGS=kuzudb/explorer:latest,kuzudb/explorer:${{ env.VERSION }}" >> $GITHUB_ENV | |
- name: Prebuild - show tags | |
run: echo $TAGS | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Build and push | |
uses: docker/build-push-action@v5 | |
with: | |
context: . | |
platforms: linux/amd64,linux/arm64 | |
push: true | |
tags: ${{ env.TAGS }} | |
build-args: | | |
SKIP_GRAMMAR=true | |
SKIP_BUILD_APP=true | |
SKIP_DATASETS=true |