Skip to content

sighupio/furyctl

Repository files navigation

furyctl logo

The Swiss Army Knife
for the SIGHUP Distribution

Build Status Release Slack License Go Report Card

What is furyctl?

furyctl is the command line companion for the SIGHUP Distribution (SD) to manage the full lifecycle of your SD Kubernetes clusters.

Tip

Learn more about the SIGHUP Distribution in the documentation site.

Note

Starting from v0.25.0, the next generation of furyctl has been officially released. Previous versions, furyctl <= 0.11, are considered legacy and will only receive bug fixes. It will be maintained under the v0.11 branch.

If you're looking for the old documentation for furyctl legacy, you can find it here.

Available providers

  • EKSCluster: Provides comprehensive lifecycle management for a SIGHUP Distribution Kubernetes cluster based on EKS from AWS. It handles the installation of the VPC, VPN, EKS using the installers, and deploys the Distribution onto the EKS cluster.
  • KFDDistribution: Dedicated provider for the distribution, which installs the SIGHUP Distribution (modules only) on an existing Kubernetes cluster.
  • OnPremises: Provider to manage the full lifecycle of a SIGHUP Distribution cluster on Virtual Machines.

Support & Compatibility 🪢

Check the compatibility matrix for information about furyctl and SD versions compatibility.

Installation

Installing from binaries

You can find furyctl binaries on the Releases page.

To download the latest release, run:

curl -L "https://github.com/sighupio/furyctl/releases/latest/download/furyctl-$(uname -s)-amd64.tar.gz" -o /tmp/furyctl.tar.gz && tar xfz /tmp/furyctl.tar.gz -C /tmp
chmod +x /tmp/furyctl
sudo mv /tmp/furyctl /usr/local/bin/furyctl

Alternatively, you can install furyctl using mise or the asdf plugin.

Installing with mise

mise use furyctl@0.32.0

Check that everything is working correctly with furyctl version:

$ furyctl version
...
goVersion: go1.23
osArch: amd64
version: 0.32.0

Installing with asdf

Add furyctl asdf plugin:

asdf plugin add furyctl

Check that everything is working correctly with furyctl version:

$ furyctl version
...
goVersion: go1.23
osArch: amd64
version: 0.32.0

Installing from source

Prerequisites:

  • make >= 4.1
  • go >= 1.23
  • goreleaser >= 2.3

You can install goreleaser with the following command once you have Go in your system:

go install github.com/goreleaser/goreleaser/v2@v2.3.2

Once you've ensured the above dependencies are installed, you can proceed with the installation.

  1. Clone the repository:

    git clone git@github.com:sighupio/furyctl.git
    # cd into the cloned repository
    cd furyctl
  2. Build the binaries by running the following command:

    go build .
  3. You will find the binaries for your current architecture inside the current folder:

    $ ls furyctl
    furyctl
  4. Check that the binary is working as expected:

    $ ./furyctl version
    buildTime: 2024-10-08T07:46:28Z
    gitCommit: 217cdcc8bf075fccfdb11c41ccc6bb317ec704bc
    goVersion: go1.23.2
    osArch: arm64
    version: 0.30.1
  5. (optional) move the binary to your bin folder, in macOS:

    sudo mv ./furyctl /usr/local/bin/furyctl

Usage

For basic and advanced usage instructions, please refer to furyctl's official documentation and the SIGHUP Distribution getting started guides.

Test classes

There are four kinds of tests: unit, integration, e2e, and expensive.

Each of them covers specific use cases depending on the speed, cost, and dependencies at play in a given scenario. Anything that uses i/o should be marked as integration, with the only expectation of local files and folders: any test that uses the local filesystem and nothing more can be marked as 'unit'. This is made for convenience and it's open to change in the future should we decide to refactor the code to better isolate that kind of i/o from the logic of the tool.

That said, here's a little summary of the used tags:

  • unit: tests that exercise a single component or function in isolation. Tests using local files and dirs are permitted here.
  • integration: tests that require external services, such as github. Test using only local files and dirs should not be marked as integration.
  • e2e: tests that exercise furyctl binary, invoking it as a cli tool and checking its output
  • expensive: e2e tests that incur in some monetary cost, like running an EKS instance on AWS

Reporting Issues

In case you experience any problems with furyctl, please open a new issue on GitHub.

License

This software is open-source and it's released under the following LICENSE.