Veraltete Paketbaurichtlinien für Golang
|
Diese Richtlinien wurden durch eine neuere Version ersetzt. Sie dienen als historische Referenz für Pakete, die den neuen Richtlinien noch nicht entsprechen. |
Dieses Dokument beschreibt bewährte Verfahren zum Erstellen von Golang-Paketen. Der Großteil davon ist durch die umfassende Verwendung von Makros automatisiert.
go2rpm
go2rpm ist ein Werkzeug, das viele dieser Schritte automatisiert. Es empfiehlt sich, zunächst go2rpm import_path auszuprobieren, bevor man versucht, eine .spec-Datei manuell zu schreiben.
Importpfad
In Golang werden Pakete über vollständige URLs referenziert. Da diese URL an mehreren Stellen in der Spec-Datei verwendet wird, sollte der Basisimportpfad als globale Definition am Anfang der Spec-Datei festgelegt werden.
%global goipath github.com/kr/pretty
Alle Makros, einschließlich Paketname und Quell-URL, werden aus diesem Wert berechnet.
|
Nehmen Sie sich die Zeit, es genau zu identifizieren. Eine spätere Änderung wird unpraktisch sein.
Falls es nach mehreren Forks und Umbenennungen zu Verwirrungen im Upstream-Projekt gekommen ist, müssen Sie die Verweise auf die alten Namen in den Go-Quelldateien, einschließlich der Unit-Tests, korrigieren. Führen Sie diese Korrektur in |
Benennung
Quellpakete (src.rpm)
-
Golang-Quellcodepakete, die Code bereitstellen, MÜSSEN nach ihrem Hauptimportpfad benannt werden. Dieser Prozess wird durch das Makro
%{goname}automatisiert. Dieses Makro entfernt Großbuchstaben, das Schlüsselwort „go“ und jegliche Duplikate im Importpfad.Beispielsweise:
-
der Importpfad
github.com/kr/prettywird zugolang-github-kr-pretty -
der Importpfad
github.com/DATA-DOG/go-txdbwird zugolang-github-data-dog-txdb -
der Importpfad
github.com/gopherjs/gopherjswird zugolang-github-gopherjs
Der Dateiname der Spec-Datei MUSS mit dem Namen des Pakets übereinstimmen.
Wenn Sie nicht sicher sind, welcher Name vom Makro
%{goname}verarbeitet wird, erstellen Sie einfach das SRPM mit:fedpkg --release f31 srpm
Der SRPM-Dateiname muss in Ihrer rpmspec- und spec-Datei verwendet werden.
-
-
Quellpakete, die eine bekannte Anwendung wie beispielsweise
etcdbereitstellen, MÜSSEN nach der Anwendung benannt werden. Endbenutzer interessiert die Programmiersprache ihrer Anwendungen nicht. Benennen Sie Pakete jedoch nicht nach einer obskuren Hilfsprogrammdatei, die zufällig vom Paket erstellt wird.
Implementierung: %{gorpmname}
%gometa verwendet das Makro %{gorpmname}, um den Haupt-%{goname} aus %{goipath} zu ermitteln.
|
|
Go-Code-Pakete: %{goname}-devel
In einem Quellcodepaket, das Go-Code bereitstellt
Pakete, die Go-Code in %{goipath} ausliefern, sollten den Namen %{goname}-devel tragen. Falls Ihr Quellpaket bereits den Namen %{goname} trägt, dann gilt Folgendes:
%package devel
[…]
%description devel
[…]
%files devel -f devel.file-list
Dies wurde durch die im Abschnitt [Paketmetadaten] unten beschriebenen Makros %{gopkg} und %{gopdevelkg} automatisiert.
In einer anderen Art von Quellpaket
Wenn Ihr Quellpaket einen anderen Namen als %{goname} hat, SOLLTEN Sie Folgendes verwenden:
%package -n %{goname}-devel
[…]
%description -n %{goname}-devel
[…]
%files -n %{goname}-devel -f devel.file-list
Separate Code-Pakete
Und schließlich, falls Sie den Go-Code des Projekts in mehrere Pakete aufteilen möchten, können Sie die entsprechenden Namen wie folgt ermitteln:
%global goname1 %gorpmname importpath1
[…]
%package -n %{goname1}-devel
[…]
%description -n %{goname1}-devel
[…]
%files -n %{goname1}-devel -f %{goname1}.file-list
Siehe auch das Kapitel Umgang mit zirkulären Abhängigkeiten.
Denken Sie daran, dass in Go jedes Verzeichnis ein Paket darstellt. Trennen Sie niemals die .go-Dateien, die sich in einem einzigen Verzeichnis befinden, in verschiedene Pakete auf.
Kompatibilitätspakete für Importpfade: %{compat-%{oldgoname}-devel}
Wenn ein Projekt aufgrund von Forks, Umbenennungen, Rehostings, organisatorischen Änderungen oder verwirrender Projektdokumentation unter mehreren Importpfaden referenziert werden kann, ist es möglich, Kompatibilitäts-Teilpakete zu generieren, um Code, der einen der anderen Importpfade verwendet, mit dem kanonischen Pfad zu verbinden.
Der kanonische Importpfad SOLLTE immer derjenige sein, der in der Projektdokumentation angegeben ist. Einige Projekte dokumentieren jedoch keine Änderungen des Importpfads und verwenden HTTPS-Weiterleitungen (z.B. https://github.com/docker/docker → https://github.com/moby/moby). Eine solche Weiterleitung ist ein ausreichender Hinweis darauf, dass sich der kanonische Importpfad geändert hat (bitte überprüfen Sie dies aber mit dem Upstream-Projekt).
Der neue Importpfad SOLLTE in %{goipath} widergespiegelt werden und Kompatibilitätsimportpfade MÜSSEN mit dem Makro goaltipaths deklariert werden:
# Eine durch Leerzeichen getrennte Liste von Importpfaden zur Simulation.
%global goaltipaths
Beispielsweise wurde die Go-Bibliothek github.com/Sirupsen/logrus in github.com/sirupsen/logrus umbenannt, und die Dokumentation spiegelt diesen neuen Importpfad wider. Der Paketierer SOLLTE daher eine Umbenennung seines Pakets mit einem neuen Importpfad und einem Kompatibilitätsimportpfad anfordern:
%global goipath github.com/sirupsen/logrus
%global goaltipaths github.com/Sirupsen/logrus
Wenn ein Projekt mehrfach umbenannt wurde, können auch mehrere Kompatibilitätsimportpfade angegeben werden.
|
Umbenennungen dürfen niemals aufgeschoben werden Paketierer DÜRFEN KEINE Teilpakete zur Kompatibilität von Importpfaden verwenden, um den kanonischen Importpfad auf einen der vorherigen Namen umzubenennen. Paketierer MÜSSEN die vom Upstream-Projekt vorgenommenen Umbenennungen auf die Haupt-Spec-Datei-Variable |
Go-Binärpakete
Die von Ihrer Spec-Datei erzeugten Binärdateien SOLLTEN im Allgemeinen im Hauptpaket aufgeführt werden. Falls Sie jedoch einen passenderen Namen wünschen oder die Binärdateien auf verschiedene Pakete verteilen möchten, können Sie zusätzliche Binär-Teilpakete erstellen. Diese Teilpakete DÜRFEN natürlich NICHT architekturunabhängig („noarch“) sein.
Wir können beispielsweise das Paket bbolt erstellen, das die gleichnamige Binärdatei enthält:
%package -n bbolt
[…]
%description -n bbolt
[…]
%files -n bbolt
%license LICENSE
%{_bindir}/bbolt
Versionierung
Viele Go-Bibliotheken verwenden keine Paketversionen oder regelmäßige Releases, sondern werden über eine öffentliche Versionskontrolle verwaltet. In diesem Fall gelten die Standard-Versionskonventionen von Fedora. Das bedeutet, dass Go-Pakete häufig eine Versionsnummer von 0 und eine Release-Nummer wie 0.10.20190319git27435c6 haben.
Der Großteil dieses Prozesses wird durch Makros automatisiert, so dass Sie die Versionsnummer nicht selbst angeben müssen.
Zuerst geben Sie im Header entweder eine Version, ein Tag oder einen Commit an.
Version:
%global tag
%global commit
Verwenden Sie dann das Makro %gometa:
%gometa
Das Makro %gometa verarbeitet automatisch das %{?dist}-Tag des Feldes Release, um gegebenenfalls den Commit zu berücksichtigen.
|
Commits im Vergleich zu Releases Sie SOLLTEN Releases priorisieren. Bitte honorieren Sie Projekte, die sich um die Identifizierung stabiler Codezustände bemühen. Greifen Sie nur dann auf Commits zurück, wenn das Projekt keine Releases veröffentlicht, das Release älter als sechs Monate ist oder Sie unbedingt eine Änderung eines späteren Commits benötigen. In den letztgenannten Fällen informieren Sie das Projekt bitte höflich über den Grund, warum Sie auf die offiziellen Releases verzichten mussten. Die Priorisierung von Releases hilft, Probleme mit inkompatiblen Commits zu vermeiden. |
Architekturen für Golang
Für die Kompilierung auf verschiedenen Architekturen stehen die Compiler golang und gcc-go zur Verfügung. Der golang-Compiler unterstützt derzeit x86, x86_64, ppc64le, ppc64 (teilweise, siehe Upstream-Ticket #13192), s390x, armv7hl und aarch64.
Binärdateien SOLLTEN ExclusiveArch setzen, damit Pakete nur auf den angegebenen Architekturen erstellt werden. Dies wird nun automatisch durch das Makro %gometa mithilfe des Makros %{golang_arches} hinzugefügt. Paketierer können %ix86 ausschließen (siehe Changes/EncourageI686LeafRemoval), indem sie -f an das Makro %gometa übergeben. Das Flag -f weist %gometa an, ExclusiveArch: %{golang_arches_future} anstelle von ExclusiveArch: %{golang_arches} zu setzen. %{golang_arches_future} umfasst dieselben Architekturen wie {golang_arches}, jedoch ohne %ix86.
Abhängigkeiten
Pakete MÜSSEN BuildRequires: go-rpm-macros haben.
Dies wird durch das Makro %gometa automatisiert.
Automatische Generierung von Abhängigkeiten
Die meisten golang-*-Pakete enthalten nur Quellcode. Das *-devel-Teilpaket, das den Quellcode enthält, sollte explizit die benötigten Go-Importe bereitstellen. Diese Bereitstellungen werden automatisch aus den Importpfaden abgeleitet.
Binärdateien, die diese Importe enthalten, verwenden sie beispielsweise in BuildRequires:
BuildRequires: golang(github.com/gorilla/context)
Gebündelt oder nicht gebündelt
Aktuell SOLLTEN Go-Projekte, die in Fedora paketiert sind, standardmäßig „entbündelt“ werden. Das bedeutet, dass die Projekte aus den in Fedora enthaltenen Abhängigkeiten erstellt werden.
Für manche Projekte kann es sinnvoll sein, aus mitgelieferten Abhängigkeiten zu kompilieren. Jede solche Bündelung bedarf einer triftigen Begründung.
BuildRequires
Die BuildRequires des Projekts enthalten die Abhängigkeiten, die von Unit-Tests und Binärdateien benötigt werden.
export GOPATH=/home/user/go
export GO111MODULE=off
export goipath="github.com/sirupsen/logrus"
go get $goipath
(sort -u | xargs -I{} echo "BuildRequires: golang({})") <<< "$(
golist --imported --package-path $goipath --skip-self
golist --imported --package-path $goipath --skip-self --tests
)"
gibt Folgendes aus:
BuildRequires: golang(github.com/stretchr/testify/assert)
BuildRequires: golang(github.com/stretchr/testify/require)
BuildRequires: golang(golang.org/x/crypto/ssh/terminal)
Wenn automatische BuildRequires für Ihr Bauziel verfügbar sind, können Sie das Makro %go_generate_buildrequires in %generate_buildrequires verwenden:
%generate_buildrequires
%go_generate_buildrequires
Dieses Makro nutzt golist, um Bau- und Testabhängigkeiten aus dem Paketquellcode zu sammeln.
Testen
Sie MÜSSEN Unit-Tests durchführen. Aufgrund der Natur der Go-Entwicklung, insbesondere des Fehlens semantischer Versionierung, treten API-Fehler häufig auf. Diese müssen frühzeitig erkannt und an die Upstream-Entwickler weitergeleitet werden.
Einige Tests können deaktiviert werden, insbesondere die folgenden Arten von Unit-Tests sind zu einer sicheren Bauumgebung wie Mock nicht kompatibel:
-
Tests, die einen Remote-Server oder eine API über das Internet aufrufen,
-
Tests, die versuchen, das System zu rekonfigurieren,
-
Tests, die auf eine bestimmte Anwendung angewiesen sind, die auf dem System ausgeführt wird, wie z.B. ein Datenbank- oder Systemprotokoll-Server.
Wenn ein Test aus einem anderen Grund fehlschlägt, können Sie ihn auf dieselbe Weise deaktivieren. Sie SOLLTEN das Problem jedoch auch dem Upstream-Projekt melden. Vergessen Sie nicht, in einem Kommentar nachzuvollziehen, warum jeder einzelne Test deaktiviert wurde, und gegebenenfalls Links zu den Upstream-Fehlerberichten hinzuzufügen.
Durchlauf
In diesem Kapitel wird eine typische Go-Spec-Datei Schritt für Schritt mit Kommentaren und Erläuterungen vorgestellt.
Spec-Datei-Vorspann: %{goipath}, %{forgeurl} und %gometa
Üblicher Fall
Ein Go-Paket wird über seinen Importpfad identifiziert. Eine Go-Spec-Datei beginnt daher mit der Deklaration %{goipath}. Verwechseln Sie das nicht, denn diese Deklaration steuert das Verhalten des restlichen Inhalts der Spec-Datei.
%global goipath google.golang.org/api
Wenn Ihr Paket auf einer Forge wie GitHub, GitLab, Bitbucket oder Pager gehostet wird, wird der Hosting-Standort des Go-Pakets automatisch aus dieser Variable abgeleitet (üblicherweise durch Voranstellen von \https://). Anderenfalls müssen Sie die Hosting-URL explizit mit dem Makro %{forgeurl} angeben.
%global forgeurl https://github.com/google/google-api-go-client
Auf die Deklaration %{forgeurl} folgt entweder Version, commit oder tag. Verwenden Sie die Kombination, die Ihrem Anwendungsfall entspricht.
%global commit 2dc3ad4d67ba9a37200c5702d36687a940df1111
|
Sie können auch |
Nachdem wir nun alle erforderlichen Variablen haben, kann das Makro %gometa ausgeführt werden.
%gometa
Es ermittelt und setzt die folgenden Variablen, falls diese nicht bereits vom Paketierer festgelegt wurden:
- goname
-
einen rpm-kompatiblen Paketnamen, abgeleitet von goipath
- gosource
-
eine URL, die als Wert für SourceX: verwendet werden kann
- gourl
-
eine URL, die als Wert für URL: verwendet werden kann
Die Verarbeitung wird an das Makro %forgemeta delegiert für:
- forgesource
-
eine URL, die als Wert für SourceX: verwendet werden kann
- forgesetupargs
-
die korrekten Argumente, die an
%setupfür diese Quelle übergeben werden müssen, die von%forgesetupund%forgeautosetupverwendet wird - archivename
-
der Dateiname des Quelarchivs ohne Endungen
- archiveext
-
die Dateinamensendungen des Quellarchivs, ohne führenden Punkt
- archiveurl
-
die URL, die zum Herunterladen des Quellarchivs verwendet werden kann, ohne Umbenennung
- topdir
-
das oberste Verzeichnis des Quellarchivs (kann leer sein)
- extractdir
-
das Quellverzeichnis, das innerhalb von
%{_builddir}nach Aufruf von%forgesetup,%forgeautosetupoder%{forgesetupargs}erstellt wurde - repo
-
der Name des Repositorys
- owner
-
der Repository-Inhaber (falls von einer anderen berechneten Variable verwendet)
- shortcommit
-
die vom Forge verwendete Commit-Hash-Begrenzung, falls vorhanden
- scm
-
Der SCM-Typ beim Paketieren von Code-Snapshots: Commits oder Tags
- distprefix
-
das Präfix, das zu dist hinzugefügt werden muss, um Nicht-Release-Pakete zu verfolgen
Die meisten berechneten Variablen sind sowohl überschreibbar als auch optional.
Nun können wir die restlichen Elemente des Vorspanns hinzufügen. Zunächst können wir einen mehrzeiligen Beschreibungsblock definieren, der von allen Teilpaketen gemeinsam genutzt wird:
%global common_description %{expand:
cmux is a generic Go library to multiplex connections based on their payload.
Using cmux, you can serve gRPC, SSH, HTTPS, HTTP, Go RPC, and pretty much any
other protocol on the same TCP listener.}
Diese Beschreibung DARF maximal 80 Zeichen pro Zeile umfassen.
|
Falls Sie eine detaillierte
|
Dann MÜSSEN wir die Lizenzdateien angeben, die zu den Entwicklungs-Teilpaketen hinzugefügt werden sollen:
%global golicenses: Eine durch Leerzeichen getrennte Liste von Shell-Globs, die den Projektlizenzdateien enstprechen.
Und die mögliche Dokumentation, die beigefügt werden SOLLTE:
%global godocs: Eine durch Leerzeichen getrennte Liste von Shell-Glob-Mustern, die den Projektdokumentationsdateien entsprechen. Die Go-RPM-Makros erkennen standardmäßig auch ohne diese Angabe Dateien mit der Endung „.md“.
|
Sie können Dateien auch von
Beispielsweise möchten Sie möglicherweise die |
Quellpaket-Metadaten: %{goname}, %{gourl} und %{gosource}
Wir können die üblichen RPM-Header deklarieren, indem wir die von %gometa ermittelten Werte verwenden:
Name: %{goname}
# If not set before
Version:
Release: 1%{?dist}
Summary:
License:
URL: %{gourl}
Source: %{gosource}
Sie können diese durch manuelle Definitionen ersetzen. Ersetzen Sie beispielsweise %{gourl} durch die Projekt-Homepage, falls diese separat von der Repository-URL existiert. Achten Sie darauf, %{go*}-Variablen nur dann zu ersetzen, wenn dies einen Mehrwert für die Spec-Datei bietet und Sie sich der Konsequenzen bewusst sind. Anderenfalls führen Sie lediglich zu wartungsintensiven Diskrepanzen in der Distribution.
BuildRequires
Falls sie nicht automatisch generiert werden, können Sie jetzt die für die Paketerstellung und die Unit-Tests benötigten Abhängigkeiten hinzufügen:
BuildRequires: golang(github.com/stretchr/testify/assert)
BuildRequires: golang(github.com/stretchr/testify/require)
BuildRequires: golang(golang.org/x/crypto/ssh/terminal)
Siehe dieser Abschnitt, um zu erfahren, wie Sie die BuildRequires manuell abrufen können.
Paket-Metadaten
Die Deklaration von Go-Codepaketen wurde mit dem Makro %{gopkg} automatisiert. Es generiert automatisch ein %package und ein %description für alle primären Importpfade und Kompatibilitätspfade.
%gopkg
Wenn Sie nur Go-Entwicklungs-Teilpakete ohne Kompatibilität generieren müssen, verwenden Sie Folgendes:
%godevelpkg
Bei Bedarf können Sie anschließend ein oder mehrere Go-Pakete definieren, die die zu erstellenden Binärdateien enthalten. Siehe dazu den vorherigen Abschnitt Go-Binärpakete.
%prep: %goprep , Vendoring entfernen
%goprep entpackt die Go-Quellarchive und erstellt den Projektverzeichnisbaum „GOPATH“, der im restlichen Teil der Spec-Datei verwendet wird. Es entfernt mitgelieferten („vendored“) Code: Verwenden Sie das Flag -k, wenn Sie diesen mitgelieferten Code behalten möchten, und berücksichtigen Sie die Auswirkungen im restlichen Teil der Spec-Datei.
%goprep
%goprep führt nur eine grundlegende Erkennung von Vendoring durch. Innovative Methoden zum Einbinden von Code werden nicht erkannt. Entfernen Sie den übersehenen Vendoring-Code nach der Zeile %goprep manuell.
%goprep wird die Upstream-Quellen nicht automatisch für Sie korrigieren. Da alle nachfolgenden Makroaufrufe von fehlerfreien Quellen ausgehen, müssen Sie diese direkt nach der Zeile %goprep korrigieren:
-
Aufrufe veralteter Importpfade durch ihren korrekten Wert ersetzen
-
Code-Probleme patchen
-
Totcode entfernen (einige Upstream-Projekte liefern wissentlich fehlerhaften Quellcode aus, in der Hoffnung, dass sich jemand darum kümmert, ihn zu reparieren)
|
Sie SOLLTEN Korrekturen und Problemberichte an die Entwickler weiterleiten. Jeder verwendete Patch SOLLTE einen Link zu einem entsprechenden Bugreport oder Merge Request enthalten. Mindestens sollte ein Kommentar hinzugefügt werden, der die Gründe für den Patch erläutert. |
Wenn Sie einen Importpfad paketieren, der Teil einer Abhängigkeitsschleife ist, benötigen Sie Bootstrapping, um die ersten Bauvorgänge zu verwalten. Für Go-Code bedeutet dies, dass Ihr Bootstrap-Abschnitt Folgendes enthalten sollte:
-
Unit-Tests entfernen, die andere Teile der Schleife importieren
-
Code entfernen, der andere Teile der Schleife importiert
Manchmal lassen sich Abhängigkeitsschleifen auflösen, indem man bestimmte Unterverzeichnisse in ein separates -devel-Teilpaket auslagert. Siehe auch Umgang mit zirkulären Abhängigkeiten.
Automatische BuildRequires
Wenn BuildRequires-Generatoren unterstützt werden, können Sie diese nun zu Ihrem Bauvorgang hinzufügen:
%generate_buildrequires
%go_generate_buildrequires
Paketierung einer Binärdatei: der %build-Abschnitt
Wenn es sich bei Ihrem Paket nur um ein Quellpaket handelt, können Sie diesen %build-Abschnitt komplett überspringen.
Andernfalls müssen Sie zunächst manuell die Projektteile identifizieren, die kompiliert werden können, und festlegen, wie das Ergebnis benannt werden soll. Praktisch gesehen ist jedes Verzeichnis relevant, das einen main()-Abschnitt in Go enthält. In gut organisierten Projekten werden diese in Unterverzeichnissen mit dem Namen cmd abgelegt, die nach dem zu kompilierenden Befehl benannt sind. Dies wird auch hier dokumentiert, ist aber keine allgemeine Regel. Manchmal wird das gesamte Verzeichnis %goipath als eine einzige Binärdatei kompiliert.
for cmd in cmd/* ; do
%gobuild -o %{gobuilddir}/bin/$(basename $cmd) %{goipath}/$cmd
done
Installieren der Pakete
Quellpaket-Installation
Wenn Sie eine Bibliothek paketieren, führt %gopkginstall Installationsschritte für alle primären Importpfade und Kompatibilitätspfade durch.
%gopkginstall
Wenn Sie nur Go-Entwicklungsteilpakete ohne Kompatibilität installieren müssen, verwenden Sie:
%godevelinstall
Installation eines Binärpakets
Für Binärdateien erstellen wir einfach das Verzeichnis %{_bindir} im Buildroot und installieren die Befehle als ausführbare Dateien darin:
install -m 0755 -vd %{buildroot}%{_bindir}
install -m 0755 -vp %{gobuilddir}/bin/* %{buildroot}%{_bindir}/
|
Seien Sie vorsichtig bei Befehlsnamen, die möglicherweise bereits in Fedora existieren. Im Zweifelsfall können Sie überprüfen, ob der Befehl bereits in Fedora verfügbar ist:
In diesem Fall sollten Sie nach bestem Wissen und Gewissen den Befehl umbenennen. |
Ausführen der Unit-Tests: %gocheck
Wie bereits erwähnt, MÜSSEN Sie Unit-Tests in %check ausführen:
%gocheck
Oft ist es jedoch notwendig, einige davon zu deaktivieren. Dafür stehen Ihnen drei Ausschlussflags zur Verfügung:
-
-d <Verzeichnis>: die Dateien im angegebenen<Verzeichnis>ausschließen nicht-rekursiv (Unterverzeichnisse sind nicht ausgeschlossen) -
-t <Verzeichnisbaumwurzel>: Dateien in der angegebenen<Verzeichnisbaumwurzel>ausschließen rekursiv (Unterverzeichnisse sind ausgeschlossen) -
-r <Ausdruck>: Dateien ausschließen, die auf den angegebenen<Ausdruck>passen
Vergessen Sie nicht, zu dokumentieren, warum ein Test deaktiviert wurde.
Beispiele
Einfaches Quellpaket
# https://github.com/stretchr/testify
%global goipath github.com/stretchr/testify
Version: 1.2.2
%gometa
%global common_description %{expand:
Golang set of packages that provide many tools for testifying
that your code will behave as you intend.
Features include:
- Easy assertions
- Mocking
- Testing suite interfaces and functions}
%global golicenses LICENSE
Name: %{goname}
Release: 1%{?dist}
Summary: Tools for testifying that your code will behave as you intend
License: MIT
URL: %{gourl}
Source: %{gosource}
BuildRequires: golang(github.com/davecgh/go-spew/spew)
BuildRequires: golang(github.com/pmezard/go-difflib/difflib)
BuildRequires: golang(github.com/stretchr/objx)
%description
%{common_description}
%gopkg
%prep
%goprep
%install
%gopkginstall
%check
%gocheck
%gopkgfiles
%changelog
* Thu Mar 21 22:20:22 CET 2019 Robert-André Mauchin <zebob.m@gmail.com> - 1.2.2-1
- First package for Fedora
Paketumbenennungen
# https://github.com/sirupsen/logrus
%global goipath github.com/sirupsen/logrus
Version: 1.4.0
%gometa
%global goaltipaths github.com/Sirupsen/logrus
%global common_description %{expand:
Logrus is a structured logger for Go (golang), completely API compatible with
the standard library logger.}
%global golicenses LICENSE
%global godocs *.md
Name: %{goname}
Release: 1%{?dist}
Summary: Structured logger for Go
License: MIT
URL: %{gourl}
Source: %{gosource}
BuildRequires: golang(golang.org/x/crypto/ssh/terminal)
BuildRequires: golang(github.com/stretchr/testify/assert)
%description
%{common_description}
%gopkg
%prep
%goprep
%install
%gopkginstall
%check
%gocheck
%gopkgfiles
%changelog
* Wed Oct 31 2018 Robert-André Mauchin <zebob.m@gmail.com> - 1.4.0-1
- First package for Fedora
Einfaches Binärpaket
# https://github.com/square/go-jose
%global goipath gopkg.in/square/go-jose.v2
%global forgeurl https://github.com/square/go-jose
Version: 2.1.9
%gometa
%global common_description %{expand:
Package jose aims to provide an implementation of the Javascript Object
Signing and Encryption set of standards. This includes support for JSON Web
Encryption, JSON Web Signature, and JSON Web Token standards.}
%global golicenses LICENSE
%global godocs *.md
%global godevelheader %{expand:
# The devel package will usually benefit from corresponding project binaries.
Requires: %{name} = %{version}-%{release}
}
Name: %{goname}
Release: 1%{?dist}
Summary: An implementation of JOSE standards (JWE, JWS, JWT) in Go
# Detected licences
# - *No copyright* Apache License (v2.0) at 'LICENSE'
# json/ is BSD-3-Clause
License: Apache-2.0 AND BSD-3-Clause
URL: %{gourl}
Source: %{gosource}
BuildRequires: golang(golang.org/x/crypto/ed25519)
BuildRequires: golang(golang.org/x/crypto/pbkdf2)
BuildRequires: golang(github.com/stretchr/testify/assert)
BuildRequires: golang(gopkg.in/alecthomas/kingpin.v2)
%description
%{common_description}
%gopkg
%prep
%goprep
%build
for cmd in jose-util jwk-keygen; do
%gobuild -o %{gobuilddir}/bin/$(basename $cmd) %{goipath}/$cmd
done
%install
%gopkginstall
install -m 0755 -vd %{buildroot}%{_bindir}
install -m 0755 -vp %{gobuilddir}/bin/* %{buildroot}%{_bindir}/
%check
%gocheck
%files
%license %{golicenses}
%doc %{godocs}
%{_bindir}/*
%gopkgfiles
%changelog
* Thu Mar 21 21:59:10 CET 2019 Robert-André Mauchin <zebob.m@gmail.com> - 2.1.9-1
- First package for Fedora
Want to help? Learn how to contribute to Fedora Docs ›