De PHP-micro bouwen op uw eigen runners (de workflow standalone)
bin/jumphp export:standalone en app:export plakken een game of app op een micro: een statisch gebouwde PHP (StaticPHP)
met de extensies die JumPHP nodig heeft. De micro's worden gebouwd door de workflow .github/workflows/standalone.yml en gepubliceerd
als de release standalone-<sleutel> (de sleutel is een vingerafdruk van de PHP-versie, de lijst met extensies, de commit van StaticPHP
en het register en de patches van JumPHP: tools/standalone-key.sh). Een micro wordt dus alleen opnieuw gebouwd als een van deze elementen
verandert. Deze pagina legt uit hoe u deze workflow op uw eigen runners start (ci-runner.md om ze te installeren), en
wat de machines van GitHub gratis gaven en uw machines misschien niet hebben.
Starten
Forge > de repository > Actions > standalone > Run workflow, of vanuit een terminal (gh is die van de forge in een JumPHP-project):
gh workflow run standalone.yml -f extensions=tools/app-extensions.txt -f macos=false -f linux=false
| Invoer | Waarden | |
|---|---|---|
extensions |
tools/standalone-extensions.txt (games: SDL, OpenGL, OpenAL), tools/app-extensions.txt (desktopapps, de IDE), tools/hybrid-extensions.txt |
de gebouwde micro = zijn eigen sleutel |
linux |
true / false |
false: geen Linux-micro (zie « Docker » hieronder); export:standalone bouwt dan die van Linux op de computer van de gebruiker |
macos |
true / false |
false: geen Mac-micro (alleen desktopapps); zonder macOS-runner zouden de jobs eindeloos wachten |
De Windows-job duurt ongeveer 10 minuten met gecachete downloads, 30 tot 60 de allereerste keer. Het resultaat:
https://<forge>/<eigenaar>/<repository>/releases/download/standalone-<sleutel>/micro-windows-x86_64.sfx.
Wat de machines van GitHub hadden en de uwe misschien niet
Op GitHub « werkte » dezelfde workflow « vanzelf » omdat windows-latest en ubuntu-latest door GitHub voorbereide images zijn.
Een eigen runner is een kale machine. Alles hieronder wordt door de workflow afgehandeld, of staat hier vermeld:
| De image van GitHub | Een eigen runner | Wat de workflow doet / wat u doet |
|---|---|---|
PowerShell 7 (pwsh), PHP, Composer, Git |
vaak alleen Windows PowerShell 5.1 en Git | de stappen draaien in Windows PowerShell; PHP 8.4 en Composer worden gedownload (php.net, getcomposer.org, vingerafdruk gecontroleerd) als ze ontbreken; de usr\bin van Git komt in het PATH |
| Windows in het Engels | de taal van uw Windows (Frans...) | VSLANG=1033 laat de hulpmiddelen van Visual Studio Engels praten: de configure.js van PHP leest de uitvoer van de linker en stopt anders met een JScript-fout |
| Visual Studio 2022 | door uzelf te installeren: Build Tools 2022, workload « Desktopontwikkeling met C++ » | het enige wat een Windows-runner moet hebben (samen met Git voor Windows). install-windows-runner.ps1 installeert beide |
Snelle toegang tot api.github.com, zelden beperkt |
dezelfde API antwoordt 504 of « rate limit exceeded » |
de downloads van StaticPHP worden 4 keer opnieuw geprobeerd en tussen twee runs bewaard in %USERPROFILE%\.spc-downloads; Composer installeert vanuit de bronnen (--prefer-source) |
actions/upload-artifact@v4, download-artifact@v4 |
Forgejo ondersteunt ze niet (« not currently supported on GHES ») | op een forge publiceert de Windows-job zelf de micro in de release (het github.token van de job, de API van de forge); de job release draait alleen op GitHub |
| Docker in de Linux-job | de job draait in een container zonder Docker | zie hieronder |
| LF-regeleinden | Git voor Windows converteert naar CRLF | git config --global core.autocrlf false vóór het klonen van StaticPHP (een patch van zijn bestanden steunt op hun tekst) |
Docker: waar het nodig is, waar niet
- De Windows-job compileert native met Visual Studio. Hij gebruikt geen Docker en een Windows-runner zou dat ook niet kunnen (Linux- containers onder Windows lopen via WSL2). Hiervoor hoeft niets geïnstalleerd te worden.
- De Linux-job start
docker build docker/standaloneen daarnadocker runvan StaticPHP. In een jobcontainer is er geen Docker, tenzij de runner er een geeft: mount de Docker-socket van de host (of van de dind van de runner) in de job (container.options/valid_volumesin deconfig.ymlvan de runner), of gebruik de WSL2-Linux-runner (ci-runner.md sectie 4), een echte Linux met Docker. Zonder dat start u metlinux=false:bin/jumphp export:standalone <id> --linuxbouwt de Linux-micro op de computer die exporteert (ongeveer 15 minuten, daarna bewaard in~/.jumphp/standalone/). - Welke runner ook, kopieer of hernoem nooit een micro naar een andere sleutel: het zou een PHP zonder de juiste extensies zijn
en de uitvoerbare bestanden van uw gebruikers zouden crashen (
Call to undefined function SDL_Init()). Als de sleutel is veranderd, moet de micro opnieuw worden gebouwd.
Probleemoplossing
De logs van de jobs leest u op de pagina van de run in de forge (job > de rode stap); de API van de forge geeft ze niet terug.
| Symptoom | Oorzaak / oplossing |
|---|---|
De job key mislukt in 30 s, vlak na « Fetching the repository » |
de jobcontainer kan de naam van de forge niet omzetten: de Docker-in-Docker van de runner heeft geen DNS naar buiten. Geef hem er een: dns: [1.1.1.1, 9.9.9.9] op de service dind van het compose-bestand van de runner. Test: docker run --network <een nieuw netwerk> node:20-bookworm getent hosts <forge> |
Cannot find: pwsh in PATH |
de workflow vraagt Windows PowerShell (shell: powershell); een oude kopie vroeg pwsh. Werk haar bij |
configure.js ... Erreur d'exécution Microsoft JScript na « Checking for link.exe » |
de hulpmiddelen van Visual Studio schrijven in de taal van Windows. VSLANG=1033 (in de workflow sinds deze pagina) |
ERROR: bison is required |
gezien na een half voltooide build in dezelfde map: StaticPHP bewaart de msys2-hulpmiddelen maar zet ze niet terug in het PATH. Verwijder spc/pkgroot, spc/source, spc/buildroot uit de werkruimte en start opnieuw (een schone werkruimte, zoals die van een nieuwe job, werkt) |
| Een patch van StaticPHP « not patched (StaticPHP changed) » of « Failed patch module » | CRLF-regeleinden (core.autocrlf false en opnieuw klonen), of een bronmap die al door een eerdere poging is gepatcht (verwijder spc/source/php-src) |
Failed to get GitHub release API info for madler/zlib / HTTP/2 504 |
api.github.com beperkt of faalt voor uw adres. De workflow probeert opnieuw; de eerste run op een nieuwe machine kan een tweede poging nodig hebben. De downloads worden bewaard: elke poging komt verder |
GHESNotSupportedError: upload-artifact@v4 ... not currently supported |
u gebruikt Forgejo: neem de workflow van deze repository (publiceert zonder artefacten) |
| De macOS-jobs blijven « waiting » en de run eindigt nooit | geen macOS-runner: -f macos=false |
Cannot find path ...\buildroot\bin\micro.sfx |
de build is eerder mislukt: lees de regels erboven (die zijn de oorzaak) |
Voor AI-agenten
Men kan u vragen om « de standalone-workflow op mijn runner te laten werken ». Lees de mislukte stap op de pagina van de run (vraag
de gebruiker hem te plakken als u er niet bij kunt), pas de workflow aan (hij moet geldig blijven op GitHub: test
github.server_url), niet de machine van de gebruiker, tenzij wat ontbreekt een voorwaarde hierboven is (Git, Visual Studio Build Tools,
Docker voor de Linux-job): zeg dat dan tegen de gebruiker en installeer het alleen als hij ja zegt. Registreer nooit een runner, schrijf
nooit een token in een bestand, publiceer nooit een micro die u niet hebt gebouwd uit de huidige bestanden met de
commando's van deze workflow, verplaats nooit een release naar een andere sleutel. Controleer na een geslaagde run het bestand
(gh release view standalone-<sleutel>, een download die 200 antwoordt) en voer voor een Windows-micro een script ermee uit op de machine
van de runner (copy /b micro.sfx + test.php test.exe, daarna test.exe: PHP-versie, extension_loaded('ffi')...).