Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 6 additions & 21 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,37 +19,22 @@ on:
- 'v*.*.*'
jobs:
goreleaser:
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
- run: git fetch --tags
- name: Setup Go
uses: actions/setup-go@v2
with:
go-version: '1.20'
- name: Install Snapcraft
uses: samuelmeuli/action-snapcraft@v1
- name: Setup Snapcraft
run: |
# https://github.com/goreleaser/goreleaser/issues/1715
mkdir -p $HOME/.cache/snapcraft/download
mkdir -p $HOME/.cache/snapcraft/stage-packages
go-version: '1.22'
- name: GoReleaser
uses: goreleaser/goreleaser-action@v2
with:
version: latest
args: release --rm-dist
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Update new version for plugin 'ctx' in krew-index
uses: rajatjindal/[email protected]
with:
krew_template_file: .krew/ctx.yaml
- name: Update new version for plugin 'ns' in krew-index
uses: rajatjindal/[email protected]
with:
krew_template_file: .krew/ns.yaml
- name: Publish Snaps to the Snap Store (stable channel)
run: for snap in $(ls dist/*.snap); do snapcraft upload --release=stable $snap; done
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_TOKEN }}

33 changes: 14 additions & 19 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json

# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
Expand All @@ -14,6 +16,8 @@

# This is an example goreleaser.yaml file with some sane defaults.
# Make sure to check the documentation at http://goreleaser.com

version: 2
before:
hooks:
- go mod download
Expand Down Expand Up @@ -70,7 +74,11 @@ archives:
format_overrides:
- goos: windows
format: zip
files: ["LICENSE"]
files:
- "LICENSE"
- "completion/plugins/kubectl_complete-ctx"
- src: "kubectx"
dst: "kubectx.sh"
- id: kubens-archive
name_template: |-
kubens_{{ .Tag }}_{{ .Os }}_
Expand All @@ -90,28 +98,15 @@ archives:
format_overrides:
- goos: windows
format: zip
files: ["LICENSE"]
files:
- "LICENSE"
- "completion/plugins/kubectl_complete-ns"
- src: "kubens"
dst: "kubens.sh"
checksum:
name_template: "checksums.txt"
algorithm: sha256
release:
extra_files:
- glob: ./kubens
- glob: ./kubectx
snapcrafts:
- id: kubectx
name: kubectx
summary: 'kubectx + kubens: Power tools for kubectl'
description: |
kubectx is a tool to switch between contexts (clusters) on kubectl faster.
kubens is a tool to switch between Kubernetes namespaces (and configure them for kubectl) easily.
grade: stable
confinement: classic
base: core20
apps:
kubectx:
command: kubectx
completer: completion/kubectx.bash
kubens:
command: kubens
completer: completion/kubens.bash
10 changes: 6 additions & 4 deletions cmd/kubectx/current.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,10 @@
package main

import (
"errors"
"fmt"
"io"

"github.com/pkg/errors"

"github.com/ahmetb/kubectx/internal/kubeconfig"
)

Expand All @@ -30,13 +29,16 @@ func (_op CurrentOp) Run(stdout, _ io.Writer) error {
kc := new(kubeconfig.Kubeconfig).WithLoader(kubeconfig.DefaultLoader)
defer kc.Close()
if err := kc.Parse(); err != nil {
return errors.Wrap(err, "kubeconfig error")
return fmt.Errorf("kubeconfig error, %w", err)
}

v := kc.GetCurrentContext()
if v == "" {
return errors.New("current-context is not set")
}
_, err := fmt.Fprintln(stdout, v)
return errors.Wrap(err, "write error")
if err != nil {
return fmt.Errorf("write error, %w", err)
}
return nil
}
12 changes: 6 additions & 6 deletions cmd/kubectx/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
package main

import (
"errors"
"fmt"
"io"

"github.com/pkg/errors"

"github.com/ahmetb/kubectx/internal/kubeconfig"
"github.com/ahmetb/kubectx/internal/printer"
)
Expand All @@ -34,7 +34,7 @@ func (op DeleteOp) Run(_, stderr io.Writer) error {
// TODO inefficiency here. we open/write/close the same file many times.
deletedName, wasActiveContext, err := deleteContext(ctx)
if err != nil {
return errors.Wrapf(err, "error deleting context \"%s\"", deletedName)
return fmt.Errorf("error deleting context \"%s\", %w", deletedName, err)
}
if wasActiveContext {
printer.Warning(stderr, "You deleted the current context. Use \"%s\" to select a new context.",
Expand All @@ -52,7 +52,7 @@ func deleteContext(name string) (deleteName string, wasActiveContext bool, err e
kc := new(kubeconfig.Kubeconfig).WithLoader(kubeconfig.DefaultLoader)
defer kc.Close()
if err := kc.Parse(); err != nil {
return deleteName, false, errors.Wrap(err, "kubeconfig error")
return deleteName, false, fmt.Errorf("kubeconfig error, %w", err)
}

cur := kc.GetCurrentContext()
Expand All @@ -70,7 +70,7 @@ func deleteContext(name string) (deleteName string, wasActiveContext bool, err e
}

if err := kc.DeleteContextEntry(name); err != nil {
return name, false, errors.Wrap(err, "failed to modify yaml doc")
return name, false, fmt.Errorf("failed to modify yaml doc, %w", err)
}
return name, wasActiveContext, errors.Wrap(kc.Save(), "failed to save modified kubeconfig file")
return name, wasActiveContext, fmt.Errorf("failed to save modified kubeconfig file, %w", kc.Save())
}
11 changes: 5 additions & 6 deletions cmd/kubectx/fzf.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,13 @@ package main

import (
"bytes"
"errors"
"fmt"
"io"
"os"
"os/exec"
"strings"

"github.com/pkg/errors"

"github.com/ahmetb/kubectx/internal/cmdutil"
"github.com/ahmetb/kubectx/internal/env"
"github.com/ahmetb/kubectx/internal/kubeconfig"
Expand All @@ -46,7 +45,7 @@ func (op InteractiveSwitchOp) Run(_, stderr io.Writer) error {
printer.Warning(stderr, "kubeconfig file not found")
return nil
}
return errors.Wrap(err, "kubeconfig error")
return fmt.Errorf("kubeconfig error, %w", err)
}
kc.Close()

Expand All @@ -70,7 +69,7 @@ func (op InteractiveSwitchOp) Run(_, stderr io.Writer) error {
}
name, err := switchContext(choice)
if err != nil {
return errors.Wrap(err, "failed to switch context")
return fmt.Errorf("failed to switch context, %w", err)
}
printer.Success(stderr, "Switched to context \"%s\".", printer.SuccessColor.Sprint(name))
return nil
Expand All @@ -84,7 +83,7 @@ func (op InteractiveDeleteOp) Run(_, stderr io.Writer) error {
printer.Warning(stderr, "kubeconfig file not found")
return nil
}
return errors.Wrap(err, "kubeconfig error")
return fmt.Errorf("kubeconfig error, %w", err)
}
kc.Close()

Expand Down Expand Up @@ -114,7 +113,7 @@ func (op InteractiveDeleteOp) Run(_, stderr io.Writer) error {

name, wasActiveContext, err := deleteContext(choice)
if err != nil {
return errors.Wrap(err, "failed to delete context")
return fmt.Errorf("failed to delete context, %w", err)
}

if wasActiveContext {
Expand Down
7 changes: 4 additions & 3 deletions cmd/kubectx/help.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ import (
"os"
"path/filepath"
"strings"

"github.com/pkg/errors"
)

// HelpOp describes printing help.
Expand Down Expand Up @@ -49,7 +47,10 @@ func printUsage(out io.Writer) error {
help = strings.ReplaceAll(help, "%SPAC%", strings.Repeat(" ", len(selfName())))

_, err := fmt.Fprintf(out, "%s\n", help)
return errors.Wrap(err, "write error")
if err != nil {
return fmt.Errorf("write error, %w", err)
}
return nil
}

// selfName guesses how the user invoked the program.
Expand Down
3 changes: 1 addition & 2 deletions cmd/kubectx/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import (
"io"

"facette.io/natsort"
"github.com/pkg/errors"

"github.com/ahmetb/kubectx/internal/cmdutil"
"github.com/ahmetb/kubectx/internal/kubeconfig"
Expand All @@ -37,7 +36,7 @@ func (_ ListOp) Run(stdout, stderr io.Writer) error {
printer.Warning(stderr, "kubeconfig file not found")
return nil
}
return errors.Wrap(err, "kubeconfig error")
return fmt.Errorf("kubeconfig error, %w", err)
}

ctxs := kc.ContextNames()
Expand Down
15 changes: 7 additions & 8 deletions cmd/kubectx/rename.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,10 @@
package main

import (
"fmt"
"io"
"strings"

"github.com/pkg/errors"

"github.com/ahmetb/kubectx/internal/kubeconfig"
"github.com/ahmetb/kubectx/internal/printer"
)
Expand Down Expand Up @@ -51,7 +50,7 @@ func (op RenameOp) Run(_, stderr io.Writer) error {
kc := new(kubeconfig.Kubeconfig).WithLoader(kubeconfig.DefaultLoader)
defer kc.Close()
if err := kc.Parse(); err != nil {
return errors.Wrap(err, "kubeconfig error")
return fmt.Errorf("kubeconfig error, %w", err)
}

cur := kc.GetCurrentContext()
Expand All @@ -60,26 +59,26 @@ func (op RenameOp) Run(_, stderr io.Writer) error {
}

if !kc.ContextExists(op.Old) {
return errors.Errorf("context \"%s\" not found, can't rename it", op.Old)
return fmt.Errorf("context \"%s\" not found, can't rename it", op.Old)
}

if kc.ContextExists(op.New) {
printer.Warning(stderr, "context \"%s\" exists, overwriting it.", op.New)
if err := kc.DeleteContextEntry(op.New); err != nil {
return errors.Wrap(err, "failed to delete new context to overwrite it")
return fmt.Errorf("failed to delete new context to overwrite it, %w", err)
}
}

if err := kc.ModifyContextName(op.Old, op.New); err != nil {
return errors.Wrap(err, "failed to change context name")
return fmt.Errorf("failed to change context name, %w", err)
}
if op.Old == cur {
if err := kc.ModifyCurrentContext(op.New); err != nil {
return errors.Wrap(err, "failed to set current-context to new name")
return fmt.Errorf("failed to set current-context to new name, %w", err)
}
}
if err := kc.Save(); err != nil {
return errors.Wrap(err, "failed to save modified kubeconfig")
return fmt.Errorf("failed to save modified kubeconfig, %w", err)
}
printer.Success(stderr, "Context %s renamed to %s.",
printer.SuccessColor.Sprint(op.Old),
Expand Down
6 changes: 3 additions & 3 deletions cmd/kubectx/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@
package main

import (
"errors"
"fmt"
"io/ioutil"
"os"
"path/filepath"

"github.com/pkg/errors"

"github.com/ahmetb/kubectx/internal/cmdutil"
)

Expand All @@ -47,7 +47,7 @@ func readLastContext(path string) (string, error) {
func writeLastContext(path, value string) error {
dir := filepath.Dir(path)
if err := os.MkdirAll(dir, 0755); err != nil {
return errors.Wrap(err, "failed to create parent directories")
return fmt.Errorf("failed to create parent directories, %w", err)
}
return ioutil.WriteFile(path, []byte(value), 0644)
}
Loading