Opret et nyt Composer Package¶
Denne guide beskriver hele flowet fra idé til publiceret internt package, der kan kræves fra andre projekter.
Forudsætninger¶
- GitHub-adgang til
acme-organisationen composerinstalleret lokalt (≥ 2.0)gitkonfigureret med SSH-nøgle til GitHub
1. Opret GitHub-repo¶
Opret et nyt privat repo under acme/-organisationen med navnekonventionen:
Vælg: PHP .gitignore-template, MIT License, ingen readme (vi opretter den selv).
2. Bootstrap lokalt¶
mkdir auth-package && cd auth-package
git init
git remote add origin git@github.com:acme/auth-package.git # TODO: Ret org-navn
3. composer.json¶
Minimum composer.json for et internt package:
{
"name": "acme/auth-package",
"description": "Intern autentificeringslogik delt på tværs af ACME-projekter",
"type": "library",
"license": "MIT",
"require": {
"php": "^8.2"
},
"require-dev": {
"phpunit/phpunit": "^11.0",
"phpstan/phpstan": "^1.10"
},
"autoload": {
"psr-4": {
"Acme\\Auth\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Acme\\Auth\\Tests\\": "tests/"
}
},
"config": {
"sort-packages": true,
"allow-plugins": {
"phpstan/extension-installer": true
}
},
"minimum-stability": "stable",
"prefer-stable": true
}
Navnekonvention
Brug acme/<navn> som Composer package-navn og Acme\<PascalCase>\ som root namespace.
4. Mappestruktur¶
auth-package/
├── src/
│ └── AuthManager.php # Primær entry point
├── tests/
│ └── AuthManagerTest.php
├── docs/
│ └── README.md # Synkroniseres til Engineering Handbook
├── .github/
│ └── workflows/
│ ├── tests.yml # Kør PHPUnit ved PR
│ └── notify-handbook.yml # Trigger handbook-sync
├── CHANGELOG.md
├── composer.json
└── README.md
5. CI/CD checklist¶
Opret .github/workflows/tests.yml:
name: Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: "8.2"
coverage: xdebug
- run: composer install --prefer-dist --no-progress
- run: vendor/bin/phpunit --coverage-text
- run: vendor/bin/phpstan analyse src --level=8
Opret .github/workflows/notify-handbook.yml for at trigge sync til Engineering Handbook:
name: Notify Engineering Handbook
on:
push:
branches: [main]
paths:
- "docs/**"
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: Dispatch til eng-handbook
run: |
curl -X POST \
-H "Authorization: Bearer ${{ secrets.HANDBOOK_DISPATCH_TOKEN }}" \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/acme/eng-handbook/dispatches \
-d '{
"event_type": "package-updated",
"client_payload": {
"package": "auth-package",
"repo": "acme/auth-package",
"branch": "main",
"docs_path": "docs/README.md"
}
}'
Secret
HANDBOOK_DISPATCH_TOKEN skal være et PAT med repo-scope, oprettet af en admin og tilføjet som secret i dette repo.
6. Publicér første version¶
# Commit al kode
git add .
git commit -m "feat: initial package setup"
git push -u origin main
# Tag første version
git tag v1.0.0
git push origin v1.0.0
7. Brug packaget fra et andet projekt¶
Tilføj repoet til projektets composer.json:
Derefter:
PR Checklist
Inden du merger til main på et package-repo:
-
composer installkører uden fejl - Alle tests er grønne (
vendor/bin/phpunit) - PHPStan level 8 er grøn (
vendor/bin/phpstan analyse src) -
CHANGELOG.mder opdateret - Breaking changes er kommunikeret i PR-beskrivelsen
- Version er tagget korrekt (semver:
v1.2.3) -
docs/README.mder opdateret hvis API er ændret