Skip to content

feat!: release 3.0.0 - #155

Merged
mbruzda-splunk merged 9 commits into
mainfrom
develop
Aug 18, 2026
Merged

feat!: release 3.0.0#155
mbruzda-splunk merged 9 commits into
mainfrom
develop

Conversation

@mbruzda-splunk

@mbruzda-splunk mbruzda-splunk commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Release 3.0.0

This PR promotes develop to main and triggers the semantic-release workflow.

Release notes

Breaking changes

  • Python 3.13 is now the minimum supported runtime.
  • Python 3.7 through 3.12 are no longer supported.

Features and improvements

  • Add official Python 3.13 support across package metadata, CI, documentation, and release jobs.
  • Add retry_on_connection_error(), a reusable helper for retrying REST calls after Splunk drops an idle keep-alive connection.
  • Handle RemoteDisconnected and urllib3 ProtocolError failures with configurable retries and delay while immediately propagating non-retryable errors.
  • Upgrade urllib3 to >=2.7.0,<3 and refresh direct and transitive dependencies to security-fixed versions.
  • Update pytest and development tooling, including Black, mypy, pre-commit, and flake8 compatibility settings.
  • Ensure FOSSA analyzes the source branch instead of falling back to master.
  • Improve Azure index creation support by omitting unsupported archival retention settings.
  • Make attached forge failures propagate consistently to the parent test.
  • Return the effective Splunk log level from the generated forge templates.
  • Correct Splunk client configuration assertions and minor template issues.

Included changes

  • #154 — require Python 3.13 and refresh vulnerable dependencies
  • #153 — add a retry helper for dropped keep-alive connections
  • #146 — propagate failures from attached forges
  • #145 — correct minor logic/typing issues
  • #143 — support index creation in Azure environments
  • #141 — return applied log-level values from templates

Maintenance

  • #156 — synchronize develop with the latest main release history

Verification

  • The connection retry helper has four focused unit tests covering successful retries for both supported exception types, retry exhaustion, and immediate propagation of non-retryable errors; the complete utility test module passes.
  • The Python 3.13 migration was verified with unit, functional-flow, and functional-feature tests, package integrity checks, a Poetry build, pre-commit hooks, and workflow/configuration parsing.

Checklist

  • Changes are summarized in release notes
  • Breaking changes are documented
  • PR title and description follow the contributing principles

harshilgajera-crest and others added 6 commits August 20, 2025 13:56
**Issue number:**

### PR Type

**What kind of change does this PR introduce?**
* [x] Feature
* [ ] Bug Fix
* [ ] Refactoring (no functional or API changes)
* [ ] Documentation Update
* [ ] Maintenance (dependency updates, CI, etc.)

## Summary
DDAA/DDSS is not supported in azure environments, moreover
splunkArchivalRetentionDays applies after searchableDays which is
already 1 year, Hence removing splunkArchivalRetentionDays from index
creation payload

### Changes

Please provide a summary of the changes.

### User experience

Test run: 
Enterprise:
https://github.com/splunk/splunk-add-on-for-salesforce/actions/runs/17118813093
Aws Cloud:
https://cd.splunkdev.com/taautomation/ta-automation-compatibility-tests/-/pipelines/28980311/
Azure cloud:
https://cd.splunkdev.com/taautomation/ta-automation-compatibility-tests/-/pipelines/28937590/

## Checklist

If an item doesn't apply to your changes, leave it unchecked.

* [ ] I have performed a self-review of this change according to the
[development
guidelines](https://splunk.github.io/addonfactory-ucc-test/contributing/#development-guidelines)
* [ ] Tests have been added/modified to cover the changes [(testing
doc)](https://splunk.github.io/addonfactory-ucc-test/contributing/#build-and-test)
* [ ] Changes are documented
* [ ] PR title and description follows the [contributing
principles](https://splunk.github.io/addonfactory-ucc-test/contributing/#pull-requests)
**Issue number:**

### PR Type

**What kind of change does this PR introduce?**
* [ ] Feature
* [x] Bug Fix
* [ ] Refactoring (no functional or API changes)
* [ ] Documentation Update
* [ ] Maintenance (dependency updates, CI, etc.)

## Summary
This PR adjusts logic of set_loglevel and try_to_set_loglevel, so they
return values after the change.

### Changes

Please provide a summary of the changes.

### User experience

Please describe the user experience before and after this change.
Screenshots are welcome for additional context.

## Checklist

If an item doesn't apply to your changes, leave it unchecked.

* [x] I have performed a self-review of this change according to the
[development
guidelines](https://splunk.github.io/addonfactory-ucc-test/contributing/#development-guidelines)
* [ ] Tests have been added/modified to cover the changes [(testing
doc)](https://splunk.github.io/addonfactory-ucc-test/contributing/#build-and-test)
* [ ] Changes are documented
* [x] PR title and description follows the [contributing
principles](https://splunk.github.io/addonfactory-ucc-test/contributing/#pull-requests)
**Issue number:**

### PR Type
This PR contains typo correction.
**What kind of change does this PR introduce?**
* [ ] Feature
* [X] Bug Fix
* [ ] Refactoring (no functional or API changes)
* [ ] Documentation Update
* [ ] Maintenance (dependency updates, CI, etc.)

## Summary

### Changes

Please provide a summary of the changes.

### User experience

Please describe the user experience before and after this change.
Screenshots are welcome for additional context.

## Checklist

If an item doesn't apply to your changes, leave it unchecked.

* [ ] I have performed a self-review of this change according to the
[development
guidelines](https://splunk.github.io/addonfactory-ucc-test/contributing/#development-guidelines)
* [ ] Tests have been added/modified to cover the changes [(testing
doc)](https://splunk.github.io/addonfactory-ucc-test/contributing/#build-and-test)
* [ ] Changes are documented
* [ ] PR title and description follows the [contributing
principles](https://splunk.github.io/addonfactory-ucc-test/contributing/#pull-requests)
**Issue number:**

### PR Type

**What kind of change does this PR introduce?**
* [ ] Feature
* [X] Bug Fix
* [ ] Refactoring (no functional or API changes)
* [ ] Documentation Update
* [ ] Maintenance (dependency updates, CI, etc.)

## Summary
This PR ensures consistent behaviour for performing forges using
bootstrap and attached decorators. Previously errors in attached forges
did not propagate to test (which in some cases allowed tests to pass),
while any error in bootstrapped forges resulted with errored test. From
now on, the behaviour will be the same for both decorators (error in
forge will imply error in test).

Related Jira: 
https://splunk.atlassian.net/browse/ADDON-82933
### Changes

Please provide a summary of the changes.

### User experience

Please describe the user experience before and after this change.
Screenshots are welcome for additional context.

## Checklist
Tests done:
* [X]
https://github.com/splunk/splunk-add-on-for-google-workspace/actions/runs/17297975117/job/49102200754
* [X]
https://github.com/splunk/splunk-add-on-for-microsoft-office-365/actions/runs/17298177430/job/49103738559

If an item doesn't apply to your changes, leave it unchecked.

* [ ] I have performed a self-review of this change according to the
[development
guidelines](https://splunk.github.io/addonfactory-ucc-test/contributing/#development-guidelines)
* [ ] Tests have been added/modified to cover the changes [(testing
doc)](https://splunk.github.io/addonfactory-ucc-test/contributing/#build-and-test)
* [ ] Changes are documented
* [ ] PR title and description follows the [contributing
principles](https://splunk.github.io/addonfactory-ucc-test/contributing/#pull-requests)
## What

Adds official Python 3.13 support and makes Python 3.13 the minimum
supported runtime.

## Breaking change

**Python 3.7 through 3.12 are no longer supported.** Consumers must run
Python 3.13 or newer.

The package metadata now declares `python = "^3.13"`, and all build,
test, documentation, and release jobs run on Python 3.13.

## Why

Supporting urllib3's security-fixed 2.7 release requires a newer Python
runtime. Removing the legacy runtime constraint also allows stale direct
and transitive dependencies to be refreshed to versions without the
vulnerabilities reported by FOSSA.

## Changes

- require Python 3.13 and remove older Python versions from CI
- require `urllib3 >=2.7.0,<3`
- require `pytest >=9.0.3,<10`
- update development tooling constraints for Black, mypy, and pre-commit
- regenerate `poetry.lock` with Poetry 1.5.1
- update Renovate's urllib3 policy
- pass the source branch explicitly to `fossa analyze` so PR reports do
not fall back to `master`
- retain the Python 3.13 flake8 compatibility configuration

## Security result

The refreshed project dependency environment reports no known vulnerable
packages in an independent audit. The environment's standalone `pip`
executable is not part of the package dependency graph or `poetry.lock`.

Notable resolved versions include:

- urllib3 2.7.0
- requests 2.34.2
- pytest 9.1.1
- Black 26.5.1
- Pygments 2.20.0
- pymdown-extensions 11.0.1
- virtualenv 21.7.4

## Verification

Python 3.13:

- 17 unit tests passed
- 5 functional flow tests passed
- 1 functional feature test passed
- `pip check` passed
- `poetry check` passed
- `poetry lock --check` passed
- `poetry build` passed
- all pre-commit hooks passed
- workflow YAML and Renovate JSON parsed successfully

BREAKING CHANGE: Python 3.7 through 3.12 are no longer supported.

Co-authored-by: Marcin Kolasinski <mkolasinski@splunk.com>
**Issue number:**

### PR Type

**What kind of change does this PR introduce?**
* [ ] Feature
* [ ] Bug Fix
* [ ] Refactoring (no functional or API changes)
* [ ] Documentation Update
* [ ] Maintenance (dependency updates, CI, etc.)

## Summary

### Changes

Please provide a summary of the changes.

### User experience

Please describe the user experience before and after this change.
Screenshots are welcome for additional context.

## Checklist

If an item doesn't apply to your changes, leave it unchecked.

* [ ] I have performed a self-review of this change according to the
[development
guidelines](https://splunk.github.io/addonfactory-ucc-test/contributing/#development-guidelines)
* [ ] Tests have been added/modified to cover the changes [(testing
doc)](https://splunk.github.io/addonfactory-ucc-test/contributing/#build-and-test)
* [ ] Changes are documented
* [ ] PR title and description follows the [contributing
principles](https://splunk.github.io/addonfactory-ucc-test/contributing/#pull-requests)
…nections (#153)

## Summary
- Splunk can silently close an idle REST keep-alive connection. A
session-scoped forge's teardown REST call, which can run tens of minutes
after its setup call on the same client, is exposed to this: the first
write on the stale pooled connection raises
`RemoteDisconnected`/`urllib3.exceptions.ProtocolError` even though the
server is healthy.
- This isn't hypothetical — it's the confirmed root cause of a
consistently reproducing `ucc_modinput_functional` teardown failure
against Splunk 10.0.5 in `splunk-add-on-for-okta-identity-cloud` (see
[PR
#456](splunk/splunk-add-on-for-okta-identity-cloud#456)),
and `splunk-add-on-for-microsoft-cloud-services` independently
reinvented near-identical retry logic in its own
`tests/ucc_modinput_functional/splunk/forges/utils.py` for the same
signature.
- A generator-based forge teardown can't be generically retried once it
raises past its `yield` — calling `next()` again just raises
`StopIteration`, the cleanup code never re-runs. So there's no safe
framework-level fix in `ForgePostExec.execute_teardown()`; the retry has
to wrap the specific REST call inside the forge body.
- Adds `retry_on_connection_error()` to
`splunk_add_on_ucc_modinput_test.common.utils` so TA authors can wrap a
flaky call (e.g. a teardown REST write) instead of re-implementing this
retry/classification logic in every add-on's own `forges.py`.

## Test plan
- [x] `pytest tests/unit/common/test_utils.py` — 14 passed, including 4
new tests covering retry-then-succeed (`RemoteDisconnected` and
`ProtocolError`), exhausted-retries re-raise, and non-retryable errors
passing straight through.
- [x] `black --line-length 79`, `flake8`, `mypy` clean on the modified
source file.
## Summary

- widen the runtime pytest constraint from an exact patch pin to
`>=9.0.3,<10` and lock pytest 9.1.1
- guarantee generated log-level forges restore the original Splunk state
when the post-update read fails before the first `yield`
- add regression coverage for generated log-level cleanup and
attached-forge failure propagation in both parallel and sequential
execution

## Why

This addresses findings M2, M3, and S1 from the deep review of release
PR #155. The exact pytest pin made the plugin conflict with other pytest
9.x environments. The generated log-level forges could mutate Splunk and
then fail before the framework registered their teardown. Attached-forge
failure propagation also lacked an automated regression test.

## Impact

Consumers can use compatible pytest 9.x releases. Generated tests no
longer leave Splunk log-level state behind when setup fails after
mutation, and future regressions in attached-forge error propagation are
covered in both executor modes.

## Validation

- `pytest -q tests/unit` — 23 passed
- `pytest -q -p pytester tests/functional/flow` — 7 passed
- `pytest -q tests/functional/feature` — 1 passed
- focused regression tests — 4 passed
- `pre-commit run --all-files` — passed
- `poetry lock --check` with Poetry 1.5.1 — passed
- `poetry build` with Poetry 1.5.1 — passed
- wheel metadata verified as `Requires-Dist: pytest (>=9.0.3,<10)`
@mbruzda-splunk
mbruzda-splunk merged commit 409adbe into main Aug 18, 2026
25 of 27 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 18, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants