Skip to content

Root16/bamboo

Repository files navigation

Bamboo

Bamboo is a simple, friendly, and ⚡blazingly⚡ fast customization manager, designed to speed up development time on the Microsoft Power Platform. 🚀

Currently supporting web resources, custom controls, and plugin packages, Bamboo provides a seamless experience for developers to edit and manage these solution components - all from within VS Code.

Features

Bamboo provides the following features inside VS Code:

  • Create or update web resources.
  • Publish web resources automatically.
  • Add web resources to a solution automatically.
  • Manage custom controls (PCF components) through the import + publish of solutions.
  • List all web resources and custom controls in a given solution in a VS Code tree view.
  • Update plugin packages

Component Tree

Component Tree

Commands

Command Palette

Getting Started

  1. Install the extension here.
  2. Add the files: bamboo.conf.json and .bamboo_tokens/tokenCache.json at the root of your VS Code workspace.
    • A suggested structure is:
    • Example Project Structure
    • Do not check bamboo.conf.json or .bamboo_tokens into source control.
  3. Populate bamboo.conf.json with the following data:
{
    "baseUrl": "https://<org>.crm.dynamics.com",
    "solutionUniqueName": "<your-solution-name>",
    "credential": {
        "type": "ClientSecret",
        "clientId": "<your-client-id>",
        "clientSecret": "<your-client-secret>",
        "tenantId": "<your-tenant-id>"
    },
    "webResources": [
        {
            "dataverseName": "new_/forms/account.js",
            "relativePathOnDisk": "path/to/new_/forms/account.js"
        },
        {
            "dataverseName": "new_/forms/contact.js",
            "relativePathOnDisk": "path/to/new_/forms/contact.js"
        },
        ...
    ],
    "customControls": [
        {
            "dataverseName": "new_NEW.ControlOne",
            "relativePathOnDiskToSolution": "path/to/ControlOneSolution.zip",
            "solutionName": "ControlOneSolution"
        },
        {
            "dataverseName": "new_NEW.ControlTwo",
            "relativePathOnDiskToSolution": "path/to/ControlTwoSolution.zip",
            "solutionName": "ControlTwoSolution"
        },
        ...
    ],
    "pluginPackages": [
        {
            "pluginPackageName": "new_NEW.Plugins",
            "relativePathOnDiskToNugetPackage": "path/to/NEW.Plugins.1.0.0.nupkg"
        },
        ...
    ]
}
  1. Reload VS Code
    • Everytime a configuration change is made to bamboo.conf.json VS Code needs to be re reloaded

Authentication Methods Supported

Authentication Scheme Currently Supported
Client Id / Client Secret
OAuth

Important Notes

  • All paths must use the / seperator.
  • baseUrl must not end with a /.
  • The app registration specified must have:
    • Access to the specified Dataverse environment
    • The appropriate Security Role necessary to:
      • Upload solutions
      • Publish solutions
      • Upload web resources
      • Publish web resources
      • Upload plugin packages
      • Add components to solutions
  • relativePathOnDisk, relativePathOnDiskToSolution and relativePathOnDiskToNugetPackage must not start with a /.
  • For web resources, dataverseName and relativePathOnDisk don't need to be similar (as shown in the example), this is just encouraged for ease of development

Usage

Command Title
bamboo.syncCurrentFile Sync current file. (Must be present on conf.)
bamboo.syncAllFiles Sync all files. (Each file present in the conf.)
bamboo.syncCustomControl Sync a Custom Control. (Opens up a choice dropdown for each control specified in the conf.)
bamboo.syncPluginPackage Sync a Plugin Package. (Opens up a choice dropdown for each package specified in the conf.)
  • All command can be run in the command palette.

Extension Settings

Property Type Default Description
bamboo.general.messageVerbosity string "low" Set the verbosity level of how many messages are displayed.
bamboo.general.listSolutionComponentsOnStartup boolean false When the extension is loaded, list all supported solution components in the currently selected solution in a tree view.
bamboo.webResource.publishAfterSync boolean true When syncing a web resource, publish after a successful upload.
bamboo.customControl.publishAfterSync boolean true When syncing a custom control solution, publish after a successful upload.

Feature List

  • [✅] Upload / create web resources
  • [✅] List Web Resources in tree view
  • [✅] List Custom Controls in tree view
  • [✅] Upload Custom Controls via Solution Import
  • [❌] Upload Custom Controls via PAC or individual import
  • [❌] Automatically add custom controls to solution
  • [❌] Manage upload / sync from context of tree view
  • [❌] Sync data from Power Apps to local files
  • [❌] Create a Plugin Package or Plugin Assembly
  • [✅] Update / sync a Plugin Package
  • [❌] Update / sync a Plugin Assembly

License

Distributed under the MIT License. See LICENSE for more information.

Contact

Contributing

  • This project is intended to benefit the Power Platform community as well as Root16's internal developers.
  • Contributions are most welcome.
  • But, issues, fixes and feature requests are not guaranteed.
  • Use at your own risk: This software is provided "as is," without warranty of any kind, express or implied. Use it at your own discretion and responsibility.

About

VS Code extension for managing developer customizations on the Microsoft Power Platform

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors