Deployment-Fehler "Required package "shopware/core" is not present in the lock file."

Hallo wir haben über GitHub-Actions ein automatisches Deployment eingerichtet. Das hat 100 Mal auch korrekt funktioniert, von einem Commit zum nächsten schlägt dieses fehl. Folgende deployment.yml:

name: Deployment to Testserver
on:
  pull_request:
    branches:
      - main
    types: [closed]
jobs:
  build:
    name: "Build Shopware"
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    steps:
      - name: "Setup PHP"
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.1'
      - name: "Checkout Repository"
        uses: actions/checkout@v2
      - name: "Install Dependencies"
        run: composer install --no-interaction --optimize-autoloader --no-suggest
      - name: "Install Recovery Dependencies"
        run: composer install -d vendor/shopware/recovery --no-interaction --optimize-autoloader --no-suggest
      - name: Deploy
        uses: deployphp/action@master
        with:
          dep: deploy dev -vvv
          private-key: ${{ secrets.SSHKEY }}

Der Fehler erscheint bei „Install Dependencies“ - ich vermute mal es liegt am Fehler (der kam im Commit zuvor noch nicht):
- Required package „shopware/core“ is not present in the lock file.

Das Paket wird aber - so wie es aussieht - korrekt installiert (siehe Screenshot).

Einen Commit vorher ist alles noch korrekt durchgelaufen. Nach dem letzten Commit kam dann dieser Fehler - obwohl im Commit nichts im Deployment und/oder der composer.json geändert wurde (lediglich eine Anpassung in einem Twig-Template innerhalb eines Plugins).

Ich stehe gerade auf dem Schlauch und kann mir den Fehler nicht herleiten. Kann mir bitte jemand einen Denkanstoß geben?

Die Meldung sagt ja nur aus, dass das package „shopware/core“ nicht im „lock file“ vorhanden ist.

Hat sich im lock file etwas verändert?

Ansonsten könntest du mit dem Befehl composer update --lock das lock file aktualisieren?

Das lock file ist gar nicht versioniert. Code wird „roh“ ausgecheckt und dann „composer install“ ausgeführt. Das lock file wird ja dann erst erstellt. Von daher kann sich im lock file ja nichts geändert haben.


In den Logs steht folgendes

Updating dependencies
Lock file operations: 214 installs, 0 updates, 0 removals
...
- Locking shopware/core (6.4.16.0)
...
Writing lock file
Installing dependencies from lock file (including require-dev)
...

Er schreibt das Paket in das lock file, danach kommt noch:

Downloading shopware/core (6.4.16.0)
...
Installing shopware/core (6.4.16.0)

Und ganz am Ende der Fehler?

Klingt für mich so, als wäre die composer.json nicht valide.

Da du aber meinst, dass keine Änderungen in der composer.json vorgenommen worden sind und es vorher funktioniert hat, wüsste ich jetzt auch nicht weiter außer die composer.json nochmal zu validieren.

Ich habe die composer.json vom letzten vorherigen Commit und vom ersten fehlerhaften Commit verglichen - absolut identisch (ebenso wie die deployment.yml)

Vielleicht bin ich zu altmodisch - aber dieses automatische Deployment ist mir einfach zu fragil. Wie soll ich ich einen Live-Shop verlässlich aktualisieren, wenn plötzlich in einem komplexen Deployment-Konstrukt irgendwo irgendwas nicht funktioniert.

Die beiden GiHub-Logdateien sind bis zur Zeile 656 identisch - ich habe echt keinen Ansatz mehr.


Das Problem waren die Zeilen

  - name: "Setup PHP"
    uses: shivammathur/setup-php@v2
    with:
      php-version: '8.1'

die von einem Build auf den nächsten anstatt Composer 2.4.4 die Version 2.5.0 installiert hat. Mit folgender Ergänzung läuft der Build wieder durch

      - name: "Setup PHP"
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.1'
          tools: composer:2.4.4
4 „Gefällt mir“

Vielen Dank für den Hinweis! Ein Composer-Downgrade hat bei uns auch geholfen :slight_smile:

2 „Gefällt mir“

Eine „offiziellere“ Information dazu: Install with composer 2.5.0 not work · Issue #168 · shopware/production · GitHub

wenn hier die PHAR braucht, hier der Download:
wget https://getcomposer.org/download/2.4.4/composer.phar
Damit hat es reibungslos geklappt.