File kluctl.spec of Package kluctl
#
# spec file for package kluctl
#
# Copyright (c) 2025 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
Name: kluctl
Version: 2.27.0
Release: 0
Summary: CLI to put together large Kubernetes deployments
License: Apache-2.0
URL: https://github.com/kluctl/kluctl
Source: %{name}-%{version}.tar.gz
Source1: vendor.tar.gz
BuildRequires: bash-completion
BuildRequires: fish
BuildRequires: golang(API) >= 1.24
BuildRequires: zsh
%description
Kluctl is the missing glue that puts together your (and any third-party)
deployments into one large declarative Kubernetes deployment, while making it
fully manageable (deploy, diff, prune, delete, ...) via one unified command
line interface.
Kluctl tries to be as flexible as possible, while remaining as simple as
possible. It reuses established tools (e.g. Kustomize and Helm), making it
possible to re-use a large set of available third-party deployments.
Kluctl is centered around "targets", which can be a cluster or a specific
environment (e.g. test, dev, prod, ...) on one or multiple clusters. Targets
can be deployed, diffed, pruned, deleted, and so on. The idea is to have the
same set of operations for every target, no matter how simple or complex the
deployment and/or target is.
Kluctl does not strictly depend on a controller and allows to use the same
deployment wherever you want, as long as access to the kluctl project and
clusters is available. This means, that you can use it from your local machine,
from your CI/CD pipelines or any automation platform/system that allows to call
custom tools.
%package -n %{name}-bash-completion
Summary: Bash Completion for %{name}
Group: System/Shells
Requires: %{name} = %{version}
Requires: bash-completion
Supplements: (%{name} and bash-completion)
BuildArch: noarch
%description -n %{name}-bash-completion
Bash command line completion support for %{name}.
%package -n %{name}-fish-completion
Summary: Fish Completion for %{name}
Group: System/Shells
Requires: %{name} = %{version}
Requires: fish
Supplements: (%{name} and fish)
BuildArch: noarch
%description -n %{name}-fish-completion
Fish command line completion support for %{name}.
%package -n %{name}-zsh-completion
Summary: Zsh Completion for %{name}
Group: System/Shells
Requires: %{name} = %{version}
Requires: zsh
Supplements: (%{name} and zsh)
BuildArch: noarch
%description -n %{name}-zsh-completion
zsh command line completion support for %{name}.
%prep
%autosetup -p 1 -a 1
%build
COMMIT_HASH="$(sed -n 's/commit: \(.*\)/\1/p' %_sourcedir/%{name}.obsinfo)"
DATE_FMT="+%%Y-%%m-%%dT%%H:%%M:%%SZ"
BUILD_DATE=$(date -u -d "@${SOURCE_DATE_EPOCH}" "${DATE_FMT}" 2>/dev/null || date -u -r "${SOURCE_DATE_EPOCH}" "${DATE_FMT}" 2>/dev/null || date -u "${DATE_FMT}")
%ifarch %{ix86} s390 s390x armv7l armv7hl armv7l:armv6l:armv5tel riscv64
export CGO_ENABLED=1
%else
export CGO_ENABLED=0
%endif
go build \
-mod=vendor \
-buildmode=pie \
-ldflags=" \
-X main.version=%{version} \
-X main.commit=${COMMIT_HASH} \
-X main.date=$BUILD_DATE" \
-o bin/%{name} ./cmd/main.go
%install
# Install the binary.
install -D -m 0755 bin/%{name} %{buildroot}/%{_bindir}/%{name}
# create the bash completion file
mkdir -p %{buildroot}%{_datarootdir}/bash-completion/completions/
%{buildroot}/%{_bindir}/%{name} completion bash > %{buildroot}%{_datarootdir}/bash-completion/completions/%{name}
# create the fish completion file
mkdir -p %{buildroot}%{_datarootdir}/fish/vendor_completions.d/
%{buildroot}/%{_bindir}/%{name} completion fish > %{buildroot}%{_datarootdir}/fish/vendor_completions.d/%{name}.fish
# create the zsh completion file
mkdir -p %{buildroot}%{_datarootdir}/zsh/site-functions/
%{buildroot}/%{_bindir}/%{name} completion zsh > %{buildroot}%{_datarootdir}/zsh/site-functions/_%{name}
%check
bin/%{name} version
bin/%{name} version | grep %{version}
%files
%doc README.md
%license LICENSE
%{_bindir}/%{name}
%files -n %{name}-bash-completion
%{_datarootdir}/bash-completion/completions/%{name}
%files -n %{name}-fish-completion
%{_datarootdir}/fish/vendor_completions.d/%{name}.fish
%files -n %{name}-zsh-completion
%{_datarootdir}/zsh/site-functions/_%{name}
%changelog