{"id":13528794,"url":"https://github.com/paldepind/projectdo","last_synced_at":"2025-04-12T12:40:42.438Z","repository":{"id":57134883,"uuid":"175886113","full_name":"paldepind/projectdo","owner":"paldepind","description":"Context-aware single-letter project commands to speed up your terminal workflow.","archived":false,"fork":false,"pushed_at":"2025-04-09T16:55:07.000Z","size":163,"stargazers_count":72,"open_issues_count":8,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-09T17:42:14.137Z","etag":null,"topics":["cli","command-line","fish-plugin"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/paldepind.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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":"2019-03-15T20:23:10.000Z","updated_at":"2025-04-09T16:55:12.000Z","dependencies_parsed_at":"2024-03-30T21:33:21.010Z","dependency_job_id":"08901e65-f336-4a60-976a-d525ab700385","html_url":"https://github.com/paldepind/projectdo","commit_stats":{"total_commits":105,"total_committers":9,"mean_commits":"11.666666666666666","dds":0.2666666666666667,"last_synced_commit":"c23dd73d9eed4632baf8551c9ee6c272c45144d3"},"previous_names":["paldepind/tst"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paldepind%2Fprojectdo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paldepind%2Fprojectdo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paldepind%2Fprojectdo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paldepind%2Fprojectdo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paldepind","download_url":"https://codeload.github.com/paldepind/projectdo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248083884,"owners_count":21045123,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["cli","command-line","fish-plugin"],"created_at":"2024-08-01T07:00:24.812Z","updated_at":"2025-04-12T12:40:42.432Z","avatar_url":"https://github.com/paldepind.png","language":"Shell","funding_links":[],"categories":["Plugins"],"sub_categories":["other plugin"],"readme":"\u003cdiv align=\"right\"\u003e\n  \u003ca href=\"https://github.com/paldepind/projectdo/actions/workflows/makefile.yml\"\u003e\n    \u003cimg src=\"https://github.com/paldepind/projectdo/actions/workflows/makefile.yml/badge.svg\" /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs/logo-dark.png\"\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"docs/logo-light.png\"\u003e\n  \u003cimg alt=\"projectdo logo\" src=\"docs/logo-light.png\" height=\"120\"\u003e\n\u003c/picture\u003e\n\nContext-aware single-letter project commands to speed up your command-line workflow.\n\n* \u0026hairsp; 🏗 \u0026hairsp; \u003ckbd\u003eb\u003c/kbd\u003e to build/compile any project.\n* \u0026hairsp; 🚀 \u0026hairsp; \u003ckbd\u003er\u003c/kbd\u003e to run/start any project.\n* \u0026hairsp; 🧪 \u0026hairsp; \u003ckbd\u003et\u003c/kbd\u003e to test any project.\n\nhttps://user-images.githubusercontent.com/521604/231857437-12c14aff-585d-4817-8f44-59b40ecc32e0.mov\n\n* **Supports 10+ build and project tools** – Bun, CMake, Cabal, Cargo, Go,\n  Leiningen, Mage, Maven, Meson, Poetry, Stack, Tectonic, make, npm, yarn and .NET.\n  [More details](#supported-tools-and-languages).\n* **Portable** – Dependency free portable POSIX shell script. Supports Linux,\n  macOS, WSL, etc.\n* **Shell Integration** – Works with aliases in any shell and for the Fish\n  shell through a [Fish plugin](#fish-plugin).\n* **Simple** – Easy to extend with support for new tools.\n\n## What\n\n`projectdo` is a command-line program that executes project actions (such as\nbuild, run, test, etc.) with the appropriate tool for current project in the\nworking directory. The appropriate tool and the current project root is\nintelligently detected based on the context where `projectdo` is executed. For\ninstance, `projectdo test` runs `cargo test` if a `Cargo.toml` is found and\n`npm test` if a `package.json` file is found.\n\nBy combining `projectdo` with shell aliases or shell abbreviations project\ncommands can be run in any project with less typing. As an example, with the\nalias `alias b='projectdo build'` one can build any project simply by typing\n\u003ckbd\u003eb\u003c/kbd\u003e+\u003ckbd\u003eenter\u003c/kbd\u003e.\n\n## Install\n\n`projectdo` can be installed through a number of package managers or by\nmanually downloading the shell script.\n\n### Homebrew\n\n`projectdo` can be installed with Homebrew on macOS and Linux.\n\n```\nbrew install paldepind/tap/projectdo\n```\n\n### AUR (Arch Linux)\n\nThe [AUR package](https://aur.archlinux.org/packages/projectdo) can be installed manually or using an AUR helper.\n\n```sh\nyay -S projectdo\n```\n\n### npm\n\n`projectdo` is not related to Node.js or JavaScript, but npm works perfectly\nfine for distributing shell scripts and can be a handy installation method if\nyou're already using npm:\n\n\n```sh\nnpm i -g projectdo\n```\n\n### From source\n\nDownload the script and place it somewhere in your path. For instance if\n`~/bin` is in your path:\n\n```\ncurl https://raw.githubusercontent.com/paldepind/projectdo/main/projectdo -o ~/bin/projectdo\nchmod +x ~/bin/projectdo\n```\n\n#### From repository\n\nClone the project repository:\n\n```sh\ngit clone https://github.com/paldepind/projectdo; cd projectdo\n```\n\nInstall it with this command:\n\n```sh\nmake install\n\n# Or to uninstall\nmake uninstall\n```\n\n## Shell integration\n\nFor the Fish shell use [the Fish plugin](#fish-plugin). For Bash and Zsh setup\n[shell aliases](#aliases).\n\n### Fish Plugin\n\n`projectdo` ships with a plugin for the Fish shell. The plugin includes\nauto-completion and functions for use with Fish's abbreviation feature.\n\nThe Fish plugin can be installed manually or with\n[Fisher](https://github.com/jorgebucaran/fisher):\n\n```\nfisher install paldepind/projectdo\n```\n\nThe plugin exposes four shell functions that should be configured with\nabbreviations as desired. For instance:\n\n```\nabbr -a b --function projectdo_build\nabbr -a r --function projectdo_run\nabbr -a t --function projectdo_test\nabbr -a p --function projectdo_tool\n```\n\nWith the above `t` will expand to `cargo test`, `p` will expand to `cargo`,\netc. depending on the project.\n\n_Note that you need to have the script in your path in order for the Fish plugin to work!_\n\n### Aliases\n\n`projectdo` can be configured with shell aliases in any shell. For instance:\n\n```sh\nalias t='projectdo test'\nalias r='projectdo run'\nalias b='projectdo build'\nalias p='projectdo tool'\n```\n\n## Usage\n\n**Note**: When executed with the `-d` flag `projectdo` performs a dry run and\nonly prints information about what it would do without actually doing anything.\nIt is a good idea to do a dry run when using `projectdo` in a project for the\nfirst time to verify that it does the right thing.\n\n```\nUsage: projectdo [options] [action] [tool-arguments]\nOptions:\n  -h, --help             Display this help.\n  -n, -d, --dry-run      Do not execute any commands with side-effects.\n  -q, --quiet            Do not print commands as they are about to be executed.\n  -v, --version          Display the version of the program.\n\nActions:\n  build, run, test       Build, run, or test the current project.\n  tool                   Invoke the guessed tool for the current project.\n\nTool arguments:\n  Any arguments following [action] are passed along to the invoked tool.\n```\n\n## Supported tools and languages\n\n**Note:** If a tool you are interested in is not supported please open an issue or a pull\nrequest.\n\n| Tool            | Language         | Detected by                                | Commands                                               |\n|-----------------|------------------|--------------------------------------------|--------------------------------------------------------|\n| Cargo           | Rust             | `Cargo.toml`                               | `cargo build` \u003cbr/\u003e `cargo run` \u003cbr/\u003e `cargo test`     |\n| Poetry          | Python           | `pyproject.toml` with `[tool.poetry]`      | `poetry build` \u003cbr/\u003e run n/a \u003cbr/\u003e `poetry run pytest` |\n| CMake           | C, C++ and Obj-C | `CMakeLists.txt`                           | `cmake --build . --target test`                        |\n| Meson           | C, C++, etc.     | `meson.build`                              | `meson compile` \u003cbr/\u003e run n/a \u003cbr/\u003e `meson test`       |\n| npm             | JavaScript, etc. | `package.json`                             | `npm build` \u003cbr/\u003e `npm start` \u003cbr/\u003e `npm test`         |\n| yarn            | JavaScript, etc. | `package.json` and `yarn.lock`             | `yarn build` \u003cbr/\u003e `yarn start` \u003cbr/\u003e `yarn test`      |\n| pnpm            | JavaScript, etc  | `package.json` and `pnpm-lock.yaml`        | `pnpm build` \u003cbr/\u003e `pnpm start` \u003cbr/\u003e `pnpm test`      |\n| bun             | JavaScript, etc  | `package.json` and `bun.lock`/`bun.lockb`  | `bun build` \u003cbr/\u003e `bun start` \u003cbr/\u003e `bun test`         |\n| Maven           | Java, etc.       | `pom.xml`                                  | `mvn compile` \u003cbr/\u003e run n/a \u003cbr/\u003e `mvn test`           |\n| Leiningen       | Clojure          | `project.clj`                              | `lein test`                                            |\n| Cabal           | Haskell          | `*.cabal`                                  | `cabal build` \u003cbr/\u003e `cabal run` \u003cbr/\u003e `cabal test`     |\n| Stack           | Haskell          | `stack.yaml`                               | `stack build` \u003cbr/\u003e `stack run` \u003cbr/\u003e `stack test`     |\n| nix (flake)     | nix              | `flake.nix`                                | `nix build` \u003cbr/\u003e `nix run` \u003cbr/\u003e `nix flake check`    |\n| nix (non-flake) | nix              | `default.nix`                              | `nix-build`                                            |\n| make            | Any              | `Makefile`                                 | `make` \u003cbr/\u003e `make test/check`                         |\n| just            | Any              | `justfile`                                 | `just build` \u003cbr /\u003e `just run` \u003cbr /\u003e `just test`      |\n| Mage            | Go               | `magefile.go` with a `test`/`check` target | `mage test/check`                                      |\n| Go              | Go               | `go.mod`                                   | `go test`                                              |\n| Tectonic        | LaTeX            | `Tectonic.toml`                            | `tectonic -X build`                                    |\n| .NET            | C# and F#        | `*.csproj`, `*.fsproj` or `*.sln`          | `dotnet build` \u003cbr/\u003e `dotnet run` \u003cbr/\u003e `dotnet test`  |\n| Shell script    | Any              | `build.sh`                                 | `sh -c build.sh`                                       |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaldepind%2Fprojectdo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaldepind%2Fprojectdo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaldepind%2Fprojectdo/lists"}