{"id":13654164,"url":"https://github.com/anteo/redmine_custom_workflows","last_synced_at":"2026-01-16T20:28:23.707Z","repository":{"id":31691593,"uuid":"35257229","full_name":"anteo/redmine_custom_workflows","owner":"anteo","description":"Allows to create custom workflows for Redmine","archived":false,"fork":false,"pushed_at":"2025-09-29T12:05:28.000Z","size":507,"stargazers_count":192,"open_issues_count":20,"forks_count":73,"subscribers_count":33,"default_branch":"master","last_synced_at":"2025-09-29T12:14:07.809Z","etag":null,"topics":["redmine","redmine-plugin"],"latest_commit_sha":null,"homepage":"http://www.redmine.org/plugins/custom-workflows","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anteo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-05-08T03:46:26.000Z","updated_at":"2025-08-13T10:17:39.000Z","dependencies_parsed_at":"2024-01-05T14:31:17.547Z","dependency_job_id":"f7459a92-ba05-4d55-b65d-2001ad35cdc3","html_url":"https://github.com/anteo/redmine_custom_workflows","commit_stats":null,"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/anteo/redmine_custom_workflows","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anteo%2Fredmine_custom_workflows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anteo%2Fredmine_custom_workflows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anteo%2Fredmine_custom_workflows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anteo%2Fredmine_custom_workflows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anteo","download_url":"https://codeload.github.com/anteo/redmine_custom_workflows/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anteo%2Fredmine_custom_workflows/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28482267,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["redmine","redmine-plugin"],"created_at":"2024-08-02T02:01:24.220Z","updated_at":"2026-01-16T20:28:23.697Z","avatar_url":"https://github.com/anteo.png","language":"Ruby","funding_links":[],"categories":["Plugins"],"sub_categories":["Active Plugins"],"readme":"# Custom Workflows plug-in 3.0.2\n\n[![GitHub CI](https://github.com/anteo/redmine_custom_workflows/actions/workflows/rubyonrails.yml/badge.svg?branch=master)](https://github.com/anteo/redmine_custom_workflows/actions/workflows/rubyonrails.yml)\n[![Support Ukraine Badge](https://bit.ly/support-ukraine-now)](https://github.com/support-ukraine/support-ukraine)\n\nThis plug-in provides a great functionality for those who is familiar with the Ruby language.\nIt allows to customize workflow by defining own rules for issues processing. It's possible:\n\n* To change issue properties if some conditions are met.\n* To create new issues programmatically, if the conditions are met (for example you can create an issue in another \nproject if the status of source issue is changed to specific value).\n* To raise custom errors which will be displayed to the user, if he does something wrong.\n* To do anything that conforms to your needs.\n\nSupported observable objects:\n\n* Attachment\n* Group\n* Issue\n* Issue relations\n* Time entry\n* User\n* Member\n* Version\n* Wiki\n* \\\u003cShared code\\\u003e\n\n`\u003cShared code\u003e` - a special type for workflows that are running before all other workflows and can provide libraries of \nadditional functions or classes.\n\nThanks to\n---------\n\nThe initial development was supported by [DOM Digital Online Media GmbH](https://www.dom.de). The present development \nis supported by [Kontron](https://www.kontron.com)\n\nGetting help\n------------\n\nCreate an issue if you want to propose a feature or report a bug:\n\nhttps://github.com/anteo/redmine_custom_workflows/issues\n\nCheck Wiki for examples and programming hints:\n\nhttps://github.com/anteo/redmine_custom_workflows/wiki\n\nCheck this repo with some tested in work custom workflows:\n\nhttps://github.com/VoronyukM/custom-workwlows\n\nInstallation\n------------\n\nFrom a ZIP file:\n\n* Download the latest version of the plugin.\n* In case of an upgrade, remove the original *plugins/redmine_custom_workflows* folder.\n* Unzip it to /plugins.\n\nFrom the Git repository:\n\n* Clone  the repository:\n\n```shell\ncd redmine/plugins\ngit clone https://github.com/anteo/redmine_custom_workflows.git\n```\n\nAfter download:\n\n* Run migrations and restart the application:\n\n```shell\ncd redmine\nbundle install\nbundle exec rake redmine:plugins:migrate NAME=redmine_custom_workflows RAILS_ENV=production\nchown -R www-data:www-data plugins/redmine_custom_workflows\nsystemctl restart apache2\n```\n\nConfiguration\n-------------\n\nFirst, you need to define your own custom workflow(s). We already included one, called \"Duration/Done Ratio/Status \ncorrelation\". You'll find it after installing the plug-in. It demonstrates some possibilities of the plug-in.\n\nGo to the **_Administration_** section, then select **_Custom workflows_**. A list of defined workflows will appear. Here \nyou can create a new workflow, update, reorder or delete the existing workflows. The order of workflows specifies the \norder in which the workflow scripts will be executed.\n\nThen click the **Create a custom workflow** button. Enter a short name and full description. Below you will see two text \nareas. Fill one or both text areas with Ruby-language scripts that will be executed before and after saving the issue \n(on _before_save_ and _after_save_ callbacks respectively).\n\nBoth scripts are executed in the context of the issue. So, access properties and methods of the issue directly (or \nthrough keyword `self`). You can also raise exceptions by raising `RedmineCustomWorkflows::Errors::WorkflowError` exception. \nIf you change some properties of the issue before saving it, it will be revalidated then and additional validation errors \ncan appear.\n\nE.g.:\n\n```ruby\n  raise RedmineCustomWorkflows::Errors::WorkflowError, 'Your message'\n```\n\nYou can also display an info/warning/error message to the user using an observed object property `custom_workflow_messages`.\n\nE.g.:\n\n```ruby\n  self.custom_workflow_messages[:notice] = 'Custom workflow info'\n  self.custom_workflow_messages[:warning] = 'Custom workflow warning'\n  self.custom_workflow_messages[:error] = 'Custom workflow error'\n```\n\nSome environmental variables are available in observable objects.\n\nE.g.:\n\n```ruby\nself.custom_workflow_env[:remote_ip]\n```\n\nAn email can be sent from within a script.\n\nE.g.:\n\n```ruby\nCustomWorkflowMailer.deliver_custom_email(user, subject: subject, text_body: text)\n```\n\nEnabling custom workflows for projects\n--------------------------------------\n\nAfter you defined your custom workflow(s), you need to enable it for particular project(s). (This is valid for project \nrelated observable objects.) There are two ways of doing \nthis.\n* While editing existing or creating a new custom workflow;\n* In the project's settings (if the user has appropriate permission). Open **_Project settings_**. Go to \n**_Custom workflows_** tab of the project's settings and enable those workflows you need for this project.\n\nNow go to the **_Issues_** and test it.\n\nExamples\n--------\n\n### Duration/Done Ratio/Status correlation example\n\nFill the \"before save\" script with:\n\n```ruby\nif done_ratio_changed?\n    if (done_ratio == 100) \u0026\u0026 (status_id == 2)\n      self.status_id = 3\n    elsif [1,3,4].include?(status_id) \u0026\u0026 (done_ratio \u003c 100)\n      self.status_id = 2\n    end\nend\n\nif status_id_changed?\n    if (status_id == 2)\n      self.start_date ||= Time.now\n    end\n    if (status_id == 3)\n      self.done_ratio = 100\n      self.start_date ||= created_on\n      self.due_date ||= Time.now\n    end\nend\n```\n\n### Example of creating subtask if the issue's status has changed\n\nFill the \"before save\" script with:\n\n```ruby\n@need_create = status_id_changed? \u0026\u0026 !new_record?\n```\n\nFill the \"after save\" script with:\n\n```ruby\nif @need_create\n    issue = Issue.new(\n      author: User.current,\n      project: project,\n      tracker: tracker,\n      assigned_to: author,\n      parent_issue_id: id,\n      subject: 'Subtask',\n      description: 'Description')\n    issue.save!\nend\n```\n\nDo not forget to check whether the issue is just created. Here, we create a new issue and newly created issue will also \nbe passed to this script on save event. So, without a check, it will create another sub-issue. And so on. Thus, it will \nfall into infinite loop.\n\nCompatibility\n-------------\n\nThis plugin requires **Redmine 6.x** to function properly. Ensure that your Redmine installation is up-to-date before proceeding with the installation.\n\nIf you are using an older version of Redmine, please check the available plugin releases:  \n👉 [Redmine Custom Workflows Releases](https://github.com/anteo/redmine_custom_workflows/releases)  \n\n**Note:**  \nWhen downloading the plugin from a ZIP file, ensure that the extracted folder does **not** contain version numbers in its name (e.g., `redmine_custom_workflows-3.0.0`). Rename the folder to just `redmine_custom_workflows` before proceeding with the installation to avoid any compatibility issues.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanteo%2Fredmine_custom_workflows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanteo%2Fredmine_custom_workflows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanteo%2Fredmine_custom_workflows/lists"}