Build-And-Deploy #125
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: | |
| # TODO: change build / release schedule | |
| # Schedule a nightly build two hours after publishing the daily build | |
| # of ladybug (see https://github.com/LadybugDB/ladybug/blob/master/.github/workflows/build-and-deploy.yml) | |
| # The ladybug daily build is scheduled at 8:00 UTC. The two hours delay | |
| # should give enough time for the ladybug 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.lbug)') | |
| 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.lbug)') | |
| echo "VERSION=$VERSION" >> $GITHUB_ENV | |
| - name: Set lowercase owner | |
| run: echo "OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $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=ghcr.io/${{ env.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=ghcr.io/${{ env.OWNER }}/explorer:latest,ghcr.io/${{ env.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 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 |