Skip to main content
GitHub Actions is supported today through the installer plus jolter setup-ci.
The planned jolterjs/setup-jolter@v1 action is documented separately. Until that action ships, use the workflow on this page.

Linux example

.github/workflows/test.yml
name: Test

on:
  push:
  pull_request:

jobs:
  test:
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v6

      - name: Restore Jolter cache
        uses: actions/cache@v4
        with:
          path: ${{ runner.temp }}/jolter-home/cache
          key: jolter-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('jolter.json', '.node-version', '.nvmrc', 'package.json') }}

      - name: Install and synchronize Jolter
        id: jolter
        env:
          JOLTER_HOME: ${{ runner.temp }}/jolter-home
        run: |
          curl -fsSL https://get.jolter.dev/install.sh | sh
          jolter setup-ci --no-progress

      - name: Test
        env:
          JOLTER_HOME: ${{ runner.temp }}/jolter-home
        run: |
          node --version
          pnpm --version
          pnpm test

Windows example

.github/workflows/test-windows.yml
name: Test Windows

on:
  push:
  pull_request:

jobs:
  test:
    runs-on: windows-2025
    steps:
      - uses: actions/checkout@v6

      - name: Install and synchronize Jolter
        id: jolter
        shell: pwsh
        env:
          JOLTER_HOME: ${{ runner.temp }}\jolter-home
        run: |
          irm https://get.jolter.dev/install.ps1 | iex
          jolter setup-ci --no-progress

      - name: Test
        shell: pwsh
        env:
          JOLTER_HOME: ${{ runner.temp }}\jolter-home
        run: |
          node --version
          pnpm --version
          pnpm test

GitHub integration behavior

When GITHUB_ACTIONS is true, setup-ci:
  • appends the Jolter shims directory to GITHUB_PATH;
  • writes runtime to GITHUB_OUTPUT;
  • writes comma-separated tools when tools are configured;
  • writes comma-separated plugins when project plugins are installed or verified;
  • writes the cache path as cache.
Use outputs from the step id:
- run: echo '${{ steps.jolter.outputs.runtime }}'
- run: echo '${{ steps.jolter.outputs.tools }}'
- run: echo '${{ steps.jolter.outputs.cache }}'
Keep JOLTER_HOME consistent in later steps. GITHUB_PATH carries the shim path forward, while storage discovery still depends on the same home.

Plugin projects

Allow CI to install missing declared plugins:
- name: Install and synchronize Jolter
  env:
    JOLTER_HOME: ${{ runner.temp }}/jolter-home
  run: |
    curl -fsSL https://get.jolter.dev/install.sh | sh
    jolter setup-ci --yes --no-progress
Review plugin declarations in jolter.json with the same care as build scripts.