Transcript
WEBVTT
00:00:00.580 --> 00:00:03.108
Welcome everyone to another episode of Dynamics.
00:00:03.108 --> 00:00:07.269
Corner Is nougat a candy in a package.
00:00:07.269 --> 00:00:08.884
I'm your co-host, chris.
00:00:09.326 --> 00:00:09.968
And this is Brad.
00:00:09.968 --> 00:00:13.128
This episode was recorded on December 20th 2024.
00:00:13.128 --> 00:00:20.809
Chris, chris, chris, finishing the year, up coming into the holiday season, I think of that nougat, nougat in a candy.
00:00:20.809 --> 00:00:22.486
It's a holiday candy, isn't it?
00:00:22.486 --> 00:00:24.321
I think I don't even know.
00:00:24.321 --> 00:00:29.626
You have to ask ChatGPT or some of these other models to see exactly what a NuGet is.
00:00:29.626 --> 00:00:40.216
But today we had the opportunity to learn all about NuGet and how it can help a business central developer or an ISV within the lifecycle of the applications.
00:00:43.380 --> 00:00:45.405
With us today, we had the opportunity to speak with Chris Krieg.
00:00:45.405 --> 00:00:49.112
I was going to make a comment that Chris Krieg sounds like Kris Kringle.
00:00:49.112 --> 00:01:06.209
I was going to say that during the episode who brought in a candy called Nougat on a Christmas gift.
00:01:06.230 --> 00:01:07.611
Good afternoon, good morning.
00:01:07.611 --> 00:01:08.634
How are you doing, sir?
00:01:08.634 --> 00:01:09.855
Great, how about you?
00:01:09.855 --> 00:01:12.224
Excellent, excellent.
00:01:12.224 --> 00:01:14.608
I'm a little tongue-tied this morning for some reason.
00:01:14.608 --> 00:01:15.490
I guess it's just.
00:01:15.691 --> 00:01:16.620
It's Friday, it's.
00:01:16.659 --> 00:01:18.343
Friday and for the most of us.
00:01:18.424 --> 00:01:21.391
it's the last day before Christmas, the last birthday.
00:01:21.992 --> 00:01:35.063
Oh, yes, well, unfortunately I'm not in that camp, but me too I know a lot of people with christmas following on a wednesday and then new year's eve following the following week.
00:01:35.063 --> 00:01:39.400
I know many people have, you know, tried to sneak to get those extended vacations.
00:01:39.400 --> 00:01:45.537
You know, if you take monday off, I know a lot of places are closed on the 24th or some, uh, close early.
00:01:45.537 --> 00:01:50.254
So everyone's trying to get those breaks in, or that two week break, excellent, excellent.
00:01:50.254 --> 00:01:51.519
How about yourself?
00:01:51.519 --> 00:01:54.968
Are you doing anything interesting for the holiday season besides working?
00:01:54.968 --> 00:01:56.871
Besides working?
00:01:57.033 --> 00:02:12.367
No, I plan to do some side project stuff and having some time with my family over Christmas that's good, that's important the family.
00:02:12.408 --> 00:02:13.689
Time is important.
00:02:13.689 --> 00:02:14.639
Time in general is important.
00:02:14.639 --> 00:02:26.930
I always say and I've been big on this for a long time and anyone who knows me closely understands how I feel about time where you spend your time is what's important and where it should be important, because you don't get any time back.
00:02:26.930 --> 00:02:36.467
Any minute that you spend doing something is a minute that you spent doing something else, and you, you, you know you can't replenish the time that you have in life, so it's important to spend doing this stuff.
00:02:36.467 --> 00:02:38.181
And everybody says do what you enjoy.
00:02:38.181 --> 00:02:39.405
Sometimes I enjoy working.
00:02:39.405 --> 00:02:45.568
Right, it sounds crazy, but sometimes I'm working on something you know from the development point of view.
00:02:45.781 --> 00:02:47.400
It depends what kind of work you're talking about.
00:02:47.661 --> 00:02:49.187
Yes, and people say, oh, you're working so much.
00:02:49.187 --> 00:02:53.050
I'm like well, I enjoy it because I'm fulfilled doing what I do.
00:02:53.050 --> 00:02:57.500
I'm fortunate that I'm one that enjoys what I do on a daily basis.
00:02:57.520 --> 00:02:58.625
Well, that's your purpose, right?
00:02:58.625 --> 00:03:01.468
Sometimes purpose brings that.
00:03:01.520 --> 00:03:03.764
So is that really?
00:03:03.764 --> 00:03:08.954
You know it factors into time anyway, but I hope you have a relaxing holiday season.
00:03:08.954 --> 00:03:10.623
It's and also welcome back.
00:03:10.623 --> 00:03:12.068
It's been a while since we spoke to you.
00:03:12.288 --> 00:03:12.931
Absolutely yeah.
00:03:14.001 --> 00:03:22.532
You know, last time we spoke to you about some neat things, you had a cool app source app that's no longer there because, I think you know they've added it to the AL language.
00:03:23.699 --> 00:03:24.222
VS Code app.
00:03:24.222 --> 00:03:24.764
Yeah, yeah.
00:03:25.145 --> 00:03:27.010
Yes, vs Code app Excuse me not app.
00:03:27.010 --> 00:03:28.485
Jeez, it's Friday.
00:03:28.485 --> 00:03:30.889
So just right now, just forget.
00:03:30.889 --> 00:03:32.758
This is why we don't do Fridays.
00:03:32.819 --> 00:03:37.890
We keep saying not to do Fridays, but Fridays sometimes kind of creeps into our schedule.
00:03:39.281 --> 00:03:50.467
I think, because I say we're not doing Fridays, we're starting to have more and more things scheduled on Fridays because I have a couple recorded calls today, on Friday, so we'll see how that goes.
00:03:50.467 --> 00:04:08.054
Yes, but yes, you had an interesting VS Code app and I saw recently that you introduced a new one for VS Code and that opened up a whole can of I don't want to say can of worms, but a whole can of questions for me.
00:04:08.054 --> 00:04:13.431
But before we get into that, would you mind telling everyone a little bit about yourself?
00:04:13.752 --> 00:04:16.526
Yeah, sure, yeah, my name is Christoph.
00:04:16.526 --> 00:04:19.509
I'm founder of 365 Business Development.
00:04:19.509 --> 00:04:35.413
We are a small ISV in Germany and we are focusing purely on Business Central and developing small apps with the only idea in mind to simplify work in BC.
00:04:35.413 --> 00:04:47.939
So we are not creating some huge extensions, apps, whatever you call it, with a new I don't know contract management functionality or whatever.
00:04:49.021 --> 00:04:52.026
Oh, he had to go there.
00:04:52.026 --> 00:05:09.947
Instead we are, we are just identifying pain points, uh, things which which are not perfect from our point of view, and try to fill them and try to make it easier for for BC customers all over the world.
00:05:09.947 --> 00:05:28.447
And, yeah, and that's why we are pretty much working with AL and BC, of course, and that's why I step into a lot of things, like, like last time we spoke, we see XML documentation stuff.
00:05:28.447 --> 00:05:38.110
So I thought about how we can expose our functionality to our partners, to customers, to make them understand how they can adopt and how they can use it.
00:05:38.110 --> 00:05:57.608
So XML documentation stuff is is created because I think we need something like this, and Microsoft came up, and now the next one comes around the corner and I think it could be pretty cool for the community, and that's why I started my next side project.
00:05:59.363 --> 00:06:00.127
No, I like that.
00:06:00.740 --> 00:06:07.833
And to go back to what you're talking about, the apps and that's something that I've said with a lot of things, that it doesn't always need to be complicated.
00:06:07.833 --> 00:06:19.952
Sometimes to be successful, you just need to handle some of the basics.
00:06:19.952 --> 00:06:24.879
Process is sometimes a little better than creating this whole big thinking.
00:06:24.879 --> 00:06:32.600
We need a big, robust system or, you know, complete module, as you would, within the application to do, you know some fancy things.
00:06:32.600 --> 00:06:40.725
So I appreciate, uh, the apps that you're developing, putting out there in app stores to make the use of business central easier or different.
00:06:40.805 --> 00:06:51.209
I'm not sure that I would agree with easy apps, but but small one absolutely yeah, because, uh, because some, some things were really challenging.
00:06:51.209 --> 00:07:17.848
I I remember in back in 2022 I think, I had a, I had a recording with steve about address validation and we dived in into this little bit and this is also a pretty small app, but into this little bit and this is also a pretty small app, but it's in background it was really tough to implement this and also with direct printing and all this stuff we created.
00:07:17.848 --> 00:07:28.927
On the surface it's just one, two pages and seamlessly integrated into BC, but in the background it's much more.
00:07:28.927 --> 00:07:32.987
Of course, it's like an iceberg, exactly.
00:07:33.922 --> 00:07:51.913
Well, I agree, small to me and for clarification, go back to easy for me does mean the smaller apps, and I'm not saying it takes away from the complexity of what it takes to develop an app, but easy for a customer to use to handle a small, specific function is what I shoot for with those smaller apps.
00:07:51.913 --> 00:07:58.410
So they're smaller, compartmentalized tasks in a sense, or they do specific functions and they do those functions very well.
00:07:58.410 --> 00:08:02.146
See, that's what I've always been told Do what you know and do it well, right.
00:08:02.146 --> 00:08:04.009
So you can't do everything.
00:08:04.009 --> 00:08:10.757
So you have a new app within the visual studio, not app source, but within the visual studio marketplace.
00:08:10.757 --> 00:08:14.826
I get confused and I think it's an interesting app.
00:08:14.826 --> 00:08:18.413
What is that application that you released recently?
00:08:18.434 --> 00:09:20.597
um, yeah, first of all, it's it's not I think it's not just about the app, and the app is relying on a lot of work from other people, like Freddie, like Camille, which did a great job, and basically it's all about adopting NuGet to Business Central and a lot of people, I think inc business, still don't know what's what's new get is and basically it's kind of a distribution feed for for packages, for app files, basically um or artifacts and and um with this, with the introduction, introduction of NuGet into BC, which came from, as I said, freddie and Camille, I think in 2023, they brought a whole new level of complexity into our development, but also a lot of opportunities.
00:09:20.597 --> 00:09:28.921
Opportunities and we could use it.
00:09:28.921 --> 00:09:33.390
I think it was in in summer of 2023 and on bc tech days in antwerp, where, where freddy and camille presented this and we could use it.
00:09:33.390 --> 00:09:38.407
From from this point on it, it was great, but actually nobody does.
00:09:38.407 --> 00:09:48.166
Nobody worked with it, because a lot of people don't really understand why should I use it, what's the benefit and how do I use it.
00:09:48.726 --> 00:10:18.254
And, yeah, maybe we have a little time to talk about it and that's exactly why you're here, because when I hear a NuGet and I know NuGet has been around and you talked a little bit about it's a distribution system I'd like to talk a little bit deeply, a little more deeper about that, how it works, what it does and, even more so, how we can use it within our business central development process, our development workflow.
00:10:18.254 --> 00:10:20.005
I know NuGet's been around.
00:10:20.005 --> 00:10:24.312
I've heard about it with other application languages and it's been around for quite a period of time.
00:10:24.312 --> 00:10:29.763
And you know, sometimes I hear a NuGet, I think of like the stuff within a candy bar, right, I think of like what do they call that?
00:10:29.763 --> 00:10:35.663
Is that NuGet, nugget, whatever they call that stuff that fills some of those chewy candy bars, but with that?
00:10:35.663 --> 00:10:37.188
So let's just take it back a step.
00:10:38.120 --> 00:10:41.171
So NuGet is a distribution system for packages.
00:10:41.171 --> 00:10:42.682
Can we talk about that a little bit deeper?
00:10:42.682 --> 00:10:44.144
System for packages, can we talk about that a little bit deeper?
00:10:44.144 --> 00:10:45.306
Like, how does it work?
00:10:45.306 --> 00:10:47.549
You know we have this distribution system.
00:10:47.549 --> 00:10:48.812
How does it get the information?
00:10:48.812 --> 00:10:50.394
How does it work?
00:10:50.394 --> 00:11:00.032
And then, even more so, if we could progress into how your application works or the extension that you wrote for Visual Studio can be applied to a business central app.
00:11:00.032 --> 00:11:03.547
There's a lot in that conversation right there, so I hope you have time.
00:11:03.886 --> 00:11:06.679
I have I have time, of course Well.
00:11:06.679 --> 00:11:22.335
So Nougat is basically a standardized format on how to distribute artifacts, to be as common as possible, to distribute artifacts for multiple platforms.
00:11:22.335 --> 00:11:31.159
So it's very, very popular in C-sharp or NET, but it's basically not focusing on one specific language.
00:11:31.159 --> 00:11:36.452
And what NuGet basically is is a server.
00:11:36.452 --> 00:11:38.746
You can host it yourself.
00:11:38.746 --> 00:11:46.288
You can use Azure DevOps, for example, azure DevOps feeds, which are also capable to serve as a NuGet server.
00:11:46.288 --> 00:11:53.980
Or, of course, you can use NuGetorg to publish and distribute your packages.
00:11:54.480 --> 00:12:03.027
And what you are basically publishing is not just a pure app file and I don't know, for example, a manifest or something like this.
00:12:03.027 --> 00:12:05.089
I don't know, for example, a manifest or something like this.
00:12:05.089 --> 00:12:12.575
It's a special package which is called NuGet package N-U-P-K-G.
00:12:12.575 --> 00:12:29.772
Basically is a file suffix and inside of this package there's a package manifest which says okay, who's the publisher, what's the identifier of this package, what's the name, what's, what are the available versions?
00:12:29.772 --> 00:12:36.975
Uh, or which one, which is the available version right now, which dependencies you have and and all this stuff.
00:12:36.975 --> 00:12:39.863
And this is all pretty common in in bc world as well.
00:12:39.863 --> 00:12:50.687
So it was pretty natural to to adapt to this instead of we invent the wheel and what this basically brings to our table.
00:12:50.687 --> 00:12:54.734
I think it's not that important to understand what NuGet packages are.
00:12:54.734 --> 00:13:10.144
That's why there are people like Freddie, like Camille and hopefully me, to serve the community and provide tools you just have to use.
00:13:10.144 --> 00:13:16.620
But you don't really need to understand what's technical inside of a NuGet package.
00:13:16.620 --> 00:13:33.057
There are already cmdlets in bc-container-helper to create NuGet packages to use the preferred naming which Freddy and Camille and some other invented.
00:13:33.559 --> 00:13:39.110
Let's say it's this way because in this case we are a little special, because we have a publisher name.
00:13:39.110 --> 00:13:42.148
This publisher name can change over the versions.
00:13:42.148 --> 00:13:44.186
We have an app name.
00:13:44.186 --> 00:13:45.553
This app name can change it versions.
00:13:45.553 --> 00:13:45.768
We have an, an app name.
00:13:45.768 --> 00:13:46.123
This app name can change.
00:13:46.123 --> 00:13:47.504
It's not a breaking breaking change.
00:13:47.504 --> 00:14:01.320
The only thing which needs to to stay forever is the app id basically, and um, the app id is just a good, so it's not very friendly to search for an app id or something like this.
00:14:01.320 --> 00:14:04.205
So they had to thought about, okay, how we name packages.
00:14:04.205 --> 00:14:11.538
So even people and software can find the packages.
00:14:11.679 --> 00:14:19.485
And the big question is basically, what can you do with NuGet packages and what brings NuGet to the table for BC development?
00:14:19.485 --> 00:14:30.173
And I think what's really important to understand is what type of artifacts do we have in BC?
00:14:30.173 --> 00:14:36.448
And basically we have three types.
00:14:36.448 --> 00:14:39.394
We have the classic app file with source code included.
00:14:39.394 --> 00:14:57.264
We have runtime packages which are pre-compiled for a specific PC version and also a localization, and we have symbols and of course we all produce.
00:14:57.325 --> 00:15:06.212
If we work in VS Code and we click package, it compiles a regular app file with all the source code included, the source code, this app file is sent to the server.
00:15:06.212 --> 00:15:13.427
The server recompiles it and uh, or compiles it into into c sharp and runs this on the on the gc server.
00:15:13.427 --> 00:15:20.326
Great runtime packages, as I said, are pre-compiled, so you don't have to do this, this compilation process again.
00:15:20.326 --> 00:15:22.971
But symbols are only references.
00:15:22.971 --> 00:15:40.621
So symbols are basically if you extract the, the app file, it's basically just a huge json file which has all the references all over your application and and so on, and so by references, you're talking about references to the methods to the object the properties to the variables.
00:15:40.721 --> 00:15:43.947
Yes, so you can see the structure without seeing the code.
00:15:43.947 --> 00:15:57.861
You can see the structure of an app versus seeing the the detail of it, so that you could communicate with it, to use the events, the methods and like, without having access to the code or needing access to exactly and and basically the symbols.
00:15:58.222 --> 00:16:05.193
We all know the command download symbols, but basically download symbols is not always true.
00:16:05.193 --> 00:16:19.375
So, as far as I know, if you download symbols from your own BC container, for example, and you have published the app with all the source code, you get the app file with all the source code.
00:16:19.375 --> 00:16:36.288
So it's not just the symbols, but basically the symbols are just a JSON file, a huge JSON file, and basically this is all you need to develop in VS Code and this is all you need to compile your app with a dependency to another app.
00:16:36.288 --> 00:16:48.735
The only thing you need is the symbols, and this is a pretty interesting thing for ISVs and also for Microsoft itself.
00:16:48.735 --> 00:16:52.508
So let's start from another point.
00:16:52.508 --> 00:16:57.052
When we start to develop a VS Code app, what do we need?
00:16:57.052 --> 00:17:09.249
We need some kind of an BC instance right now, because we need to get the system application, we need to get the business foundation base application.
00:17:09.249 --> 00:17:12.748
All this stuff, all these we need the symbols basically.
00:17:13.279 --> 00:17:27.154
And every time you have to restore a certain container or create a certain container in a certain version and maybe in a certain localization, and then you download symbols and you try to start coding.
00:17:27.154 --> 00:17:44.410
And if you want to switch to I don't know another version let's say you support more than just one version you need to throw away your container, create an I don't know BC24 container and do all this stuff again and again and again and again.
00:17:44.410 --> 00:17:48.663
Container and do all this stuff again and again, and again and again.
00:17:48.663 --> 00:17:59.452
And I think I don't know how fast your computers are we are working with, but I think you have to at least wait five minutes, I would say, for a new container.
00:17:59.452 --> 00:18:00.715
Yes, so so what?
00:18:00.715 --> 00:18:01.739
Yeah, so what you're?
00:18:01.798 --> 00:18:18.834
referencing there, just to bring it back, is if we need to build an application for a different runtime or a different version of Business Central, we would need to create a container with that version, publish our extension or download the symbols for that version of the container.
00:18:18.834 --> 00:18:19.674
See Friday, here we go.
00:18:19.674 --> 00:18:21.740
So we download the symbols for that version.
00:18:21.740 --> 00:18:31.352
We would then package our application built with the symbols for the specific version, publish them to our container, use the container helper command to get runtime packages.
00:18:31.920 --> 00:18:40.440
Yes, it does take a few minutes because you would have to, even with scripting all of that, because you can't script that whole process, but it does take time Processing time downloading.
00:18:40.440 --> 00:18:43.586
Yes, and creating the.
00:18:43.586 --> 00:18:46.933
You know it downloads the artifacts to create the container.
00:18:46.933 --> 00:18:52.776
Then now you have to download your symbols, build your application, publish your application, get the runtime package.
00:18:52.796 --> 00:19:00.964
I think it might take a little more than five minutes, and you do that every single time right, it might take a little more than five minutes and let's be honest, at least from my side.
00:19:00.964 --> 00:19:04.012
I know I'm a lazy person, definitely.
00:19:06.319 --> 00:19:25.125
And I have these containers which are three months old, four months old maybe, so it's not the latest version which I develop against, and I don't want to create it over and over again, and it takes just too much time for me.
00:19:25.125 --> 00:19:59.839
And so I thought about, with the presentation from Freddy and Camille, what maybe we can do with all this NuGet stuff to make this faster and to give me the opportunity to say okay, now I want to work against bc24, next I want to use bc24.2 or 25.2 or whatever, and I just want to select it, hit one command and start working.
00:19:59.839 --> 00:20:02.846
That was the basic idea.
00:20:02.846 --> 00:20:05.252
I don't want to create a container over and over again.
00:20:05.252 --> 00:20:16.672
To be honest, last year I started to work with Mac a little more, so I had actually the problem I can't restore a container to develop when I'm not in the office.
00:20:17.381 --> 00:20:18.023
Smart choice.
00:20:18.023 --> 00:20:20.420
By the way, that was a very smart choice to move to Mac.
00:20:20.420 --> 00:20:26.351
I'm not sure, but oh, we might have to end the conversation early.
00:20:29.260 --> 00:20:29.804
You'll get there.
00:20:29.804 --> 00:20:31.390
Maybe I need some more time.
00:20:31.390 --> 00:20:38.207
Yeah, however, the container stuff was really a problem for me and I thought, okay, how can I solve this?
00:20:38.207 --> 00:20:48.289
And the first idea which was a pretty bad idea was to just commit the AL packages folder into my repository.
00:20:50.073 --> 00:20:50.773
Ah, bad idea.
00:20:51.315 --> 00:20:52.877
Cringe Really bad idea, I just cringed.
00:20:53.280 --> 00:20:58.660
I just cringed when I heard that, because talk about wasted space.
00:20:58.660 --> 00:21:05.971
I even share my AL package folder across projects and workspaces because I only need a.
00:21:05.971 --> 00:21:12.211
You know, I found one time on a computer where someone had the al packages for each project, never mind the workspace.
00:21:12.211 --> 00:21:12.861
Right, you can.
00:21:12.861 --> 00:21:14.628
You know the workspace has the setting.
00:21:14.628 --> 00:21:18.040
You can use the al packages and then individual projects.
00:21:18.040 --> 00:21:25.467
I think they saved after they got rid of all of the al packages and I showed them how you can specify the folder and share it, they saved.
00:21:25.467 --> 00:21:28.353
I think it was like 17 gig or something.
00:21:28.413 --> 00:21:39.406
Like it was an absurd amount of space that they were using just with AL packages which, to Chris's point, I call them throwaway because you need to download them for the version that you're working with.
00:21:39.406 --> 00:21:47.792
So if you're doing 25, then 25.1, 25.2, you start building all of those and then you multiply that times all the individual projects that you may be working on.
00:21:47.792 --> 00:21:49.425
It's a lot of space.
00:21:50.500 --> 00:21:52.568
But, as I said, I was in the problem.
00:21:52.568 --> 00:21:55.209
I had a Mac container that doesn't work.
00:21:56.401 --> 00:21:59.167
Oh, the Mac is not the problem with having to check in the same place.
00:21:59.167 --> 00:22:00.731
Yeah, I know, don't try to blame the Mac.
00:22:00.731 --> 00:22:09.750
No, no, no, no, no, but, no, no, no, no, no, no, but it was my starting point.
00:22:09.790 --> 00:22:10.915
So it's just the start of a journey.
00:22:10.915 --> 00:22:13.586
Yeah, and, as I said, I recognized very, very fast that's not a good idea to do.
00:22:13.586 --> 00:22:47.440
So I decided to dive into this a little bit and, really fast, came up with some PowerShell scripts and invoked nougat directly and created nougat packages, uh configurations to to download the packages I needed, and it took some, took some time, but at some point I said, okay, maybe, maybe it's worse to to invest a little more time into this and uh, integrate this right into vs code.
00:22:47.440 --> 00:22:51.150
And then I thought about okay, how you can do this?
00:22:51.150 --> 00:23:04.076
And of course, I I look to the, to the big brother visual studio, um, because there it's, it's already already there for I don't know how many years, and it works.
00:23:04.076 --> 00:23:05.700
It's intuitive.
00:23:06.903 --> 00:23:15.105
So why not keep this as a template and try to do this in VS Code as well?
00:23:15.105 --> 00:23:27.049
And right before directions in here, to be honest, because I promised this on Twitter, so that's why I was a little in a hurry.
00:23:27.049 --> 00:23:46.490
I just published the first two or three preview versions, which are already working but are far away from perfect and far away from, I would say, usable for productive uh development.
00:23:46.490 --> 00:23:56.669
But, um, the most important thing for me is that it's not just about about local vs code development.
00:23:56.669 --> 00:24:28.529
When we start adopting to nuget and and and creating all the artifacts the nugGet artifacts like the package config I told about and put this into our repo, we got a whole new dimension in DevOps or GitHub as well, so in our pipelines we can also restore packages directly from NuGet feeds and compile against them, and it's super, super fast.
00:24:30.981 --> 00:24:49.124
So where that's helpful then would be if you're working on an extension within AL an AL extension for VS Code and you want to put it into a pipeline, you no longer have to get you know if you have a dependency of another extension.
00:24:49.124 --> 00:24:53.093
It could be from an ISV it could be from Microsoft.
00:24:54.541 --> 00:25:00.048
At least two extensions are always in place it's a system app and application itself.
00:25:00.779 --> 00:25:08.627
So at least two dependencies so that way you can build based on it for a specific version or even just the latest version.
00:25:08.627 --> 00:25:16.067
So by putting in the NuGet path right to download the AE which we can talk about how that works in a moment.
00:25:16.067 --> 00:25:20.288
So when you're going to build, you basically put a reference for the dependency.
00:25:20.288 --> 00:25:36.711
It will download the symbols from the NuGet server, whichever one you're using, that you had mentioned, and use those artifacts for you to package and build your extension without having to download the symbols yourself.
00:25:37.260 --> 00:25:45.788
And create a container and as long as you don't want to execute tests in, execute uh tests in it.
00:25:45.788 --> 00:25:51.015
It's, it's fine and uh, what I?
00:25:51.015 --> 00:25:59.232
What I tried as a some prototype it's not, it's not ready yet for cicd purposes is back in the days.
00:25:59.232 --> 00:26:03.686
We now have, I think, seven or eight apps and back in the days, uh.
00:26:03.686 --> 00:26:15.383
Well, right now, also, as a productive, we run each and every night, each and every uh app against current, next minor, next major, and run our tests and do all these.
00:26:15.383 --> 00:26:20.632
And right now it's still working with our time frame in the night.
00:26:20.632 --> 00:26:28.503
But at some point, if we, if we uh releasing new apps and new apps and new apps, it will not fit into the night anymore.
00:26:29.526 --> 00:26:38.130
So what my idea currently is is, of course, I want to run my tests, but the whole process of compilation and and creating a container.
00:26:38.191 --> 00:26:40.542
I don't need to use this for each and every app.
00:26:40.984 --> 00:26:52.954
So what I dream about is I have one pipeline which is just creating the artifacts by downloading symbols, packaging, push this to our own NuGet feed.
00:26:52.954 --> 00:27:11.228
And there's another pipeline which is just downloading one artifact after one app after another, publishes, executes tests after another, publishes, executes tests, remove it or let it there whatever you want and do this again, and again, and again.
00:27:11.228 --> 00:27:21.663
So you'd only need one container and because of the isolation in tests, you don't have any side effects if you run multiple tests in in with separate uh well, with different apps.
00:27:21.663 --> 00:27:44.750
So this is what I think we can save a lot of time and also can have the possibility to see side effects between the apps If we disable the isolation, for example, what you can do in tests, then you can see okay, it's my app one somehow influencing my app.
00:27:44.750 --> 00:27:58.299
Two, because you do this all in one environment and you do this much, much faster than previously, because you don't need to create a container.
00:27:58.299 --> 00:28:04.757
I don't know, eight times in my situation or eight times.
00:28:04.797 --> 00:28:13.881
Three, basically because you're doing the current the next minor, the next major, so you're doing three builds in essence for each.
00:28:13.881 --> 00:28:35.261
So with this so even take it, so you're doing it internally you have eight application extensions that you have for Business Central and with those eight applications you publish them to NuGet, you push them to NuGet and then you can keep multiple versions of those in there.
00:28:35.261 --> 00:28:36.769
And is that the intent?
00:28:36.769 --> 00:28:47.619
So that if you have version 24.1.9000, 24.1.10000, do you keep all of them in there, or is it just for each build of business central?
00:28:48.142 --> 00:28:52.974
um, you know, basically, basically, we have, we have, we are.
00:28:52.974 --> 00:28:58.065
We are very focused on just having one code base for all the bc versions we are.
00:28:58.065 --> 00:29:00.369
We are supporting we're not just supporting cloud which this for all the BC versions we are supporting.