 Greetings, I am Al Seminoffs, I am a software engineer at Google. I work on the embedded controller within our Chromebooks. I'm here to discuss our vision for a full developer workflow with West. First, I'll go over what is West and how we want to streamline and simplify the developer workflow with West. This involves setting up your workspace, handling your tools with dependency manager, integrating Twister, and managing your PRs. For those who are new to Zephyr, West is Zephyr Swiss Army Knife command line tool for syncing, building, and flashing your builds. West adds its core that you manage multiple Git repositories under a single directory, which is a single file, called the WestManifest file. The Manifest file contains all projects used within your workspace. You'll typically run West init, which creates your workspace, followed by West update, which parses the manifest file that clones a list of Git repositories. West is pluggable, allowing you to add your own commands, which are referred to as West extension commands. These extensions are defined in a YAML file as pointing to within the WestManifest file for a project. As Zephyr project itself adds some commonly used extensions such as build, flash, and debug. This is what we're looking into to help streamline a developer's workflow by adding new sub-commands for West. So we're working on a few sub-commands and enhancements that should help simplify the developer's experience when working on Zephyr. I'll go over these extensions in more detail in the following slides. First, we have a setup command, which will configure your workspace in a single step. Next, I'll go over the dependency manager, which reduces the sync time of tools needed for your project. After you have your workspace configured and updated, you'll create a branch and start writing your code and making commits. You'll need to test your changes with Twister, which is Zephyr's test runner tool. Once you have validated your code with Twister, you'll need to push your commits to a PR and get them reviewed. We are currently looking to waste and simplify the process of setting up the Zephyr project. With Zephyr, there are multiple steps needed to get your local workspace up and running. You'll see that in the Getting Started Guide there are around seven to 10 steps needed to get going with Zephyr. We'd like to simplify this into a single step, the West Setup command. This will create your Python virtual environment, install the Zephyr's Python dependencies within the virtual environment, and download and install the latest Zephyr SDK. We'd like to make this command overridingable for a project-specific setup. For example, if your project uses additional tooling, you can invoke this via Super Setup API and then install your specific tools. All right, so now that we have a set up our workspace, we did some coding and made some commits. As per usual, something else comes up and we need to switch gears and work on some other higher priority issue. Coming back a week or two later to this project, your Latinas have made much progress and we're told we need to update our tool chain. Sometimes the tools you use are pretty large and so it can take a while. We like to make this experience quick. This is where we like to have a dependency manager built into the West Update command. The currently installed tool chain version can exist within Manifest. When invoking West Update, West can compare tooling versions of what's installed and the latest released version. When applicable, it will download and install the appropriate tools in the unneeded time of reinstalling the same version of the tool. This will be similar to how West Update currently handles fetching code within the Git by comparing shots. Now currently, West doesn't support overwriteable commands for security reasons, but that's something we're looking into as we see it allow better flexibility with sub-commands. Next, we have integrated Twister in West. The issue we were having was that when we were developing on separate Zephyr projects such as Project A and Project B, we would accidentally invoke Twister from Project A and it was meant to be used with Project B. This led to inaccurate test results as Project B was using a newer version of the Zephyr test framework with running what's Twister. West will identify the path to Twister for the current project we were working on and executed. Now you don't have to worry about inaccurate test results. The difficulties we encounter here with the managing PRs involve working with multiple branches for different features that have dependencies on each other. In the example below, we have three commits, A, B, and C. Commits A and B are reviewed under a PR. Adding commit C to the PR triggers a new review for the entire PR. This is kind of undesired as commit C should be reviewed on its own. One way we can mitigate this is we could make a separate PR for commit C. To do that, we need a separate branch for commit C. This has two issues. First, C can't be posted for review without A and B being bundled in the same PR. Second, every new feature built on C will also require a new branch. Now, if we add another dependency D as illustrated here, A and B created PR and are reviewed together. C creates a second PR. It was reviewed in parallel to A and B. D has a dependency on A, B, and C. This cannot be reasonably reviewed until all dependencies are merged. So our goal here is to make the upstream workflow PR management easier with a West Push sub-command. A developer will have all their commits in a single local branch. Commits can be grouped by adding a topic keyword in the commit message. When you execute this sub-command, it will cherry pick all commits matching the topic keyword to a new branch and then create a PR for this new branch or update the branch PR if it's already exist. This should help alleviate some of the pain points experienced with PR dependencies as the sub-command manages these dependencies for you with some help with keywords in your commit messages. Thank you for attending my talk. I hope you found it informative and helpful. This is how we can see West can improve a developer's workflow. If you have any questions, please do not hesitate to reach out to me on Discord. Thanks again. Bye.