# Generated by go2rpm
%bcond_without check

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

%gometa

# Remove in F33
%global godevelheader %{expand:
Obsoletes:      etcd-devel < 3.3.12-5
}

%global goaltipaths     github.com/coreos/etcd
%global man_version     3.4.7

%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/*

%define debug_package %{nil}

Name:           etcd
Release:        1%{?dist}
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
Source3:        man-%{man_version}.tar.gz
# sh genmanpages.sh path_to_built_source
Source10:       genmanpages.sh
# Not patches to apply here, but used on the source to generate man pages
# Source11:       0001-hack-etcdmain-to-generate-etcd.1.patch
# Source12:       0001-hack-to-generate-man-pages.patch
# Fix a test
Patch0:         0001-remove-unknown-field-Etcd.Debug.patch

BuildRequires:  compiler(go-compiler)
# 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/daemon)
# BuildRequires:  golang(github.com/coreos/go-systemd/journal)
# BuildRequires:  golang(github.com/coreos/pkg/capnslog)
# BuildRequires:  golang(github.com/creack/pty)
# BuildRequires:  golang(github.com/dgrijalva/jwt-go)
# BuildRequires:  golang(github.com/dustin/go-humanize)
# 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/proto)
# BuildRequires:  golang(github.com/google/btree)
# BuildRequires:  golang(github.com/google/uuid)
# BuildRequires:  golang(github.com/grpc-ecosystem/go-grpc-middleware)
# 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/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.uber.org/zap)
# BuildRequires:  golang(go.uber.org/zap/zapcore)
# BuildRequires:  golang(golang.org/x/crypto/bcrypt)
# BuildRequires:  golang(golang.org/x/net/context)
# BuildRequires:  golang(golang.org/x/net/http2)
# BuildRequires:  golang(golang.org/x/net/trace)
# BuildRequires:  golang(golang.org/x/time/rate)
# BuildRequires:  golang(google.golang.org/grpc)
# BuildRequires:  golang(google.golang.org/grpc/balancer)
# BuildRequires:  golang(google.golang.org/grpc/codes)
# BuildRequires:  golang(google.golang.org/grpc/connectivity)
# 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/naming)
# BuildRequires:  golang(google.golang.org/grpc/peer)
# BuildRequires:  golang(google.golang.org/grpc/resolver)
# BuildRequires:  golang(google.golang.org/grpc/resolver/dns)
# BuildRequires:  golang(google.golang.org/grpc/resolver/passthrough)
# BuildRequires:  golang(google.golang.org/grpc/status)
# BuildRequires:  golang(gopkg.in/cheggaaa/pb.v1)
# BuildRequires:  golang(gopkg.in/yaml.v2)
# BuildRequires:  golang(sigs.k8s.io/yaml)

BuildRequires:  python3-devel
# BuildRequires:  %%{py3_dist sphinx sphinx-rtd-theme}
%{?systemd_requires}
BuildRequires:  systemd
Requires(pre):  shadow-utils

%if %{with check}
# Tests
# BuildRequires:  golang(github.com/prometheus/client_model/go)
%endif

%description
%{common_description}

%gopkg

%prep
%setup -q -n man-%{man_version} -T -b 3
#%goprep
%forgesetup
%patch0 -p1
rm -rf cmd/vendor
rm -rf raft/rafttest
# For compatibility
cp -aR etcdserver/api/snap snap
cp -aR etcdserver/api/membership etcdserver/membership
cp -aR etcdserver/api/v2store store

for d in client clientv3 contrib etcdctl functional hack; do
mv $d/README.md README-$d.md
done
mv etcdctl/READMEv2.md READMEv2-etcdctl.md

mkdir -p man/man1
cp ../man-%{man_version}/*.1 man/man1/.

%build
GO111MODULE=on GOFLAGS=-mod=vendor go build -o %{gobuilddir}/bin/etcd %{goipath}
for cmd in etcdctl; do
  GO111MODULE=on GOFLAGS=-mod=vendor go build -o %{gobuilddir}/bin/$(basename $cmd) %{goipath}/$cmd
done

# make -C docs help
# make -C docs html

%install
#%gopkginstall
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}

# install manpages
install -d %{buildroot}%{_mandir}/man1
install -pm 644 man/man1/* %{buildroot}%{_mandir}/man1

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

#%if %{with check}
#%check
#%gocheck -d clientv3 \
#         -d e2e \
#         -d functional/rpcpb \
#         -d functional/tester \
#         -d tools/functional-tester/etcd-agent \
#         -d integration \
#         -d clientv3/integration \
#         -d clientv3/balancer \
#         -d clientv3/snapshot \
#         -d clientv3/ordering \
#         -d pkg/expect \
#         -d pkg/flags \
#         -d pkg/proxy \
#         -d pkg/tlsutil \
#         -d pkg/transport \
#         -t raft \
#         -t tests/e2e
#%endif

%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 NOTICE
%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
%{_mandir}/man1/*.1*

#%gopkgfiles

%changelog
* Thu Aug 13 2020 jiangxinyu <jiangxinyu@kylinos.cn> - 3.4.7-1
- Init etcd project
