Visual Studio Codespaces - the tech behind Code Builder
I was certainly excited about this and reached out in a number of directions
to try to get on the pilot, all of which sadly failed - I needed to be
nominated by an Account Executive, and experience has taught me that at our
number of licenses our AE typically doesn't even know that pilots are
available, much less how to nominate me for one.
Undaunted, I took a different approach and started looking at the technology
that powers Code Builder -
Visual Studio Codespaces.
Visual Studio Codespaces
Formerly known as Visual Studio Online, the description from official
Microsoft site sums it up very well:
Cloud-hosted dev environments accessible from anywhere
There's some signup and setup required to start using Codespaces, as detailed
below.
Sign up for Azure
A Microsoft account and Azure subscription are needed, as Azure hosts the
virtual environments (machines). I chose the free subscription, which gives me
12 months free Linux virtual machine access. Compute hours are limited, but in
all likelihood I'll use this rarely and then assuming it doesn't require me to
spend a bunch of money, little or never once Code Builder is available.
VS Code Extensions
I then had to install a couple of extensions :
- Azure Account, which gives VS Code access to my Azure subscription that I've just created. Signing in to this took ages, and was eventually tracked down to some kind of conflict with my Skype account that I was logged in to at the same time. The Skype account is linked to my Microsoft account in the same was as Azure is, but VS Code wasn't having it. In the end I logged out of Skype and I was able to login to Azure. Since then I've been able to login to Skype and Azure in any order, so it may have been a glitch with one of the connections at that point in time. If in doubt, sign out of everything!]
- Visual Studio Codespaces, this allows VS Code to manage and connect to remote dev environments - you don't have to use the browser as a front-end with Codespaces and I can't see any reason you wouldn't be able to do this with Code Builder also, but time will tell.
You also have to sign in to Codespaces, which you can do via the button on the left of VS Code:
Once you've signed in, choosing to create a new Codespace will take you through a process of creating a new plan - the key questions are the Azure region - make sure to choose one close to you, and the default instance type - I went for Linux.
Putting it Together
Once the accounts and extensions are in place, VS Code gains a new icon at the
bottom left:
Clicking this opens the Codespaces menu:
Choosing 'Create New Codespace' generates a new remote environment, after
capturing some information from me. First, what type of environment I want -
I've only used the Default settings and had no problems to date.
I then have a choice of creating an empty Codespace, or populating it with the
contents of a repository - I'm using my Curated repo (currently private, but
the contents of the repo aren't really important for this post - if you are curious what it is, it's my toolbox):
Then an easy question to answer - the Codespace name.
Once all the questions are answered, the extension gets to work on a new Codespace:
As well as the progress bar, a new panel opens on the right of VS Code to
show the steps being completed (assuming all goes well - I've had one or two
failures, but most of the time it's a breeze);
Once the setup is complete, clicking the Connect button opens the remote
workspace through my local VS Code installation, which looks pretty much the
same as a local workspace, bar a larger green element on the bottom left of
the window:
and the fact that any changes I make here are not reflected in my local
workspace unless I round trip them to the version control system.
This is all well and good, and if I don't have a particularly powerful machine
it's a nice way to be able to work on multiple projects at the same time and
push a lot of the computing requirement to the cloud. The more interesting
environment, however, is the browser.
Codespaces in the Browser
To access my Codespace from a browser, I have to login to the Visual Studio
Codespaces web site at : https://online.visualstudio.com/login, using my Microsoft account that I attached my Azure subscription to. As an
aside, I only seem to be able to login via a regular Chrome window, not an
incognito one. I've no idea whether that is intentional, but it's been
consistently the case since I started playing with Codespaces.
Once I've logged in I can see all of my current Codespaces, and I have the
option to create more directly from the web site:
Clicking on my new CuratedBlog Codespace opens the IDE in the browser:
And as this is a virtual machine, the terminal works in the browser too!
That's all there is to it?
Not quite - while this gives me a Visual Studio Codespace primed with my Salesforce application metadata and running in the cloud, it doesn't know much about Salesforce, so I have to do a little more setup - note you can configure your Codespace environment via a devcontainer.json file in your project directory, so you wouldn't have to do this every time if you were spinning up multiple codespaces. I haven't looked at this in detail.
- Install the Salesforce Extension Pack from the VS Code market place
- Install the Salesforce CLI - I've found the easiest way is via npm
Once this is done, you now have the tools to interact with Salesforce orgs, but you still need to authenticate against them. This is the slightly long-winded part as, while it is technically possible to run a browser in a docker container, it doesn't look straightforward, so you'll likely end up using the JWT flow. This isn't particularly difficult, as long as you are familiar with the command line and open SSH commands, but it is a little long-winded as anyone who has set up a CI machine will testify, with the connected apps, keys and certs that you have to set up.
A similar problem presents itself once you have authenticated against your dev hub and created a scratch org - clicking the icon to open the org can't open a browser, so doesn't really do anything. The upside here is that it will typically tell you the URL that it is attempting to open which includes a session id, so you can copy/paste that into your local browser to access the scratch org, even though you haven't got any oauth for this org set up. The URL will appear in the Output tab:
This is where I expect Salesforce to add the Code Builder value - generating a Codespace that has the extensions and CLI pre-configured and already authorised against the org, as well as some other items that I haven't stumbled across yet.
Wrapping Up
While Codespaces require a bit of effort, until Code Builder is more widely available they are a really good way to be able to develop from any device that has a supported browser and internet connection. In fact I was able to use Chrome on my iPhone XS to push changes to a scratch org. The UI was terrible so I wouldn't recommend it, but as an intellectual exercise it was fun.
Thanks for this Keir, have been playing with the same, and testing out our custom DX plugin with it. As you can appreciate I need at least headless chrome to do our UI test automation so I've been taking stuff out our Dockerfile and trying it out, I'll let you know when I'm finished, though I'm also hoping CodeBuilder is available in Developer Preview soon and solves this ootb and simplifies the setup.
ReplyDelete