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_IDThe short ID from your dashboard URL
EASYBOARD_WRITE_TOKENYour 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.
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.
- 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.
- 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.