{"id":22269087,"url":"https://github.com/sandrodw3/liferay-dev-cli","last_synced_at":"2026-05-05T16:06:25.351Z","repository":{"id":201217230,"uuid":"706377076","full_name":"sandrodw3/liferay-dev-cli","owner":"sandrodw3","description":"Command-line framework to work with a Liferay development environment, available for Linux and MacOS.","archived":false,"fork":false,"pushed_at":"2026-01-15T11:15:33.000Z","size":1876,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-17T04:48:18.630Z","etag":null,"topics":["deno","liferay","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sandrodw3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-10-17T20:34:25.000Z","updated_at":"2026-01-15T11:13:35.000Z","dependencies_parsed_at":"2024-01-17T12:36:22.622Z","dependency_job_id":"9151842a-9263-4ff2-9223-bf5e26687266","html_url":"https://github.com/sandrodw3/liferay-dev-cli","commit_stats":null,"previous_names":["sandrodw3/liferay-dev-cli"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/sandrodw3/liferay-dev-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandrodw3%2Fliferay-dev-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandrodw3%2Fliferay-dev-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandrodw3%2Fliferay-dev-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandrodw3%2Fliferay-dev-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sandrodw3","download_url":"https://codeload.github.com/sandrodw3/liferay-dev-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandrodw3%2Fliferay-dev-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29650504,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T09:27:29.698Z","status":"ssl_error","status_checked_at":"2026-02-20T09:26:12.373Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["deno","liferay","typescript"],"created_at":"2024-12-03T11:15:04.594Z","updated_at":"2026-05-05T16:06:25.342Z","avatar_url":"https://github.com/sandrodw3.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg width=\"150px\" alt=\"Liferay Dev CLI logo\" src=\"images/logo.svg\"\u003e\n\n\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n# Liferay Dev CLI\n\n**Liferay Dev CLI** (`lfr`) is a command-line framework designed to streamline everyday tasks in a Liferay development environment, enabling developers to execute common actions from anywhere within the project without the need to switch modules or navigate to specific directories. Tasks that usually require more steps than desired, such as deploying all modified modules in a branch, formatting it, starting the portal with the latest Tomcat version, running Playwright tests, and much more, will be now easily accessible. Available for **Linux** and **MacOS**.\n\n[![deno_badge_url]][deno_url]\n[![typescript_badge_url]][typescript_url]\n\n\u003c/div\u003e\n\n## 🪄 Examples\n\n![Example of running `lfr deploy -b`](images/deploy-b.png)\n\n![Example of running `lfr deploy -m`](images/deploy-m.png)\n\n![Example of running `lfr start -c`](images/start-c.png)\n\n![Example of running `lfr ant-all -c`](images/ant-all-c.png)\n\n## ⚡️ Installation\n\n`lfr` is available for **Linux** and **MacOS**.\n\n### 1) Install prerequisites\n\n- [`deno`][deno_installation_url] (**v2.2.8** or higher required)\n- [`fzf`][fzf_installation_url]\n\n### 2) Install Liferay Dev CLI\n\n```\ncurl -fsSL https://raw.githubusercontent.com/sandrodw3/liferay-dev-cli/main/install.sh | sh\n```\n\n## 💡 Usage\nJust run `lfr [command]` with any desired options. All commands include a `-h` option to display help. You can also run just `lfr` to see the full CLI help.\n\nMost commands can be executed from anywhere, without needing to move to the portal directory. The portal path is configured the first time `lfr` is executed and remains saved (unless we change it again using `lfr config`).\n\nBy default, `lfr` uses a minimalist and compact output for its commands. Most of them have a `-d` option available to display the traditional output of each one.\n\nThere's also available an `lfr upgrade` command to update the CLI to its latest version and an `lfr config` one to set the necessary configuration for the CLI to work.\n\n## ⚙️ Commands\n\nExplanation and description of how each of the commands and their available options work.\n\n- [`ant-all`](#ant-all)\n- [`baseline`](#baseline)\n- [`build-lang`](#build-lang)\n- [`build-rest`](#build-rest)\n- [`build-service`](#build-service)\n- [`code`](#code)\n- [`config`](#config)\n- [`deploy`](#deploy)\n- [`find`](#find)\n- [`format`](#format)\n- [`language-keys`](#language-keys)\n- [`node-scripts`](#node-scripts)\n- [`jest`](#jest)\n- [`playwright`](#playwright)\n- [`poshi`](#poshi)\n- [`start`](#start)\n- [`stop`](#stop)\n- [`upgrade`](#upgrade)\n\n### `ant-all`\n\nRun ant all in the Liferay portal project. `-c` option can be passed to remove `bundles` folder (except properties files) before doing it. `bundles` folder path is taken from `app.server.parent.dir` variable of `app.server.[username].properties` file, or in the default `app.server.properties` if the first one is not present.\n\n```\nlfr ant-all [options...]\n```\n\n| Option                    | Description                                                                                |\n| ------------------------- | ------------------------------------------------------------------------------------------ |\n| `-c, --clean`             | Remove bundles folder (except properties files) and untracked files before running ant all |\n| `-d, --default-output`    | Log the default output                                                                     |\n| `-p, --profile \u003cprofile\u003e` | Set the given profile (valid values are **dxp** and **portal**)                            |\n\n---\n\n### `baseline`\n\nExecute `baseline` on a module or a bunch of them, depending on options. If no passing `-m` or `-b` options, run it on the current module.\n\n```\nlfr baseline [options...]\n```\n\n| Option                    | Description                                                                  |\n| ------------------------- | ---------------------------------------------------------------------------- |\n| `-b, --current-branch`    | Run `baseline` on all modules modified in current branch                     |\n| `-d, --default-output`    | Log the default gradle output                                                |\n| `-m, --module`            | Allow selecting a specific module to run `baseline`                          |\n\n---\n\n### `build-lang`\n\nExecute `buildLang` in `portal-language-lang` module.\n\n```\nlfr build-lang\n```\n\n---\n\n### `build-rest`\n\nExecute `buildRest` on a module or a bunch of them, depending on options. If no passing `-m` or `-b` options, run it on the current module.\n\n```\nlfr build-rest [options...]\n```\n\n| Option                    | Description                                                                  |\n| ------------------------- | ---------------------------------------------------------------------------- |\n| `-b, --current-branch`    | Run `buildRest` on all modules modified in current branch                    |\n| `-d, --default-output`    | Log the default gradle output                                                |\n| `-m, --module`            | Allow selecting a specific module to run `buildRest`                         |\n\n---\n\n### `build-service`\n\nExecute `buildService` on a module or a bunch of them, depending on options. If no passing `-m` or `-b` options, run it on the current module.\n\n```\nlfr build-service [options...]\n```\n\n| Option                    | Description                                                                  |\n| ------------------------- | ---------------------------------------------------------------------------- |\n| `-b, --current-branch`    | Run `buildService` on all modules modified in current branch                 |\n| `-d, --default-output`    | Log the default gradle output                                                |\n| `-m, --module`            | Allow selecting a specific module to run `buildService`                      |\n\n---\n\n### `code`\n\nOpen the selected module with VS Code if it is installed.\n\n```\nlfr code [options...]\n```\n\n| Option                    | Description                                                   |\n| ------------------------- | ------------------------------------------------------------- |\n| `-n, --new-window`        | Open module in a new VS Code window                           |\n| `-p, --profile \u003cprofile\u003e` | Open module using a specific VS Code profile                  |\n\n---\n\n### `config`\n\nAllow setting user configuration, that is stored in `.lfr/config.json` file in user's folder. This configuration is needed for the app to work correctly. `entry` and `value` are mandatory if no option is specified.\n\n```\nlfr config [entry] [value] [options...]\n```\n\n| Entry         | Description                                                                                        |\n|---------------|--------------------------------------------------------------------------------------------------- |\n| `portal.path` | Liferay portal path                                                                                |\n| `base.branch` | Base branch to be used for example to compare and get the modified modules of a branch             |\n\n\n| Option         | Description                                               |\n| -------------- | --------------------------------------------------------- |\n| `-m, --modify` | Allow modifying current config values                     |\n| `-s, --show`   | Show current configuration                                |\n\n---\n\n### `deploy`\n\nDeploy a module or a bunch of them, depending on options. If no passing `-m` or `-b` options, deploy the current module.\n\n```\nlfr deploy [options...]\n```\n\n| Option                    | Description                                                                  |\n| ------------------------- | ---------------------------------------------------------------------------- |\n| `-a, --skip-dependencies` | Do not rebuild project dependencies (`gradlew deploy -a`)      |\n| `-b, --current-branch`    | Deploy all modules modified in current branch                                |\n| `-c, --clean`             | Clean everything from previous builds (`gradlew clean deploy`) |\n| `-d, --default-output`    | Log the default gradle output                                                |\n| `-m, --module`            | Allow selecting a specific module to deploy                                  |\n\n---\n\n### `find`\n\nAllow finding a module and getting its path. Requires [fzf](https://github.com/junegunn/fzf) to be used. This command is useful to use the result for another thing. For example, you could do a bash script like `module=$(lfr find); cd module`, and it would allow you to select a module and then change to its directory.\n\n```\nlfr find\n```\n\n---\n\n### `format`\n\nFormat a module or a branch, depending on options. If no passing options, format the current module with `gradlew formatSource`.\n\n```\nlfr format [options...]\n```\n\n| Option                 | Description                                                                                                      |\n| ---------------------- | ---------------------------------------------------------------------------------------------------------------- |\n| `-b, --current-branch` | Format the current branch (`ant format-source-current-branch`, `npx node-scripts check:tsc --current-branch` and `npx node-scripts check:ci --current-branch`)                                                                                                                          |\n| `-d, --default-output` | Log the default output                                                                                           |\n| `-m, --module`         | Allow selecting a specific module to format (`gradlew formatSource`)                                             |\n\n---\n\n### `language-keys`\n\nAsk user to introduce phrases, generate language keys and then add them to `Language.properties` file. Phrases will be skipped if they already exist. `-b` can be passed to execute `buildLang` after adding keys. If passing `-c`, generated changes will be committed at the end. If there are existing commits for adding language keys or doing `buildLang`, these commits will be amended with the changes.\n\n```\nlfr language-keys [options...]\n```\n\n| Option                 | Description                                                                                                                    |\n| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------ |\n| `-b, --build-lang`     | Execute `buildLang` after adding keys                                                                                          |\n| `-c, --commit-changes` | Commit generated changes (one commit for the keys and another one for the `buildLang`). Use existing commits if they are found |     \n\n---\n\n### `node-scripts`\n\nRun `node-scripts` commands globally or in current module.\n\n```\nlfr node-scripts \u003ccommand\u003e [options...]\n```\n\n| Option                 | Description                                                   |\n| ---------------------- | ------------------------------------------------------------- |\n| `-a, --all`            | Execute the command for everything                            |\n| `-b, --current-branch` | Execute the command considering changes in the current branch |\n| `-g, --global`         | Run the command globally                                      |\n| `-l, --local-changes`  | Execute the command considering only uncommitted changes      |\n\n---\n\n### `jest`\n\nRun Jest tests in a module or multiple modules.\n\n```\nlfr jest [options...]\n```\n\n| Option                 | Description                                                                  |\n| ---------------------- | ---------------------------------------------------------------------------- |\n| `-b, --current-branch` | Run tests in all modules modified in current branch                          |\n| `-d, --default-output` | Log the default output                                                       |\n| `-m, --module`         | Allow selecting a specific module to run tests                               |\n\n---\n\n### `playwright`\n\nRun Playwright tests in a file, module, or project.\n\n```\nlfr playwright [options...]\n```\n\n| Option         | Description                    |\n| -------------- | ------------------------------ |\n| `--ui`         | Run tests in UI mode           |\n| `-m, --module` | Run tests in a specific module |\n| `-p, --project` | Run tests in a specific Playwright project (incompatible with `--module`) |\n\n---\n\n### `poshi`\n\nRun the given Poshi test. The `\u003ctest\u003e` argument should be specified as `File#TestName` (e.g., `PortalSmoke#Smoke`).\n\n```\nlfr poshi \u003ctest\u003e\n```\n\n---\n\n### `start`\n\nStart portal with the latest Tomcat version. Database configuration is taken from `portal-ext.properties` file in `bundles` folder. `bundles` folder path is taken from `app.server.parent.dir` variable of `app.server.[username].properties` file, or in the default `app.server.properties` if the first one is not present.\n\n```\nlfr start [...options]\n```\n\n| Option        | Description                                                                                                                         |\n| ------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| `-c, --clean` | Clean database and data folders before starting (to clean database, the user needs to be using `MySQL` or `PostgreSQL` as database) |\n\n---\n\n### `stop`\n\nStop the currently running portal instance.\n\n```\nlfr stop\n```\n\n---\n\n### `upgrade`\n\nUpgrade `lfr` to its latest version.\n\n```\nlfr upgrade\n```\n\n\u003c!-- Links --\u003e\n\n[deno_badge_url]: https://img.shields.io/badge/Deno-464647?style=for-the-badge\u0026logo=deno\u0026logoColor=white\n[deno_installation_url]: https://github.com/denoland/deno/?tab=readme-ov-file#installation\n[deno_url]: https://deno.com/\n\n[fzf_installation_url]: https://github.com/junegunn/fzf?tab=readme-ov-file#installation\n\n[typescript_badge_url]: https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge\u0026logo=typescript\u0026logoColor=white\n[typescript_url]: https://www.typescriptlang.org/","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandrodw3%2Fliferay-dev-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsandrodw3%2Fliferay-dev-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandrodw3%2Fliferay-dev-cli/lists"}