Skip to main content

GitHub Integration

Automatically sync packages when you push to GitHub.

Setup Webhook

1. Get Webhook URL

Your webhook URL is:

https://packages.example.com/api/webhooks/github

2. Create Webhook in GitHub

  1. Go to your repository Settings > Webhooks
  2. Click Add webhook
  3. Configure:
    • Payload URL: Your webhook URL
    • Content type: application/json
    • Secret: Generate a secure secret
    • Events: Select "Just the push event" or specific events

3. Configure Cargoman

Set the webhook secret:

GITHUB_WEBHOOK_SECRET=your-webhook-secret

Supported Events

EventAction
pushSync affected packages
create (tag)Add new version
delete (tag)Remove version

Organization Webhooks

For multiple repositories, use organization-level webhooks:

  1. Go to Organization Settings > Webhooks
  2. Add webhook with the same configuration
  3. All repositories will trigger syncs

GitHub App

For easier setup, use the GitHub App integration instead of manual webhooks. The GitHub App:

  • Automatically configures webhooks
  • Provides repository selection UI
  • Handles authentication securely
  • Offers higher API rate limits (5,000/hour per installation)
  • Auto-refreshes tokens (no manual management)

See the GitHub App guide for setup instructions.

Troubleshooting

Webhook Not Triggering

Check webhook delivery logs in GitHub:

  1. Go to Settings > Webhooks
  2. Click your webhook
  3. View Recent Deliveries

Authentication Failed

Ensure your webhook secret matches:

# In Cargoman
GITHUB_WEBHOOK_SECRET=abc123

# In GitHub webhook settings
Secret: abc123

Package Not Syncing

Verify:

  1. Repository URL matches in Cargoman
  2. Tag format is valid (e.g., v1.0.0)
  3. composer.json exists in repository root

Private Repositories

For private repositories, configure Git authentication:

# Using personal access token
GIT_AUTH_TOKEN=ghp_xxxx

Or use the GitHub App for automatic credential management (recommended).

Example Workflow

# .github/workflows/release.yml
name: Release

on:
push:
tags:
- 'v*'

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

- name: Validate composer.json
run: composer validate

# Webhook automatically syncs on tag push
# No additional steps needed!

Next Steps