File csctl.spec of Package csctl
#
# spec file for package csctl
#
# Copyright (c) 2025 SUSE LLC
#
# 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: csctl
Version: 0.0.5
Release: 0
Summary: CLI for the Cluster Stack Operator
License: Apache-2.0
URL: https://github.com/SovereignCloudStack/csctl
Source: %{name}-%{version}.tar.gz
Source1: vendor.tar.gz
BuildRequires: bash-completion
BuildRequires: fish
BuildRequires: go >= 1.21
BuildRequires: zsh
%description
The Cluster Stack Operator facilitates the usage of Cluster Stacks by
automating all steps that can be automated. It takes Cluster Stacks release
assets that consist mainly of two Helm charts, one to deploy in the management
cluster, the other one to deploy in the workload clusters, as well as
provider-specific node image (build) information.
Users can take existing releases of Cluster Stacks and the operator and will be
able to create clusters easily.
This project facilitates building node image artifacts and release assets that
can be used with the Cluster Stack Operator.
Features of csctl
1. Testing and quick iterations csctl is created with a single focus of
building Cluster Stacks and testing them with Cluster Stack Operator quickly.
This tool helps in doing quick iterations and facilitates testing Cluster
Stacks.
2. Versioning When configuring Cluster Stacks, it is necessary to put versions
in the configuration, e.g. to version a Helm chart or node images. This process
is facilitated by the csctl through its own templating and mechanism to
generate the right version, based on the content hash (for testing) or on a
previous version (stable or beta channel). Users only have to use the right
templating and the csctl will do all the versioning automatically.
3. Plugin mechanism for providers The plugin mechanism of csctl allows
providers to implement all provider-specific steps that are needed for this
provider. This can contain a fully automated building and uploading process for
node images, which can be referenced in the Cluster Stack (using the templating
logic for versioning).
4. Automated testing of Cluster Stacks The csctl enables automated testing of
Cluster Stacks if integrated in a CI process that first builds all necessary
files as well as node images (if needed) and then uses them to create a
workload cluster based on the Cluster Stack.
%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}
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}
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)"
go build \
-mod=vendor \
-buildmode=pie \
-ldflags=" \
-X github.com/SovereignCloudStack/csctl/pkg/cmd.Version=%{version} \
-X github.com/SovereignCloudStack/csctl/pkg/cmd.Commit=${COMMIT_HASH}" \
-o bin/%{name} 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}
%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