Skip to content
Merged
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
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -829,7 +829,7 @@ endif
.PHONY: docs-spellcheck
docs-spellcheck: $(TOOL_MDSPELL) docs/metrics.md ## Spell check docs
# check docs for spelling mistakes
$(TOOL_MDSPELL) --ignore-numbers --ignore-acronyms --en-us --no-suggestions --report $(shell find docs -name '*.md' -not -name upgrading.md -not -name README.md -not -name fields.md -not -name workflow-controller-configmap.md -not -name upgrading.md -not -name executor_swagger.md -not -path '*/cli/*' -not -name tested-kubernetes-versions.md)
$(TOOL_MDSPELL) --ignore-numbers --ignore-acronyms --en-us --no-suggestions --report $(shell find docs -name '*.md' -not -name upgrading.md -not -name README.md -not -name fields.md -not -name workflow-controller-configmap.md -not -name upgrading.md -not -name executor_swagger.md -not -path '*/cli/*' -not -name tested-kubernetes-versions.md -not -name new-features.md)
# alphabetize spelling file -- ignore first line (comment), then sort the rest case-sensitive and remove duplicates
$(shell cat .spelling | awk 'NR<2{ print $0; next } { print $0 | "LC_COLLATE=C sort" }' | uniq > .spelling.tmp && mv .spelling.tmp .spelling)

Expand All @@ -853,7 +853,7 @@ endif
.PHONY: docs-lint
docs-lint: $(TOOL_MARKDOWNLINT) docs/metrics.md
# lint docs
$(TOOL_MARKDOWNLINT) docs --fix --ignore docs/fields.md --ignore docs/executor_swagger.md --ignore docs/cli --ignore docs/walk-through/the-structure-of-workflow-specs.md --ignore docs/tested-kubernetes-versions.md
$(TOOL_MARKDOWNLINT) docs --fix --ignore docs/fields.md --ignore docs/executor_swagger.md --ignore docs/cli --ignore docs/walk-through/the-structure-of-workflow-specs.md --ignore docs/tested-kubernetes-versions.md --ignore docs/new-features.md

$(TOOL_MKDOCS): docs/requirements.txt
# update this in Nix when upgrading it here
Expand Down
213 changes: 167 additions & 46 deletions docs/new-features.md
Original file line number Diff line number Diff line change
@@ -1,50 +1,171 @@
# New Features
# New features in latest (2025-12-11)

This is a concise list of new features.

## Retry Improvements
## General

- Name filter parameter for prefix/contains/exact search in `/archived-workflows` by [Armin Friedl](https://github.com/arminfriedl) ([#14069](https://github.com/argoproj/argo-workflows/issues/14069))
A new `nameFilter` parameter was added to the `GET
/archived-workflows` endpoint. The filter works analogous to the one
in `GET /workflows`. It allows to specify how a search for
`?listOptions.fieldSelector=metadata.name=<search-string>` in these
endpoints should be interpreted. Possible values are `Prefix`,
`Contains` and `Exact`. The `metadata.name` field is matched
accordingly against the value for `<search-string>`.

- Artifact Drivers as plugins by [Alan Clucas](https://github.com/Joibel), [JP Zivalich](https://github.com/JPZ13), [Elliot Gunton](https://github.com/elliotgunton) ([#5862](https://github.com/argoproj/argo-workflows/issues/5862))
Artifact Drivers can now be added via a plugin mechanism.
You can write a GRPC server which acts as an artifact driver to upload and download artifacts to a repository, and supply that as a container image.
Argo workflows can then use that as a driver.

- Support update total parallelism without restart controller. by [Shuangkun Tian](https://github.com/shuangkun) ([#14689](https://github.com/argoproj/argo-workflows/issues/14689))
When modify the global parallelism in workflow-controller-configmap, the change takes effect directly without restarting the controller.

- Added CRD validation rules by [Alan Clucas](https://github.com/Joibel ([#13503](https://github.com/argoproj/argo-workflows/issues/13503))
Added some validation rules to the full CRDs which allow some simpler validation to happen as the object is added to the kubernetes cluster.
This is useful if you're using a mechanism which bypasses the validator such as kubectl apply.
It will inform you of
**Note:** Some validations cannot be implemented as CEL rules due to Kubernetes limitations.
Fields marked with `+kubebuilder:validation:Schemaless` (like `withItems`) or `+kubebuilder:pruning:PreserveUnknownFields` (like `inline`) are not visible to CEL validation expressions.
**CEL Budget Management:** Kubernetes limits the total cost of CEL validation rules per CRD. To stay within these limits:
* All `status` blocks have CEL validations automatically stripped during CRD generation
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

according to the linter those should not be * but -

* Controller-managed CRDs (WorkflowTaskSet, WorkflowTaskResult, WorkflowArtifactGCTask) have all CEL validations removed from both spec and status
* Server-side validations in `workflow/validate/validate.go` supplement CEL for fields that cannot be validated with CEL (e.g., schemaless fields)
**Array and String Size Limits:** To manage CEL validation costs, the following maximum sizes are enforced:
* Templates per workflow: 200
* DAG tasks per DAG template: 200
* Parameters: 500
* Prometheus metrics per template: 100
* Gauge metric value string: 256 characters
#### Mutual Exclusivity Rules:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

according to the new-feaures generator tool this goes from ## General to #### Mutual, it should go to ### Mutual (one less #). And it should be a blank line before and after but the generator I think strips them as part of merging the various features file as point in a list.

All the others following suffer the same issue

* only one template type per template
* only one of sequence count/end
* only one of manifest/manifestFrom
* cannot use both depends and dependencies in DAG tasks.
#### DAG Task Constraints:
* task names cannot start with digit when using depends/dependencies
* cannot use continueOn with depends.
#### Timeout on Non-Leaf Templates:
* Timeout cannot be set on steps or dag templates (only on leaf templates).
#### Cron Schedule Format:
* CronWorkflow schedules must be valid 5-field cron expressions, specialdescriptors (@yearly, @hourly, etc.), or interval format (@every).
#### Metric Validation:
* metric and label names validation
* help and value fields required
* real-time gauges cannot use resourcesDuration metrics
#### Artifact:
* At most one artifact location may be specified
* Artifact.Mode must be between 0 and 511 (0777 octal) for file permissions.
#### Enum Validations:
* PodGC strategy
* ConcurrencyPolicy
* RetryPolicy
* GaugeOperation
* Resource action
* MergeStrategy
all have restricted allowed values.
#### Name Pattern Constraints:
* Template/Step/Task names: max 128 chars, pattern ^[a-zA-Z0-9][-a-zA-Z0-9]*$;
* Parameter/Artifact names: pattern ^[a-zA-Z0-9_][-a-zA-Z0-9_]*$.
#### Minimum Array Sizes:
* Template.Steps requires at least one step group
* Parameter.Enum requires at least one value
* CronWorkflow.Schedules requires at least one schedule
* DAG.Tasks requires at least one task.
#### Numeric Constraints:
* Parallelism minimum 1
* StartingDeadlineSeconds minimum 0.

- Allow custom CA certificate configuration for SSO OIDC provider connections by [bradfordwagner](https://github.com/bradfordwagner) ([#7198](https://github.com/argoproj/argo-workflows/issues/7198))
This feature adds support for custom TLS configuration when connecting to OIDC providers for SSO authentication.
This is particularly useful when your OIDC provider uses self-signed certificates or custom Certificate Authorities (CAs).
* Use this feature when your OIDC provider uses custom self-signed CA certificates
* Configure custom CA certificates either inline or by file path
### Configuration Examples
#### Inline PEM content
```yaml
sso:
# Custom PEM encoded CA certificate file contents
rootCA: |-
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoK/heBjcOuMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
...
-----END CERTIFICATE-----
```
The system will automatically use certificates configured with SSL_CERT_DIR, and SSL_CERT_FILE for non macOS environments.
For production environments, always use proper CA certificates instead of skipping TLS verification.
- Deprecate singular in favour of plural items by [Alan Clucas](https://github.com/Joibel) ([#14977](https://github.com/argoproj/argo-workflows/issues/14977))
Deprecation: remove singluar `mutex`, `semaphore` and `schedule` from the specs, all were replaced by the plural version in 3.6

- Disable write back informer by default by [Eduardo Rodrigues](https://github.com/eduardodbr) ([#12352](https://github.com/argoproj/argo-workflows/issues/12352))
Update the controller’s default behavior to disable the write-back informer. We’ve seen several cases of unexpected behavior that appear to be caused by the write-back mechanism, and Kubernetes docs recommend avoiding writes to the informer store. Although turning it off may increase the frequency of 409 Conflict errors, it should help reduce unpredictable controller behavior.

- This migrates most of the logging off logrus and onto a custom logger. by [Isitha Subasinghe](https://github.com/isubasinghe) ([#11120](https://github.com/argoproj/argo-workflows/issues/11120))
Currently it is quite hard to identify log lines with it's corresponding workflow.
This change propagates a context object down the call hierarchy containing an
annotated logging object. This allows context aware logging from deep within the
codebase.

- Support metadata.name= and metadata.name!= in field selectors by [Miltiadis Alexis](https://github.com/miltalex) ([#13468](https://github.com/argoproj/argo-workflows/issues/13468))
Field selectors for `metadata.name` now support the `==` and `!=` operators, giving you more flexible control over resource filtering.
Use the `==` operator to match resources with an exact name, or use `!=` to exclude resources by name.
This brings field selector behavior in line with native Kubernetes functionality and enables more precise resource queries.

- Removal of logrus and more structured logging by [Alan Clucas](https://github.com/Joibel) ([#11120](https://github.com/argoproj/argo-workflows/issues/11120), [#2308](https://github.com/argoproj/argo-workflows/issues/2308))
Complete context passing so all logs should have correct context and enable remaining logs to be fully structured logs.

## UI

- Add an informational message to the CronWorkflow delete confirmation modal indicating that Workflows created by the CronSchedule will also be deleted. by [minsun yun](https://github.com/miinsun) ([#14679](https://github.com/argoproj/argo-workflows/issues/14679))
- UI/UX only; **no functional logic** is changed.
- Verified manually by deleting a CronWorkflow in the Workflows UI and confirming the message renders correctly.

- Add label query parameter sync with URL in WorkflowTemplates UI to match Workflows list behavior for consistent filtering. by [puretension](https://github.com/puretension) ([#14807](https://github.com/argoproj/argo-workflows/issues/14807))
- WorkflowTemplates UI now properly handles label query parameters (e.g., ?label=key%3Dvalue)
- Combined URL updates and localStorage persistence in single useEffect
- Enables custom UI links for filtered template views
- Verified that URL updates when changing filters and filters persist on page refresh

- Name Not Equals filter now available in the UI for filtering workflows by [Miltiadis Alexis](https://github.com/miltalex) ([#13468](https://github.com/argoproj/argo-workflows/issues/13468))
You can now use the "Name Not Equals" filter in the workflow list to exclude workflows by name.
This complements the existing "Name Exact" filter and provides more flexible filtering options.
Use this filter when you want to view all workflows except those matching a specific name pattern.

- Support open custom links in new tab automatically. by [Shuangkun Tian](https://github.com/shuangkun) ([#13114](https://github.com/argoproj/argo-workflows/issues/13114))
Support configuring a custom link to open in a new tab by default.
If target == _blank, open in new tab, if target is null or _self, open in this tab. For example:
```
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should specify the language for consistency with the other code blocks

- name: Pod Link
scope: pod
target: _blank
url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}&startedAt=${status.startedAt}&finishedAt=${status.finishedAt}
```

- Optimize pagination performance when counting workflows in archive. by [Shuangkun Tian](https://github.com/shuangkun) ([#13948](https://github.com/argoproj/argo-workflows/issues/13948))
When querying archived workflows with pagination, the system now uses more efficient methods to check if there are more items available. Instead of performing expensive full table scans, the new implementation uses LIMIT queries to check if there are items beyond the current offset+limit, significantly improving performance for large datasets.

## CLI

- Add support for creating a configmap semaphore config using CLI by [Darko Janjic](https://github.com/djanjic) ([#14671](https://github.com/argoproj/argo-workflows/issues/14671))
Allow user to create a configmap semaphore configuration using CLI

- `convert` CLI command to convert to new workflow format by [Alan Clucas](https://github.com/Joibel) ([#14977](https://github.com/argoproj/argo-workflows/issues/14977))
A new CLI command `convert` which will convert Workflows, CronWorkflows, and (Cluster)WorkflowTemplates to the new format.
It will remove `schedule` from CronWorkflows, moving that into `schedules`
It will remove `mutex` and `semaphore` from `synchronization` blocks and move them to the plural version.
Otherwise this command works much the same as linting.

- Add support for creating a database semaphore config using CLI by [Darko Janjic](https://github.com/djanjic) ([#14783](https://github.com/argoproj/argo-workflows/issues/14783))
Allow user to create a database semaphore configuration using CLI

## Build and Development

- Document features as they are created by [Alan Clucas](https://github.com/Joibel) ([#14155](https://github.com/argoproj/argo-workflows/issues/14155))
To assist with creating release documentation and blog postings, all features now require a document in .features/pending explaining what they do for users.

- Support plural "Authors:" field in feature notes by " field in feature notes ([#14155](https://github.com/argoproj/argo-workflows/issues/14155))
The featuregen tool now uses the plural "Authors:" field instead of "Author:" for new feature notes.
This better reflects that features can have multiple authors.
The change maintains full backwards compatibility with existing feature files that use the singular "Author:" field.

* [#13738](https://github.com/argoproj/argo-workflows/pull/13738) : Support retry strategy on daemon containers
* [#13782](https://github.com/argoproj/argo-workflows/pull/13782) : Support cap on retryStrategy backoff
* [#14450](https://github.com/argoproj/argo-workflows/pull/14450) : Allow last retry variables in expressions

## Parallelism Improvements

* [#14309](https://github.com/argoproj/argo-workflows/pull/14309) : Multi-controller locks (semaphores and mutexes)
* [#14188](https://github.com/argoproj/argo-workflows/pull/14188) : Dynamic namespace parallelism

## Enhanced Caching

* [#14304](https://github.com/argoproj/argo-workflows/pull/14304) : More granular caching options for the argo kubernetes informer
* [#14205](https://github.com/argoproj/argo-workflows/pull/14205) : Cache semaphore limit lookup

## UI Enhancements

* [#14034](https://github.com/argoproj/argo-workflows/pull/14034) : Visualize workflows before submitting
* [#13962](https://github.com/argoproj/argo-workflows/pull/13962) : Filter workflows by "Finished before" and "Created since" via API
* [#13935](https://github.com/argoproj/argo-workflows/pull/13935) : Allow markdown titles and descriptions in KeyValueEditor
* [#12644](https://github.com/argoproj/argo-workflows/pull/12644) : Allow markdown titles and descriptions in WorkflowTemplates & ClusterWorkflowTemplates
* [#13883](https://github.com/argoproj/argo-workflows/pull/13883) : Mark memoized nodes as cached
* [#13922](https://github.com/argoproj/argo-workflows/pull/13922) : Pre-fill parameters for workflow submit form
* [#14077](https://github.com/argoproj/argo-workflows/pull/14077) : Set template display name in YAML

## User Experience

* [#14104](https://github.com/argoproj/argo-workflows/pull/14104) : Label actor action when making changes to workflows/templates
* [#13933](https://github.com/argoproj/argo-workflows/pull/13933) : Support archive logs in resource templates
* [#13790](https://github.com/argoproj/argo-workflows/pull/13790) : Include container name in error messages

## Cron Workflow Enhancement

* [#13999](https://github.com/argoproj/argo-workflows/pull/13999) : Support backfill for cron workflows

## Security Improvements

* [#14477](https://github.com/argoproj/argo-workflows/pull/14477) : Non-root argoexec image

## Developer Experience

* [#14412](https://github.com/argoproj/argo-workflows/pull/14412) : Add React Testing Library and initial component coverage
* [#13920](https://github.com/argoproj/argo-workflows/pull/13920) : Move contextless log messages to debug level
* [#14151](https://github.com/argoproj/argo-workflows/pull/14151) : Enable cherry-pick bot
* [#14103](https://github.com/argoproj/argo-workflows/pull/14103) : Add support for databases enforcing strict data integrity through primary keys
Loading