Lizenz
Öffentliche Repositorys nutzen TestDetta kostenlos. Private Repositorys übergeben der CI einen Lizenzstring. Ein Lizenzproblem lässt nie einen Build fehlschlagen: Ohne gültige Lizenz laufen alle Tests, wie vor TestDetta.
Öffentliche Repositorys
Ein öffentliches Repository benötigt keine Lizenz, aber TestDetta weiß nur dort, dass ein Repository öffentlich ist, wo die CI es angibt:
- GitHub Actions: aus dem Event-Payload (
repository.private); - GitLab CI: aus
CI_PROJECT_VISIBILITY.
Unter Jenkins, Azure DevOps, Bitbucket, anderen CI-Systemen und auf Entwicklerrechnern gilt jedes Repository als privat.
Die Lizenz übergeben
TestDetta sucht die Lizenz in dieser Reihenfolge:
TESTDETTA_LICENSE: der Lizenzstring, aus einer maskierten oder geheimen Variable;TESTDETTA_LICENSE_FILE: der Pfad einer Datei, die ihn enthält;~/.testdetta/license: geschrieben vontd license installund von der automatischen Aktualisierung;.testdetta/licenseim Repository.
Eine geheime Variable ist der empfohlene Weg. In GitHub Actions übergeben Sie sie über die Eingabe license der Action:
- uses: <owner>/testdetta@<sha>
with:
mode: test
license: ${{ secrets.TESTDETTA_LICENSE }}
Nur td affected und td test prüfen die Lizenz. td record führt ohnehin alle Tests aus und benötigt keine.
Die Lizenz prüfen
td license status zeigt, was die gefundene Lizenz abdeckt: ihre Gültigkeit, die abgedeckten Repositorys und die Anzahl aktiver Committer, ohne personenbezogene Daten. Derselbe Status erscheint im Log, in der Job Summary und in der JSON-Ausgabe, wann immer er relevant ist: gültig, läuft bald ab, Seats überschritten, abgelaufen, falscher Scope, ungültig oder fehlend.
td license status
Rechner ohne CI-Secrets
Wo keine geheime Variable die Lizenz aufnehmen kann, speichern Sie sie einmal pro Rechner:
td license install <license|file>
Sie wird zuerst geprüft und dann nach ~/.testdetta/license geschrieben.
Automatische Erneuerung
Eine Lizenz enthält die Adresse, von der sie erneuert wird. Höchstens einmal am Tag ruft TestDetta die aktuelle Version ab und legt sie in ~/.testdetta/license ab, sodass Verlängerungen und zusätzliche Seats ankommen, ohne dass Sie Ihre Secrets anfassen müssen. Die Anfrage sendet die Lizenz in einem Header und nichts aus Ihrem Repository. Sie hat ein Timeout von 2 Sekunden und keine Wiederholungen, und jeder Fehler wird ignoriert: Ein Offline- oder blockiertes Netzwerk kostet höchstens 2 Sekunden am Tag. HTTPS_PROXY wird berücksichtigt.
In einem Netzwerk, das den Lizenzdienst nicht erreichen kann, setzen Sie TESTDETTA_LICENSE_REFRESH=off und ersetzen den Lizenzstring selbst, wenn Sie einen neuen erhalten.
Welche Repositorys eine Lizenz abdeckt
Eine Lizenz benennt die Repositorys, die sie abdeckt, etwa github.com/acme/*. TestDetta gleicht sie mit dem Remote origin des Repositorys ab. In die Remote-URL eingebettete Anmeldedaten, wie sie bei Jenkins üblich sind, werden vor dem Abgleich entfernt und nie geloggt.
Wenn der Remote nicht das Repository benennt, das die Lizenz abdeckt, zum Beispiel bei einem lokalen Mirror, setzen Sie TESTDETTA_LICENSE_SCOPE:
TESTDETTA_LICENSE_SCOPE=git.acme.corp/scm/pay/app
Aktive Committer
TestDetta wird pro aktivem Committer und Monat abgerechnet: ein eindeutiger Commit-Autor mit mindestens einem in den letzten 30 Tagen verfassten Commit unter den Commits, die vom analysierten Commit aus erreichbar sind. Autoren werden lokal gezählt, anhand der über .mailmap zusammengeführten E-Mail-Adresse, und keine E-Mail-Adresse verlässt Ihre Rechner. Bots wie Dependabot, Renovate und github-actions werden nicht gezählt; eigene Muster fügen Sie in .testdetta/license.json hinzu:
{ "bots": ["ci-service-account"] }
Bis zu 20 % über den Seats der Lizenz (mindestens eine Person) sind in Ordnung. Darüber hinaus wählt TestDetta 30 Tage lang weiter aus und warnt in jeder Zusammenfassung, sodass Zeit bleibt, Seats hinzuzufügen; erst wenn die Anzahl danach immer noch darüber liegt, laufen alle Tests, wie ohne Lizenz. Siehe Preise.
Nie ein roter Build: Eine abgelaufene, fehlende oder nicht passende Lizenz führt dazu, dass TestDetta alle Tests ausführt und den Grund nennt. Der Job schlägt dadurch nicht fehl.