Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
d399a95
feat(storage/import): add support for additional content types and --…
mgajda Dec 15, 2025
5d1ca3b
refactor(storage/import): extract content type mapping to package level
mgajda Dec 15, 2025
22fcf20
feat(server): add firewall rule enable/disable commands
mgajda Dec 13, 2025
81edf8d
feat(server): add flexible filtering to firewall rule enable/disable …
mgajda Dec 13, 2025
8007734
test(firewall): add test for skip-confirmation=0 behavior
mgajda Dec 13, 2025
23d59dc
docs(firewall): clarify skip-confirmation flag behavior
mgajda Dec 13, 2025
54ae07f
refactor(firewall): extract shared code from enable/disable commands
mgajda Dec 13, 2025
baf32d9
feat: Add shell completion for firewall rule flags
mgajda Dec 13, 2025
fba6f07
refactor(firewall): improve port completion list
mgajda Dec 13, 2025
091f994
refactor: reimplement firewall rule enable/disable to move rules rela…
mgajda Dec 31, 2025
f2580d6
chore(deps): bump golangci/golangci-lint-action from 9.1.0 to 9.2.0 (…
dependabot[bot] Dec 20, 2025
c6516b2
chore(deps): bump github.com/spf13/cobra from 1.10.1 to 1.10.2 (#612)
dependabot[bot] Dec 20, 2025
5d00f8c
chore(deps): switch from gopkg.in/yaml.v3 to go.yaml.in/yaml/v3 (#611)
scop Dec 20, 2025
507ab2f
chore(deps): bump github.com/jedib0t/go-pretty/v6 from 6.7.5 to 6.7.7…
dependabot[bot] Dec 20, 2025
44bb5d7
chore(deps): bump k8s.io/api from 0.34.2 to 0.34.3 (#623)
dependabot[bot] Dec 20, 2025
869348c
chore(deps): bump anchore/sbom-action from 0.20.9 to 0.20.11 (#624)
dependabot[bot] Dec 20, 2025
e2341fc
chore(deps): bump actions/upload-artifact from 5.0.0 to 6.0.0 (#636)
dependabot[bot] Dec 20, 2025
26ec7f3
chore(deps): bump alpine from 3.22.2 to 3.23.2 (#641)
dependabot[bot] Dec 20, 2025
bf805e9
chore(deps): bump github/codeql-action from 4.31.8 to 4.31.9 (#638)
dependabot[bot] Dec 20, 2025
bba229d
chore(deps): bump github.com/UpCloudLtd/upcloud-go-api/v8 from 8.31.1…
dependabot[bot] Dec 20, 2025
43d8e36
chore(deps): bump JamesIves/github-pages-deploy-action from 4.7.4 to …
dependabot[bot] Dec 20, 2025
edaa44f
chore(deps): bump k8s.io/kubectl from 0.34.2 to 0.34.3 (#619)
dependabot[bot] Dec 20, 2025
6e548db
chore(deps): bump helm.sh/helm/v3 from 3.19.2 to 3.19.4 (#635)
dependabot[bot] Dec 20, 2025
39defe7
chore: address golangci 2.7.0 and modernize findings (#614)
scop Dec 20, 2025
c879830
docs: add UPCLOUD_TOKEN mentions to credential documentation (#627)
mgajda Dec 23, 2025
287d418
chore(deps): bump anchore/sbom-action from 0.20.11 to 0.21.0 (#649)
dependabot[bot] Dec 29, 2025
a8478c6
feat(account): add new command to get billing summary (#606)
MarinX Dec 30, 2025
9c2e58e
feat(database): improve valkey support, remove redis support (#651)
sharanrajt Dec 31, 2025
80175e7
chore: prepare release v3.27.0 (#644)
villevsv-upcloud Dec 31, 2025
23bd4b4
chore(deps): bump github.com/UpCloudLtd/progress from 1.0.3 to 1.1.0 …
dependabot[bot] Dec 31, 2025
f986e5d
chore(deps): bump actions/attest-build-provenance from 3.0.0 to 3.1.0…
dependabot[bot] Dec 31, 2025
22896ba
chore(deps): bump github.com/jedib0t/go-pretty/v6 from 6.7.7 to 6.7.8…
dependabot[bot] Dec 31, 2025
e2ee8ff
fix: resolve compilation errors in firewall commands
mgajda Jan 3, 2026
36408f3
test(firewall): update tests to match new API implementation
mgajda Jan 3, 2026
4549fc7
fix: sync temp files in config tests before reading
mgajda Jan 5, 2026
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
4 changes: 2 additions & 2 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ jobs:
with:
go-version-file: go.mod
if: matrix.language == 'go'
- uses: github/codeql-action/init@1b168cd39490f61582a9beae412bb7057a6b2c4e # v4.31.8
- uses: github/codeql-action/init@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.language == 'go' && 'manual' || 'none' }}
- run: make build install-docs-tools md-docs
if: matrix.language == 'go'
- uses: github/codeql-action/analyze@1b168cd39490f61582a9beae412bb7057a6b2c4e # v4.31.8
- uses: github/codeql-action/analyze@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
with:
category: /language:${{ matrix.language }}
4 changes: 2 additions & 2 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ jobs:
- name: Generate documentation
run: make docs
- name: Store generated MkDocs site
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: mkdocs-site
path: site
retention-days: 7
- name: Deploy to pages
if: ${{ github.ref_name == 'main' || github.event_name == 'release'}}
uses: JamesIves/github-pages-deploy-action@4a3abc783e1a24aeb44c16e869ad83caf6b4cc23 # 4.7.4
uses: JamesIves/github-pages-deploy-action@9d877eea73427180ae43cf98e8914934fe157a1a # 4.7.6
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH: gh-pages
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ jobs:
with:
go-version-file: 'go.mod'
- name: Run golangci-lint-action
uses: golangci/golangci-lint-action@e7fa5ac41e1cf5b7d48e45e42232ce7ada589601 # v9.1.0
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0
with:
args: --timeout=2m
4 changes: 2 additions & 2 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
id: release_notes
run: make release-notes > .release_notes
- name: Set up Syft
uses: anchore/sbom-action/download-syft@8e94d75ddd33f69f691467e42275782e4bfefe84 # v0.20.9
uses: anchore/sbom-action/download-syft@a930d0ac434e3182448fe678398ba5713717112a # v0.21.0
- name: Run goreleaser-action
uses: goreleaser/goreleaser-action@e435ccd777264be153ace6237001ef4d979d3a7a # v6.4.0
with:
Expand All @@ -58,7 +58,7 @@ jobs:
- name: Clear Docker login session
run: rm -f ${HOME}/.docker/config.json
- name: Generate artifact attestations
uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0
uses: actions/attest-build-provenance@00014ed6ed5efc5b1ab7f7f34a39eb55d41aa4f8 # v3.1.0
with:
subject-checksums: dist/checksums.txt
- name: Generate AUR PKGBUILD
Expand Down
1 change: 1 addition & 0 deletions .golangci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ linters:
- ineffassign
- makezero
- misspell
- modernize
- nakedret
- nilnil
- nolintlint
Expand Down
11 changes: 10 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [3.27.0] - 2025-12-31

### Added

- In `kubernetes create`, allow waiting for cluster and its node-groups to reach running state with `--wait=all` flag. When using `--wait` or `--wait=cluster`, the command will wait only for the cluster to reach running state.
- Add `account billing` command for listing billing details.
- Add support for Valkey to `database show` and `database session list` commands.

### Removed

- Removed support for deprecated Redis service. This is treated as non-breaking change as all users have been migrated to Valkey.

## [3.26.0] - 2025-11-26

Expand Down Expand Up @@ -652,7 +660,8 @@ Initial public beta release :tada:
### Added
- Current feature set added! First internal release

[Unreleased]: https://github.com/UpCloudLtd/upcloud-cli/compare/v3.26.0...HEAD
[Unreleased]: https://github.com/UpCloudLtd/upcloud-cli/compare/v3.27.0...HEAD
[3.27.0]: https://github.com/UpCloudLtd/upcloud-cli/compare/v3.26.0...v3.27.0
[3.26.0]: https://github.com/UpCloudLtd/upcloud-cli/compare/v3.25.0...v3.26.0
[3.25.0]: https://github.com/UpCloudLtd/upcloud-cli/compare/v3.24.1...v3.25.0
[3.24.1]: https://github.com/UpCloudLtd/upcloud-cli/compare/v3.24.0...v3.24.1
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.goreleaser
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM alpine:3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412
FROM alpine:3.23.2@sha256:865b95f46d98cf867a156fe4a135ad3fe50d2056aa3f25ed31662dff6da4eb62

RUN apk add --update --no-cache ca-certificates jq
COPY upctl /bin/upctl
Expand Down
10 changes: 6 additions & 4 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -223,14 +223,16 @@ On bash, the completions depend on `bash-completion` package. Install and config

To be able to manage your UpCloud resources, you need to configure credentials for `upctl` and enable API access for these credentials.

Define the credentials either by setting `UPCLOUD_USERNAME` and `UPCLOUD_PASSWORD` environmental variables or `UPCLOUD_TOKEN` environment variable,
or in the `upctl` config file (default `~/.config/upctl.yaml`, overridable with `--config /path/to/upctl.yaml`):
We recommend using API tokens for authentication. Configure credentials by using `upctl account login --with-token` command to save a token to system keyring, in the `upctl` config file (default `~/.config/upctl.yaml`, overridable with `--config /path/to/upctl.yaml`) or by setting the `UPCLOUD_TOKEN` environment variable. Alternatively, you can use `UPCLOUD_USERNAME` and `UPCLOUD_PASSWORD` environment variables:

```yaml
# recommended: use API token
token: "your-token"

# alternatively, use username and password
username: "your-username"
password: "your-password"
# alternatively, you can use token
token: "your-token"
```

API access can be configured in the UpCloud Hub on [Account page](https://hub.upcloud.com/account/overview) for the main-account and on the [Permissions tab](https://hub.upcloud.com/people/permissions) of the People page for sub-accounts. We recommend you to set up a sub-account specifically for the API usage with its own username and password, as it allows you to assign specific permissions for increased security.

Expand Down
50 changes: 25 additions & 25 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,31 @@ go 1.25.3

require (
dario.cat/mergo v1.0.2
github.com/UpCloudLtd/progress v1.0.3
github.com/UpCloudLtd/progress v1.1.0
github.com/UpCloudLtd/upcloud-go-api/credentials v0.1.1
github.com/UpCloudLtd/upcloud-go-api/v8 v8.31.1
github.com/UpCloudLtd/upcloud-go-api/v8 v8.33.0
github.com/adrg/xdg v0.5.3
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2
github.com/gemalto/flume v1.0.0
github.com/jedib0t/go-pretty/v6 v6.7.5
github.com/jedib0t/go-pretty/v6 v6.7.8
github.com/joho/godotenv v1.5.1
github.com/m7shapan/cidr v0.0.0-20200427124835-7eba0889a5d2
github.com/mattn/go-isatty v0.0.20
github.com/spf13/cobra v1.10.1
github.com/spf13/cobra v1.10.2
github.com/spf13/pflag v1.0.10
github.com/spf13/viper v1.21.0
github.com/stretchr/testify v1.11.1
github.com/zalando/go-keyring v0.2.6
go.yaml.in/yaml/v3 v3.0.4
golang.org/x/crypto v0.46.0
golang.org/x/sync v0.19.0
golang.org/x/term v0.38.0
gopkg.in/yaml.v3 v3.0.1
helm.sh/helm/v3 v3.19.2
k8s.io/api v0.34.2
k8s.io/apimachinery v0.34.2
k8s.io/client-go v0.34.2
helm.sh/helm/v3 v3.19.4
k8s.io/api v0.35.0
k8s.io/apimachinery v0.35.0
k8s.io/client-go v0.35.0
k8s.io/helm v2.17.0+incompatible
k8s.io/kubectl v0.34.2
k8s.io/kubectl v0.35.0
sigs.k8s.io/kustomize/api v0.21.0
sigs.k8s.io/kustomize/kyaml v0.21.0
)
Expand All @@ -51,7 +51,7 @@ require (
github.com/containerd/errdefs v0.3.0 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/containerd/platforms v0.2.1 // indirect
github.com/cyphar/filepath-securejoin v0.6.0 // indirect
github.com/cyphar/filepath-securejoin v0.6.1 // indirect
github.com/danieljoos/wincred v1.2.2 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
Expand All @@ -63,7 +63,7 @@ require (
github.com/ghodss/yaml v1.0.0 // indirect
github.com/go-errors/errors v1.4.2 // indirect
github.com/go-gorp/gorp/v3 v3.1.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/swag v0.23.0 // indirect
Expand Down Expand Up @@ -127,28 +127,28 @@ require (
github.com/xlab/treeprint v1.2.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
go.yaml.in/yaml/v2 v2.4.2 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
go.yaml.in/yaml/v2 v2.4.3 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/oauth2 v0.30.0 // indirect
golang.org/x/sys v0.39.0 // indirect
golang.org/x/text v0.32.0 // indirect
golang.org/x/time v0.12.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb // indirect
google.golang.org/grpc v1.72.1 // indirect
google.golang.org/protobuf v1.36.5 // indirect
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
google.golang.org/grpc v1.72.2 // indirect
google.golang.org/protobuf v1.36.8 // indirect
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
k8s.io/apiextensions-apiserver v0.34.0 // indirect
k8s.io/apiserver v0.34.0 // indirect
k8s.io/cli-runtime v0.34.2 // indirect
k8s.io/component-base v0.34.2 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apiextensions-apiserver v0.34.2 // indirect
k8s.io/apiserver v0.34.2 // indirect
k8s.io/cli-runtime v0.35.0 // indirect
k8s.io/component-base v0.35.0 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 // indirect
oras.land/oras-go/v2 v2.6.0 // indirect
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect
sigs.k8s.io/yaml v1.6.0 // indirect
Expand Down
Loading