Skip to content
Dashboard
Menu Integrations · CI with plain curl

Integrations

CI with plain curl

No SDK, no action, no lock-in — the deploy is one HTTP request, so any CI that has curl can publish. These recipes are GitHub Actions syntax but translate to anything.

Publish a report

Deploy a single HTML file and drop the link into the job summary:

yaml
- name: Publish report
  run: |
    URL=$(curl -fsS -X POST https://hurl.page/deploy \
      -H "Content-Type: text/html" \
      --data-binary @build/report.html | jq -r .url)
    echo "### Report: $URL" >> "$GITHUB_STEP_SUMMARY"

Stable preview channels

With an API key in your repo secrets, named drops give every PR a stable URL — same link every push, fresh content:

yaml
- name: Deploy PR preview
  run: |
    cd dist && zip -qr - . | curl -fsS -X POST \
      "https://hurl.page/deploy?name=pr-${{ github.event.number }}" \
      -H "Authorization: Bearer ${{ secrets.HURL_API_KEY }}" \
      -H "Content-Type: application/zip" \
      --data-binary @- | jq -r .url

The response’s replaced field tells you whether this push updated an existing preview or created the channel.

Zipping on the fly

zip -qr - . writes the archive to stdout and --data-binary @- streams it straight into the request — no temp files, works in any POSIX shell.

Use -fsS on curl so a failed deploy fails the CI step loudly instead of burying an error JSON in the logs.