Private GitHub npm Packages im GitHub Actions Workflow verwenden

GitHub bietet mit GitHub Packages eine limitiert kostenfreie Alternative zu den sonst kostenpflichtigen privaten npm Packages an. Allerdings habe ich lange nach einem Weg suchen müssen, private GitHub Packages in GitHub Actions zu verwenden.

npm login kann man nicht so einfach ausführen, weil der Personal access token eingegeben werden muss und nicht über einen Parameter übergeben werden, kann und der secrets.GITHUB_TOKEN nicht ausreicht, um private GitHub Packages über npm install zu laden.

Meine Lösung für das Problem:

1. Eigene .npmrc-Datei für GitHub Actions

Als Erstes müssen wir für GitHub Actions eine eigene .npmrc-Datei erstellen, damit sich die nicht mit unserer bestehenden .npmrc-Datei beißt, nennen wir sie .npmrc.githubactions und benennen sie später um, wenn wir sie benötigen.

Die .npmrc-Datei sorgt dafür, dass npm für euren privaten Scope, meiner lautet z.B. @goaround nicht wie sonst üblich mit registry.npmjs.org spricht, sondern mit npm.pkg.github.com. Dabei autorisieren wir uns mit unserem authToken, den wir im zweiten Schritt erstellen.

Kopiert folgendes Snippet in eure .npmrc.githubactions und ersetzt myownscope durch euren eigenen GitHub-Scope:

@myownscope:registry=https://npm.pkg.github.com //npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}
Code-Sprache: JavaScript (javascript)

2. GitHub Action modifizieren

In eurer yml-Datei für den Workflow (findet ihr in /.github/workflows) müsst ihr jetzt einige Modifikationen vornehmen, damit die .npmrc.githubactions bei npm install verwendet und die Variable ${GITHUB_TOKEN} gesetzt wird.

Bevor ihr npm install ausführt, überschreibt ihr mit .npmrc.githubactions die bestehende .npmrc und zusätzlich definiert ihr für diesen Schritt noch die Variable GITHUB_TOKEN mit eurem PERSONAL_GITHUB_TOKEN:

- name: Install npm dependencies run: | mv .npmrc.githubactions .npmrc npm install --silent env: GITHUB_TOKEN: ${{secrets.PERSONAL_GITHUB_TOKEN}}
Code-Sprache: YAML (yaml)

3. Personal Access Token erstellen

Damit das Ganze auch funktioniert, müssen wir noch einen Personal access token mit den entsprechenden Berechtigungen erstellen. Geht dafür auf github.com/settings/tokens und klickt auf Generate new token. Anschließend wählt einen verständlichen Namen z.B. GitHub Actions mypackage, wählt als Expiration am besten No expiration aus (sonst werdet ihr euch irgendwann wundern, warum eurer Workflow nicht mehr durchläuft) und unter Select scopes klicken wir repo und read:packages an.

Mit einem Klick auf Generate token wird der Token erstellt und euch einmalig angezeigt. Kopiert ihn und geht zurück in die GitHub Repository und fügt ihn unter SettingsSecuritySecretsActions als Repository Secret unter dem Namen PERSONAL_GITHUB_TOKEN hinzu:

Fertig

Anschließend sollte euer Workflow durchlaufen und auch das bei GitHub Packages abgelegte private Paket installieren können.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.