Changelog
OpsChain should be upgraded sequentially, one version at a time. Skipping versions may result in data loss and unexpected behaviour.
Follow the upgrade guide for more information on how to upgrade OpsChain.
[2026-06-29]
Added
- The Git fetch command is now logged at the start of the fetch output, making it easier to diagnose connectivity and authentication failures by showing the exact command OpsChain ran. See activity details for more information.
- The FUSE device plugin daemonset now supports additional environment variables via
fuseDevicePlugin.envinvalues.yaml. See fuseDevicePlugin.env for details. - Administrators now have a Clusters tab in the system information area that shows every high availability cluster's deployment configuration. You can compare two clusters against each other to spot configuration drift, and compare versions of a cluster's recorded configuration over time.
- Authentication settings can now be configured via the GUI in the system configuration page.
- The name of the cluster you are currently connected to is now shown in the version info dialog.
- If an editable setting is misconfigured in a way that prevents you from signing in, an operator can now recover by overriding it from the deployment. Setting
OPSCHAIN_OVERRIDE_<SETTING>in yourvalues.yamlre-applies the supplied value to the matching setting on the next boot, and the override is recorded in the audit history. See overriding a database setting from a deploy for more information. - Concurrent image builds can now be throttled to improve performance on busy clusters. See image build settings for details.
- Forked step processes now set a meaningful process title (e.g.
opschain-action deploy,mintpress_ctl.rb run_action) so that active steps are identifiable by their script and action in process monitoring tools such aspsortop. See identifying running OpsChain processes for more information. - The expected actions tree for an asset now expands MintModel steps in an
actions.rbchange to include their full tree — matching what will execute at runtime. For more information about running MintModel steps from anactions.rb, see running MintModel actions as child steps. - It is now possible to skip specific steps when starting or retrying a change or workflow run. Set a
skip_stepsarray of glob patterns on the change, workflow run, scheduled change, or scheduled workflow — any step whose identifier matches a pattern is automatically skipped at runtime (full_pathis matched for change steps; MintModel steps are matched by their hierarchical step name as it appears in the step tree (e.g.**/Install jdk Binaries);namefor workflow steps). See skipping steps for more information.- The mask is carried forward automatically on retry, so previously-skipped steps remain skipped without needing to be resubmitted. It can also be overridden at retry time.
- Approval steps are always exempt — a step with
requires_approval_fromset will run regardless of any matching pattern. - Creating or retrying a change where
skip_stepswould skip the root step is rejected with a validation error.
- A new
runner.use_fork_for_mintpress_ctl_rbsetting controls whether the MintModel executor forks or spawns a new process when runningmintpress_ctl.rb. The default (true) preserves existing behaviour; set tofalseto run in a new process instead. - Assigning a template version to multiple assets at once now automatically refreshes each asset's actions, so the available actions reflect the newly assigned version without a manual refresh. If an asset's actions cannot be refreshed, the assignment still succeeds and the affected assets are reported in the response warnings.
- The settings editors now provide JSON schema autocomplete and inline validation. As you edit the settings for a project, environment, asset, agent, or template version (or the system configuration), you now get key and value suggestions and invalid keys are flagged, matching the schema the server enforces on save.
- The image build logs now show the commit author alongside the commit SHA and message, making it easier to identify who authored the code an image was built from.
- It is now possible to update an existing Git remote's URL, allowing its credentials, scheme, or port to be changed without recreating the remote. The host and repository path are immutable — a URL that points the remote at a different repository is rejected, since the existing clone and recorded commit SHAs are tied to the original. As when creating a remote, superusers can opt to scan and trust the new host's SSH key when switching to an SSH URL.
- Git remotes that use an SSH URL now accept a dedicated passphrase for the SSH key, kept separate from HTTP(S) passwords. SSH key data is required when using an SSH URL, and supplying a passphrase for a non-SSH remote (or a password for an SSH remote) is rejected with a clear error.
- Two additional settings are now configurable from the admin settings page in the GUI:
git_remote.fetch_stale_threshold, which controls how long OpsChain waits before retrying a stale in-progress Git fetch, andlog.step_pod_events, which controls whether Kubernetes pod events are included in step logs. - When a MintModel generation fails, a "View generated MintModel" button is now shown alongside the error, allowing you to inspect whatever partial output was produced before the failure.
- The workflow editor now offers autocomplete suggestions when configuring child steps, making it easier to select the correct step name without having to remember exact identifiers.
Fixed
- Fixed an issue where cancelling the generation of an asset's actions could leave the asset displaying actions belonging to a different asset.
- Fixed a rare issue where registering a value for sensitive-data masking could cause a step to hang indefinitely if the masker was unavailable. Masking now uses a bounded timeout with retries, so the step fails promptly instead of hanging.
- You can now trust additional SSH hosts for Git authentication via the new
known_hostsglobal setting, without replacing the bundledknown_hostsfile. Entries are merged with the bundled defaults, and because they are stored in the database they are preserved across Helm upgrades and redeploys and replicate across high availability clusters. Each entry is validated when saved, so malformed lines are rejected. See adding entries via theknown_hostssetting for more information. - When creating a Git remote, superusers can now opt to automatically scan and trust the remote's SSH host key. OpsChain registers the scanned key in the
known_hostssetting before testing connectivity (trust on first use), so a remote can be added even when its host was not previously trusted. The scanned entry is returned in the response, and the operation is restricted to superusers. - Fixed an issue where the step input arguments form was not rendering correctly after an API response format change, causing arguments to be displayed incorrectly or not at all.
- Fixed an issue where MintModel generation errors were not correctly surfacing any partial results or the phase output and render log viewer buttons.
- Fixed an issue in the workflow step tree where an incorrect change label was shown in the tooltip on workflow run steps.
Changed
- The installation guide has been updated to limit access to the installation user and clarify the required sudo privileges.
- Settings that can be configured via the GUI or API no longer require a restart of the OpsChain API to take effect.
- A defined set of settings is now managed by the deployment. These are only configurable via your
values.yamlfile and apply at install and upgrade time. See settings managed by the deployment for the full list. - The
skip_on_retryattribute on steps is now computed from the owning change's or workflow run'sskip_stepsarray. Patching a step withskip_on_retry: true/falsecontinues to work and translates into an update to that array.skip_on_retryis deprecated and will be removed in a future release. Migrate toskip_stepson the change or workflow run. See skipping steps for more information. - Image builds now pull
docker.iobase images through the bundled in-cluster registry mirror rather than reaching out to Docker Hub directly, reducing external egress and avoiding Docker Hub rate limits. - When debug mode is enabled for an asset, the MintModel render logs now also include the MintPress context, the asset's properties, the filtered properties, and the MintPress properties supplied to the MintModel Steps API, making MintModel generation failures easier to diagnose.
- The Git remote add and edit form has been redesigned with a clearer HTTPS/SSH credential selector. When editing an existing remote, the URL can now also be updated directly in the form.
- The MintModel "Latest" tab now independently fetches the freshest asset state each time it is opened, ensuring the view always reflects up-to-date data.
- When an asset does not have a valid MintModel, the messaging on the "Latest" tab has been simplified — detailed error information is no longer shown inline, and instead a direct link to the Generate tab is provided.
- The admin settings page has been reorganised: Authentication settings now have their own dedicated section, the API settings section has been removed, and Build service settings have been consolidated into a single section.
[2026-06-18]
Added
- Container image builds now automatically retry up to 3 times when a transient BuildKit error is detected (e.g. a gRPC connection drop). The retry count is configurable via the
build_service.max_image_build_retriessetting. - A new
OpsChain.stephelper creates a composable wrapper step that combines wait, input, and ignore failure behaviours in a single call. See the step wrapper documentation for more information. - A new
OpsChain.ignore_failure_stephelper is available for wrapping actions as child steps. It creates a thin wrapper action withignore_failure: trueso the change continues even if the step fails. See the ignore failure steps documentation for more information. This is particularly useful for MintModel steps which can't be marked asignore_failurein theactions.rbnatively. - A new
OpsChain.queryhelper allows action code to query the OpsChain API server directly, retrieving live node, MintModel, properties, or settings data during a change. The request authenticates with the short-lived API key injected into the step context, which is only generated when thetoken.change_api_key_expiry_days(ortoken.agent_api_key_expiry_days) setting is enabled. See the querying the API documentation for more information. - The Git logs can now be viewed whilst a template version is being refreshed.
- API responses now support sparse fieldsets, allowing clients to restrict the fields returned for each resource type using
fields[resource_type]=field1,field2query parameters. See the sparse fieldsets guide for more information. - The steps API now returns an additional
descriptionfield. This is populated for MintModel steps, to provide additional details. - A new
git_remote.fetch_stale_thresholdsetting controls how long OpsChain will wait for an in-progress Git fetch before performing a fresh fetch of its own. See the Git remote settings documentation for more information. - An event is now created when the actions are regenerated for an asset.
- A timestamp now shows how long it took to generate a MintModel when running a change.
- New
on_failure.dump_propertiessetting controls whether resolved resource properties are dumped to the change logs, when a resource controller fails during a change. See theon_failure.dump_propertiesdocumentation for more information. - New
controller.mask_propertiessettings controls whether sensitive properties supplied to resource controllers are added to the data masker prior to being supplied to the controller. See thecontroller.mask_propertiesdocumentation for more information. - The list MintModels and list MintModel history API endpoints now support the
limitquery parameter to restrict results and filtering and sorting viafilterquery parameters. See the API filtering & sorting guide for more information. - The MintModels and MintModel history API endpoints now support the
includequery parameter, allowing related resources (e.g.mintmodel_history,mintmodel,opschain_changes) to be sideloaded in a single request. The MintModel history show endpoint includesmintmodelandopschain_changesby default; passinclude=(empty) to suppress them. - Step tree search — a search bar is now available at the top of the step tree on changes, workflow runs, and workflow overviews. You can type to highlight matching step names and navigate through results with the arrow keys or Enter, making it much easier to locate a specific step in large or complex runs.
- Step status filter badges — the step tree header now shows a summary of how many steps are in each status (running, waiting, failed, succeeded, etc.). Clicking a status badge highlights all matching steps on the canvas and jumps to the first one, allowing you to quickly focus on steps that need attention without scrolling through the entire tree.
- Canvas minimap — a minimap overlay now appears in the bottom-right corner of the step tree canvas for changes, workflow runs, and workflow overviews. You can click or drag on the minimap to jump to any part of the tree, which is particularly useful for large runs with many steps.
- Canvas zoom and fit controls — zoom in, zoom out, fit-to-view, and fit-to-width buttons are now available on the step tree canvas. These controls appear as a floating toolbar, replacing the need to use the scroll wheel alone.
- Expand/collapse by depth level — the step tree toolbar now includes controls to expand or collapse the tree to a specific depth level. You can step through levels one at a time, making it easier to get an overview of a large change before drilling into details.
- MintModel phased output viewer — when viewing the latest or generated MintModel for an asset, a "View phased outputs" button is now available when phase output data exists. This opens a panel showing the asset's data at each stage of the MintModel generation pipeline (initial, post-scaleout, post-business-rules, post-resolve, and final). You can also compare any two phases side by side using a diff view.
- Note: this is only shown when
enable_mintmodel_debugis present and set totrueunder the asset settings.
- Note: this is only shown when
- MintModel render logs viewer — a "View render logs" button now appears on the MintModel page when render logs are available, allowing you to inspect the raw output from the rendering process.
- Git revision fetch progress — when a template version is fetching its git revision, a live progress indicator now appears showing the current fetch stage (e.g. counting objects, receiving objects) along with a percentage. A full scrollable log of the fetch output can be viewed by clicking the indicator.
- Assets table additional columns — the assets listing table now shows the assigned template name, template version number and state, and the status of action generation (e.g. "Generated", "Generating", "Not available") for each asset. MintModel assets are also labelled directly in the Name column.
- Data cleanup audit history filter — a new option to delete audit history (jobs) is now available in the data cleanup configuration, with an optional age filter so that only records older than a specified number of days are removed.
- Audit history richer source links and detail — events in the audit history now include contextual links directly to the relevant resource (change, step, template version, workflow, scheduled activity, git remote, policy, etc.). Hovering a source link shows a tooltip with key details such as status, action, project, and who created it. The individual event detail page now presents the message, path, and progress log as distinct readable sections rather than a raw JSON dump.
- Audit history project and workflow names in source — where previously only internal codes were shown, source links in the audit history now display human-readable names for projects and workflows.
- Bulk delete for authorisation policies — You can now select multiple authorisation policies from the table and delete them all at once using the new "Bulk actions" menu. A confirmation dialog lists the policies to be deleted before anything is removed, and any failures are reported individually without blocking the rest of the deletions.
Fixed
- When generating a MintModel, a new history record is now only skipped if the asset's most recent MintModel history entry already references the same MintModel. Previously, any existing history entry for the same MintModel would be reused, meaning a return to an older model state would not be recorded in the asset's history.
- Fixed use of nested MintModel steps within an
actions.rb(it would inconsistently fail before). - Orphaned template versions whose parent template had been deleted are removed on upgrade. An
opschain:migration:updateevent is created for each removed record to allow for auditing. - Orphaned MintModel history records whose parent MintModel no longer exists are removed on upgrade. An
opschain:migration:updateevent is created for each removed record to allow for auditing. - Fixed conversion of WebLogic property names by forcing the
activesupportcamelcase implementation inmintpress_ctl.rb. - Audit history invalid source links — source links were previously broken for several event types including deleted resources, scheduled activities, git remotes, and authorisation policies. These now resolve correctly.
- MintModel compare wrong versions loaded — selecting a MintModel version to compare was previously using an incorrect identifier, causing the wrong data to be loaded. This has been corrected.
- Logs from MintModel steps that were shown on error cleanup are now shown as expected.
- Actions list sorted alphabetically (case-insensitive) — The list of actions available on an asset is now sorted in a consistent case-insensitive alphabetical order, so actions starting with uppercase or lowercase letters appear in the expected position rather than grouped by case.
- Git remote link on change details was broken — The link to the git repository on the change detail page was navigating to the truncated display label instead of the full URL. This has been corrected so the link always opens the right destination.
Changed
- MintModel generation is now skipped during change initialisation when a cached model already exists for the current properties. This avoids a redundant MintModel API call when the asset's MintModel and properties have not changed since the last generation.
- MintModel "Latest" tab — the latest MintModel view now shows when the MintModel was generated, and surfaces phase output and render log buttons directly in the toolbar when available. If the asset does not have a valid MintModel, a clear message is shown with a Retry button and a shortcut to the Generate tab.
- MintModel "Compare" tab — the compare view now fetches its own history independently rather than relying on shared data, and errors during loading are handled gracefully with a proper error state.
- Audit history refresh rate — the audit history page now refreshes every 5 seconds (previously 15 seconds) so that new events appear more promptly.
- The OpsChain pods now enforce
runAsNonRoot: trueand avoid entering the pod as root. - The LDAP refresh events now carry more detail. The start events record the search base, filter, and timeout, the success event records the per-type entry counts (distinguishing freshly searched counts from cached counts when a type is skipped) and the elapsed search time for each type searched, and all refresh events now include the LDAP host and port. A start event is now only emitted when a filter is actually searched, avoiding a misleading event when the group filter is absent or invalid.
[2026-06-04]
Added
- The
api.env,apiWorker.env,imageCopyJob.env,ldap.env,logAggregator.env,mintModelApi.env,mintModelStepsApi.env, andregistryReconcile.envvalues.yamlsettings have been added to allow additional environment variables to be injected into their respective containers. See the additional settings guide for more information. - The MintModel executor now logs the
mintpress_ctl.rbcommand that will be run during MintModel steps. - An
actions.rbfile can now run steps defined by the asset's MintModel. Learn more. - You can now compare any two nodes (projects, environments, assets, or agents) side by side. The comparison shows differences in settings, properties, assigned templates, agents, and MintModel output between the two nodes. An indicator is shown on the node when it is part of an active comparison.
- A new LDAP refresh button is available in the Manage Security section to manually trigger an LDAP directory sync without having to wait for the next scheduled refresh.
- A new deletable permission can now be configured in authorisation policies, giving finer control over who can delete resources.
Changed
This upgrade modified the default PostgreSQL settings for the database cluster. When deploying, this will cause a short downtime of the database cluster. To avoid any downtime, you can increase the number of database replicas locally and set the db.cnpg.primaryUpdateMethod setting to switchover in your values.yaml file before deploying. See the database settings documentation for more information.
- The PostgreSQL settings have been adjusted to improve performance in production workloads.
- The registry reconciliation job is now enabled by default. To disable it, you must now set the
registryReconcile.enabledsetting tofalsein yourvalues.yamlfile before deploying. See the image cleanup settings and the container image cleanup guides for more information. - The
worker.*andmintmodel_executor.*settings have been removed and consolidated into therunner.*settings.- The existing
worker.*ormintmodel_executor.*settings (globally, for projects, for environments, and for assets) are automatically migrated torunner.*on upgrade (but not for changes). Note, if you used these settings you must audit the updates - see theopschain:migration:updateevent referenced below. - The
worker.reuse_actions_rbsetting is nowrunner.reuse_actions_rb. - An
opschain:migration:updateevent is created for the settings that were changed during upgrade to allow for auditing. - Note: changes that had override settings for
worker.*ormintmodel_executor.*won't be able to be retried after this update (they can still be repeated, but you will need to update the settings).
- The existing
- The agent base image is now based on the same image as the runner, executor and worker.
- Locally authenticated user accounts can now log in to OpsChain whilst the LDAP server is inaccessible (without needing to change any config).
- The asset's MintModel history is now updated when actions are refreshed (if the MintModel has changed). Previously, the MintModel used during action refresh was not saved to the asset's history.
- LDAP integration has been modified to use a background job to synchronise a local store of the LDAP users and groups. See the LDAP synchronisation settings documentation for more information on the new LDAP settings.
- The template type field is now read-only when editing an existing template, preventing accidental changes to a type that may already be in use.
- The worker image configuration fields (repository, name, and tag) have been removed from the runner configuration page in Admin settings, as these are no longer managed from the GUI.
- MintModel generation changes:
- it now provides more explicit details of failures found when parsing
libclasses and modules. - a new
enable_mintmodel_debugsettings has been added to enable extra debug logging for MintModel generation. OpsChain.contextandOpsChain.propertiesare now available within your ERB template to provide more context when concretising the MintModel.
- it now provides more explicit details of failures found when parsing
Fixed
- The edit option in the template actions menu was not opening the edit dialog correctly. This has been fixed.
- The link to update a git remote from the template layout actions was pointing to the wrong location. This has been fixed.
- When opening the edit dialog for an existing template, the form fields were not being filled in with the current values. This has been fixed.
- Navigating to the latest MintModel tab could show stale data. It now re-fetches automatically when the tab is opened.
- When validating multiple template versions with the same commit, the first validation result no longer causes the others to be removed.
- The
create_local_usertask can now be used when the LDAP server is unreachable. - The performance of the back end queries that support the policy administrator screens have been improved.
- The Activities queries have been optimised to improve performance when there are large numbers of activities and user authorisation rules.
[2026-05-26]
Added
- The authorisation of scheduled activities has been improved.
- A job to clean up images from the OpsChain image registry has been added and can be configured via the
values.yamlfile. See the image cleanup settings and the container image cleanup guide for more information.
Changed
- The runner, executor and worker images are all based on the same base image.
- This means the
mintpressuser has been removed from the image, hence the image always runs asopschain. - The
/opt/mintpresspath still exists and contains the MintPress SDK. - The home directory of the
opschainuser remains/opt/opschain. - The
worker.nameconfiguration default has been updated toopschain-runner-enterprise. This is an automated update.
- This means the
[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. - To verify before updating, go to the "administration"->"configuration" screen in the GUI. Switch to "advanced mode" and view the value of "token"->"secret_key". A value must be present, for example
{AES2}+abyGjcoVen3vRw76L2CpQ=={/IV}U.... If the value is not present, set it to a 128 character long random string (for example a value generated by the following Ruby code:SecureRandom.hex(64)). Note: once the value is updated you will likely encounter the known issue below. - See the troubleshooting guide if necessary.
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. See identifying running OpsChain processes for more information. - 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. See the troubleshooting guide for more information.
- 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.