{"id":50965154,"url":"https://github.com/sakuli/sakuli","last_synced_at":"2026-06-18T19:03:10.134Z","repository":{"id":42210352,"uuid":"155547898","full_name":"sakuli/sakuli","owner":"sakuli","description":"Version 2 of Sakuli E2E-Testing and Monitoring Platform.","archived":false,"fork":false,"pushed_at":"2023-03-04T02:59:19.000Z","size":11089,"stargazers_count":48,"open_issues_count":29,"forks_count":8,"subscribers_count":5,"default_branch":"develop","last_synced_at":"2025-08-08T21:58:42.979Z","etag":null,"topics":["e2e-monitoring","e2e-testing","monitoring","native-ui","nodejs","testing","typescript"],"latest_commit_sha":null,"homepage":"https://sakuli.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sakuli.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"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}},"created_at":"2018-10-31T11:41:43.000Z","updated_at":"2025-05-27T09:42:32.000Z","dependencies_parsed_at":"2024-06-19T01:54:24.882Z","dependency_job_id":"1d9ae2c4-c41b-4272-b1ce-9fef19d8022e","html_url":"https://github.com/sakuli/sakuli","commit_stats":{"total_commits":1530,"total_committers":18,"mean_commits":85.0,"dds":0.7143790849673203,"last_synced_commit":"2ee56e1c46da5894bf674a8cd0ce057d1dfbacfd"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/sakuli/sakuli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakuli%2Fsakuli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakuli%2Fsakuli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakuli%2Fsakuli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakuli%2Fsakuli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sakuli","download_url":"https://codeload.github.com/sakuli/sakuli/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakuli%2Fsakuli/sbom","scorecard":{"id":796171,"data":{"date":"2025-08-11","repo":{"name":"github.com/sakuli/sakuli","commit":"2ee56e1c46da5894bf674a8cd0ce057d1dfbacfd"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/cd.yml:1","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 1/11 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cd.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/cd.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cd.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/cd.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cd.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/cd.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cd.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/cd.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cd.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/cd.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cd.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/cd.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cd.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/cd.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cd.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/cd.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cd.yml:73: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/cd.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cd.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/cd.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cd.yml:89: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/cd.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:80: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:90: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:102: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/ci.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/release.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/release.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/release.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/release.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/release.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/release.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/release.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/release.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:73: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/release.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/release.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:91: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/release.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:97: update your workflow using https://app.stepsecurity.io/secureworkflow/sakuli/sakuli/release.yml/develop?enable=pin","Warn: npmCommand not pinned by hash: scripts/release.sh:25","Info:   0 out of  21 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  15 third-party GitHubAction dependencies pinned","Info:   9 out of  10 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 23 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"48 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-h5c3-5r3r-rr8q","Warn: Project is vulnerable to: GHSA-rmvr-2pp2-xj38","Warn: Project is vulnerable to: GHSA-xx4v-prfh-6cgc","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-j9fq-vwqv-2fm2","Warn: Project is vulnerable to: GHSA-pqw5-jmp5-px4v","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp","Warn: Project is vulnerable to: GHSA-wf5p-g6vw-rhxx","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-hm92-vgmw-qfmx","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-fj58-h2fr-3pp2","Warn: Project is vulnerable to: GHSA-xvf7-4v9q-58w6","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-vp56-6g26-6827","Warn: Project is vulnerable to: GHSA-x565-32qp-m3vf","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-pq67-2wwv-3xjx","Warn: Project is vulnerable to: GHSA-8cj5-5rvv-wf4v","Warn: Project is vulnerable to: GHSA-776f-qx25-q3cc","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T09:02:26.237Z","repository_id":42210352,"created_at":"2025-08-23T09:02:26.237Z","updated_at":"2025-08-23T09:02:26.237Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34503511,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["e2e-monitoring","e2e-testing","monitoring","native-ui","nodejs","testing","typescript"],"created_at":"2026-06-18T19:03:09.126Z","updated_at":"2026-06-18T19:03:10.115Z","avatar_url":"https://github.com/sakuli.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sakuli2\n\n[![Build Status](https://github.com/sakuli/sakuli/workflows/Continuous%20Delivery/badge.svg)](https://github.com/sakuli/sakuli/actions?query=workflow:%22Continuous+Delivery%22)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=sakuli%3Asakuli\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=sakuli%3Asakuli)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=sakuli%3Asakuli\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=sakuli%3Asakuli)\n\n## Why Sakuli 2?\n\nIn the past, we encountered a lot of issues with the architecture of Sakuli. But first and foremost the inactive\ndevelopment of Sahi and its deep integration into Sakuli was one of the main reasons to rethink our technology stack.\n\nSo we decide to create a brand-new platform which allows users to test and monitor their systems and developers to extend\nthe platform to their own needs.\n\n## What is the new Stack of Sakuli2?\n\nWe started to make a complete core code rewrite based on NodeJs and Typescript.\n\n- **Node.js** because we wanted the same language for our platform and testcases (Sakuli was written in Java while testcases where executed in a modified version of RhinoJs-Engine)\n- **Typescript** to provide clear interfaces for third-party devs.\n\nWe also replaced the engines for web- and native checks:\n\n- **Sahi** is replaced by Webdriver / Selenium\n- **Sikuli** is replaced by [nut.js](https://github.com/nut-tree/nut.js)\n\nwhile we try our best to keep the sakuli api backwards compatible.\n\n## What can I expect from Sakuli2...\n\n### ...as a user / tester\n\nExpect the full power of Sakuli, which means testing and monitoring systems either in web or native.\n\n### ...as a developer\n\nUse the full power of typescript, nodejs and their corresponding ecosystems.\n\n# Installation\n\nPlease refer to the [Sakuli website](https://sakuli.io) and the [Getting Started](https://sakuli.io/docs/getting-started/) guide for installation instructions.\n\n# Development\n\n## Workstation\n\nTo start developing Sakuli 2 some setup on your workstation is required.\n\n- Make sure to have the active LTS version (v12) of node installed.\n- Make sure to have docker installed and started\n- Make sure to execute `docker pull selenium/standalone-chrome-debug` before you start developing.\n\n## Building the Project\n\nIn some situations, it is necessary to build/rebuild the sources (e.g. after changing branches) to create a consistent\nstate in the project.\n\nTo do so, please use `npm run rebuild`\n\n## Executing the current state of Sakuli\n\nDuring development, you might want to test the overall behavior of Sakuli from a developers' perspective. Therefore, we\ncreated a `packages/integration-tests` module containing a Sakuli project using Sakuli at the current state of the\nrepository.\n\nBuild and execute Sakuli as it is in the current state of the repository:\n\n```shell script\nnpm run rebuild\ncd packages/integration-tests\nnpx sakuli\n```\n\n_This step has to be done after every code change so that the changes take place in the prepared Sakuli environment._\n\n## Updating dependencies\n\nLong story short: `npm run update`\n\nAs this is a multi-module project using [lerna](https://www.npmjs.com/package/lerna), dependency updates have to be\nconsistent for the whole project. To achieve this, we use the [lerna-update-wizard](https://www.npmjs.com/package/lerna-update-wizard)\nand added the npm script `npm run update`.\n\n## Pre-commit Hooks\n\nWe are using [Prettier](https://github.com/prettier/prettier) as an opinionated code formatter in combination with\n[husky](https://github.com/typicode/husky) for the pre-commit hook.\nIf you are using a node version manager, make sure to create `~/.huskyrc` with the following content:\n\n```bash\n# ~/.huskyrc\nexport NVM_DIR=\"$HOME/.nvm\"\n[ -s \"$NVM_DIR/nvm.sh\" ] \u0026\u0026 \\. \"$NVM_DIR/nvm.sh\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsakuli%2Fsakuli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsakuli%2Fsakuli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsakuli%2Fsakuli/lists"}