Paketbaurichtlinien für Golang
Dieses Dokument beschreibt bewährte Verfahren für die Paketierung von Golang-Paketen.
|
Die vorherige Version dieser Richtlinien sah die Erstellung separater |
go2rpm
go2rpm ist ein Werkzeug, das viele dieser Schritte automatisiert. Es empfiehlt sich, zunächst go2rpm --name NAME --profile vendor IMPORT_PATH auszuprobieren, bevor man versucht, eine Spec-Datei manuell zu schreiben. go2rpm generiert eine richtlinienkonforme Spec-Datei, lädt die Upstream-Quellen herunter, erstellt mit go_vendor_archive aus den Go Vendor Tools ein Vendor-Archiv und verwendet anschließend go_vendor_license, um die Upstream-Quellen und die eingebundenen Abhängigkeiten nach Lizenzdateien zu durchsuchen. Dabei fordert es den Benutzer zur Eingabe fehlender Lizenzen auf und generiert schließlich einen kumulativen SPDX-Ausdruck.
Importpfad
In Golang werden Pakete über vollständige URLs referenziert, die in der go.mod-Datei des Projekts aufgeführt sind.
%global goipath github.com/kr/pretty
Benennung
Neue Golang-Bibliothekspakete sind nicht mehr zulässig. Daher sind alle Golang-Pakete benutzerorientierte Anwendungen, die gemäß den Benennungsrichtlinien benannt werden MÜSSEN. Insbesondere DÜRFEN Go-Pakete, die von externen Anbietern bereitgestellt werden, KEIN Präfix golang- haben, es sei denn, dieses ist Bestandteil des Namens des übergeordneten Projekts.
Dies gilt auch für bestehende Pakete. Bei der Umstellung eines Pakets mit dem Präfix golang-, das nach den alten Richtlinien für die Verwendung von Vendored-Abhängigkeiten erstellt wurde, muss das Paket den Paketumbenennungsprozess durchlaufen. Diese Richtlinie dient der klaren Trennung zwischen Paketen, die nach dem alten Ansatz und dem neuen Vendored-Verfahren erstellt wurden, und soll verhindern, dass Teilpakete mit dem Präfix -devel aus bestehenden golang--Paketen entfernt und anschließend wieder in stabile Zweige integriert werden.
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.
Go-Compiler-Flags
Compiler-Flags beibehalten
Pakete MÜSSEN die Fedora Golang-Compiler-Flags beibehalten, indem sie das Makro %gobuild verwenden oder die entsprechenden Makros %gobuild_*flags an ein Upstream-Bauskript übergeben.
# Using %gobuild
%gobuild -o %{gobuilddir}/bin/%{name} %{goipath}
# Using a simple upstream build script
%make_build BUILD_OPTS=%{gobuild_baseflags_shescaped}
# Using an upstream build script that provides separate options for ldflags
%make_build \
BUILD_OPTS=%{gobuild_baseflags_shescaped} \
GO_LDFLAGS=%{gobuild_ldflags_shescaped}
Weitere Informationen zum Übergeben der Compiler-Flags an ein Upstream-Bauskript finden Sie in den Inline-Kommentaren in macros.go-compilers-golang.
|
Es wird empfohlen, nach Möglichkeit das Makro |
Übergeben zusätzlicher Flags
Go unterstützt das Übergeben zusätzlicher Linker-Flags (z.B. zur Aktivierung der --version-Funktionalität) und Bau-Tags für die bedingte Kompilierung. Bei Verwendung eines Upstream-Bauskripts werden diese möglicherweise automatisch gesetzt. Andernfalls muss der Paketierer sie manuell festlegen.
|
Schauen Sie sich unbedingt den Upstream-Bauprozess und die Dokumentation an, um herauszufinden, welche Linker-Flags Sie möglicherweise benötigen, um die Version für Projekte, die ein Flag wie |
Linker-Flags
In manchen Fällen kann es erforderlich sein, dem Go-Linker zusätzliche Flags zu übergeben. Dies kann durch Setzen der Umgebungsvariablen $GO_LDFLAGS erreicht werden, die dann von den Makros gelesen wird.
# Der korrekte an -X zu übergebende Wert ist projektabhängig; dies ist ein Beispiel.
export GO_LDFLAGS="-X %{goipath}/internal.Version=%{version}"
Pakete DÜRFEN die Go-Linker-Flags NICHT über die Umgebungsvariable $LDFLAGS setzen. Dies wird zwar aus Gründen der Abwärtskompatibilität unterstützt, gilt aber als veraltet.
Build-Tags
Go unterstützt Build-Tags, um Code bedingt in den Bauprozess ein- oder daraus auszuschließen. Um Build-Tags an den Go-Compiler zu übergeben, setzen Sie $GO_BUILDTAGS auf eine durch Leerzeichen getrennte Liste von Tags.
# Diese Tags sind nur Beispiele. Jedes Projekt hat seine eigenen.
export GO_BUILDTAGS="systemd selinux"
Pakete DÜRFEN KEINE Go-Tags über die Umgebungsvariable $BUILDTAGS setzen.
Makro-Abhängigkeiten
Pakete MÜSSEN BuildRequires: go-rpm-macros enthalten, um die Go-Makros und den Compiler einzubinden.
Dies wird durch das Makro %gometa automatisiert.
Pakete, die die %go_vendor_license_*-Makros verwenden, MÜSSEN BuildRequires: go-vendor-tools haben.
Vendor-Abhängigkeiten
Pakete MÜSSEN ihre Go-Modulabhängigkeiten einbinden. Paketierer SOLLTEN den Befehl go_vendor_archive aus den Go Vendor Tools (gvt) verwenden, um ein reproduzierbares Vendor-Archiv zu erstellen. Pakete, die die Go Vendor Tools nicht verwenden, müssen ein Skript oder eine andere standardisierte, dokumentierte Vorgehensweise zum Herunterladen der Quellen mit go mod vendor und zum reproduzierbaren Erstellen eines Tarballs enthalten. Paketierer SOLLTEN Vendor-Archive selbst neu generieren, selbst wenn die Upstream-Projekte ein Vendor-Verzeichnis in ihren Upstream-Quellen enthalten. Dies ermöglicht einfachere Sicherheitsupdates mit den Go Vendor Tools.
Üblicherweise ist Source0 in der Spec-Datei das primäre Archiv und Source1 das Vendor-Archiv, wobei die Werte automatisch mithilfe der Forge-Makros ausgefüllt werden.
Source0: %{gosource}
# %%archivename is the basename as the archive provided
# by %%gosource without the extension.
Source1: %{archivename}-vendor.tar.bz2
# go-vendor-tools configuration generated by go2rpm
Source2: go-vendor-tools.toml
Führen Sie anschließend go_vendor_archive create <PAKETNAME>.spec aus, um einen Vendor-Tarball zu erstellen.
Gebündelte „Provides“
Pakete MÜSSEN bundled(golang(IMPORT_PATH)) = VERSION als „Provides“ für alle eingebundenen Go-Module enthalten. Dies wird automatisch von einem Abhängigkeitsgenerator verwaltet. Er wird für jede modules.txt-Datei in einem Lizenzverzeichnis ausgeführt. Markieren Sie die Datei vendor/modules.txt mit %license in %files. Der Generator scannt die Datei und erstellt das bundled()-Provides. vendor/modules.txt ist standardmäßig in go_vendor_license_filelist enthalten (siehe Lizenzen installieren), so dass die meisten Pakete dies nicht manuell tun müssen.
# Nur explizit angeben, wenn %%go_vendor_license_filelist nicht verwendet wird
%license vendor/modules.txt
Lizenzierung
Pakete müssen den Fedora-Lizenzrichtlinien entsprechen. Für Vendored-Go-Pakete bedeutet dies, dass die Lizenzdateien des Hauptprojekts sowie aller Vendored-Go-Module im Paket enthalten und mit %license gekennzeichnet sein MÜSSEN. Jedes Vendored-Go-Modul MUSS eine Lizenzdatei enthalten; Go-Module ohne Lizenzdatei DÜRFEN NICHT in Vendored-Archive aufgenommen werden, bis die Lizenzierung geklärt ist.
Darüber hinaus MUSS der License:-Tag des Pakets einen kumulativen SPDX-Ausdruck enthalten, der sowohl das Hauptpaket als auch die Vendored-Go-Module umfasst.
Lizenzierung mit den Go Vendor Tools
Go Vendor Tools stellt den Befehl go_vendor_license und Makros bereit, um den korrekten License:-Ausdruck zu ermitteln und Lizenzdateien gemäß dem vorherigen Abschnitt zu installieren.
Paketierer MÜSSEN go_vendor_license report ausführen (entweder direkt über go2rpm oder mithilfe des Makros https://fedora.gitlab.io/sigs/go/go-vendor-tools/man/rpm_macros/#go_vendor_license_check%go_vendor_license_check] in einem lokalen Mock-Build) und dessen Ausgabe sorgfältig prüfen, bevor sie die Quellen in den Lookaside-Cache hochladen. Alle Fehler MÜSSEN behoben werden. Falls ein Teil der Ausgabe fehlerhaft ist, kann das Verhalten von go_vendor_license in dem Lizenzierungsabschnitt der Go Vendor Tools-Konfigurationsdatei angepasst werden.
Dieses Dokument beschreibt lediglich die Standardverwendung der Go Vendor Tools, die zur Einhaltung der Richtlinien erforderlich ist. Details zur erweiterten Verwendung finden Sie in der Dokumentation der Go Vendor Tools. Paketierer können den beschriebenen Szenarien folgen, um mit go2rpm eine neue Spec-Datei zu generieren oder bestehende Spec-Dateien für neue Upstream-Versionen zu aktualisieren. Anschließend führen sie go_vendor_license aus, um sicherzustellen, dass die Lizenz gültig ist und sie gegebenenfalls vor dem vollständigen Bauvorgang automatisch zu aktualisieren.
|
Obwohl die Go Vendor Tools Funktionen zum Scannen von Lizenzen und zum Generieren von SPDX-Ausdrücken bieten, liegt es weiterhin in der Verantwortung des Paketierers, eine grundlegende Überprüfung der Ausgabe durchzuführen und die Einhaltung der Fedora-Lizenzrichtlinien sicherzustellen, einschließlich der Gewährleistung, dass alle Schlüssel im License-Tag in Fedora zulässige Lizenzen sind, bevor Quellen in den Lookaside-Cache hochgeladen werden. Bei Bedarf kann der Lizenzausdruck für einzelne Dateien in der Konfigurationsdatei überschrieben werden wie in der Dokumentation der Szenarien beschrieben. |
go-vendor-tools.toml
Pakete MÜSSEN eine go-vendor-tools.toml-Datei enthalten, um das Lizenzerkennungs-Backend und weitere Konfigurationsoptionen anzugeben. Weitere Informationen finden Sie in der Konfigurationsreferenz. Die empfohlene Vorgehensweise ist die Verwendung von go2rpm, das automatisch eine gültige go-vendor-tools.toml-Datei erstellt. Eine minimale Konfiguration sieht wie folgt aus:
[licensing]
detector = "askalono"
Diese Datei wird von den Makros verwendet und üblicherweise als Source2: in die Spec-Datei eingebunden, direkt unterhalb des Upstream-Archivs und des von go_vendor_archive generierten Tarballs. In diesem Dokument wird %{S:2} (wird zum Pfad zu Source2 expandiert) verwendet, um den Pfad zur Konfigurationsdatei der Go Vendor Tools darzustellen.
go-vendor-tools installieren
Pakete, die die Go Vendor Tools-Makros verwenden, MÜSSEN BuildRequires: go-vendor-tools enthalten und das Makro %go_vendor_license_buildrequires verwenden, um die für das ausgewählte Lizenzerkennungs-Backend benötigten Anforderungen zu generieren.
BuildRequires: go-vendor-tools
%generate_buildrequires
%go_vendor_license_buildrequires -c %{S:2}
Lizenzen installieren
Paketierer SOLLTEN das Makro %go_vendor_license_install verwenden, um die Lizenzdateien des Hauptprojekts und aller eingebundenen Go-Module zu installieren. Standardmäßig installiert dieses Makro die Lizenzdateien im Lizenzverzeichnis des Hauptpakets. Außerdem kopiert das Makro die Datei vendor/modules.txt in das Lizenzverzeichnis, um den Golang-Generator bundled() zu aktivieren (siehe Gebündelte „Provides“).
# Install into the main package's license directory
%go_vendor_license_install -c %{S:2}
Anschließend füllt das Makro %{go_vendor_license_filelist} mit einer Liste von Dateien, die an %files -f übergeben werden können.
%files -f %{go_vendor_license_filelist}
Überprüfung der Lizenzen
Wie bereits erwähnt, MÜSSEN Paketierer die Lizenzen mit den Go Vendor Tools überprüfen, bevor sie die Quelltexte in den Lookaside-Cache hochladen. Alle von go_vendor_license gemeldeten Fehler MÜSSEN behoben werden.
Als zusätzliche Maßnahme führt das Makro %go_vendor_license_check dieselbe Lizenzerkennung durch wie der Befehl go_vendor_license report. Pakete SOLLTEN go_vendor_license_check in %check verwenden, damit der Paketbau bei Lizenzfehlern fehlschlägt. Go Vendor Tools durchsucht die Upstream-Quellen und die eingebundenen Bibliotheken nach Lizenzdateien und generiert einen kumulativen SPDX-Ausdruck. Das Makro prüft außerdem, ob der Ausdruck im License-Tag des Pakets (unabhängig von Reihenfolge oder möglicher Vereinfachung) dem entspricht, was go_vendor_license report erwartet.
# Lizenzen scannen und überprüfen, ob das Lizenz-Tag mit dem von
# go_vendor_license berechneten Wert übereinstimmt.
%go_vendor_license_check -c %{S:2}
# Das Makro kann auch einen in einem Makro gespeicherten Lizenzausdruck
# mit der Ausgabe von go_vendor_license vergleichen.
%go_vendor_license_check -c %{S:2} %{go_licenses}
Wenn Lizenzen fehlen
go_vendor_license prüft, ob einem Go-Modul die Lizenzdatei fehlt. Go-Module ohne Lizenzdatei dürfen NICHT in die bereitgestellten Archive aufgenommen werden, bis das Problem im Upstream-Projekt behoben ist.
In manchen Fällen kann go mod vendor die Lizenzdatei eines Projekts nicht herunterladen, selbst wenn diese für die entsprechende Version im Upstream-Repository vorhanden ist. Dies liegt üblicherweise daran, dass die Lizenzdateien nicht standardkonforme Namen haben oder in einem Unterverzeichnis anstatt im Wurzelverzeichnis des Moduls installiert sind. Im ersten Fall kann go_vendor_archive mithilfe von post_commands temporär so konfiguriert werden, dass die Lizenzdatei aus dem Upstream-Repository heruntergeladen wird. Paketierer müssen dies jedoch den Upstream-Entwicklern melden und darum bitten, die Lizenzdatei in ein von go mod vendor unterstütztes Format umzubenennen. Befindet sich die Lizenzdatei in einem Unterverzeichnis eines Moduls, muss sie in dessen Wurzelverzeichnis kopiert werden, um die Lizenzprüfung der Go Vendor Tools zu bestehen.
Testen
Sie SOLLTEN Unit-Tests ausführen.
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.
Tests können mit dem %gocheck2-Makro ausgeführt werden, welches intern go test aufruft, wobei die Fedora-Build-Flags erhalten bleiben und zusätzliche Optionen zum Überspringen bestimmter Tests bereitgestellt werden.
Pakete DÜRFEN das veraltete Makro %gocheck NICHT verwenden.
Go-Modulmodus
Pakete SOLLTEN den Go-Modulmodus aktivieren, indem sie %global gomodulesmode GO111MODULE=on in die Spec-Datei einfügen, um die Umgebungsvariable GO111MODULE zu setzen. Üblicherweise wird diese Definition am Anfang von %build vor dem Aufruf von %gobuild eingefügt.
|
Go-Module sind das System, das |
Makros
Die von go-vendor-tools bereitgestellten RPM-Makros dienen der Lizenzvalidierung und -installation. Siehe die Dokumentation zu den RPM-Makros der Go Vendor Tools und Lizenzierung mit den Go Vendor Tools.
go-rpm-macros ist hauptsächlich für das Makro %gobuild verantwortlich, das go build mit den Build-Flags von Fedora aufruft.
go-rpm-macros bietet außerdem Wrapper für die Forge-Makros aus dem Paket forge-srpm-macros, die das Angeben der Quell-URL und das Entpacken von Quellcode für Go-Projekte auf gängigen Software-Plattformen wie GitHub vereinfachen. Zu diesen Makros gehören %gometa, %gosource und %goprep. Paketierer können diese Makros verwenden, anstatt Quellcode anzugeben und %autosetup / %setup manuell aufzurufen. Weitere Informationen finden Sie in der Dokumentation zu forge-wrappers und in der Beispiel-Spec-Datei in diesen Richtlinien.
Beispiel
Konfiguration der go-vendor-tools
Diese Einträge wurden automatisch von go2rpm generiert. Alle Go-Pakete MÜSSEN eine go-vendor-tools.toml-Datei enthalten, die zusammen mit der Spec-Datei in distgit eingecheckt wurde.
[archive]
[licensing]
detector = "askalono"
[[licensing.licenses]]
path = "vendor/github.com/google/shlex/COPYING"
sha256sum = "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30"
expression = "Apache-2.0"
[[licensing.licenses]]
path = "vendor/github.com/jwalton/gchalk/LICENSE-chalk"
sha256sum = "44e453533edb9f1c037cb260c58f66f1d9b2e7823a07407cd6d04320e3925fea"
expression = "MIT"
[[licensing.licenses]]
path = "vendor/github.com/jwalton/gchalk/pkg/ansistyles/LICENSE-ansi-styles"
sha256sum = "310f4b4de77142b34acc5a58de93558fde5dea75891c7822b4086f71372ec983"
expression = "MIT"
[[licensing.licenses]]
path = "vendor/github.com/jwalton/go-supportscolor/LICENSE"
sha256sum = "892282511d65ac08025fbabcd8af330d0aa94e459d81a818251ff5a934383816"
expression = "MIT"
[[licensing.licenses]]
path = "vendor/gopkg.in/yaml.v3/LICENSE"
sha256sum = "d18f6323b71b0b768bb5e9616e36da390fbd39369a81807cca352de4e4e6aa0b"
expression = "MIT AND (MIT AND Apache-2.0)"
Spec-Datei mit Forge-Makro-Wrappern
Dies ist die Standardmethode von go2rpm und die gängige Konvention für Go-Pakete.
# Generated by go2rpm 1.17.1 (with extra code comments added manually)
%bcond check 1
# https://github.com/noborus/ov
%global goipath github.com/noborus/ov
Version: 0.43.0
%gometa -L -f
Name: ov
Release: %autorelease
Summary: Feature-rich terminal-based text viewer
# Generated by go-vendor-tools
License: Apache-2.0 AND BSD-3-Clause AND MIT AND MPL-2.0
URL: %{gourl}
Source0: %{gosource}
# Generated by go-vendor-tools
Source1: %{archivename}-vendor.tar.bz2
# Go Vendor Tools configuration generated by go2rpm
Source2: go-vendor-tools.toml
BuildRequires: go-vendor-tools
%description
Feature-rich terminal-based text viewer. It is a so-called terminal pager.
%prep
# Unpack upstream sources (Source0) and apply patches if they exist.
# This also creates the %%{gobuilddir} directory used to store the binary built
# during %%build.
%goprep -p1
# Unpack the vendor archive in Source1.
tar -xf %{S:1}
%generate_buildrequires
# Install license scanner dependencies.
%go_vendor_license_buildrequires -c %{S:2}
%build
# Enable Go modules mode as required by the Guidelines.
%global gomodulesmode GO111MODULE=on
# Set version in binary. The exact value to pass to -X differs by project.
export GO_LDFLAGS="-X main.Version=%{version}"
# Build the binary
%gobuild -o %{gobuilddir}/bin/ov %{goipath}
# Generate shell completions
%{gobuilddir}/bin/%{name} --completion bash > %{name}.bash
%{gobuilddir}/bin/%{name} --completion fish > %{name}.fish
%{gobuilddir}/bin/%{name} --completion zsh > %{name}.zsh
%install
# Install license files
%go_vendor_license_install -c %{S:2}
# Install binaries built during %%build
install -m 0755 -vd %{buildroot}%{_bindir}
install -m 0755 -vp %{gobuilddir}/bin/* %{buildroot}%{_bindir}/
# Install shell completions generated during %%build
install -Dpm 0644 ov.bash %{buildroot}%{bash_completions_dir}/ov
install -Dpm 0644 ov.fish %{buildroot}%{fish_completions_dir}/ov.fish
install -Dpm 0644 ov.zsh %{buildroot}%{zsh_completions_dir}/_ov
%check
# Perform license check
%go_vendor_license_check -c %{S:2}
# Run Go unit tests
%if %{with check}
%gocheck2
%endif
%files -f %{go_vendor_license_filelist}
%doc README.md
%{_bindir}/ov
%{bash_completions_dir}/ov
%{fish_completions_dir}/ov.fish
%{zsh_completions_dir}/_ov
%changelog
%autochangelog
Spec-Datei mit manuellen Definitionen
Der oben beschriebene Ansatz wird standardmäßig in go2rpm verwendet, Go-Pakete können aber auch ohne die Forge-Makros erstellt werden. Achten Sie darauf, die manuelle Abhängigkeit von go-rpm-macros und den entsprechenden ExclusiveArch-Aufruf einzufügen.
%bcond check 1
Name: ov
Version: 0.43.0
Release: %autorelease
Summary: Feature-rich terminal-based text viewer
# Generated by go-vendor-tools
License: Apache-2.0 AND BSD-3-Clause AND MIT AND MPL-2.0
URL: https://github.com/noborus/ov
Source0: %{url}/archive/v%{version}/ov-%{version}.tar.gz
# Generated by go-vendor-tools
Source1: ov-%{version}-vendor.tar.bz2
Source2: go-vendor-tools.toml
ExclusiveArch: %{golang_arches_future}
BuildRequires: go-rpm-macros
BuildRequires: go-vendor-tools
%description
Feature-rich terminal-based text viewer. It is a so-called terminal pager.
%prep
# Unpack upstream sources (Source0) and apply patches if they exist.
%autosetup -p1
# Unpack the vendor archive in Source1.
tar -xf %{S:1}
%generate_buildrequires
# Install license scanner dependencies.
%go_vendor_license_buildrequires -c %{S:2}
%build
# Enable Go modules mode as required by the Guidelines.
%global gomodulesmode GO111MODULE=on
# Set version in binary. The exact value to pass to -X differs by project.
export GO_LDFLAGS="-X main.Version=%{version}"
# Build the binary
%gobuild -o ov .
# Generate shell completions
./ov --completion bash > ov.bash
./ov --completion fish > ov.fish
./ov --completion zsh > ov.zsh
%install
# Install license files
%go_vendor_license_install -c %{S:2}
# Install binaries built during %%build
install -Dp ./ov -t %{buildroot}%{_bindir}
# Install shell completions generated during %%build
install -Dpm 0644 ov.bash %{buildroot}%{bash_completions_dir}/ov
install -Dpm 0644 ov.fish %{buildroot}%{fish_completions_dir}/ov.fish
install -Dpm 0644 ov.zsh %{buildroot}%{zsh_completions_dir}/_ov
%check
# Perform license check
%go_vendor_license_check -c %{S:2}
# Run Go unit tests
%if %{with check}
%gocheck2
%endif
%files -f %{go_vendor_license_filelist}
%doc README.md
%{_bindir}/ov
%{bash_completions_dir}/ov
%{fish_completions_dir}/ov.fish
%{zsh_completions_dir}/_ov
%changelog
%autochangelog
Want to help? Learn how to contribute to Fedora Docs ›