This repository was archived by the owner on Oct 10, 2025. It is now read-only.
Build-And-Deploy #878
This file contains hidden or 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 | |
| prebuild: | |
| needs: lint | |
| name: Prebuild | |
| 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 explorer.db | |
| - 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 - write version to file | |
| run: echo $VERSION > version.txt | |
| - name: Upload version | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: version.txt | |
| name: version | |
| - name: Upload current directory | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: . | |
| name: explorer-prebuild | |
| docker: | |
| needs: prebuild | |
| name: Build and push Docker image | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download prebuild | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: explorer-prebuild | |
| - name: Install Node.js | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: "20" | |
| - name: 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: 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,ghcr.io/${{ github.repository_owner }}/explorer:dev" >> $GITHUB_ENV | |
| - name: 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 }},ghcr.io/${{ github.repository_owner }}/explorer:latest,ghcr.io/${{ github.repository_owner }}/explorer:${{ env.VERSION }}" >> $GITHUB_ENV | |
| - name: 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: Login to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_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 | |
| windows: | |
| needs: prebuild | |
| name: Build and push Windows deployment package | |
| runs-on: windows-latest | |
| steps: | |
| - name: Download prebuild | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: explorer-prebuild | |
| - name: Install Node.js | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: "20" | |
| - name: Install dependencies | |
| run: npm install | |
| - name: Upload current directory | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: . | |
| name: explorer-windows-x64 | |
| linux-x64: | |
| needs: prebuild | |
| name: Build and push Linux x64 deployment package | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download prebuild | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: explorer-prebuild | |
| - name: Install Node.js | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: "20" | |
| - name: Install dependencies | |
| run: npm install | |
| - name: Upload current directory | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: . | |
| name: explorer-linux-x64 | |
| mac-arm64: | |
| needs: prebuild | |
| name: Build and push macOS arm64 deployment package | |
| runs-on: macos-latest | |
| steps: | |
| - name: Download prebuild | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: explorer-prebuild | |
| - name: Install Node.js | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: "20" | |
| - name: Install dependencies | |
| run: npm install | |
| - name: Upload current directory | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: . | |
| name: explorer-mac-arm64 | |
| mac-x64: | |
| needs: prebuild | |
| name: Build and push macOS x64 deployment package | |
| runs-on: macos-13 | |
| steps: | |
| - name: Download prebuild | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: explorer-prebuild | |
| - name: Install Node.js | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: "20" | |
| - name: Install dependencies | |
| run: npm install | |
| - name: Upload current directory | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: . | |
| name: explorer-mac-x64 |