Blob Blame History Raw
# Generated by go2rpm
%bcond_without check
%bcond_with bootstrap


# https://github.com/etcd-io/etcd
%global goipath         go.etcd.io/etcd
%global forgeurl        https://github.com/etcd-io/etcd
Version:                3.5.0

%gometa

%global goipaths0       go.etcd.io/etcd
%global goipathsex0     go.etcd.io/etcd/server/etcdserver/api/v3rpc

%if %{without bootstrap}
%global goipaths1       go.etcd.io/etcd/server/etcdserver/api/v3rpc
%endif

%global goaltipaths     github.com/coreos/etcd go.etcd.io/etcd/v3

%global common_description %{expand:
Distributed reliable key-value store for the most critical data of a distributed
system.}

%global golicenses      LICENSE NOTICE
%global godocs          CONTRIBUTING.md README.md Documentation\\\
                        README-*.md READMEv2-etcdctl.md

%global gosupfiles      integration/fixtures/* etcdserver/api/v2http/testdata/*

Name:           etcd
Release:        %autorelease
Summary:        Distributed reliable key-value store for the most critical data of a distributed system

# Upstream license specification: Apache-2.0
License:        ASL 2.0
URL:            %{gourl}
Source0:        %{gosource}
Source1:        %{name}.service
Source2:        %{name}.conf

BuildRequires:  golang(github.com/bgentry/speakeasy)
# BuildRequires:  golang(github.com/cockroachdb/datadriven)
BuildRequires:  golang(github.com/coreos/go-semver/semver)
BuildRequires:  golang(github.com/coreos/go-systemd/v22/daemon)
BuildRequires:  golang(github.com/coreos/go-systemd/v22/journal)
BuildRequires:  golang(github.com/creack/pty)
BuildRequires:  golang(github.com/dustin/go-humanize)
BuildRequires:  golang(github.com/etcd-io/gofail/runtime)
BuildRequires:  golang(github.com/form3tech-oss/jwt-go)
BuildRequires:  golang(github.com/gogo/protobuf/gogoproto)
BuildRequires:  golang(github.com/gogo/protobuf/proto)
BuildRequires:  golang(github.com/golang/groupcache/lru)
BuildRequires:  golang(github.com/golang/protobuf/descriptor)
BuildRequires:  golang(github.com/golang/protobuf/proto)
BuildRequires:  golang(github.com/google/btree)
%if %{without bootstrap}
BuildRequires:  golang(github.com/grpc-ecosystem/go-grpc-middleware)
BuildRequires:  golang(github.com/grpc-ecosystem/go-grpc-middleware/logging/settable)
%endif
BuildRequires:  golang(github.com/grpc-ecosystem/go-grpc-prometheus)
BuildRequires:  golang(github.com/grpc-ecosystem/grpc-gateway/runtime)
BuildRequires:  golang(github.com/grpc-ecosystem/grpc-gateway/utilities)
BuildRequires:  golang(github.com/jonboulle/clockwork)
BuildRequires:  golang(github.com/json-iterator/go)
BuildRequires:  golang(github.com/modern-go/reflect2)
BuildRequires:  golang(github.com/olekukonko/tablewriter)
BuildRequires:  golang(github.com/prometheus/client_golang/prometheus)
BuildRequires:  golang(github.com/prometheus/client_golang/prometheus/promhttp)
BuildRequires:  golang(github.com/soheilhy/cmux)
BuildRequires:  golang(github.com/spf13/cobra)
BuildRequires:  golang(github.com/spf13/pflag)
BuildRequires:  golang(github.com/stretchr/testify/assert)
BuildRequires:  golang(github.com/tmc/grpc-websocket-proxy/wsproxy)
BuildRequires:  golang(github.com/urfave/cli)
BuildRequires:  golang(github.com/xiang90/probing)
BuildRequires:  golang(go.etcd.io/bbolt)
BuildRequires:  golang(go.opentelemetry.io/contrib-0.20/instrumentation/google.golang.org/grpc/otelgrpc)
BuildRequires:  golang(go.opentelemetry.io/otel-0.20/exporters/otlp)
BuildRequires:  golang(go.opentelemetry.io/otel-0.20/exporters/otlp/otlpgrpc)
BuildRequires:  golang(go.opentelemetry.io/otel-0.20/propagation)
BuildRequires:  golang(go.opentelemetry.io/otel-0.20/sdk/resource)
BuildRequires:  golang(go.opentelemetry.io/otel-0.20/sdk/trace)
BuildRequires:  golang(go.opentelemetry.io/otel-0.20/semconv)
BuildRequires:  golang(go.uber.org/multierr)
BuildRequires:  golang(go.uber.org/zap)
BuildRequires:  golang(go.uber.org/zap/zapcore)
BuildRequires:  golang(go.uber.org/zap/zapgrpc)
BuildRequires:  golang(go.uber.org/zap/zaptest)
BuildRequires:  golang(golang.org/x/crypto/bcrypt)
BuildRequires:  golang(golang.org/x/net/http2)
BuildRequires:  golang(golang.org/x/net/trace)
BuildRequires:  golang(golang.org/x/sys/unix)
BuildRequires:  golang(golang.org/x/time/rate)
BuildRequires:  golang(google.golang.org/genproto/googleapis/api/annotations)
BuildRequires:  golang(google.golang.org/grpc)
BuildRequires:  golang(google.golang.org/grpc/codes)
BuildRequires:  golang(google.golang.org/grpc/credentials)
BuildRequires:  golang(google.golang.org/grpc/grpclog)
BuildRequires:  golang(google.golang.org/grpc/health)
BuildRequires:  golang(google.golang.org/grpc/health/grpc_health_v1)
BuildRequires:  golang(google.golang.org/grpc/keepalive)
BuildRequires:  golang(google.golang.org/grpc/metadata)
BuildRequires:  golang(google.golang.org/grpc/peer)
BuildRequires:  golang(google.golang.org/grpc/resolver)
BuildRequires:  golang(google.golang.org/grpc/resolver/manual)
BuildRequires:  golang(google.golang.org/grpc/serviceconfig)
BuildRequires:  golang(google.golang.org/grpc/status)
BuildRequires:  golang(google.golang.org/grpc/test/grpc_testing)
BuildRequires:  golang(gopkg.in/cheggaaa/pb.v1)
BuildRequires:  golang(gopkg.in/natefinch/lumberjack.v2)
BuildRequires:  golang(gopkg.in/yaml.v2)
BuildRequires:  golang(sigs.k8s.io/yaml)

%if %{with check}
# Tests
BuildRequires:  golang(github.com/cockroachdb/datadriven)
BuildRequires:  golang(github.com/prometheus/client_model/go)
BuildRequires:  golang(golang.org/x/sync/errgroup)
%endif

BuildRequires:  python3-devel
BuildRequires:  systemd-rpm-macros
Requires(pre):  shadow-utils

%description
%{common_description}

%gopkg

%prep
%goprep -k
sed -i \
    -e 's|"go.opentelemetry.io/contrib|"go.opentelemetry.io/contrib-0.20|' \
    $(find . -name '*.go')
sed -i \
    -e 's|"go.opentelemetry.io/otel|"go.opentelemetry.io/otel-0.20|' \
    $(find . -name '*.go')
rm -rf vendor/
rm -rf cmd/vendor
rm -rf raft/rafttest

for d in contrib etcdctl etcdutl pkg raft hack security; do
mv $d/README.md README-$d.md
done
mv etcdctl/READMEv2.md READMEv2-etcdctl.md
mv client/v2/README.md README-clientv2.md
mv client/v3/README.md README-clientv3.md

%if %{without bootstrap}
%build
%gobuild -o %{gobuilddir}/bin/etcd %{goipath}/server
for cmd in etcdctl etcdutl; do
  %gobuild -o %{gobuilddir}/bin/$(basename $cmd) %{goipath}/$cmd
done
%endif

%install
%gopkginstall
ln -s %{gopath}/src/%{goipath}/api %{buildroot}%{gopath}/src/%{goipath}/api/v3
ln -s %{gopath}/src/%{goipath}/client/pkg %{buildroot}%{gopath}/src/%{goipath}/client/pkg/v3
ln -s %{gopath}/src/%{goipath}/etcdctl %{buildroot}%{gopath}/src/%{goipath}/etcdctl/v3
ln -s %{gopath}/src/%{goipath}/etcdutl %{buildroot}%{gopath}/src/%{goipath}/etcdutl/v3
ln -s %{gopath}/src/%{goipath}/pkg %{buildroot}%{gopath}/src/%{goipath}/pkg/v3
ln -s %{gopath}/src/%{goipath}/raft %{buildroot}%{gopath}/src/%{goipath}/raft/v3
ln -s %{gopath}/src/%{goipath}/server %{buildroot}%{gopath}/src/%{goipath}/server/v3
ln -s %{gopath}/src/%{goipath}/tests %{buildroot}%{gopath}/src/%{goipath}/tests/v3
ln -s %{gopath}/src/%{goipath}/tools %{buildroot}%{gopath}/src/%{goipath}/tools/v3
echo  "%{gopath}/src/%{goipath}/api/v3" >> golang-etcd-devel.file-list
echo  "%{gopath}/src/%{goipath}/client/pkg/v3" >> golang-etcd-devel.file-list
echo  "%{gopath}/src/%{goipath}/etcdctl/v3" >> golang-etcd-devel.file-list
echo  "%{gopath}/src/%{goipath}/etcdutl/v3" >> golang-etcd-devel.file-list
echo  "%{gopath}/src/%{goipath}/pkg/v3" >> golang-etcd-devel.file-list
echo  "%{gopath}/src/%{goipath}/raft/v3" >> golang-etcd-devel.file-list
echo  "%{gopath}/src/%{goipath}/server/v3" >> golang-etcd-devel.file-list
echo  "%{gopath}/src/%{goipath}/tests/v3" >> golang-etcd-devel.file-list
echo  "%{gopath}/src/%{goipath}/tools/v3" >> golang-etcd-devel.file-list

%if %{without bootstrap}
install -m 0755 -vd                     %{buildroot}%{_bindir}
install -m 0755 -vp %{gobuilddir}/bin/* %{buildroot}%{_bindir}/

install -Dpm 0644 %{SOURCE1} %{buildroot}%{_unitdir}/%{name}.service
install -dm 0755 %{buildroot}%{_sysconfdir}/%{name}
install -pm 644 -t %{buildroot}%{_sysconfdir}/%{name} %{SOURCE2}

# And create /var/lib/etcd
install -dm 0755 %{buildroot}%{_sharedstatedir}/%{name}
%endif

%if %{without bootstrap}
%if %{with check}
%check
%gocheck -d client/v2 \
         -d client/v3 \
         -d raft \
         -d server/auth \
         -d server/wal/walpb \
         -d tests/e2ev \
         -d tests/integration \
         -d tests/e2e \
         -d tests/integration/client \
         -t tests/integration/clientv3 \
         -d server/etcdserver/api/membership \
         -d server/mvcc/backend
%endif
%endif

%if %{without bootstrap}
%pre
getent group %{name} >/dev/null || groupadd -r %{name}
getent passwd %{name} >/dev/null || useradd -r -g %{name} -d %{_sharedstatedir}/%{name} \
    -s /sbin/nologin -c "etcd user" %{name}

%post
%systemd_post %{name}.service

%preun
%systemd_preun %{name}.service

%postun
%systemd_postun %{name}.service

%files
%license LICENSE
%doc CONTRIBUTING.md README.md
%doc Documentation README-*.md READMEv2-etcdctl.md
%{_bindir}/*
%config(noreplace) %{_sysconfdir}/%{name}
%dir %attr(-,%{name},%{name}) %{_sharedstatedir}/%{name}
%{_unitdir}/%{name}.service
%endif

%gopkgfiles

%changelog
%autochangelog