Skip to content

Commit ca98325

Browse files
committed
release: v1.4.0 — TLS hardening, supply-chain pin, CI gap closure
Addresses the remaining high/medium findings from the 2026-04-20 audit: - #4 insecure TLS warning + cacert path validation - #7 atomic token cache writes - #9 publish action pinned to immutable SHA - #13 CI gaps: Poetry cache, poetry build, gitleaks, pip-audit, deploy-docs gated on CI success
1 parent 941f718 commit ca98325

2 files changed

Lines changed: 35 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,40 @@ All notable changes to orca are documented here. The format follows
44
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project
55
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [1.4.0] — 2026-04-20
8+
9+
### Security
10+
11+
- **Visible warning when TLS verification is off.** Running with
12+
`insecure=true` now emits an explicit stderr warning on every
13+
invocation. Previously the flag was silent — the risk was invisible.
14+
- **Validate the `cacert` path at startup.** A profile that points at a
15+
missing or unreadable CA bundle now fails with `ConfigurationError`
16+
(mentioning the path) instead of surfacing a cryptic TLS handshake
17+
error on the first request.
18+
- **Pin `pypa/gh-action-pypi-publish` to an immutable commit SHA**
19+
(`cef22109…`, v1.14.0) rather than the mutable `release/v1` tag. The
20+
publish job has `id-token: write`, so an upstream action compromise
21+
could otherwise inject code into the release pipeline.
22+
23+
### Fixed
24+
25+
- **Token cache no longer subject to torn writes.** `_save_token_cache`
26+
writes to a sibling tempfile with mode 0600, then `os.replace`s it
27+
into place atomically. Two concurrent `orca` invocations racing on a
28+
re-authentication can no longer leave the cache half-written for the
29+
next reader.
30+
31+
### CI
32+
33+
- `ci.yml` caches pip and `.venv` (keyed on `pyproject.toml`), adds a
34+
`build` job that runs `poetry build` + publishes the dist artifacts,
35+
and a `security` job that runs `gitleaks` and `pip-audit` against the
36+
installed runtime deps.
37+
- `deploy-docs.yml` is gated on the CI workflow succeeding on `main`
38+
(via `workflow_run` + `conclusion == 'success'`) so a failing build
39+
can no longer ship stale documentation.
40+
741
## [1.3.0] — 2026-04-20
842

943
### Added

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
44

55
[tool.poetry]
66
name = "orca-openstackclient"
7-
version = "1.3.0"
7+
version = "1.4.0"
88
description = "orca — OpenStack Rich Command-line Alternative"
99
authors = ["Kevin Allioli"]
1010
license = "Apache-2.0"

0 commit comments

Comments
 (0)