Forward build status and step output from GitHub Actions to your BunnyLogs stream using plain curl — no extra dependencies required.
Each workflow step can POST messages directly to your logspace's HTTP endpoint. Store your logspace UUID as a GitHub Actions secret so it is never exposed in your repository.
https://bunnylogs.com/live/<uuid>).BL_UUID.curl steps to your workflow (see examples below).A single step at the end of the job reports the final outcome:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: npm test
- name: Notify BunnyLogs
if: always()
run: |
curl -s \
-d "message=Build ${{ job.status }}: ${{ github.workflow }} (${{ github.ref_name }})" \
-d "level=${{ job.status == 'success' && 'INFO' || 'ERROR' }}" \
-d "program=github/${{ github.repository }}" \
https://bunnylogs.com/live/${{ secrets.BL_UUID }}
Capture a step's output with tee and forward each line as a separate log entry:
- name: Run tests
run: npm test 2>&1 | tee /tmp/test.log
- name: Ship test output to BunnyLogs
if: always()
run: |
while IFS= read -r line; do
curl -s \
-d "message=$line" \
-d "level=INFO" \
-d "program=github/tests" \
https://bunnylogs.com/live/${{ secrets.BL_UUID }}
done < /tmp/test.log
Post at the beginning and end of the job to make it easy to spot where each run begins in the log stream:
- name: Notify start
run: |
curl -s \
-d "message=Started: ${{ github.workflow }} @ ${{ github.sha }}" \
-d "level=INFO" \
-d "program=github/${{ github.repository }}" \
https://bunnylogs.com/live/${{ secrets.BL_UUID }}
# ... your build steps ...
- name: Notify result
if: always()
run: |
curl -s \
-d "message=Finished (${{ job.status }}): ${{ github.workflow }}" \
-d "level=${{ job.status == 'success' && 'INFO' || 'ERROR' }}" \
-d "program=github/${{ github.repository }}" \
https://bunnylogs.com/live/${{ secrets.BL_UUID }}
| BunnyLogs field | Recommended value |
|---|---|
message | Build status or captured log line |
program | github/<owner>/<repo> |
level | INFO on success, ERROR on failure |
timestamp | Omit — defaults to server receipt time |
if: always() on notification steps so they run even when earlier steps fail.-s flag on curl suppresses progress output so it does not clutter the Actions log.while read makes each line individually searchable in BunnyLogs.program field to distinguish sources.level=ERROR and program contains github/ to get notified on build failures via Slack, Telegram, or Discord.