Release Notes
warning
MintPress should be upgraded sequentially, one version at a time, unless there are no breaking changes between them. Skipping versions may result in data loss and unexpected behaviour.
Follow the upgrade guide for more information on how to upgrade MintPress.
[2026-05-21]
Added
- The
requires_approval_fromusernames and ldap groups can now be sourced from the relevant node's properties. See the settings documentation for more information.
Important breaking changes
- The OpsChain API will no longer start if the
token.secret_keysetting (which is originally set from theOPSCHAIN_TOKEN_SECRET_KEYvalue in your values.yaml) is not set or is empty. This setting was introduce in 2026-04-21 and must be set as part of the security configuration. OpsChain will no longer startup with it unset to prevent accidental misconfiguration.- This relates to CVE-2026-45363.
- Note that changing the value of
token.secret_keywas broken previously, see the release notes below for more details.
Changed
- Upgraded all images to AlmaLinux 9.7.
- CVE-2026-45363 has been mitigated.
Fixed
- Changing the
token.secret_keysetting now works as expected. - The 2026-05-18 release introduced a bug in the secret resolution API which caused manual lookup of secrets to fail. This has been fixed.
[2026-05-18]
Known issues
- Changing the
token.secret_keysetting will make the server return 500 errors for any user who was logged in before the setting changed. Clearing your browser cookies for the OpsChain server will fix this for the affected user.
Fixed
- When an action fails to execute, the error indicating where the action was defined has been improved to handle MintPress SDK actions.
- Correct rebuilding of agent image when the template version changes.
- When multiple parallel steps modify properties in ways that can't be handled, the step moves to
failed(rather thansystem error). This improves/fixes retry of these changes. - Steps that report
Unable to construct a step result processor for step "..." due to: No such file or directory @ rb_sysopen /steps/.../step_result.jsonare now marked as failed. - Fixed
syntax error found (SyntaxError)andinvalid multibyte character 0xE2reported inactions.rbdue to incorrect character encoding handling. - Fixed issue where the build service would get stuck in a
Pendingstate during an upgrade due to an issue with thefuse-device-plugin. See the FUSE device plugin settings for more information. - Running nested steps from the actions GUI for MintModel actions now works.
- Refresh tokens (and refresh cookies) are now properly revoked when a token destroy request is made to the API.
- When a page fails to load, the error message is now shown in a consistent position rather than floating in the middle of the page.
- When a user does not have permission to view properties or settings, a clear "not authorised" message is now shown instead of an unhandled error.
- Fixed an issue where the admin settings editor did not correctly respect the user's update permissions.
- Fixed repeating a change that involved nested actions — the correct action path is now used.
- Fixed the activity volume chart on the dashboard, where the legend and chart area were displaying incorrect colours.
- Fixed elapsed time in the activities list to count from when a change was created rather than when it started running, giving a more accurate total duration.
Added
- OpsChain actions and wait steps can now be defined with a custom
step_name. When the OpsChain GUI displays the step tree for a change, the step that executes the action will be labelled with the suppliedstep_namerather than the action method name. - You can now include input steps in your
actions.rb. These act like regular wait steps however they require the user to provide specific input values in order to continue the step. See the input steps documentation for more information. - Each change step now includes a
state_timingobject in the step response that includes timestamps for when the step entered and exited each state. - On completion, the change response now includes a
state_timing_summaryobject, providing a summary of the number of seconds spent building the image, running the step, waiting for user input, and system overhead. - The settings version and properties versions endpoints now accept the
limitquery parameter to limit the rows returned. - The default OpsChain Dockerfile can now be downloaded from the OpsChain server. Learn more.
- New
converged_settingsendpoints have been added to the API to allow retrieval of the converged settings for a change, template version, asset, environment or project. These endpoints mimic the existingconverged_propertiesendpoints, returning settings rather than properties. - The notify JSON supplied when creating a change is now stored with the change and is available in the change response under
notify. - When a change re-uses the result of a step that already ran successfully in a previous attempt, this is now clearly indicated in the step tree. A history icon appears on the step node, and the step detail panel shows a notice with a link to the original run where the step completed.
- Steps that require approval now show a full breakdown of all required approvers, their groups, and the current state of each approval in a popover. You can see who has approved or rejected, when they did so, and any message they left. The summary on the step node updates as approvals come in (e.g. "Requires approval (1 of 3)").
- A new Inherited settings tab is available on the settings page for all node types (projects, environments, assets, and agents). This shows the fully resolved settings that a node will use at runtime, accounting for values inherited from parent nodes. Each setting can be annotated with its source via a "Show/Hide sources" toggle. The same view is also available on the Change settings tab.
- Settings can now be viewed and compared directly from a template version's detail page.
- All notification toasts (success, error, and info) now include a Copy button to copy the message text to the clipboard. Notifications also stay visible for longer before auto-dismissing.
- When opening the "Compare versions" tab for settings or properties, the two most recent versions are now pre-selected automatically, so you can see what changed straight away without having to pick versions manually. Up to 500 versions are now loaded, and they are listed in chronological order.
- When a step in a change requires user-provided values before it can proceed, a dedicated dialog is now shown to collect those inputs. Each field is presented with its name, type, and description. Once submitted, the change continues automatically. After a step has been continued, users can view the values that were supplied at the time — the same dialog opens in a read-only mode, showing what was entered and who submitted it (including any message they left).
- The
ignore_failureoption has been added to actions with child steps. Child step failure will no longer cause the parent step to fail when this option is enabled. This can be used to allow a change to continue running even if a non-critical step fails.
Changed
- The long-running database query timeout configuration has now been split.
- The
OPSCHAIN_API_DATABASE_STATEMENT_TIMEOUTsetting is used for API requests. - The
OPSCHAIN_WORKER_DATABASE_STATEMENT_TIMEOUTsetting is used for SQL statements executed in the OpsChain worker.
- The
- The
fuse-device-pluginwill now only run if thebuildService.rootlessandfuseDevicePlugin.enabledsettings are set totrue. Consider enabling it if you are running a Kernel version older than 5.11. Refer to the FUSE device plugin settings for more information. - The change approval feature has been enhanced to support action specific approval. See the requires approval from setting in the settings documentation for more information.
- The step and change
approved_by,continued_by,rejected_byandcancelled_byattributes will now be returned in the same format[{ "username": "peter", "message": "user supplied message", "date": "2026-05-12T04:53:05Z"}] - The log_lines link in each step response now reflects the actual step where the logs where generated. For a regular change, this will be a link to the current step's logs. For a retried change, if the original step succeeded during one of the previous attempts, the link will point to the original step's logs.
- Changes will now store the converged settings that were used to run the change. Settings queries during the change execution will use the persisted settings for the change rather than the current system values. This ensures changes will be unaffected by any settings changes that occur during their execution.
- The
updated_atdate for a token is now updated to the current date and time each time the token is used. - the
action_methodsargument for thecontrollermethod inactions.rbhas been removed and its functionality has been absorbed into theavailable_actionsargument. See the actions documentation for more information. - The timing section on a change's detail page now shows a breakdown of how time was spent during the change run. At a glance you can see execution time and system time as separate figures. Clicking the timing area opens a detailed view that breaks down time spent in each phase — such as time spent running, waiting for approvals, and building images — alongside a full state-by-state timeline with start and end times.
- When a waiting step requires input arguments before it can continue, the GUI now presents a dedicated "Provide input arguments" dialog instead of the plain continue action.
- Repeating a change: When repeating a change, the original override settings and properties are now fetched accurately — including for changes that were themselves a repeat of an earlier run. A loading indicator is shown while this is happening, and a clear error message is displayed if the values cannot be retrieved.
- Links to git commits and repositories now work correctly for a wider range of Git hosting providers, including Azure DevOps (both modern and legacy URLs), AWS CodeCommit, Oracle Cloud Infrastructure, and Sourcehut, in addition to GitHub, GitLab, and Bitbucket. SSH remote URLs are now also converted into browser-friendly links automatically.
- Change Git details: The Git remote URL and revision are now truncated in the change detail card for readability, with the full values available on hover. A direct "Go to commit" link also appears in the hover card.
- Top activities panel: The dashboard activity table column order and layout have been improved.
Removed
- The bespoke singular MintPress SSH key support has been removed. This means the
mintPressSSHKeyconfiguration has been removed from the chart.-
This means the
mintpress-ssh-keysecret can be removed after update (this secret is not removed automatically). The uninstall documentation shows how secrets can be removed. (Note, it references different secrets.) -
We suggest putting SSH keys into OpsChain file properties (via the secret vault) instead as it is more flexible. The example below shows how this can be added to your properties (do not remove any existing properties):
{"opschain": {"files": {"/opt/mintpress/.ssh/id_rsa": {"format": "base64","mode": "0600","content": "{{ SSH private key contents, base64 encoded - just like `mintPressSSHKey` }}"}},"env": {"SSH_KEY_PATH": "/opt/mintpress/.ssh/id_rsa"}}}
-
[2026-04-30]
Important breaking changes
lazyblocks no longer automatically derive a resource (or controller). This means the property definition such aslazy_property(lazy { :resource })needs to be called withref(orresource), e.g.lazy_property(lazy { ref(:resource).controller }).- Strings and symbols no longer provide access to a controller with an equivalent name automatically (i.e.
'resource'.controlleris no longer supported). The resource must be reference viaref(orresource) explicitly, e.g.ref('resource').controller. - The
literalkeyword has been removed. Due to the changes tolazyblocks (above) it is no longer required.
Fixed
- Handling of resource property resource resolution has now been improved to avoid infinite recursion.
- It is no longer possible to refetch a template version Git revision while a change is running for this template version because this would lead to the change failing.
- Fixed issue where the run change and run workflow dialog would hold on to previous values.
- Improved search on available actions of an asset including a total and filtered count.
Changed
- The full error message is now shown when MintModel generation fails.
- Tabs on run change and workflow dialog now show a small checkmark if the values under the respective tabs have been altered or added from a previously run change. These include property and setting overrides, as well as metadata.
- Minor adjustments to colours on the dashboard widgets.
- Minor adjustments to colours on trees (change, workflow run, workflow overview and available actions).
Added
- The change step response now includes details about how long the image took to build. Note: this may be
nullif the step didn't need to build an image. - The action server now sets a process title (
OpsChain action server) so that it can be more easily identified when debugging. - The
parallel_change_worker_stepssetting can now be overridden with change settings overrides, or via the parent asset, environment, or project. - On change failure OpsChain will now output the details of the resource whose action failed.
- The keyword
refnow has an aliasresourceto make it clearer what it returns. Both names can be used interchangeably. - When an action fails to execute, the error now shows where the action was defined.
- Change properties now show a loader when fetching change/step properties.
[2026-04-23]
Added
- When an action raises an exception during processing, OpsChain will now output the names of all resource types and resources that have been defined by the actions.rb. Where possible, the property values of each resource's properties will also be included.
Changed
- The OpsChain API now uses less memory (in particular PSS).
Fixed
- Only MintModel actions that are specified with
available_actionsare displayed in the GUI. This only affects MintModel actions. - When a MintPress change API returns a
unprocessable_contentresponse, it no longer creates change that will be stuck ininitializing.
[2026-04-21]
Important breaking changes
- The
mintpress.executor_image.nameandmintpress.executor_image.pull_policyproperties have been replaced by settings. To override the MintModel executor image, configure the MintModel executor settings. Due to the schema used in OpsChain properties, these properties need to be removed before changes can be run, etc. - The OpsChain API can now be accessed using bearer tokens. See the Tokens endpoints in the Security section of the OpsChain API docs for more information. To support the new token generation logic, you will need to add the
OPSCHAIN_TOKEN_SECRET_KEYto yourvalues.yamlbefore deployment. The RubySecureRandom.hex(64)method can be used to generate a 512bit (128 character) secure string to use as the token secret key. - An email address is now required when creating users with the OpsChain user utilities.
Added
- The
agent.image_override,mintmodel_executor.image_override,runner.image_overrideandworker.image_overridesettings have been added. - A new debug toolbox has been added to help debugging and troubleshooting OpsChain deployments and networking issues.
- OpsChain now provides better error messages for typos in resources, for example suggesting a property name that may have been intended instead.
- The OpsChain DSL now provides the
OpsChain.run_actionkeyword for running another action programmatically. - A new OpsChain dashboard has been added to the GUI to provide a high-level overview of the system's status and health, as well as quick access to important resources and information.
- A new
OPSCHAIN_DATABASE_STATEMENT_TIMEOUTsettings has been added to allow configuring a timeout for database statements to prevent long-running queries from impacting the performance of the system. The default value is50s. - The
update_local_user_email_addressutility has been added.
Changed
- The blocking queue and waiting queue information is now reported separately in the API and GUI for better visibility of the reason why a change or workflow run is waiting to start.
- The performance of OpsChain action execution has been improved when a large number of resources are defined.
- Template versions that contain no actions with descriptions are now considered valid. Template versions with no actions defined at all are still considered invalid.
- If an
actions.rbhas adefaultaction without a description, a default description is added to ensure it shows up in the GUI. - The OpsChain API and workers now terminate long-running database queries based on the
OPSCHAIN_DATABASE_STATEMENT_TIMEOUTsetting. - The
create_userandcreate_local_usercommands now require an email address.
Fixed
- Action description are displayed correctly for actions defined within a controller.
- MintModel assets now generate their actions correctly.
- The performance of the internal change activities endpoint has been improved for non-superuser users.
- Running scheduled changes has been fixed.
- The
/opt/opschain/.sshand/opt/mintpress/.sshfolders are now created with non-root ownership. - The action server is no longer started if
worker.reuse_actions_rbisfalse. Previously it was started but not used. - The action server now handles errors during the server startup more correctly. This means changes won't get stuck when there are file permission issues in file properties.
- The API licence validation was intermittently failing and reporting the licence was expired/missing. This has been resolved and the API will now correctly report the licence status.
- Modifying the DockerHub username and password via the advanced configuration settings now updates the Kubernetes image pull secret with the new credentials.
- Accessing post change converged properties for an aborted change will no longer report an error and instead return the properties before the change as aborted.
- The performance of LDAP queries has been improved, in turn improving the performance of the various security screens in the GUI.
Known issues
- When a typo is present in
actions.rb, the error message may reportArgumentError: wrong number of arguments (given 4, expected 0..3) (ArgumentError). If this happens, the actual cause will be shown further down.
[2026-03-27]
Important breaking changes
- OpsChain's secret vault storage backend has changed to be database-based rather than file-based, allowing the secret vault to operate in high availability setups.
- When running a change with
pod_per_change_stepset tofalse, OpsChain will now only parse theactions.rbonce. This means the top level of this file can't contain any variables that are expected to change throughout the run.- To return to the former functionality, set
worker.reuse_actions_rbtofalse.
- To return to the former functionality, set
- A new
OPSCHAIN_ENCRYPTION_SEED_KEYsetting has been added to thevalues.yamlfile to supersede themintpressTransportableKeysetting. This key is used to seed the encryption of sensitive data within OpsChain. If you're upgrading from a previous version, set this to the same value as themintpressTransportableKeysetting in yourvalues.yamlfile or the contents of the~/.limepoint/localKeyfile - if present in your system. ThemintpressTransportableKeysetting will be ignored in a future release. Refer to the encryption keys guide for more information. - The
original_changeandoriginal_workflow_runmetadata attributes in changes and workflow runs have been nested under anopschainparent in the metadata object to avoid potential conflicts with user-defined metadata attributes. In addition, they have been renamed tooriginal_change_idandoriginal_workflow_run_idrespectively to better reflect their content.
Added
- The
literalkeyword has been added to OpsChain actions. - Code which calls
.controlleror.propertieson a string or symbol will now resolve the controller or properties (respectively) for an equivalently named resource (if defined). Learn more. - You can now provide alternative DNS names for the CNPG-generated TLS certificates for your database clusters. Read more in the high availability setup guide.
- OpsChain bulk property assignment can now use the
lazykeyword, e.g.properties(lazy { { something: 'slow' } }). - If an OpsChain change or workflow run encounters a system failure, a new status "system error" will be applied to the activity.
Changed
- When not using
pod_per_change_step, theactions.rbfile will only be loaded once (by default) to improve change performance.- To get the old experience (where
actions.rbis loaded once per step) setworker.reuse_actions_rbtofalse.
- To get the old experience (where
- Asset index responses no longer include the asset's actions. This information can be retrieved from the asset show endpoint.
Fixed
- If the child step definitions returned from an action are invalid, the error will now be properly reported in the parent step's logs rather than causing the entire change to fail without explanation.
[2026-03-19]
Important breaking changes
- OpsChain agents must be stopped before upgrading. Following the upgrade, each agent image must be rebuilt, and then the agent can be started.
Added
- A new policy assignment show endpoint has been created to allow the API to return a single policy assignment for a given authorisation policy.
- Encrypted settings are now able to be decrypted in the GUI when the user has the appropriate permissions.
Fixed
- Attempting to save multiple default channels of the same type now results in a humanised error message.
- The OpsChain audit history screen now recognises the superuser role and display all events. Where a user is not the superuser, the security mappings have been corrected to ensure the user can view all events they have access to.
- MintModel changes will no longer remain stuck in
pendingand instead will run as expected. - The OpsChain DSL duplicate action definition error is now aware of resources and provides better errors.
- The Audit screen now displays all events the user has access to and respects the superuser role.
[2026-03-16]
Important breaking changes
- OpsChain agents must be stopped before upgrading. Following the upgrade, each agent image must be rebuilt, and then the agent can be started.
Added
- Changes and workflow runs can now be created via the event subscriber system. These activities will be tagged with the source event that triggered them, allowing you to click through to the source event in the GUI and view the event details.
Fixed
- OpsChain no longer reports an error for actions with the same name defined in different resources or namespaces.
- Resolved issue with step context validation for null requires_approval_from values.
- API documentation for the workflow create endpoint has been updated to include references to the
create_new_versionmeta attribute. - It is no longer possible to provide an empty array as the value for the
user_namesarray in therequires_approval_fromsetting.
Changed
- The workflow and change wait step notifications have been enhanced to provide additional information to the notified user.
- Stack traces in the event data are now displayed in a more readable format by the audit history screens.
[2026-03-13]
Important breaking changes
- MintPress now requires the
OPSCHAIN_GUI_BASE_URLvariable to be included in yourvalues.yamlfile. This variable should specify the base URL for the MintPress GUI (e.g.https://mintpress.example.com). It is required to ensure links within external notifications are valid and the OpsChain API pod will fail to startup if it is not configured. - OpsChain agents must be stopped before upgrading. Following the upgrade, each agent image must be rebuilt, and then the agent can be started.
Added
- Agents running in OpsChain are now configured with access to the API. Learn more.
- When using automated certificate management, the generated CA is now automatically loaded into the trusted CA store in OpsChain.
- When starting an agent, the desired image SHA can now be specified. This must be an image SHA that corresponds with an image build for the same template version. This means the agent can't be started until an image build has succeeded for the current template version.
- Events for action generation and agent tasks are now included in the event list API.
- Users can now configure their Slack member id in their notification preferences to receive notifications via Slack (requires a global Slack bot channel to be configured in the administration screens).
- If users have an email address configured in their LDAP record, or they supply a value in their notification preferences, this will be used to send email notifications to the user. (requires a global SMTP channel to be configured in the administration screens).
- Workflow wait steps and approval steps now notify the relevant user(s) that the workflow is waiting for approval/to be continued
- Change approval steps now notify the relevant user(s) that the change is waiting for approval.
- Users can now elect to be notified when:
- properties or settings are changed for a project, environment or asset they have access to.
- various workflow events (started, cancelled, completed, failed) occur for workflows they have access to.
- various change events (started, cancelled, completed, failed) occur for changes they have access to.
- A new event subscription system has been implemented allowing filters to be created to identify specific OpsChain events and then perform tasks in response. These tasks can be calling external webhooks, sending notifications to users or channels, or running changes or workflows.
Changed
- Agents, builds, changes and workflow runs will now be blocked if the log aggregator is stuck or unresponsive to minimize the risk of log loss. If this happens for a prolonged time, an event will be logged every 5 minutes warning about the issue. Once the log aggregator is back online, the blocked resources will resume their operations normally.
- The
agent.shscript is now run with all OpsChain properties environment variables exported. - Agents can't be started until their image is built.
- The asset list API no longer includes the following fields:
mintmodel_valid,actions, anderb_file_content. These can be retrieved from the asset show API. - The worker image settings (
worker.image_tag,worker.name, andworker.repository) can now be overridden in change settings. - OpsChain action definitions now use less memory (RAM).
- The
requires_approval_fromsetting for change approvals now accepts an object consisting of an array of usernames and an array of LDAP groups. - The notify tab of the create change and create workflow run dialogs has been redesigned to reflect the new notification preferences and channels.
Fixed
- The performance for some critical API endpoints has been improved.
- Fixed a bug where changes wouldn't respect the
allow_parallel.changessetting. - The
opschain-show-propertiesandopschain-show-contextcommands no longer loginfomessages to standard out, which fixes their use in a Linux pipeline when using repository properties.
[2026-02-23]
Added
- The MintPress Helm chart now supports configuring environment variables in the
opschain-image-registrypod. See the example in the chartvalues.yamlfor reference.
Fixed
- MintPress no longer attempts to connect to the LDAP server when LDAP authentication is not enabled.
[2026-02-20]
Added
- MintPress now supports agents, a mechanism for executing long-running agents.
- New Agents UI pages now allow you to view agent info, status, logs and events, as well as add, update and manage agents.
- New Agent settings section added under
Administration -> Configuration. - MintModel compare screen now automatically loads the last two MintModels for comparison.
- Text on the titlebar of all dialogs is now selectable and doesn't drag the dialog when trying to select text.
Changed
- Template versions Git SHA's are now only refreshed if the Git revision is changed, or the fetch is specifically requested.
- All settings are now encrypted at rest.
- The log aggregator now buffers logs in disk rather than memory, reducing the risk of losing logs if Fluentd can't flush them. The PVC size can be configured via the
logAggregator.volume.sizesetting in yourvalues.yamlfile. The default value is1GB. - Logs from step runners, template version action generation and agent tasks will now be buffered and their respective pods will try forwarding them to the log aggregator for up to 5 minutes before these logs are lost. Workers will now try forwarding change, step, build and workflow run transitions logs to the log aggregator until their memory buffers are full. If that happens, the logs will be written directly to the database, meaning they won't be sent to your additional log output plugins in case of a persistent log aggregator failure.
- The
memberscolumn from the LDAP groups table has been temporarily removed for an upcoming API change. - Visual overhaul to headers across all pages for a consistent look and feel focusing on UX improvements.
- All pages share the same header with distinct actionable sections for info, navigation, and context aware actions.
- Header badges to clearly differentiate between pages.
- Breadcrumbs are visually more subtle and now show dropdowns for listing workflows as well.
- Various fixes to workflow editor for increased reliability when editing details.
Fixed
- MintModel ERB rendering has been fixed.
- Fetch failures that are caused by remote files not existing now reflect this rather than reporting that the Git remote does not exist.
- Viewing converged properties for templated assets now include template-specific properties
- UI/UX fixes:
- Pressing escape after search on canvas view (tree renderers) closes the search box instead of not doing anything.
- The date and time selector component now has more compact time fields, ensuring they don't overflow the calendar's width area.
- The bookmarks component now shows the node type instead of the word "node".
- Various fixes to the workflow editor for increased reliability when editing details.
- The node navigation is now split in two sections (navigation and settings/properties) and has a refreshed design.
Known limitations
- MintPress agents debug logs are only available for the
event-ttlas configured in k3s. This is one hour by default.
[2026-01-27]
Important breaking changes
- MintPress database is now managed by the CNPG operator. Configuring the operator is required to successfully upgrade to this version. Before upgrading, follow the steps described in the install the CNPG operator section of the high availability setup guide to install the operator in your cluster. We recommend you read the entire guide to understand the upgrade implications and the new features provided by the operator. After installing the CNPG operator and upgrading MintPress, a new database cluster will be available in your Kubernetes cluster.
Added
- Changes (and scheduled changes) now support settings overrides. The
Dockerfilepath, the baserunnerimage settings, theworkerimage settings, themintmodel_executorimage settings, thepod_per_change_stepsetting, theremove_change_worker_podsetting, and therepo_foldercan now be overridden for a change. - Workflow runs now provide logging, highlighting the start and end of each step within the workflow run.
- Workflow wait steps now support a
reset_on_retryboolean attribute, allowing you to configure whether the wait step should be reset when the workflow run is retried. By default, this is set totrueto ensure approval/wait steps require a response during the retry. Note: if all steps that depend on the wait step were successful, the wait step will not be retried. - The current build context is now logged at the start of change logs, providing details of the Git revision and commit message the change is running from.
- The change retry API endpoint now accepts the
refresh_shaattribute. This allows you to retry incomplete change steps, using the latest commit for the branch/tag the change was created for. If the change is for a templated asset, this flag will cause the change to be retried using the template version currently assigned to the asset. - Workflow steps and change steps now include a
step_sequenceattribute, reflecting their position within the parent's step tree. - The change and workflow run GUI pages now support retry and repeat when displaying existing activities.
- The GUI breadcrumb connectors now provide a list of child items allowing you to quickly navigate to other items within the same parent.
Fixed
- Change worker pod startup failure is now reported in the relevant change's logs.
- Usernames are no longer case-sensitive.
- Active workflow runs can longer report a blocking queue.
- Workflow run retries no longer duplicate successful child changes and workflow runs.
- Workflow and change retries now respect the existing queue, ensuring they only start when the queue allows them to.
- Error reporting from the MintModel generation process has been standardised to ensure the JSON error response is structured consistently.
- The default memory limit for the OpsChain image registry has been increased to 1GiB to prevent out-of-memory issues.
- The user who approved/continued a workflow wait step is now copied to the retried workflow run's wait step.
- Various GUI formatting and overflow issues have been resolved.
[2025-12-11]
Added
- Added the following optional settings to the
values.yamlenvironment variables to provide additional LDAP configuration options:OPSCHAIN_LDAP_GROUPS_FILTER,OPSCHAIN_LDAP_USERS_FILTER,OPSCHAIN_LDAP_LOGGING_ENABLEDandOPSCHAIN_LDAP_USE_ADMIN_TO_BIND.
Fixed
- Fixed support for group filters in the Administration LDAP settings page.
[2025-12-10]
Added
- Template versions now have their own properties that will be applied to all assets using that template version.
- Introduced LDAP caching to reduce OpsChain's load on external LDAP servers.
- Template versions can now be locked to prevent updates to their attributes and related Git commit SHA.
- Improved logging of pod startup and shutdown events to assist with debugging.
- Change property overrides can now be modified within actions by using the
OpsChain.properties_for(:change)method. - Converged step properties can now be accessed for all change steps. Including the
action_stagequery parameter aspreorpostallows the caller to access the properties before or after each step has run. - Additional LDAP settings have been incorporated into the OpsChain settings to provide support for user and group filters.
- Workflow run override properties are now stored with each workflow run and are visible in the GUI.
Changed
- OpsChain's Helm charts are now available via OCI registry. Visit the installation documentation for more information on how to install and upgrade OpsChain using the new Helm charts.
- To improve caching, the default Dockerfile no longer copies the
.gitdirectory into the image by default. See the custom step runner Dockerfile documentation to see how to use a custom Dockerfile which will allow the contents of the.gitdirectory to be added to the image. - Build Dockerfiles and base images are now configurable via node-specific settings.
- Trow has been upgraded 0.9.2 and now has its own garbage collection process - removing the need for the OpsChain image registry garbage collector deployment.
- Fluentd has been updated to 1.19.1-2.1 deployment.
- Templates are now accessed via their UUID rather than template code to enable support for archiving templates.
- Introduced session specific caching of Rails cache values to reduce database load.
- The Database information panels have been enhanced in the Administration pages to provide more in-depth information.
- Authorisation meta has been added to template and template version API responses to indicate whether the user is authorised to update the resource.
- Workflow metadata is now copied into child changes and workflow runs when they are created.
- By default, duplicate definitions of an action no longer extend the action and instead raise an exception. This can be overridden by supplying the
ignore_defined: truekeyword argument.
Fixed
- Workflow status and change status background jobs have been optimized to ensure change and workflow statuses are updated in a timely manner.
- Worker pods are now correctly removed when a single pod change root step is cancelled.
- Uncategorised log lines are now assigned the action category by default.
- OpsChain worker images no longer report warnings relating to calling
fields,countandrecordsmethods on nil. - OpsChain worker heartbeat logic has been improved to resolve workers being restarted by Kubernetes.
- The API response performance has been improved across the majority of endpoints.
- The file name of invalid properties files, whether OpsChain file properties or Git repository properties files are reported in the action logs.
[2025-11-12]
Added
- Logs now include a category field. All the logs coming from OpsChain will be either
output,systemorstatus. Logs generated from user defined actions will have theactioncategory. - A helper UI has been added to allow uploading files to properties and optionally save the file content to the secret vault.
Changed
- The base runner Dockerfile has been optimized for performance. By default, it will no longer include the Git repository's
.gitfolder in the image. - Some workflow schemas have been updated. Refer to the API documentation for the latest version.
- The workflow editor has been improved for better usability.
- The log lines are now colored based on their category.
Important breaking changes
- OpsChain image registry has been updated and now includes an internal garbage collector. The upgrade process requires stopping OpsChain and running a few steps to ensure the garbage collector is working correctly:
- Stop OpsChain
- Delete the old statefulset:
kubectl delete statefulset.apps/opschain-image-registry - Delete the old garbage collector deployment:
kubectl delete deployment.apps/opschain-image-registry-gc - Deploy OpsChain with the new version and wait for it to be ready.
- Get the image registry persistent volume:
PV_NAME=$(kubectl get pvc/data-vol-opschain-image-registry-0 -o jsonpath='{.spec.volumeName}') - Ensure your KUBERNETES_NAMESPACE environment variable is set to the namespace of the OpsChain deployment. (e.g.
export KUBERNETES_NAMESPACE=opschain) - Go into the persistent volume's folder in the host filesystem (the path may vary if you are not using k3s):
cd /var/lib/rancher/k3s/storage/${PV_NAME}_${KUBERNETES_NAMESPACE}_data-vol-opschain-image-registry-0 - Update the file ownership:
chown -R 1000:3000 * - Enter the OpsChain API container:
kubectl exec -it deploy/opschain-api -- "/usr/bin/container_start.sh" "/bin/bash" - Once inside the container, do a manual copy of the runner images into the image registry:
bundle exec rake opschain:copy_runner_image
Fixed
- The policy rule editor now supports uppercase characters, dashes and colons in the rule name to allow matching namespaced actions.