{"id":15056408,"url":"https://github.com/grisp/rebar3_grisp","last_synced_at":"2026-02-21T12:02:40.659Z","repository":{"id":25350926,"uuid":"94781568","full_name":"grisp/rebar3_grisp","owner":"grisp","description":"Rebar plug-in for GRiSP","archived":false,"fork":false,"pushed_at":"2026-01-15T09:04:44.000Z","size":379,"stargazers_count":23,"open_issues_count":9,"forks_count":11,"subscribers_count":7,"default_branch":"master","last_synced_at":"2026-01-15T15:23:03.988Z","etag":null,"topics":["emdedded","erlang","grisp","iot","plugin","rebar3"],"latest_commit_sha":null,"homepage":"https://www.grisp.org","language":"Erlang","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/grisp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-06-19T13:48:21.000Z","updated_at":"2026-01-15T09:04:48.000Z","dependencies_parsed_at":"2024-06-04T14:25:50.860Z","dependency_job_id":"c2026c05-36e2-4600-92f8-da6861238622","html_url":"https://github.com/grisp/rebar3_grisp","commit_stats":{"total_commits":188,"total_committers":12,"mean_commits":"15.666666666666666","dds":"0.24468085106382975","last_synced_commit":"2d6ac72fa09376ff9722bee4d02cce86479da4df"},"previous_names":[],"tags_count":35,"template":false,"template_full_name":null,"purl":"pkg:github/grisp/rebar3_grisp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grisp%2Frebar3_grisp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grisp%2Frebar3_grisp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grisp%2Frebar3_grisp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grisp%2Frebar3_grisp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grisp","download_url":"https://codeload.github.com/grisp/rebar3_grisp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grisp%2Frebar3_grisp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479903,"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":["emdedded","erlang","grisp","iot","plugin","rebar3"],"created_at":"2024-09-24T21:50:58.588Z","updated_at":"2026-01-16T16:31:58.797Z","avatar_url":"https://github.com/grisp.png","language":"Erlang","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rebar3_grisp\n\nRebar plugin for the GRiSP project. To obtain information about the plugin and\nits tasks, use the following command:\n\n```sh\nrebar3 help grisp [\u003ctask\u003e]\n```\n\n📖 **Table of content**\n- [rebar3\\_grisp](#rebar3_grisp)\n  - [Installation](#installation)\n    - [Globally](#globally)\n    - [For an Existing Project](#for-an-existing-project)\n  - [Create New Application](#create-new-application)\n  - [Compile the Project](#compile-the-project)\n  - [Deploy an Application](#deploy-an-application)\n    - [Configuration](#configuration)\n  - [Generate GRiSP 2 Firmwares](#generate-grisp-2-firmwares)\n    - [Firmware Update](#firmware-update)\n    - [Cautions](#cautions)\n  - [Build a Software Update Package](#build-a-software-update-package)\n    - [Updating a GRiSP Board](#updating-a-grisp-board)\n  - [Listing Packages](#listing-packages)\n  - [Build OTP for GRiSP](#build-otp-for-grisp)\n  - [Bug Reports](#bug-reports)\n  - [Development](#development)\n    - [Testing `master`](#testing-master)\n    - [Testing a Specific Branch](#testing-a-specific-branch)\n\n## Installation\n\n### Globally\n\nTo install the plugin globally, add the plugin to your plugins list in\n`~/.config/rebar3/rebar.config`:\n\n```erlang\n{plugins, [\n    rebar3_hex,\n    rebar3_grisp\n]}.\n```\n\nThe first time you use Rebar the plugin will be installed. To upgrade the plugin to the latest version, you need to first update the Hex index and then the plugin:\n\n```console\n$ rebar3 update\n===\u003e Updating package registry...\n===\u003e Writing registry to ~/.cache/rebar3/hex/default/registry\n===\u003e Generating package index...\n===\u003e Writing index to ~/.cache/rebar3/hex/default/packages.idx\n$ rebar3 plugins upgrade rebar3_grisp\n===\u003e Fetching rebar3_grisp ({pkg,\u003c\u003c\"rebar3_grisp\"\u003e\u003e,\u003c\u003c\"1.1.0\"\u003e\u003e})\n===\u003e Downloaded package, caching at ~/.cache/rebar3/hex/default/packages/rebar3_grisp-1.1.0.tar\n===\u003e Compiling rebar3_grisp\n```\n\n### For an Existing Project\n\nAdd the plugin to your rebar config:\n\n```erlang\n{plugins, [rebar3_grisp]}.\n```\n\nThen just call your plugin directly in the root of the existing application:\n\n```console\n$ rebar3 grisp\n===\u003e Fetching grisp\n===\u003e Compiling grisp\n\u003cPlugin Output\u003e\n```\n\n## Create New Application\n\nPrerequisites:\n\n* [Install Plugin Globally](#globally)\n\nTo create a new GRiSP project:\n\n```\nrebar3 grisp configure\n```\n\nThis command will provide you with a CLI that will guide you in the creation of your GRiSP project.\n\nYou can also use the command in a non-interactive way:\n\n```\nrebar3 grisp configure -i false\n```\n\nUnless stated otherwise, the non-interactive option will use the default values to create the GRiSP project. You can override the default values in the command:\n```\nrebar3 grisp configure -i false --name=\"my_grisp_app\" -n true -w true --ssid=\"mywifi\" --psk=\"wifipsk\"\n```\nThis command will create a new GRiSP project named \"my_grisp_app\" with a network (`-n true`) and Wi-Fi (`-w true`) configuration already set up. The configuration will use the SSID \"mywifi\" and the PSK \"wifipsk\".\n\n\nNote that some options require others. For example, if you want to set up the SSID of the Wi-Fi, then you also need to activate the network and Wi-Fi configuration (`-n true` and `-w true`).\n\nThe specific variables provided by this plugin are:\n\n* **`interactive`** activate the interactive mode\n* **`name`** is the name of the OTP application\n* **`dest`** is the destination path for deployment. This should point to where\n  your SD card is mounted (e.g. on macOS it is `/Volumes/\u003cNAME\u003e` where `\u003cNAME\u003e`\n  is the name of the SD card partition)\n* **`otp_version`** is the target Erlang/OTP version used on the GRiSP board\n* **`network`** specifies if the project contains network configuration files\n* **`wifi`** specifies if the project contains Wi-Fi configuration files. (requires `network`)\n* **`ssid`** is the SSID of the Wi-Fi network you want your board to connect to. (requires `network` and `wifi`)\n* **`psk`** is the PSK of the Wi-Fi network you want your board to connect to. (requires `network` and `wifi`)\n* **`grisp_io`** specifies if you want your board to connect and use GRiSP.io. (requires `network`)\n* **`grisp_io_linking`** specifies if you want your board to link itself to GRiSP.io. (requires `network` and `grisp_io`)\n* **`token`** is your personal GRiSP.io token. (requires `network`, `grisp_io` and `grisp_io_linking`)\n* **`epmd`** specifies if you want your board to have epmd. (requires `network`)\n* **`cookie`** is the magic cookie that your board should use. (requires `network` and `epmd`)\n\nSome variables are modifiable only through the command line. These variables are:\n* **`desc`** is the short description of the GRiSP application\n* **`copyright_year`** is the copyright year\n* **`author_name`** is the name of the author of the project\n* **`author_email`** is the email of the author of the project\n\nFor a full list of customizable variables as well as their short form, run `rebar3 help grisp configure`.\n\nIn the interactive mode you can also specify a few variables. During the CLI interaction, the questions related to these variable will be skipped. For example:\n\n```\nrebar3 grisp configure --name=\"mygrispapp\"\n```\nHere the CLI won't ask you for the name of your GRiSP project because it's already provided.\n\n## Compile the Project\n\n```rebar3 compile```\n\nMake sure you do that with the same Erlang version that you configured in the `rebar.config`. If you compiled rebar3 yourself with a more recent version of Erlang it will give errors, you will need to recompile rebar3 as well in that case.\n\nFor further information have a look at the [GRiSP Wiki](https://github.com/grisp/grisp/wiki)\n\n## Deploy an Application\n\nTo deploy a GRiSP application, use the command `rebar3 grisp deploy`. The\ncommand requires the release name and version to be provided. The deployment\ndestination can be set in `rebar.config` or be given as an additional argument.\n\nExample:\n\n```\nrebar3 grisp deploy --relname mygrispproject --relvsn 0.7.8\n```\n\nor shorter:\n\n```\nrebar3 grisp deploy -n mygrispproject -v 0.1.0\n```\n\nAbove command will try to download a crosscompiled OTP version from our CDN and unpack it. In many usecases this will be enough. If you want to add own port drivers or NIFs in C you will have to build your own toolchain and OTP, see below.\n\nRun `rebar3 help grisp deploy` for information on all arguments.\n\nTo generate a tarball with all the deployed files, add the option `-t/--tar`.\nAll the files will be bundled into a tarball under `_grisp/deploy`:\n\n```\nrebar3 grisp deploy --tar\n```\n\n\n### Configuration\n\n`rebar.config`:\n\n```erlang\n{grisp, [\n    {otp, [{version, \"22.0\"}]},\n    {deploy, [\n        % Path to put deployed release in\n        {destination, \"/path/to/destination\"},\n\n        % Shell script to run before deploying begins\n        {pre_script, \"rm -rf /path/to/destination/*\"},\n\n        % Shell script to run after deploying has finished\n        {post_script, \"umount /path/to/destination\"}\n    ]}\n]}.\n```\n\n\n## Generate GRiSP 2 Firmwares\n\nThe `firmware` command generates binary files that can be written on GRiSP 2\neMMC. There is three types of firmware that can be generated:\n\n - **System Firmware**:\n   The system firmware is the content of a system partition on the eMMC.\n   When using A/B software update, the system firmware can be written either\n   on the first or the second system partition. By default, the command will\n   generate a system firmware under `_grisp/firmware` but it can be disabled with\n   the option `-b false` or `--system false`.\n - **eMMC Image Firmware**:\n   The eMMC image firmware is a full image containing the bootloader, the\n   partition table and the system partitions. It is meant to be written on the\n   GRiSP 2 board to reset it completely with the new software. If the image is\n   truncated (it is by default), the image only contains the first system\n   partition. This means that when writing the firmware to the eMMC, the second\n   system partition will be untouched. To generate an eMMC image firmware under\n   `_grisp/firmware`, add the option `-i` or `--image`; to disable truncating\n   so the image contains both system partitions, use the option `-t false` or\n   `--truncate false`.\n - **Bootloader Firmware**:\n   The bootloader firmware contains only the bootloader and the partition table.\n   To generate it under `_grisp/firmware`, add the option `-b` or `--bootloader`.\n\ne.g.\n\nGenerate a system firmware for the default release:\n\n    rebar3 grisp firmware\n\nGenerate a system firmware for a specific release:\n\n    rebar3 grisp firmware --relname myapp --relvsn 1.2.3\n\nGenerate all firmwares, forcing existing files to be overwritten and forcing the\ngeneration of the software bundle even if one already exists in `_grisp/deploy`:\n\n    rebar3 grisp firmware --bootloader --image --force --refresh\n\n\n### Firmware Update\n\nDescription of the variables in the commands that will follow:\n - **`${RELNAME}`**: The relx release names used when generating the firmware.\n - **`${RELVSN}`**: The relx release version used when generating the firmware.\n - **`${USER}`**: The username of the account running the command.\n - **`${GRISP_BOARD_SERIAL}`**: The serial number of the GRiSP 2 board.\n\nTo write a system firmware to a GRiSP 2 board:\n\n - Copy the firmware to the SD card:\n\n    **`macOS`** `$ cp _grisp/firmware/grisp2.${RELNAME}.${RELVSN}.sys.gz /Volumes/GRISP`\n\n    **`Linux`** `$ cp _grisp/firmware/grisp2.${RELNAME}.${RELVSN}.sys.gz /media/${USER}/GRISP`\n\n - Unmount the SD card:\n\n    **`macOS`** `$ diskutil umount /Volumes/GRISP`\n\n    **`Linux`** `$ umount /media/${USER}/GRISP`\n\n - Open a serial console to the GRiSP board:\n\n    **`macOS`** `$ screen /dev/tty.usbserial-0${GRISP_BOARD_SERIAL}1 115200`\n\n    **`Linux`** `$ screen /dev/ttyUSB1 115200`\n\n - Insert the SD card in the GRiSP 2 board.\n - Reset the board using the onboard reset button.\n - Enter into barebox console mode by pressing any key before 3 seconds.\n - Consult the current active system partition:\n\n    **`Barebox`** `$ echo $state.bootstate.active_system`\n\n - Write the firmware. If the current active system is `0`, use device\n   `/dev/mmc1.0`, if it is `1` use device `/dev/mmc1.1`:\n\n    **`Barebox`** `$ uncompress /mnt/mmc/grisp2.${RELNAME}.${RELVSN}.sys.gz /dev/mmc1.0`\n\n - Remove the SD card.\n - Reset the GRiSP board again.\n\nTo reset a GRiSP 2 board eMMC, either with a truncated or full image firmware:\n\n - Copy the firmware to the SD card:\n\n    **`macOS`** `$ cp _grisp/firmware/grisp2.${RELNAME}.${RELVSN}.emmc.gz /Volumes/GRISP`\n\n    **`Linux`** `$ cp _grisp/firmware/grisp2.${RELNAME}.${RELVSN}.emmc.gz /media/${USER}/GRISP`\n\n - Unmount the SD card:\n\n    **`macOS`** `$ diskutil umount /Volumes/GRISP`\n\n    **`Linux`** `$ umount /media/${USER}/GRISP`\n\n - Open a serial console to the GRiSP board:\n\n    **`macOS`** `$ screen /dev/tty.usbserial-0${GRISP_BOARD_SERIAL}1 115200`\n\n    **`Linux`** `$ screen /dev/ttyUSB1 115200`\n\n - Insert the SD card in the GRiSP 2 board.\n - Reset the board using the onboard reset button.\n - Enter into barebox console mode by pressing any key before 3 seconds.\n - Set the current active system partition to the first one:\n\n    **`Barebox`** `$ let state.bootstate.active_system=0`\n\n    **`Barebox`** `$ state -s`\n\n - Write the firmware:\n\n    **`Barebox`** `$ uncompress /mnt/mmc/grisp2.${RELNAME}.${RELVSN}.emmc.gz /dev/mmc1`\n\n - Remove the SD card.\n - Reset the GRiSP board again.\n\nTo reset only the bootloader of the board:\n\n - Copy the firmware to the SD card:\n\n    **`macOS`** `$ cp _grisp/firmware/grisp2.${RELNAME}.${RELVSN}.boot.gz /Volumes/GRISP`\n\n    **`Linux`** `$ cp _grisp/firmware/grisp2.${RELNAME}.${RELVSN}.boot.gz /media/${USER}/GRISP`\n\n - Unmount the SD card:\n\n    **`macOS`** `$ diskutil umount /Volumes/GRISP`\n\n    **`Linux`** `$ umount /media/${USER}/GRISP`\n\n - Open a serial console to the GRiSP board:\n\n    **`macOS`** `$ screen /dev/tty.usbserial-0${GRISP_BOARD_SERIAL}1 115200`\n\n    **`Linux`** `$ screen /dev/ttyUSB1 115200`\n\n - Insert the SD card in the GRiSP 2 board.\n - Reset the board using the onboard reset button.\n - Enter into barebox console mode by pressing any key before 3 seconds.\n - Write the firmware:\n\n    **`Barebox`** `$ uncompress /mnt/mmc/grisp2.${RELNAME}.${RELVSN}.boot.gz /dev/mmc1`\n\n - Remove the SD card.\n - Reset the GRiSP board again.\n\n\n### Cautions\n\n#### With truncated image firmwares\n\nWhen writing a truncated eMMC image firmware, only the first system partition is\nwritten. If the active system is the second one, the board will continue to boot\nthe old software. You will need to manually change the active system partition\nin the bootloader console and restart the board.\n\nTo consult the current active system partition in the bootloader console:\n\n    $ echo $state.bootstate.active_system\n\nTo change the current active system partition to the first one:\n\n    $ let state.bootstate.active_system=0\n    $ state -s\n\n\n#### With writing system firmware on inactive system partition\n\nWhen writing a system firmware, be sure to do it on the active system\npartition or the board will continue to boot the old software.\nThe device for the first system is `/dev/mmc1.0` and the one for the second\nsystem is `/dev/mmc1.1`. See [the caution about truncated images firmware](#with-truncated-image-firmwares)\nfor details on how to consult and change the current active system partition.\n\n\n## Build a Software Update Package\n\nTo create a GRiSP software update package, use the 'pack' command:\n\n    $ rebar3 grisp pack\n\nIt creates a software update package under `_grisp/update`.\n\nTo include the bootloader in the generate update package, add the option\n`-b/--with-bootloader`:\n\n    $ rebar3 grisp pack -b\n\nNote that a toolchain is required for building the bootloader firmware, see the\n`deploy` command for more information on how to configure the toolchain.\n\nTo force the recreation of the bundle and firmware(s) use the option\n`-r/--refresh`:\n\n    $ rebar3 grisp pack -r\n\nTo generate a signed package, use the `-k/--key` option:\n\n    $ rebar3 grisp pack --key private_key.pem\n\n\n### Updating a GRiSP Board\n\nTo be able to update a GRiSP board using a software update package, the software\nrunning on the board must have the `grisp_updater_grisp2` dependency in\n`rebar.config`:\n\n    {deps, [grisp_updater_grisp2]}.\n\n`grisp_updater` needs to be configured in `sys.config` (or equivalent):\n\n    {grisp_updater, [\n        {signature_check, true},\n        {signature_certificates, {priv, my_app, \"certificates/updates\"}},\n        {system, {grisp_updater_grisp2, #{}}},\n        {sources, [\n            {grisp_updater_tarball, #{}},\n            {grisp_updater_http, #{\n                backend =\u003e {grisp_updater_grisp2, #{}}\n            }}\n        ]}\n    ]},\n\nIf `signature_check` is set to `true` the software package must be signed using\nthe `-k/--key` option, and the public key must be available in the directory\nconfigured by `signature_certificates`.\n\nWhen these conditions are met, you can follow these steps to perform an A/B\nsoftware update of a GRiSP board:\n\n - Unpack the software update package into a local directory:\n\n    **`any`** `$ mkdir -p releases/${RELNAME}/${RELVSN}`\n    **`any`** `$ tar -C releases/${RELNAME}/${RELVSN} -xvf _grisp/update/grisp2.${REL_NAME}\".${RELVSN}.${PROFILE}.tar -xvf`\n\n - Start a local HTTP server to serve the package:\n\n    **`any`** `$ http-server ./releases -p 8000`\n\n - Open a serial console to the GRiSP board:\n\n    **`macOS`** `$ screen /dev/tty.usbserial-0${GRISP_BOARD_SERIAL}1 115200`\n\n    **`Linux`** `$ screen /dev/ttyUSB1 115200`\n\n- On the GRiSP2 console, start the update process:\n\n    **`GRiSP`** `$ grisp_updater:update(\u003c\u003c\"http://${HOST_IP}:8000/${RELNAME}/${RELVSN}\"\u003e\u003e).`\n\n- Reset the GRiSP2 board using the onboard reset button.\n\n- Validate the new software version in the GRiSP2 console:\n\n    **`GRiSP`** `$ grisp_updater:validate().`\n\nNote that the update process will only show progress information if the log\nlevel is at least `INFO`.\n\n\n## Listing Packages\n\nThe plugin can list pre-built GRiSP OTP packages and toolchains:\n\n```console\n$ rebar3 grisp package list\n===\u003e GRiSP pre-built OTP versions for platform 'grisp2'\nVersion\n23.3.4.11\n23.3.4.9\n$ rebar3 grisp package list --type=toolchain\n===\u003e GRiSP pre-built toolchain packages\nOS     Latest  OS Version         Url\nLinux  true    5.11.0-1027-azure  https://grisp.s3.amazonaws.com/platforms/grisp2/toolchain/grisp2-rtems-toolchain_Linux_5.11.0-1027-azure_e2c29d3374d9046af01af570f6a85a6aa99546bb.tar.gz\nLinux          5.11.0-1028-azure  https://grisp.s3.amazonaws.com/platforms/grisp2/toolchain/grisp2-rtems-toolchain_Linux_5.11.0-1028-azure_3122986b9cd7073f42f1387f3981c812a2909b68.tar.gz\nmacOS  true    10.15.7            https://grisp.s3.amazonaws.com/platforms/grisp2/toolchain/grisp2-rtems-toolchain_macOS_10.15.7_e2c29d3374d9046af01af570f6a85a6aa99546bb.tar.gz\nmacOS          11.6.3             https://grisp.s3.amazonaws.com/platforms/grisp2/toolchain/grisp2-rtems-toolchain_macOS_11.6.3_3122986b9cd7073f42f1387f3981c812a2909b68.tar.gz\n```\n\n## Build OTP for GRiSP\n\nThe fastest way is to use our Docker image `grisp/grisp2-rtems-toolchain`:\n\nAdd the toolchain image name to the `rebar.config` under `grisp` → `build` → `toolchain` → `docker`\n\nOr if you have a local installation you can use that:\n\nAdd the path to the toolchain to the `rebar.config` under `grisp` → `build` → `toolchain` → `directory`\n\n```erlang\n{grisp, [\n    {otp, [{version, \"25\"}]},\n    {build, [\n        {toolchain, [\n            {directory, \"/PATH/TO/grisp2-rtems-toolchain/rtems/VERSION/\"}\n            % Or use Docker\n            {docker, \"grisp/grisp2-rtems-toolchain\"}\n            % If both are specified, only 'directory' is used\n        ]}\n    ]},\n    {deploy, [\n        {destination, \"/PATH/TO/DESTINATION\"}\n    ]}\n]}.\n```\n\nThen execute `rebar3 grisp build`. This will take some time, because Erlang/OTP is cross-compiled for the GRiSP board.\n\nYou only need to do that again if you updated and rebuilt the `grisp2-rtems-toolchain` repository or if you changed or wrote new drivers in C. If you need to build OTP for a second time and just changed files you can speed it up by using `rebar3 grisp build --configure false`. Each time you add new C files you will need to run configure again, because this tool will apply a patch to a makefile for each C driver, NIF and system file.\n\nYou can create the tarballs we use for distribution on our CDN with `rebar3 grisp build --tar true`\n\nThe built Erlang distribution and its runtime system is located in the project\nfolder, under the path `_grisp/otp/\u003cversion\u003e/install`.\n\n## Bug Reports\n\nYou can run `rebar3 grisp report` to gather info about the project configuration. The user can view and edit the generated text files. It's possible to pack them later adding `--tar` to the same command. Providing such report file can speedup debugging and support from the dev team.\n\n## Development\n\nTo test the plugin and develop for it, we recommend checking out a specific version into a local project. You can also create a new temporary GRiSP project using this plugin. This can be useful to test deployments locally before copying them to an SD card:\n\n```console\n$ rebar3 grisp configure --name=\"grisp_test\" --dest=\"GRISP_SD_CARD\"\n```\n\nGo into the project folder and prepare the checkout directory used by Rebar 3 for dependency overrides:\n\n```console\n$ cd grisp_test\n$ mkdir -p _checkouts\n```\n\n### Testing `master`\n\nYou need to clone both _rebar3_grisp_ (this repo) and its dependency [_grisp_tools_](https://github.com/grisp/grisp_tools). If you want the latest `master` versions:\n\n```console\n$ git clone https://github.com/grisp/rebar3_grisp.git _checkouts/rebar3_grisp\n$ git clone https://github.com/grisp/grisp_tools.git _checkouts/rebar3_grisp\n```\n\n### Testing a Specific Branch\n\nAlternatively, clone a specific branch. Replace `$REBAR3_PLUGIN_BRANCH` with the branch name you want from _rebar3_grisp_ and `$GRISP_TOOLS_BRANCH` with the branch name you want from _grisp_tool_:\n\n```console\n$ git clone --single-branch --branch $REBAR3_PLUGIN_BRANCH https://github.com/grisp/rebar3_grisp.git _checkouts/rebar3_grisp\n$ git clone --single-branch --branch $GRISP_TOOLS_BRANCH https://github.com/grisp/grisp_tools.git _checkouts/rebar3_grisp\n```\n\nIn case you only need a specific branch of _rebar3_grisp_, you can default to using the `master` version of _grisp_tools_.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrisp%2Frebar3_grisp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrisp%2Frebar3_grisp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrisp%2Frebar3_grisp/lists"}