diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..1b763b1bae --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +CHANGELOG.md diff --git a/.vscode/settings.json b/.vscode/settings.json index a2efe89736..12eb1b06db 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,6 +11,7 @@ "appdirs", "camelcase", "chokidar", + "Codespaces", "conda", "datapoint", "datapoints", diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 61d5e42c97..2732901da2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,55 +1,49 @@ -# Feedback +## Feedback -See something that should be changed? Want to request a new feature? Open -[a GitHub Issue!](https://github.com/iterative/vscode-dvc/issues) +See something that should be changed? Want to request a new feature? Open an +[issue on GitHub](https://github.com/iterative/vscode-dvc/issues)! -# Development Setup +## Pull requests -Ensure [Yarn](https://yarnpkg.com/) and -[Visual Studio Code](https://code.visualstudio.com) are installed. - -It is recommended that you have a DVC project available to test the extension -against. We have provided [the demo project](#the-demo-project) as part of this -repo but feel free to use any DVC project that you have available. - -To enable formatting on save in VS Code, install the `esbenp.prettier-vscode` -extension. This is optional, but highly recommended as PRs with improper format -will be blocked from merge until the issue is fixed. +You may also submit a change request to this repository directly +[from here](https://github.com/iterative/vscode-dvc/pulls). Contributions are +highly appreciated! - +> 💡 **Tip**: To enable formatting on save in VS Code, install the +> `esbenp.prettier-vscode` extension. This is highly recommended as PRs with +> improper format will be blocked from merge until fixed. -Note: When using any project that relies on an isolated python environment -(conda, venv, etc) the -[ms-python.python](https://github.com/Microsoft/vscode-python) extension needs -to be installed into VS Code. It is used by this extension to locate and utilize -the required environment. +## Development environment -## Development Environment +The development environment allows contributors to test their changes to the +extension. The local repository source is built and loaded into the Extension +Development Host. -The development environment allows contributors to test out the extension. The -current repository source is built and loaded into the Extension Development -Host as an Extension. - -Please be aware that having a separate (`.vsix`) version of the extension -installed will cause all kinds of chaos in your development environment. +First, ensure that [Yarn](https://yarnpkg.com/) and +[Visual Studio Code](https://code.visualstudio.com) are installed. -- Open the monorepo root as a project in VS Code +- Open this repository's root directory as a project in VS Code. - Run `Tasks: Run Build Task` (Ctrl+Shift+b) to start the extension and webview development servers (alternatively run `yarn dev-server` from the terminal). + > **Warning**: Having a separate (`.vsix`) version of the extension installed + > may cause all kinds of chaos in your development environment. + - Open the Extension Development Host, a child instance of VS Code with the results of the dev servers installed as an extension, with `Start Debugging` - (f5). - Note: selecting the `Run Extension` option when running the debugger will - prevent all other extensions from being loaded into the VS code instance. This - will improve the performance of VS code but can cause certain DVC commands to - fail if the project uses an isolated python environment (see - [this note](#note)). + (f5). -- Open the demo or another DVC project in the Extension Development Host; VS - Code will remember the last project opened, so this step only has to be done - once. + > **Note**: using the `Run Extension` command when running the debugger will + > prevent all other extensions from loading into VS Code. This will improve + > the performance of VS Code but can cause certain DVC commands to fail if the + > project uses an isolated python environment (see [this warning](#warning)). + +- Open a DVC project in the Extension Development Host. VS Code will remember + the last project opened, so this step only has to be done once. + + > **Note**: We have provided a demo project as part of this repo, but feel + > free to use any DVC project that you have available. ## The demo project @@ -75,9 +69,17 @@ encouraged to try other DVC repositories- especially real-world cases! environment to be loaded. - This will happen automatically IF the `ms-python.python` extension is - installed within the VS code instance that you are developing against. + installed within the VS Code instance that you are developing against. + + -## React Component Development with Storybook +> **Warning** +> When using any project that relies on an isolated Python environment (`conda`, +> `venv`, etc.), Microsoft's +> [Python extension](https://github.com/Microsoft/vscode-python) is required. +> It's used by this extension to locate and utilize the required environment. + +## React component development with Storybook Start Storybook with `yarn storybook` in either the monorepo root or the `webview` project, and you can develop the React components this plugin uses @@ -87,9 +89,3 @@ There are some discrepancies between the Storybook environment and the environment of a real VS Code extension, custom themes being one big one. Always make sure to try out changed components in the full dev environment before merging! - -# Resources - -Check out the -[Resources page](https://github.com/iterative/vscode-dvc/wiki/Resources) of our -GitHub wiki for a list of relevant docs and related projects. diff --git a/README.md b/README.md index 40d846f342..f00bd09ff4 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,121 @@ +![banner](https://raw.githubusercontent.com/iterative/vscode-dvc/main/extension/resources/banner.png) + # DVC Extension for Visual Studio Code - - - - +[![Version](https://vsmarketplacebadge.apphb.com/version-short/iterative.dvc.svg)](https://https://marketplace.visualstudio.com/items?itemName=Iterative.dvc) +[![Installs](https://vsmarketplacebadge.apphb.com/installs/iterative.dvc.svg)](https://https://marketplace.visualstudio.com/items?itemName=Iterative.dvc) +[![Downloads](https://vsmarketplacebadge.apphb.com/downloads/iterative.dvc.svg)](https://https://marketplace.visualstudio.com/items?itemName=Iterative.dvc) +[![Ratings](https://vsmarketplacebadge.apphb.com/rating-short/iterative.dvc.svg)](https://https://marketplace.visualstudio.com/items?itemName=Iterative.dvc) +[![Continuous Integration](https://github.com/iterative/vscode-dvc/actions/workflows/continuous-integration.yml/badge.svg)](https://github.com/iterative/vscode-dvc/actions/workflows/continuous-integration.yml) [![Maintainability](https://api.codeclimate.com/v1/badges/fb243c31ea059c0038b2/maintainability)](https://codeclimate.com/repos/608b5886f52398018b00264c/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/fb243c31ea059c0038b2/test_coverage)](https://codeclimate.com/repos/608b5886f52398018b00264c/test_coverage) -A [Visual Studio Code](https://code.visualstudio.com/) -[extension](https://marketplace.visualstudio.com/VSCode) that aims to allow -users of all technical backgrounds to effectively use [DVC](https://dvc.org/). - -## Current State - -We want early adopter feedback! Please let us know what you like and don't like -about the extension. Feel free to reach out in this repository's -[issues](https://github.com/iterative/vscode-dvc/issues) or via any of the other -existing [support channels](https://dvc.org/support). - -## Quick Start - -- **Step 1.** - [Install a supported version of DVC on your system](https://dvc.org/doc/install) -- **Step 2.** - [Install the DVC extension for Visual Studio Code](https://code.visualstudio.com/docs/editor/extension-gallery). -- **Step 3.** See Walkthrough. +Run, compare, visualize, and track machine learning experiments right in VS +Code. This extension uses [DVC](https://dvc.org/), an open-source data +versioning and ML experiment management tool. No additional services or +databases are required. + +![Extension Overview](https://raw.githubusercontent.com/iterative/vscode-dvc/main/extension/docs/overview.gif) + +- **Experiment tracking**: Record training data, parameters, and metrics on top + of [Git](https://git-scm.com/). Navigate your experiments, compare their + results, and find the best ML models. +- **Visualization**: Plot performance data in a customizable dashboard including + one or more overlaid experiments. +- **Live tracking**: Capture and see metrics changing in real time. +- **Reproducibility**: Make sure that anyone can recover or confirm previous + experiments, and run new experiments based on their results. +- **Data Management**: Handle and version large datasets, files, and models + effectively right from VS Code. + +> **Note**: We are in public beta and welcome early adopter feedback! +> Feel free to reach out [via Discord] or open [issues in GitHub]. +> +> [issues in github]: https://github.com/iterative/vscode-dvc/issues +> [via discord]: https://discord.gg/BGCjJHvDHt + +### Why prefer this extension? + +- Enjoy the best developer experience with the first experiment tracking + interface for an IDE. +- No external servers, databases, subscriptions, etc. Data stays fully under + your control and your existing Git hosting is used to share and collaborate. +- Go beyond a simple metrics dashboard with complete ML experiments that include + metrics, code, and data. Powered by [DVC experiment + versioning][dvc experiments]. +- Implement [data versioning] on top of your favorite cloud storage, such as + Amazon S3, Azure Blob Storage, Google Cloud Storage, NFS, etc. + +[dvc experiments]: + https://dvc.org/doc/user-guide/experiment-management/experiments-overview +[data versioning]: https://dvc.org/doc/use-cases/versioning-data-and-model-files + +## Quick start + +1. [Install DVC](https://dvc.org/doc/install) on your system. +2. Install [this extension] in VS Code. +3. Follow the **Get Started** page that pops up! + + +> 💡 Feel free to try our [example DVC project] first! Opening it [with Github +> Codespaces] will include this extension automatically. + +![Initial Get Started page](https://raw.githubusercontent.com/iterative/vscode-dvc/main/extension/docs/walkthroughs.png) + +[this extension]: + https://marketplace.visualstudio.com/items?itemName=Iterative.dvc +[example dvc project]: https://github.com/iterative/example-get-started +[with github codespaces]: + https://docs.github.com/en/codespaces/getting-started/quickstart#creating-your-codespace + +### Learn more about DVC (Data Version Control) + +See the DVC documentation to Get Started with [Experiment Versioning] or [Data +Management]. For deeper learning, try our [free course]! + +[experiment versioning]: https://dvc.org/doc/start/experiments +[data management]: https://dvc.org/doc/start/data-management +[free course]: https://learn.iterative.ai/ + + + +## What you get + +This extension augments VS Code in the following ways: + +- Adds a brand-new new **[DVC View]** (DVC logo icon in the Activity Bar) with panels to + visualize and manage [DVC Experiments]. +- Provides special _Editors_ to manage **[Experiments]** and display **[Plots]** + in IDE _Tabs_. +- Adds a **[DVC Tracked]** panel to the _Explorer_ view. This shows a tree of + the data files and directories tracked by DVC, including their state, and + options to [synchronize] them (from/to remote storage). +- Adds a **[DVC panel]** to the _Source Control_ view to display the [workspace + status]. You can [restore] or reset project versions (based on the current Git + `HEAD` commit) as well as manage new and existing data from here. +- Registers several **Commands** in the _[Command Palette]_ (see next section). +- Includes a DVC channel for the _Output_ panel (useful for + [debugging](#debugging)). + +[dvc view]: + https://github.com/iterative/vscode-dvc/blob/main/extension/resources/walkthrough/view-container.md +[experiments]: + https://github.com/iterative/vscode-dvc/blob/main/extension/resources/walkthrough/experiments-table.md +[plots]: + https://github.com/iterative/vscode-dvc/blob/main/extension/resources/walkthrough/plots.md +[command palette]: + https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette +[dvc tracked]: + https://github.com/iterative/vscode-dvc/blob/main/extension/resources/walkthrough/dvc-tracked-files.md +[synchronize]: https://dvc.org/doc/start/data-management#storing-and-sharing +[dvc panel]: + https://github.com/iterative/vscode-dvc/blob/main/extension/resources/walkthrough/dvc-tracked-files.md +[workspace status]: + https://dvc.org/doc/command-reference/status#local-workspace-status +[restore]: https://dvc.org/doc/start/data-management#switching-between-versions ## Useful commands @@ -40,16 +130,46 @@ in one of the following commands: | `DVC: Show Experiments` | Show an interactive version of DVC's `exp show` [command](https://dvc.org/doc/command-reference/exp/show). | | `DVC: Show Plots` | Show an interactive version of DVC's `plots diff` [command](https://dvc.org/doc/command-reference/plots/diff). | -## Features +Learn more about the extension's [commands]. + +[commands]: + https://github.com/iterative/vscode-dvc/blob/main/extension/resources/walkthrough/command-palette.md + +## Configuration + +These are the VS Code [settings] available for the Extension: -- [Command Palette](extension/resources/walkthrough/command-palette.md) -- [Source Control Management](extension/resources/walkthrough/source-control-management.md) -- [Tracked Resources](extension/resources/walkthrough/tracked-explorer.md) -- [DVC View Container](extension/resources/walkthrough/view-container.md) -- [Experiments Table](extension/resources/walkthrough/experiments-table.md) -- [Plots](extension/resources/walkthrough/plots.md) +[settings]: https://code.visualstudio.com/docs/getstarted/settings -### Debugging +| **Option** | **Description** | +| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `dvc.dvcPath` | Path or shell command to the DVC binary. Required unless Microsoft's [Python extension] is installed and the `dvc` package found in its environment. | +| `dvc.pythonPath` | Path to the desired Python interpreter to use with DVC. Required when using a virtual environment. | +| `dvc.doNotShowWalkthroughAfterInstall` | Do not prompt to show the Get Started page after installing. Useful for pre-configured development environments | +| `dvc.doNotRecommendRedHatExtension` | Do not prompt to install the Red Hat YAML extension, which helps with DVC YAML schema validation (`dvc.yaml` and `.dvc` files). | +| `dvc.doNotShowCliUnavailable` | Do not warn when the workspace contains a DVC project but the DVC binary is unavailable. | +| `dvc.doNotShowUnableToFilter` | Do not warn before disabling auto-apply filters when these would result in too many experiments being selected. | + +> **Note** that the `Setup The Workspace` command helps you set up the basic +> ones at the [Workspace level] (saved to `.vscode/setting.json`). + +[python extension]: + https://marketplace.visualstudio.com/items?itemName=ms-python.python +[workspace level]: + https://code.visualstudio.com/docs/getstarted/settings#_workspace-settings + +## Debugging + +### The DVC Extension + +Please see the DVC [channel] in the IDE's _Output_ panel to see the underlying +DVC commands being run, as well as their error output. Feel free to share this +with us [via Discord] or use it to report [issues in GitHub]. + +[channel]: + https://code.visualstudio.com/api/extension-capabilities/common-capabilities#output-channel + +### Your DVC project Due to the way DVC pipelines run scripts of any language from the command line, users must debug pipeline scripts (e.g. `train.py`) standalone in whatever way @@ -58,12 +178,10 @@ pipelines, and most scripts are capable of running outside of DVC. ## Contributing -See development docs and contributing guidelines in -[CONTRIBUTING.md](CONTRIBUTING.md) - -## Explore +See the development and contributing guidelines in +[CONTRIBUTING.md](https://github.com/iterative/vscode-dvc/blob/main/CONTRIBUTING.md). -View [more resources](extension/resources/walkthrough/dvc-learn-more.md). +![GitHub Contributors Image](https://contrib.rocks/image?repo=iterative/vscode-dvc) ## Data and telemetry diff --git a/extension/resources/overview.gif b/extension/docs/overview.gif similarity index 100% rename from extension/resources/overview.gif rename to extension/docs/overview.gif diff --git a/extension/docs/walkthroughs.png b/extension/docs/walkthroughs.png new file mode 100644 index 0000000000..a32d627289 Binary files /dev/null and b/extension/docs/walkthroughs.png differ diff --git a/extension/package.nls.json b/extension/package.nls.json index 5cfca5d7df..ece5b5eaa2 100644 --- a/extension/package.nls.json +++ b/extension/package.nls.json @@ -68,16 +68,16 @@ "command.views.experimentsTree.selectExperiments": "Select Experiments to Display in Plots", "command.views.plotsPathsTree.selectPlots": "Select Plots to Display", "command.views.plotsPathsTree.refreshPlots": "Refresh Plots for Selected Experiments", - "config.doNotRecommendRedHatExtension.description": "Do not prompt to install the Red Hat YAML extension to assist with DVC YAML schema validation.", - "config.doNotRecommendRedHatExtension.title": "Do not prompt to install the Red Hat YAML extension.", - "config.doNotShowCliUnavailable.description": "Do not warn when the workspace contains a DVC project but the CLI is inaccessible.", - "config.doNotShowCliUnavailable.title": "Do not warn when the CLI is inaccessible.", - "config.doNotShowWalkthroughAfterInstall.description": "Do not prompt to show the extension walkthrough after installing.", - "config.doNotShowWalkthroughAfterInstall.title": "Do not prompt to show the extension walkthrough.", - "config.doNotShowUnableToFilter.description": "Do not warn before disabling auto-apply filters when applying the selected filters would result in too many experiments being selected.", + "config.doNotRecommendRedHatExtension.description": "Do not prompt to install the Red Hat YAML extension, which helps with DVC YAML schema validation.", + "config.doNotRecommendRedHatExtension.title": "Do not recommend the YAML extension.", + "config.doNotShowCliUnavailable.description": "Do not warn when the workspace contains a DVC project but the DVC binary is unavailable.", + "config.doNotShowCliUnavailable.title": "Do not warn when DVC is unavailable.", + "config.doNotShowWalkthroughAfterInstall.description": "Do not prompt to show the Get Started page after installing. Useful for pre-configured development environments", + "config.doNotShowWalkthroughAfterInstall.title": "Do not show the Get Started page.", + "config.doNotShowUnableToFilter.description": "Do not warn before disabling auto-apply filters when these would result in too many experiments being selected.", "config.doNotShowUnableToFilter.title": "Do not warn before disabling auto-apply filters to experiment selection.", - "config.dvcPath.description": "Call DVC from this path. Follows Python extension when blank.", - "config.dvcPath.title": "DVC CLI Path", - "config.pythonPath.description": "Required virtual environment's Python interpreter path. Overrides any other extension's settings for the DVC CLI.", - "config.pythonPath.title": "DVC Python Interpreter Path" + "config.dvcPath.description": "Path or shell command to the DVC binary. Required unless Microsoft's Python extension is installed and the `dvc` package found in its environment.", + "config.dvcPath.title": "DVC Path (or shell command)", + "config.pythonPath.description": "Path to the desired Python interpreter to use with DVC. Required when using a virtual environment. Overrides any other extension's settings for this extension's purposes.", + "config.pythonPath.title": "Python Interpreter" } diff --git a/extension/resources/banner.png b/extension/resources/banner.png new file mode 100644 index 0000000000..f678f5c5ce Binary files /dev/null and b/extension/resources/banner.png differ