Integrations

GitHub Actions

Add a single curl step to any workflow to update an EasyBoard tile on every push, release, or scheduled run. No extra action to install — just the standardrunstep that's already in every workflow.

Before you start

Add these two secrets to your repository (Settings → Secrets and variables → Actions):

EASYBOARD_DASHBOARD_ID

The short ID from your dashboard URL

EASYBOARD_WRITE_TOKEN

Your dashboard write token (from the dashboard hub)

Example 1: Deploy status + timestamp

Updates a text tile with the deploy result and a text tile with the timestamp. The if: always() condition ensures the tile updates even when the deployment fails.

.github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      # ... your existing build / deploy steps ...

      - name: Update EasyBoard — deploy status
        if: always()
        env:
          EASYBOARD_DASHBOARD_ID: ${{ secrets.EASYBOARD_DASHBOARD_ID }}
          EASYBOARD_WRITE_TOKEN: ${{ secrets.EASYBOARD_WRITE_TOKEN }}
        run: |
          STATUS="${{ job.status == 'success' && '✓ Deployed' || '✗ Failed' }}"
          TIMESTAMP="$(date -u '+%Y-%m-%d %H:%M UTC')"

          curl -s -X PATCH \
            "https://easyboard.live/api/d/${EASYBOARD_DASHBOARD_ID}/tiles" \
            -H "Authorization: Bearer ${EASYBOARD_WRITE_TOKEN}" \
            -H "Content-Type: application/json" \
            -d "{
              \"updates\": [
                {
                  \"target\": { \"alternateId\": \"deploy-status\" },
                  \"patch\": { \"value\": \"${STATUS}\" }
                },
                {
                  \"target\": { \"alternateId\": \"last-deploy\" },
                  \"patch\": { \"value\": \"${TIMESTAMP}\" }
                }
              ]
            }"

Use a toggle tile for pass/fail

Create a toggle tile with options Passing / Failing and set optionColors to ["green", "red"]. Then push "patch": {"value": "Failing"} on failure and "patch": {"value": "Passing"} on success — you get a colour-coded status indicator.

Example 2: Test pass rate

Parses Jest JSON output with jq and pushes pass rate to a progress tile (0–100) and failure count to a metric tile. Adapt the JSON parsing for your test runner.

.github/workflows/test.yml (excerpt)
      - name: Run tests
        id: tests
        run: npm test -- --reporter=json > test-results.json

      - name: Update EasyBoard — test results
        if: always()
        env:
          EASYBOARD_DASHBOARD_ID: ${{ secrets.EASYBOARD_DASHBOARD_ID }}
          EASYBOARD_WRITE_TOKEN: ${{ secrets.EASYBOARD_WRITE_TOKEN }}
        run: |
          PASSED=$(jq '.numPassedTests' test-results.json)
          FAILED=$(jq '.numFailedTests' test-results.json)
          TOTAL=$(jq '.numTotalTests' test-results.json)
          RATE=$(echo "scale=0; ${PASSED} * 100 / ${TOTAL}" | bc)

          curl -s -X PATCH \
            "https://easyboard.live/api/d/${EASYBOARD_DASHBOARD_ID}/tiles" \
            -H "Authorization: Bearer ${EASYBOARD_WRITE_TOKEN}" \
            -H "Content-Type: application/json" \
            -d "{
              \"updates\": [
                {
                  \"target\": { \"alternateId\": \"test-pass-rate\" },
                  \"patch\": { \"value\": \"${RATE}\" }
                },
                {
                  \"target\": { \"alternateId\": \"test-failures\" },
                  \"patch\": { \"value\": \"${FAILED}\" }
                }
              ]
            }"

Example 3: Release counter

Increments a counter tile on every release and updates a text tile with the version tag. The delta: 1 operation is race-condition safe — concurrent runs won't double-count.

.github/workflows/release.yml (excerpt)
      - name: Update EasyBoard — release count
        env:
          EASYBOARD_DASHBOARD_ID: ${{ secrets.EASYBOARD_DASHBOARD_ID }}
          EASYBOARD_WRITE_TOKEN: ${{ secrets.EASYBOARD_WRITE_TOKEN }}
        run: |
          curl -s -X PATCH \
            "https://easyboard.live/api/d/${EASYBOARD_DASHBOARD_ID}/tiles" \
            -H "Authorization: Bearer ${EASYBOARD_WRITE_TOKEN}" \
            -H "Content-Type: application/json" \
            -d '{
              "updates": [
                {
                  "target": { "alternateId": "releases" },
                  "patch": { "delta": 1 }
                },
                {
                  "target": { "alternateId": "latest-version" },
                  "patch": { "value": "${{ github.ref_name }}" }
                }
              ]
            }'

Common use cases

Deploy status

Show ✓ / ✗ on a text or toggle tile after every push to main

Last deploy time

Text tile with the UTC timestamp of the most recent successful deploy

Test pass rate

Progress tile showing % of tests passing on the latest run

Build time

Metric tile tracking how long the build step took (in seconds)

Open PR count

Fetch from GitHub API and push to a metric tile on a schedule

Release count

Counter tile incremented on every published release

Never hardcode your write token

Always use ${{ secrets.EASYBOARD_WRITE_TOKEN }} — never paste the raw token into the workflow YAML. Workflow files are committed to the repo; secrets are not.