 You know what I always say, code isn't good until you ship it. There's even a book I read called Ship It, and right now, we have taking DevOps to the next level with GitHub and Azure DevOps because code is only as good as if you ship it. It's only good when you put it out there. It's no good on Visual Studio. We have here with us, Steve and Stanley, they're going to talk about GitHub and Azure DevOps. Thank you very much. Take it away my friends. My name is Steven Borg. I'm on the Azure DevOps team. I'm Stanley Goldman. I'm on the other tools team at GitHub. Just so you can follow along later, we've got a couple links and you'll have access to these as well, but there's some GitHub repos, surprise, surprise. For if you want to reproduce this demo at home, we want you to follow along and see the benefits of this better together story. In fact, that's where we are. We have the GitHub story and the Azure DevOps story and it's better together. Let's start with GitHub. Show me a little bit about why beyond GitHub. Well, I mean, GitHub is the place where everybody goes when you think about open source. It's not going to say it's the only place, but it's definitely the most popular one. There are tons of open source projects built on GitHub every day. Perfect. If you also, there's another platform, there's several platforms out there and two of the biggest. GitHub and Azure DevOps support that team development, that collaboration between individuals on a development team. We'll talk a little bit about delivering with the Azure DevOps suite of tools, which is several tools that work very well together to help build and deliver software. As you'll see, they work very well with GitHub. But probably the best way to do that is really just to dive into a demo. What are you saying? Yeah, why not? All right. Let's pop in. I'm going to start off on the demo and I'm going to show you the website that we're going to be using for the demonstration and it's the Contoso Air website. It's a fictional website or fictional company that you can buy our line tickets and travel all around the world for. On the site here, it's for the demos that we use and you'll see that there's an awful lot of code and little bit of foreshadowing here, some Azure Pipelines action going on as well. Cool. We're keeping it in GitHub because we want everybody to be able to have access to this code and to use it for their own demonstrations on that better together story. Of course. This is what it looks like. Here's Contoso Air itself and we've got evidently a little bit of an April Fools joke going on here. We've got crawl, walk, run, and destinations you can walk to. It was April Fools yesterday in America and so humor's hard. Yeah, it is. It's definitely hard to craft a good April Fools joke. It is. We're going to definitely need to remove this April Fools joke right away. That's what we're using as the context of our better together story. If you look now, you're going to see our Azure DevOps page. I'm going to come in and talk a little bit about boards, repos, pipelines, etc. Once the demo is complete. But to start with, let's take a look at what we're trying to accomplish. Right here, we want to remove this April Fools code. It just wasn't that funny. If I open it up, you can see crawl, walk, run. Some discussions here, just really, we need to move it back to something more professional. This particular board is available to anyone on the planet. It's a public boards that anybody can see. I'm moving that over into this active column just in hopes that somebody, anybody out there in that community is going to pick that up and work on it. Well, I just happened to be an open source maintainer. So I might be interested in giving you a hand. All right. So let's switch over to my computer. I'm going to open up Visual Studio 2019. From Visual Studio 2019, I can simply hit clone or check out code, head over to GitHub, and I believe I've contributed to repository before. So if I start typing in your name, it should just come up and there we go. Steven Board, Contoso Air. So I'm going to go over and hit clone. So now what this is doing is, it's just simply cloning it from GitHub, bring it down local to your machine. Okay. Opening up in Visual Studio. Giving Visual Studio a second to catch up and here we go. So we're looking at your project or looking at Team Explorer. And this is Team Explorer with now the Team Explorer sees that we have a GitHub URL, it activates the GitHub plugin, and some of our features show up here. All right. And you can see right here that this repo is being cloned directly from Steven Borg's user account in GitHub. And so the first thing I'm going to want to do, if I'm going to make a change, is fork the repo. Okay. Now you've mentioned a couple of things. Forking, cloning, Core requests. Core requests. Sure. Tie those together for me. Right. So in other words, in order to send you a change, I don't have access to your, I don't have right access to your repo on GitHub, right? But I can fork your project so that way I can make the changes in my account and send you a pull request with those changes for you to review and acceptance of your project. Excellent. Yeah. Let's see it go. All right. So let's give it a shot. So I'm going to come here to the Team Explorer, and I'm going to use this fork feature that we added very recently and I'm going to fork your repo over to my account. Now what's happening is we're forking the repo on GitHub. Also, what this plugin is doing for us, it is changing the remote so that way the remote's origin now points to my fork. Also, it gives me another remote called upstream which points to the original. That's something I would have had to do myself right in Git if I didn't have the plugin for Visual Studio. Yeah. That's one of the things that we try to address in the GitHub plugin, right? We try to find those little workflows that make your life a little bit easier. But a person that's normally working would have to fork the repo then go over to his remotes in Git, hopefully, while burst in the Git command to do so, but they would have to do that themselves. All right. All right. So first thing I'm going to do is I'm going to change to a new branch. So fix April Fools is what I'm going to name this branch. Now if I remember right, the language changes were over in locales, Ian, right? I believe so. Okay. Cool. So here we have destinations you can walk to, April Fools. So what should we change that to say? Something like your personalized recommendation. Okay. Cool. Something of that nature. I'm going to leave a misspelling there on purpose. So crawl, work, run, and this should say fly, fly, fly, shouldn't it? Absolutely. We're all about flying. I can't type right now, of course. All right. Change is made. This is a really simple change. I mean, we're just making some code changes, but the idea is that this change can be relatively complex. We could be crossing many code files. Yeah. Of course. I mean, right. This is just a simple example, right? Where the text isn't that much to change. So I'm going to commit my changes and push them. Okay. So changing the text, I'm just going to choose commit all and push. Now that's pushing off to your repository. Or is it, do I see it yet? No, you don't see it yet. It's pushing to my fork and GitHub. Okay. Right. So now I'm going to, from here, head over to the GitHub plugin and create pull request. So I'm going to name this removing April Fools. You were telling me about some way to link a pull request with an Azure board item. Absolutely. If you simply say, fixes AB pound sign and then the identifier. In our case 443. All right. Let's try that. That will link those two together. That's cool. That comes out of the Azure boards integration. That's correct. Right? Okay. Cool. So fixes AB pound 443, you said? That's correct. All right. So create pull request. Sometimes. There we go. And it shows me right there that I created this pull request in Contoso error 8. And I can click to the pull request and I can see it's already created. And I got a little, I could feel a little vibration on my phone. I've got an alert that says, hey, there's something new. Someone's done something. All right. So we can come back to my code and I can take a look at it. My machine and we can take a look at it. Sure. Let's go ahead. So I'm out on github.com and I can see that I've got a pull request right here. If I open up the pull request, I can see a few core things about it. Here's removing April Fools. And as I open it up, I can see that it fixes AB 443. Now I'm directly on GitHub, but if I click that link, it brings me over to Azure Bored. That's cool. I can see it and I can see what it was resolving. I'll also point out that there's a link over here to the right. It's a GitHub link. I can see the GitHub logo right there. It's that removing April Fools. So I can get right back to it. Now let me go back to my board. I mean my GitHub pull request. And there's a couple of things that are happening right now. That's the Azure Pipelines logo. And right here, you can see that Pipelines, I've got something going on, something cooking. And in this particular case, I have a build that's executing, and that build is going to run a bunch of tasks. It's going to check for code coverage. Basically, it's going to tell me a little bit on whether your pull request is something I should take. Okay. It gives me just the warm fuzzies right off the get go, right? So that check has started. A couple of things that I can do, I can go in and look at those files changed, but I'm going to want to do that in Visual Studio. That's my environment. That's where I live day to day. So if I open up Visual Studio, I can go over to my pull requests and refresh those, and I can see this removing April Fools, and it was submitted by you a minute ago. Let me jump into that, and from the pull request, I can stay right inside of my Visual Studio environment. So let's see the changes you made. See if these are any good. Sure. And I'm going to open up this JSON file, and I can read here, fly, fly, fly. Yeah, that's better than walk. Walk, walk, walk, run. And your personalized recommendations. Ooh, little bit of a misspelling there. I might just jump in and open this up and say, please correct the spelling of recommendations. And it's really nice to meet you. Yeah, it may be something. You're giving this pull request. Of course. It's this open source community. I didn't give you permission to help me out. Of course. You just came in and did it yourself, and I love that. But it's a pleasure to meet you, but I'm still going to want to start this review. So I'm going to start a review. And I might make a couple other comments here. This fly, fly, fly. I might say, love it. Haven't thought of that before. And it's going to be our new logo. I love it. I'm going to add that review comment to the place. And I'm going to come over here to the right, where I'm viewing my pull request, and I'm going to continue my review. Thanks so much for your help. Couple changes. And I'll submit that review. And I'm going to request those changes. Now, all of this stuff that I'm doing inside Visual Studio could also be done out on the GitHub website. And it works. But this, I'm right here. I see in my code, this is my code editor. Why leave Visual Studio, if you don't have to. Why leave Visual Studio. Agreed. So now it's back in your court. The ball's back in your court. All right. So now let's come over back to my screen. And I am going to go back to Visual Studio, refresh this pull request screen. And I can see that there have been some comments here. All right. And I can see that you've requested changes all from here. If I open up this file in the diff, I can see all of your comments in line. And let me fix that. So I'm going to hit Enter. Takes me right to the file. Delete that one extra M. Save spelling fix. Commit all and push. So that's being pushed up to GitHub. It's being added to my pull request. And balls in your court again. All right. Let's come right back over to my screen again. And up, up, up. There I got another vibration telling me, hey, I've got a pull request. Coming in to change the pull request. So if I open up the removing April Fools and scroll down, I'm going to see a few things. First, I'm going to see that this change here is outdated. This is telling me this. I can scroll down a little bit further. And I can see that we have some comments out from some of the folks. Some of the internet. Again, we're wide open, right? Yes, of course. Thank goodness that was safe for work. For better or for worse. For better or for worse. All checks have passed. I'm loving it here. But I need to review these changes. Now I'm going to do this right here and go over to my files changed and see the difference now. I've got crawl, walk, run. That became fly, fly, fly. And we have some back and forths there. We can see your personalized recommendations. And yep, it's spelled correctly. I'm going to resolve this overall conversation. Call it good. And from here, I can go ahead and approve this review. I'm done. I like it. Cool. It's good. Well done. Thank you. Well done out there. Thank you. So I'll submit that review. Now some checks haven't yet completed. Now frankly, I normally want to be patient. These things run in about a minute to two minutes to run all my tests, do both unit tests, analyze my code coverage, and publish out those details. If I talk long enough, it'll update. But for our case, we have a code change. I'm going to go ahead and merge that pull request. Also before more people on the internet get to it. Right, exactly at this point. So let me merge that pull request. Merge pull request. And let's confirm it. Yeah. I'll confirm that pull request. And at this point, it's now merged into my master. Now this is a really interesting back and forth that happened. You had no access to my source code, but it's this collaborative environment that's out in the open. We can collaborate clearly out in the open. Yes, a bit too much sometimes. Exactly. So if I go over to my Azure team boards, and I look at my Azure team boards, what I'm going to find is that that fix, removeApril'sFooledCode was automatically merged and then moved into this removeApril'sFooledCode. Now that wasn't funny. And I can move it over. And I can say, yeah, we're going to move that to closed. I may not want to do that quite yet until I verify that it's out in the website, out in the wild, exactly. So before I do that, I want to walk through some of the things you get with Azure DevOps. So you spend a lot of time on the really wonderful pull requests and the way people interact out on GitHub. And so now I want to come back and show some of the power of Azure DevOps and why you might want to use that as well. So on Azure DevOps, it's made up of several highly related products. Boards is one of those products. As you see here, it helps us connect these ideas to releases and lets us do things like Scrum and Kanban. It gives us a health of our overall work. We've got repos and that's free Git hosting, unlimited Git and Team Foundation Version Control hosting for private repos as opposed to the public and private that you support. We have pipelines and I'll come back to that just a moment because that's a real nice integration to talk about. Test plans help us manage kind of our manual tests and our automated and our exploratory tests and collect enough data that we can reproduce those bugs. And artifacts helps us share code really effectively through things like NuGet and stuff like that. It manages a lot of different types of packages for us. Let's go back to pipelines because I think pipelines is important here. And on the pipeline side, we're gonna see we've got a couple of things happening here. For a build, we've got a build that's currently executing and that's that build off that merge pull request. Now, not only did I wanna check your pull request, I also, now that I've merged it in, I wanna run that test again. So that's currently running at this point in time and you can see that it's running right here. We can drill in and see details about it. It's running on a Ubuntu agent. I can see some of the console output. Right now it's going through component detection making sure that all of my open source components are legit. Next thing we can see are releases. And I'm gonna pop back to take it. We have this release is waiting. Oh, you have a configured deploy automatically from master. Yes, so anytime someone contributes to master, we're gonna go all the way through out and deploy it. And we're gonna be able to run a bunch of tests and checks on that. And the releases, I'm gonna step back. It's still executing, but I can step back earlier and see some of the earlier ones and we can see what happens to those. We can look at our logs, how we downloaded the artifacts from our artifact repository, pulled them all in, did the deployment out to the Azure website. Coming back to releases, let's see if it's, it's still chunking along. Of course. We're not quite there yet. Right, because we're demonstrating. Exactly, that's all right. Sometimes it takes a little while to get that release out to production. So these are all the things that tie together. And then the last thing I wanna show, two things. I wanna go back to boards and I wanna open up that April Fools wasn't funny. We open up that code. Once again, we have this link out to this removing April Fools. So we can go straight out and see that code. We've also seen out on GitHub that it's highlighted as an integration point. So I can click and come straight into it. If you want to set this up, very quickly to set this up, you simply go into project settings and set up your GitHub connections right with boards. And it's a very easy connection. Walks you right through a wizard where you have to provide your GitHub identity and where you want to connect in GitHub. And those will tie those two together. That's really good. That kind of lights up that feature. And if you want the automated builds and releases and the pipelines pieces, that's right out here as well. If I scroll to the top, I can go to the GitHub Marketplace. I could also do it from within as well. But I'm gonna come out to the GitHub Marketplace and search for pipelines. And right here are Azure Pipelines. And I can continuously build and deploy to any platform. Now, Pipelines is amazing. I just barely covered it a little bit, but it allows us to build and deploy off of a single configuration file to Linux, macOS, as well as Windows. And it's any platform, any language, any cloud. It's not just meant to push to Azure, but it does it really well. But that's a misconception people sometimes have. It's a build and deploy system for pretty much anything. And it's best in class for open source since we're talking GitHub. Sure. Probably worth mentioning that if you have an open source project, you have unlimited minutes with pipelines. Yeah, I've heard that. Build and deploy to your heart's content. Excellent. And that brings us right back to questions. Fantastic questions. First of all, I will tell you how I first used source control. I lost an entire folder of things like 15 years ago. And that's when my love affair with Git started. And it's continued ever since with GitHub. And so yeah, please, if the first thing you can do is put stuff in the source control, you should do that. All right, let's get to some questions. Let's see here. There's a lot of live share stuff here going on. Here's one more post. So here's a question. One of the things that I struggle with as a Git user is I'm terrified that I'm gonna mess something up. Tell me how the stuff inside of Visual Studio is helping with that a little bit. Sure. Yeah, it's all yours. Okay, cool. Well, I'm in Team Explorer as a built-in part of Visual Studio, right? And it offers all the commit tools, the branching tools, pretty much a very good GUI interface to get. So you don't really have to mess around with the command line too much and possibly make a mistake. Yeah, because I remember the first time I did the thing you've all done this, okay? So don't nobody, where you just like, I'll just delete it and check it out again. Uh-huh, uh-huh. Is this stuff in Visual Studio there to help us? Is it like the bumpers when I'm bowling? Is that what it's supposed to be? It definitely has bumpers. So for instance, if you go to commit and you haven't saved all your files, it'll actually actively remind you that maybe you wanna save these files because you're committing. So there are some definitely some bumpers that help keep you within the lanes from making mistakes. The other thing that's interesting to me, and this is the part that I haven't been able to set up on some of my open-source stuff, is when people do a pull request, for example, you have stuff checking whether it can do that. And maybe I missed it because I grabbed some chips during this show, I'm sorry. But how do you set that up so that it does the checks as well? Did you show that or is there a really easy way to do it? A little bit. That's set up right through introducing a YAML file that sits at the root of your version control repository. So as soon as you connect those up, we pick up that YAML file and can build out that build system that will check everything out and make sure that the code is built, compiled, unit tests are executed, code coverage is done, and a bunch of other things, including all the way through to deployment if we need to. Or you can flip it and go into Azure Pipelines and build the pipeline strictly from within Azure Pipelines and keep it out of source control if you prefer. My preference is stuff it in source control. Right. You want to check the changes of it, right? Absolutely, version everything. So if you have that YAML file, as I've seen the YAML file, it's pretty, I mean, it's literally like do this first, then do that. It's not super complicated. I was able to do that myself. So if I can, you can too. But you've got to hook it up somehow into Azure Pipelines though, right? What's the process for doing that from GitHub? Because I know there's something you have to do. Absolutely. Run right to the marketplace, search for pipelines. Once Pipelines opens up, you can click on it, scroll down. There's a little buy now button. And your total cost per month says $0 per month. That's all it is if it's an open source project. Click on purchase at that particular time and it'll bring you through a nice wizard to help you connect up those two pieces. Awesome. So that connects you to Pipelines. I also was able to do that. So that means anyone can. I'm pretty excited about that. All right, so here's a couple of questions. Now they're starting to commit. What is the best place to find some training content on VS 2019, specifically around the whole integration with GitHub and DevOps? Sure. This was one, I'm gonna take this one for the GitHub extension. Because as I pulled up in the GitHub extension for the first time, I simply installed it. And the first thing that popped up was, hey, if you wanna learn more, here's some videos and here's the direct documentation. With two links, very helpful. I clicked both of those links, watched some videos, get familiar with it, as well as see the documentation. I should mention that if you're in Azure Repos, we have the equivalent experience baked right into the Team Explorer that will allow you to do that whole pull request feel right from inside of Visual Studio, but do it to Azure Repos as well. Awesome. Yeah. Did you wanna add something? Or should we go to the next question? No, there's a team working on a Azure, well, probably answering a question for you. So you might as well go ahead first. Is the review experience with VS 2019 only available for GitHub Repos or is it also available for AZ DevOps Repos? Sure. So we make the extension for GitHub Repos. That's the team that I work on at GitHub. There is also a team at Microsoft that works on a Azure DevOps plugin. We are often in talks with them because we kind of play off of each other and we try to share features that are built in the Visual Studio core itself. And yeah, it's a different plugin. I believe it's called pull requests. And yeah, you can find it on the Marketplace as well. Awesome. So this brings up the next kind of topic because obviously in our Azure Pipelines, there's also boards and there's also repos as well. But I like to use GitHub, for example, but it's okay, we can use Azure DevOps as well. How do they get married together in a sense? Because I know there's a way, like if I say fixes number two, right? It does something in GitHub. Is there a way to do this all together? This I think gets to the heart of Conrad's question. Can VS 2019 review pull requests created within Azure DevOps as well as GitHub? Yes. So we use the Azure DevOps, the pull request extension that you mentioned. And that has that very similar experience. Alternatively, you can also go out to GitHub proper to do it there, or you can go out to Azure DevOps websites and do it right from there. Sure. But I mean, the pull request that you send in Azure DevOps is different the pull request that you send in GitHub. Of course. They're different places. Okay, so here is a question from Sean. If my team has a corporate Azure DevOps account, is GitHub included with it? It depends. You'll need to check with your Microsoft sales folks to make that determination. There are several SKUs that do include GitHub with Visual Studio. Awesome. A next question from an insecure developer. I think we might be related. Any plans of making it possible to configure Azure DevOps pipelines releases inside of VS 2019? Currently, that's something on the roadmap, but I'm not making any commitments to that particular piece. And I wish I could. Visual Studio is a wonderful place to do that and it makes total sense, but I can't commit to future development on those. Awesome. Next question. Can you create a new branch from work item for GitHub repo when you don't use repository in Azure DevOps? That's a little bit trickier. That is something I'll say is something on a high priority for future features. If you happen to be inside of a work item inside of Azure boards, you can click branch right from that work item. And if you happen to be using Azure repos, that integration already occurs and that branch is just made for you. That's coming for GitHub, but it's not here yet. Awesome. From Robert Glickman is get stash supported in VS 2019. It is. It's one of the more popular things that I've heard about in VS 2019 is that there's finally stash support. I haven't used it yet. I saw it very recently just now, but yeah, I've got to use it. I'm gonna be honest. I literally just figured this out like a couple months ago and I'm like, you can do what? It's amazing. You can commit, but not commit. You can, it's like being non-committal. Right, you can switch between branches at your leisure and just stash and then pop it off whenever you want. Okay. Let's see, any other questions here, very good. Can I drop using GitHub and use only the extension in VS 2019? Well, you actually are using GitHub if you're using the GitHub extension. Yeah, you're still using GitHub. The extension doesn't have everything that you can do on GitHub, right? I mean, they're able to develop on GitHub.com a lot faster than we're able to catch up with them in the extension. So things like merging, you know, final actions, you'll always be still tied to GitHub, but we try to at least give you some basic functionality within Visual Studio. And nice links. I mean, that's the thing I like. I'm in Visual Studio and even if there's something that takes me out that I have to go out, we provide a link right there that takes me right to GitHub. There's definitely a lot of ways to get links. Like for instance, you can get, you know, highlighted links that'll take you to a branch and highlight lines of code right in GitHub.com for you to share. So there's still a lot of integrations with GitHub.com. It's cool. You can't really leave it. It's like the back end to all the glorious things. I don't even think about it anymore, which is great. So just a final, we got a couple of minutes or so. Sure. Final takeaway, what should people go do today? I think you should go out and start contributing to GitHub first, an open source project. I think that's a- The GitHub extension? Sure. Bring it down, install it locally. You can install it Visual Studio 2017. You can put it in Visual Studio 2019, release candidate 2019 that's downloaded today. The extension actually comes by default installed into Visual Studio. I think you just have to enable it. Okay. Fantastic. And then do that, then go find an open source project and contribute. I think that's one of the best things you can do and it's an excellent mark on your resume. As a hiring instructor, as anybody hiring, where are you gonna go? You're gonna go look at people's GitHub repost. What have they done? What have they contributed to? And I like that. Awesome, well thank you so much for your time.