Composer Authentication
Publish PHP packages to Packagist
Unlike npm or PyPI, you don't push packages to Packagist. Instead:
composer require your packagecomposer.jsonThis ensures Packagist updates immediately when you push tags:
https://packagist.org/api/github?username=YOUR_PACKAGIST_USERNAMEapplication/jsonRelease Pilot just needs to create and push tags:
permissions:
contents: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: a-line-services/release-pilot@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
In your .github/release-pilot.yml:
ecosystem: composer
versionFile: composer.json
tagPrefix: v
{
"name": "vendor/package-name",
"description": "A short description of your package",
"type": "library",
"license": "MIT",
"autoload": {
"psr-4": {
"Vendor\\\\PackageName\\\\": "src/"
}
},
"require": {
"php": ">=8.1"
}
}
Note: Packagist extracts versions from Git tags, not from composer.json. You don't need a version field.
For private packages, you have several options:
Private Packagist is the commercial offering for private packages:
Run your own Composer repository with Satis:
# satis.json
{
"name": "My Private Repository",
"homepage": "https://packages.example.com",
"repositories": [
{"type": "vcs", "url": "git@github.com:your-org/private-package.git"}
],
"require-all": true
}
For small teams, reference private repos directly in composer.json:
{
"repositories": [
{
"type": "vcs",
"url": "git@github.com:your-org/private-package.git"
}
],
"require": {
"your-org/private-package": "^1.0"
}
}
Composer uses semantic versioning with these tag formats:
| Tag | Composer Version |
|---|---|
v1.2.3 |
1.2.3 |
1.2.3 |
1.2.3 |
v2.0.0-beta.1 |
2.0.0-beta1 |
After Release Pilot creates a tag:
# Test installation
composer require your-vendor/your-package:1.2.3
| Issue | Solution |
|---|---|
| Version not appearing | Check webhook delivery in GitHub Settings → Webhooks |
| Invalid composer.json | Run composer validate locally |
| Wrong version detected | Ensure tag follows semver (e.g., v1.2.3) |