- Improve Jubilant logging mechanism (#351)
- Bump minimum python version to 3.10 (#370)
- Rolling uv exclude-newer supply-chain quarantine (#368)
- Set dependabot commit-message prefix to "chore" (no scope) (#367)
- Add Code of Conduct linking to Ubuntu CoC (#356)
- Run uv lock after adding exclude-newer duration (#372)
- Adopt new dependabot conventions (#365)
- Hash-pin actions and drop zizmor config (#366)
- Correct hash-pin version comment for upload-sarif action (#376)
- Pin action version comments to exact tags (#378)
- Add
show_unitmethod (#308)
- Move dataclass codegen note from docs to comment; consolidate (#336)
- Expand the security page to include more sections (#332)
- Clarify behaviour when providing a user in the model value (#340)
- Clarify behaviour of
any_*methods and fix various small issues (#344) - Move docs to canonical.com/juju/docs/jubilant (#337)
- Avoid
yaml.load()call insafe_loadto silence scanner false positive (#331)
- Split Juju 4 channel into 4.0 and 4.1, add edge to scheduled runs (#338)
- Enforce Conventional Commits on PR titles (#341)
- Attest build provenance for released artifacts (#352)
- Add dependency-review-action on PRs (#353)
- Add
add_machinecommand (#305)
- Add
./for relativepathlib.Pathobjects in deploy (#317)
- Replace the PGP key with the upstream page in SECURITY.md (#316)
- Improve support for agents, with Sphinx Stack upgrade (#322)
- Use sbomber to security scan and generate SBOM on release (#325)
- Implement
add_cloudandupdate_cloudmethods (#283)
- Correct behaviour when transparently handling Juju's snap confinement (#275)
- Restructure homepage and update intro to Jubilant (#287)
- Configure dependabot (#288)
- Pin the versions of zizmor and codespell when run by pre-commit (#303)
- Fix unit runs-on (#302)
- Run CI (especially integration tests) every Monday morning (#301)
- Respect self.model in
offermethod (#276)
- Allow
metadata_sourceto be passed down to the CLI via thebootstrapcommand (#272)
WaitErroris raised when error is true, not false. (#256)- Consistent markup for "true" and "false" (#254)
- Include a directive for documentation in AGENTS.md (#268)
- Replace juju.is links and change link in docs header (#267)
- Remove pytest-operator migration guide (moved to Ops docs) (#270)
- Fix docstring of
consume()(#269) - Refocus tutorial on standalone usage (#280)
- Remove requests dependency (#262)
- Add the ssh key earlier, so that no retry is needed (#264)
- Correct copilot-collections permissions so that the job can create a PR if needed (#253)
- Add Zizmor workflow, fix
test_secretsordering (#274)
- Treat running an invalid action in Juju 4 the same way as Juju 3 (#245)
- Add
model_constraintsmethod to get/set machine constraints (#236) - Provide additional arguments for model destruction (#243)
- Make homepage more consistent with Ops (#237)
- Simplify
_format_config, implement_format_constraintwith it (#250)
- Test against Juju 4.0.0 (#232)
- Install Copilot files from the copilot-collections tool (#242)
- Fix
Version.__str__and strictify parsing (#230)
- Simplify comprehensions in
statustypesandmodeltypes(#234)
- Fix "ty" type checking issues (#235)
Note: v1.6.0 was an invalid release, not published to PyPI. The v1.6.1 release fixes that.
- Add
SecretURI.__repr__to make type obvious in error messages (#213) - Add
versioncommand (#219) - Copy files to juju-accessible place for
deploy,refresh,scp(#207) - Add
show-modelcommand (#218) - Add
add-credentialcommand (#221) - Add SSH key management commands (
add-ssh-key,remove-ssh-key) (#228)
- Support "app/leader" unit syntax for
runandexec(#216) - Change machine parameter type to
int | strinJuju.exec(#223)
- Use 'integration' group in CI example (#209)
- Improve docs for
waitlogging anddebug_log(#208) - Correct defaults for
execandrun"wait" parameters (#210) - Jubilant is not just for charm integration tests (#215)
- Fix spell checking (#225)
- Add timeout to
temp_modeldestroy-modelto fix microk8s issues (#188) - Allow revealed secrets without checksums (#204)
- Update tutorial with info about deploying .charm files (#187)
- Another
wait()example, and link to it from ref and how-to (#195) - Add docstrings to common status classes and attributes (#196)
- Mention 'timeout' argument unit in
waitmethod docstring (#190)
- Add
bootstrapcommand (#180)
- Add a security explanation doc (#173)
- Update links and config for switch to documentation.ubuntu.com/jubilant (#174)
- Be more confident about no breaking changes after 1.0 (#175)
- Add sitemap.xml, add new spelling check, remove markdown lint (#177)
- Add Google Analyics integration and cookie consent banner (#181)
- Add "overlays" parameter to
Juju.deploy(#160) - Add
consumecommand (#164) - Support multiple controllers (#165)
- Have
temp_modelforward "cloud" and other args toadd_model(#168) - Secret management (#135)
- Add an example of
temp_model, including how to set attributes (#162)
- Move TIOBE workflow to self-hosted runners (#167)
- Fix installing TIOBE dependencies on the self-hosted runners (#169)
- Add
Status.get_units, include subordinates inall_*andany_*(#150)
- Add reporting to TIOBE (#149)
- "juju model" doesn't use --model argument (#148)
- Allow specifying cloud when creating model (#143)
- Fix format of
--bindargument fordeploy(#132)
- In "offer", move endpoint to keyword-only arg instead of *args (#126)
- Make "reset" an explicit arg for config/model_config (#125)
- Add "bind" argument to
deploy()(#121) - Deploy a temp model into a specified controller (#124)
- Add
all_agents_idlehelper (#127)
- Change
all_*andany_*to take *apps instead of a list (#116) - Return data rather than raising an exception on status-error (#120)
- Add
scpcommand (#109) - Add
model-configcommand (#115) - Add
add_secretmethod (#112)
- Log wait status diffs under jubilant.wait logger name (#110)
- Correct polarity of WaitError message (#113)
- Add machine integration tests (LXD) (#103)
- Test deploy with resources (and base) (#108)
- Add
refreshcommand (#93) - Slightly more helpful
TaskError.__str__(#99)
- Fix and->or in
all_*docstrings (#96) - Add "How to migrate from pytest-operator to Jubilant" (#98)
- Change remove_unit to use *args (#89)
- Add
remove_applicationmethod (#86) - Add
offercommand (#82) - Add
sshcommand (#92)
- Don't log "juju status" calls in
Juju.wait()(#88)
- Minor rewording in docstring of
remove_unitmethod (#87)
- Add "stdin" parameter to
Juju.cli(#83)
- Condense
Juju.waitstatus logging by using gron-style diff (#79) - Add
trustcommand (#81)
- Allow the library to work on Python 3.8+ (#80)
- Add "wait" argument to
execandrun(#77) - Add
remove_relationmethod (#78)
- Rename
deployparam resource -> resources (#74) - Add
execmethod (#66)
- Flesh out landing page and add tutorial (#61)
- Make example fixtures module-scoped, explain Python 3.12 requirement (#65)
- Add 'charmcraft pack' in sample GitHub action (#69)
- Change Juju links to point to latest doc site (#76)
- Add integration test of run (action) fail and exception (#67)
First "real" pre-release of Jubilant.
- Set
maximum_signature_line_lengthto 80 (#60) - Flesh out README.md (#59)
Test beta pre-release.
- Fix publish environment (#58)
- Bump beta version
Test beta pre-release.
- Add RunError, move Juju class to _juju.py
- Get basic Sphinx docs working locally (#3)
- Rename wait_status to wait and adjust the API (#2)
- Add generated status dataclasses (#26)
- Add
configmethod (#39) - Add
runmethod (#42) - Add
integratemethod (#45) - Add
remove_unitmethod (#47) - Add
add_unitmethod (#46) - Pretty-print Status dataclass (#37)
- Add test helpers and run integration tests in CI (#49)
- Add basic integration tests for most jubilant.Juju methods (#53)
- Workflow and metadata for publishing to PyPI (#55)
- Add additional params to
deploy()(#23)
- Add README
- Use Canonical documentation starter pack (#36)
- Add unit tests of existing functionality (#34)
- Move error classes to where they're raised (#27)
- Move types.py to statustypes.py to avoid confusion with stdlib (#28)
- Add GitHub Actions for unit tests, linting, static type checking (#32)
- Single ci.yaml, fmt -> format, tweak lint (#33)
- Allow ARGS='additional args' for (some) Makefile commands (#54)