mirror of
https://github.com/skoelle/kctl-tui.git
synced 2026-09-17 20:10:24 +00:00
Add CI workflow, install.sh, and example config
This commit is contained in:
@@ -0,0 +1,85 @@
|
|||||||
|
name: Build and Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "main" ]
|
||||||
|
tags: [ "v*" ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ "main" ]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
name: Test
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: "1.22"
|
||||||
|
|
||||||
|
- name: Download dependencies
|
||||||
|
run: go mod download
|
||||||
|
|
||||||
|
- name: Vet
|
||||||
|
run: go vet ./...
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: go test ./... -v -cover
|
||||||
|
|
||||||
|
build:
|
||||||
|
name: Build binaries
|
||||||
|
needs: test
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
goos: [linux, windows, darwin]
|
||||||
|
goarch: [amd64, arm64]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: "1.22"
|
||||||
|
|
||||||
|
- name: Download dependencies
|
||||||
|
run: go mod download
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
GOOS: ${{ matrix.goos }}
|
||||||
|
GOARCH: ${{ matrix.goarch }}
|
||||||
|
CGO_ENABLED: 0
|
||||||
|
run: |
|
||||||
|
mkdir -p dist
|
||||||
|
ext=""
|
||||||
|
if [ "${{ matrix.goos }}" = "windows" ]; then ext=".exe"; fi
|
||||||
|
out="dist/kctl-tui-${{ matrix.goos }}-${{ matrix.goarch }}${ext}"
|
||||||
|
go build -o "$out" -ldflags "-s -w" ./cmd/kctl-tui
|
||||||
|
echo "Built $out"
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: kctl-tui-${{ matrix.goos }}-${{ matrix.goarch }}
|
||||||
|
path: dist/*
|
||||||
|
|
||||||
|
release:
|
||||||
|
name: Attach binaries to GitHub Release
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
|
needs: build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
path: dist
|
||||||
|
merge-multiple: true
|
||||||
|
|
||||||
|
- name: Create release and upload binaries
|
||||||
|
uses: softprops/action-gh-release@v2
|
||||||
|
with:
|
||||||
|
files: dist/*
|
||||||
|
generate_release_notes: true
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# Example configuration for kctl-tui.
|
||||||
|
# Copy this file to ~/.kctl-tui/config.yaml and adjust the values to your
|
||||||
|
# own cluster setup. Do NOT commit your real config.yaml with company- or
|
||||||
|
# project-specific context/namespace/label names to a public repository.
|
||||||
|
|
||||||
|
# Groups of kubectl contexts that belong together (e.g. the same
|
||||||
|
# environment pair, such as staging/production of the same cluster).
|
||||||
|
# Pressing TAB in the control pane cycles through the contexts listed here
|
||||||
|
# while keeping the current namespace.
|
||||||
|
context_pairs:
|
||||||
|
- name: "example-environment-pair"
|
||||||
|
contexts:
|
||||||
|
- "example-context-a"
|
||||||
|
- "example-context-b"
|
||||||
|
|
||||||
|
# The namespace label key used to group namespaces by team/ownership in the
|
||||||
|
# team-selection screen. Adjust this to whatever label your organization
|
||||||
|
# actually uses (can contain a domain prefix, e.g. "example.org/team").
|
||||||
|
team_label_key: "example.org/team"
|
||||||
+64
@@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Install script for kctl-tui.
|
||||||
|
# Downloads the latest GitHub release binary matching the current OS/arch
|
||||||
|
# and installs it to /usr/local/bin (or $INSTALL_DIR if set).
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# curl -fsSL https://raw.githubusercontent.com/skoelle/kctl-tui/main/install.sh | bash
|
||||||
|
#
|
||||||
|
# Requires: curl, a supported OS (linux, darwin).
|
||||||
|
# Native Windows is not supported by this script; use WSL, or download the
|
||||||
|
# .exe asset manually from the Releases page.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REPO="skoelle/kctl-tui"
|
||||||
|
INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}"
|
||||||
|
BIN_NAME="kctl-tui"
|
||||||
|
|
||||||
|
os="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
||||||
|
arch="$(uname -m)"
|
||||||
|
|
||||||
|
case "$arch" in
|
||||||
|
x86_64|amd64) arch="amd64" ;;
|
||||||
|
arm64|aarch64) arch="arm64" ;;
|
||||||
|
*)
|
||||||
|
echo "Unsupported architecture: $arch" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$os" in
|
||||||
|
linux|darwin) ;;
|
||||||
|
*)
|
||||||
|
echo "Unsupported OS: $os. On Windows, use WSL or download the .exe from the Releases page." >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "Detecting latest release for $REPO ..."
|
||||||
|
latest_tag="$(curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" | grep -m1 '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')"
|
||||||
|
|
||||||
|
if [ -z "$latest_tag" ]; then
|
||||||
|
echo "Could not determine latest release tag. Is there at least one published release?" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
asset="kctl-tui-${os}-${arch}"
|
||||||
|
url="https://github.com/${REPO}/releases/download/${latest_tag}/${asset}"
|
||||||
|
|
||||||
|
echo "Downloading ${asset} (${latest_tag}) ..."
|
||||||
|
tmp_file="$(mktemp)"
|
||||||
|
curl -fsSL "$url" -o "$tmp_file"
|
||||||
|
chmod +x "$tmp_file"
|
||||||
|
|
||||||
|
if [ -w "$INSTALL_DIR" ]; then
|
||||||
|
mv "$tmp_file" "${INSTALL_DIR}/${BIN_NAME}"
|
||||||
|
else
|
||||||
|
echo "Elevated permissions required to write to ${INSTALL_DIR}"
|
||||||
|
sudo mv "$tmp_file" "${INSTALL_DIR}/${BIN_NAME}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Installed ${BIN_NAME} to ${INSTALL_DIR}/${BIN_NAME}"
|
||||||
|
"${INSTALL_DIR}/${BIN_NAME}" --help >/dev/null 2>&1 || true
|
||||||
|
echo "Done. Run '${BIN_NAME}' to get started."
|
||||||
Reference in New Issue
Block a user