{"id":48133059,"url":"https://github.com/aliraxa29/automated_action","last_synced_at":"2026-04-07T19:00:46.532Z","repository":{"id":348466317,"uuid":"1198144660","full_name":"aliraxa29/automated_action","owner":"aliraxa29","description":"No-code workflow automation for the Frappe Framework","archived":false,"fork":false,"pushed_at":"2026-04-02T11:27:52.000Z","size":71,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2026-04-05T17:02:42.775Z","etag":null,"topics":["automation","erpnext","frappe","odoo"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aliraxa29.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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":"2026-04-01T06:46:44.000Z","updated_at":"2026-04-03T08:46:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"b4b34f50-4a0c-4c23-b6c2-a301597cfc68","html_url":"https://github.com/aliraxa29/automated_action","commit_stats":null,"previous_names":["aliraxa29/automated_action"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aliraxa29/automated_action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aliraxa29%2Fautomated_action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aliraxa29%2Fautomated_action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aliraxa29%2Fautomated_action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aliraxa29%2Fautomated_action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aliraxa29","download_url":"https://codeload.github.com/aliraxa29/automated_action/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aliraxa29%2Fautomated_action/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31483380,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"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":["automation","erpnext","frappe","odoo"],"created_at":"2026-04-04T16:41:11.554Z","updated_at":"2026-04-06T18:00:30.362Z","avatar_url":"https://github.com/aliraxa29.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Automated Actions\n\n**No-code workflow automation for the [Frappe Framework](https://frappeframework.com)**\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Frappe](https://img.shields.io/badge/Frappe-v15-blue.svg)](https://frappeframework.com)\n\n\u003c/div\u003e\n\n---\n\n## Overview\n\n**Automated Actions** lets you create powerful automation rules that trigger when documents are created, updated, deleted, or at scheduled intervals — all without writing code.\n\nDefine conditions, pick an action, and let the app handle the rest.\n\n### Key Features\n\n- **Event-driven triggers** — Fire rules on Create, Update, Delete, or any combination\n- **Time-based triggers** — Schedule actions relative to a date field (e.g., 7 days after creation)\n- **Conditional execution** — Filter on before/after document state using Frappe-style JSON filters\n- **Field-level tracking** — Trigger only when specific fields change\n- **Six built-in actions:**\n  - Update Record — Set field values on the current document\n  - Create Record — Auto-create linked documents\n  - Execute Python Code — Run sandboxed Python with Jinja2 templating\n  - Send Email — Send templated emails to document owner or custom fields\n  - Create ToDo — Generate tasks and assign to users\n  - Add Comment — Post audit-trail comments\n- **Test Run** — Preview matching documents before enabling a rule\n- **Security** — Sandboxed Python execution with blocked dangerous patterns, recursion prevention\n\n## Requirements\n\n- Python 3.10+\n- [Frappe Framework](https://frappeframework.com) v15+\n\n## Installation\n\nYou can install this app using the [bench](https://github.com/frappe/bench) CLI:\n\n```bash\ncd $PATH_TO_YOUR_BENCH\nbench get-app https://github.com/aliraxa29/automated_action --branch version-15\nbench --site your-site.localhost install-app automated_actions\n```\n\n## Usage\n\n1. Navigate to **Automated Action** list in the Frappe desk\n2. Click **+ Add Automated Action**\n3. Select a **Document Type** (e.g., Sales Order, ToDo, etc.)\n4. Choose a **Trigger** — when should this rule fire?\n5. Define **Conditions** (optional) — JSON filters on old/new document values\n6. Pick an **Action Type** and configure it\n7. Save and enable the rule\n\n### Example: Auto-close stale tasks\n\n| Setting | Value |\n|---|---|\n| Document Type | `ToDo` |\n| Trigger | `Based on Time Condition` |\n| Trigger Date Field | `creation` |\n| Delay | `30 Days` |\n| Condition | `[[\"status\", \"=\", \"Open\"]]` |\n| Action Type | `Update Record` |\n| Field Update | `status` → `Closed` |\n\n### Condition Syntax\n\nConditions use Frappe-style JSON filter arrays:\n\n```json\n[[\"status\", \"=\", \"Open\"], [\"grand_total\", \"\u003e\", 1000], [\"customer_name\", \"like\", \"%Corp%\"]]\n```\n\nSupported operators: `=`, `!=`, `\u003e`, `\u003c`, `\u003e=`, `\u003c=`, `like`, `not like`, `in`, `not in`, `is`\n\n### Template Variables\n\nField values support Jinja2 templates:\n\n| Variable | Description |\n|---|---|\n| `{doc.fieldname}` | Any field on the current document |\n| `{today}` | Current date |\n| `{now}` | Current datetime |\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details on:\n\n- Setting up a development environment\n- Code style and linting\n- Submitting pull requests\n- Reporting bugs\n\n## Development Setup\n\n1. Set up a Frappe bench (see [Frappe docs](https://frappeframework.com/docs/user/en/installation))\n2. Install the app in development mode:\n   ```bash\n   bench get-app https://github.com/aliraxa29/automated_action --branch version-15\n   bench --site your-site.localhost install-app automated_actions\n   ```\n3. Enable pre-commit hooks:\n   ```bash\n   cd apps/automated_actions\n   pre-commit install\n   ```\n\n### Code Quality Tools\n\nThis project uses the following tools (enforced via pre-commit):\n\n| Tool | Purpose |\n|---|---|\n| [ruff](https://github.com/astral-sh/ruff) | Python linting \u0026 formatting |\n| [eslint](https://eslint.org/) | JavaScript linting |\n| [prettier](https://prettier.io/) | JavaScript/JSON formatting |\n| [pyupgrade](https://github.com/asottile/pyupgrade) | Python syntax modernization |\n\n### Running Tests\n\n```bash\ncd $PATH_TO_YOUR_BENCH\nbench --site your-site.localhost run-tests --app automated_actions\n```\n\n## CI/CD\n\nGitHub Actions workflows are configured:\n\n| Workflow | Trigger | Description |\n|---|---|---|\n| **Server Tests** | Push to `develop` and `version-15`, PRs | Installs app, runs unit tests (MariaDB, Redis, Python 3.10, Node 18) |\n| **Pre-commit** | Pull requests | Runs repository formatting and lint hooks exactly as contributors run them locally |\n| **Linters** | Pull requests | [Frappe Semgrep Rules](https://github.com/frappe/semgrep-rules) and [pip-audit](https://pypi.org/project/pip-audit/) |\n| **Semantic Commits** | Pull requests | Validates commit messages for release automation |\n| **Generate Semantic Release** | Push to `version-15` | Publishes releases using semantic-release |\n\n## Security\n\nIf you discover a security vulnerability, please report it responsibly. See [SECURITY.md](SECURITY.md) for details.\n\n## License\n\nThis project is licensed under the [MIT License](license.txt).\n\nCopyright © 2026 Ali Raxa\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faliraxa29%2Fautomated_action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faliraxa29%2Fautomated_action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faliraxa29%2Fautomated_action/lists"}