Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Automated build #58

Closed
majkinetor opened this issue Jan 13, 2021 · 26 comments · Fixed by #63
Closed

Automated build #58

majkinetor opened this issue Jan 13, 2021 · 26 comments · Fixed by #63
Assignees
Labels
general-build/ci Build/CI work

Comments

@majkinetor
Copy link
Member

We should have document such as DEVEL.md that should provide reproducible way to setup up local environment.

It should contain machine prerequisites, along with any procedure required to build the app.

@majkinetor majkinetor added the meta-enhancement Enhacement of existing feature label Jan 13, 2021
@majkinetor majkinetor modified the milestones: Limbo, NEXT Jan 13, 2021
@VShawn
Copy link
Member

VShawn commented Jan 13, 2021

I try write a demo:

Development

PReomteM is written in the CSharp, UI power by WPF.

Environment

Here is what you need to setup a development environment:

  1. Windows 10 1703 or later
  2. Microsoft Visual Studio 2019 (VS2019) Community or higher
    with
    • .NET desktop development
    • Windows 10 SDK (10.0.17763.0)
    • .NET Framework 4.8 SDK
  3. .NET Framework 4.8 Dev Pack (may included in VS2019)
  4. (Optional) ReSharper
  5. (Optional) Git

Build

  1. Clone from GitHub.
  2. Open PRM solution by VS2019
  3. Resotre all NuGet Packages
    image
  4. You can build PReomteM now.

@majkinetor
Copy link
Member Author

Thanks. I will move this into its own file on repo and make automated build from CLI.

@majkinetor majkinetor added docs and removed meta-enhancement Enhacement of existing feature labels Jan 13, 2021
@majkinetor
Copy link
Member Author

majkinetor commented Jan 13, 2021

Microsoft Visual Studio 2019 (VS2019) Community or higher

This is not enough and not precise. VS comes with bunch of modules.

This one requires:

  • Universal Windows Platform Development (2.5 GB with 87 packages :S)

@majkinetor
Copy link
Member Author

Looks like even that is not enough. Reference is still missing on all projects Windows.X (PopUp, ApplicationModel, ...).

Old dotNet is horror.

@VShawn
Copy link
Member

VShawn commented Jan 14, 2021

Sorry, I forgot it needs Win10 SDK support.

Here is all I have on my workstation in company (can't find a button for turn VS2019 installer UI into english):

image
image
image
image

MY VS2019 install config.zip

@majkinetor majkinetor assigned majkinetor and unassigned VShawn Jan 14, 2021
@majkinetor
Copy link
Member Author

majkinetor commented Jan 14, 2021

I managed to build it using the following steps

choco install visualstudio2019-workload-universal
choco install windows-sdk-10-version-1809-all

$lastSdkVersion = Get-ChildItem "${Env:ProgramFiles(x86)}\Windows Kits\10\Include" | Sort-Object -Descending | Select-Object -First 1 -Expand Name

# This is added to PRM.Core and PRemoteM csproj files
"<PropertyGroup>
      <TargetPlatformVersion>${lastSdkVersion}</TargetPlatformVersion>
</PropertyGroup>" 

Now, I need to test this in the sandbox and with VS express. The point is to find minimal set of dependencies.

@majkinetor
Copy link
Member Author

I keep getting this error when trying to build PRemoteM in SandBox:

Unable to write manifest 'obj\Debug\PRemoteM.exe.manifest'. Could not load file or assembly 'System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified. PRemoteM

Core builds fine.

I succeeded to compile it but not sure how, can't reproduce it easily.

Will look into it some more...

@majkinetor
Copy link
Member Author

majkinetor commented Jan 16, 2021

I pushed this to branch build.

What I am trying can be accomplished locally this way:

  1. Open admin powershell in root folder of the project
  2. Set convenience alias: Set-Alias ib $pwd\Invoke-Build.ps1
  3. See available tasks with ib ?
  4. Run ib BuildInSandbox

Last command will complain if you don't have sandbox installed and show you command to do it. After that it does this:

  1. Opens clean environment
  2. Installs ALL prereq using ib Deps; takes around 15 minutes
  3. It tries to build using CLI commands after that but it will fail due to SqlXml error

You can now open VS2019 in sandbox and try to build it. Project is available on Desktop.

Those are the deps so far and VS builds it after some interventions.

        choco install -y visualstudio2019community
        choco install -y netfx-4.8-devpack
        choco install -y visualstudio2019-workload-manageddesktop
        choco install -y visualstudio2019-workload-universal

What is the point of all this

The point is to have locally reproducible build. This will be used in CI pipeline (on any system, not necessarily GH) instead of magic we have now. Build simply becomes ib Deps; ib Build as one step pipeline.

This can also be used to setup dev environment on empty machine.

@majkinetor
Copy link
Member Author

majkinetor commented Jan 16, 2021

BTW, on my own machine ib Build worked until it needed to access your private keys for installer. Build on my machine is not very relevant as I have installed tone of stuff (the same as you as shown by your screenshot, most of which are not relevant to the project).

Here is the error:

(_CreateMainPackage target) -> C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\AppxPackage\Microsoft.AppXPackage.Targets(4659,5): error APPX0104: Certificate file 'C:\FastToolsShared\git key\Shawn.pfx' not found. [C:\Work\PRemoteM\Installer\Installer.wapproj] C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\AppxPackage\Microsoft.AppXPackage.Targets(4659,5): error APPX0107: The certificate specified is not valid for signing. For more information about valid certificates, see http://go.microsoft.com/fwlink/?LinkID=241478. [C:\Work\PRemoteM\Installer\Installer.wapproj]

notice that your local folder C:\FastToolsShared\git key\Shawn.pfx is shown.

@majkinetor
Copy link
Member Author

This is how sandbox looks while installing stuff:

image

@majkinetor majkinetor added the general-build/ci Build/CI work label Jan 16, 2021
@majkinetor majkinetor changed the title Development instructions Automated build Jan 16, 2021
@majkinetor
Copy link
Member Author

majkinetor commented Jan 16, 2021

I think I found the problem:

  <PropertyGroup>
    <GenerateManifests>true</GenerateManifests>
  </PropertyGroup>

When this is set to false SqlXml error is no longer present. This is changed with the following option ClickOnce which is currently enabled:

image

Since this is problematic, shell we disable it ? When one does that, it adds dummy manifest file in csproj which doesn't exist on file system and next error is:

Severity Code Description Project File Line Suppression State Error CS1926 Error opening Win32 manifest file C:\Users\WDAGUtilityAccount\Desktop\PRemoteM\PRemoteM\Properties\app.manifest -- Could not find file 'C:\Users\WDAGUtilityAccount\Desktop\PRemoteM\PRemoteM\Properties\app.manifest'. PRemoteM C:\Users\WDAGUtilityAccount\Desktop\PRemoteM\PRemoteM\CSC 1 Active

Just by deleting Properties\app.manifest file within VS makes it work then (alternative would be to add manifest on your own in the project without any autogeneration and funky magic)

@majkinetor
Copy link
Member Author

Can you check if above setting works for you and if so, please commit new PRemoteM.csproj file.

@majkinetor
Copy link
Member Author

majkinetor commented Jan 16, 2021

BTW, the SqlXML assembly is present on the SandBox system, and even if I add it among references it changes nothing....

@majkinetor
Copy link
Member Author

majkinetor commented Jan 16, 2021

After this change only your key is problematic from CLI:

ib Build

image

image

This doesn't happen when building within VS for some reason...

Maybe we could remove the installer altogether :-)

If you wanna keep that, any secrets will have to go to to specific place which is IMO something we should avoid if possible as secret will have to be obtained from some type of vault during the build.

@majkinetor
Copy link
Member Author

Found another err, this time in R2Win32 configuration (Debug works fine):

The type or namespace name 'Windows' could not be found (are you missing a using directive or an assembly reference?) PRemoteM C:\Users\WDAGUtilityAccount\Desktop\PRemoteM\PRemoteM\App.xaml.cs 9 Active

The type or namespace name 'Windows' could not be found (are you missing a using directive or an assembly reference?) PRemoteM C:\Users\WDAGUtilityAccount\Desktop\PRemoteM\PRemoteM\ViewModel\VmServerListPage.cs 12 Active

Those are easily fixed using VS option Remove and sort usings in 2 mentioned files, then ib Build -aReleaseType R2Win32 works. Not sure how and why unused usings influence build, but there you go....

@majkinetor
Copy link
Member Author

majkinetor commented Jan 16, 2021

So, to recap all above :-)

  1. Remove unused usings in App.xaml.cs and ViewModel\VmServerListPage.cs
  2. Remove click once options in PRemoteM.csproj and remove dummy manifest from csproj or just add it again.
  3. Remove or fix installer project so that it doesn't require your local certificate.

@VShawn
Copy link
Member

VShawn commented Jan 17, 2021

wow a lot of great job...

1. Remove unused usings in App.xaml.cs and ViewModel\VmServerListPage.cs

The type or namespace name 'Windows' could not be found (are you missing a using directive or an assembly reference?) PRemoteM C:\Users\WDAGUtilityAccount\Desktop\PRemoteM\PRemoteM\ViewModel\VmServerListPage.cs 12 Active

but using System.Windows is do needed in VmServerListPage.cs App.xaml.cs, and I dont think the unused usings will cause this build problem.

BTW here is what unused using

screenshot

image

image

2. Remove click once options in PRemoteM.csproj and remove dummy manifest from csproj or just add it again.

click once options

I dont even know when I enable it :(, And I find it would be useless in PRM according to wiki since we publish release by 7z package and Microsoft store. I will get it disabled

manifest

[WIP] I have to go out now, check it latter.

But I have no impression of this file as well
Check app.manifest by a quick view, finding it was generated by VS2019 automatically and nothing secret in it, since git ignor it for unknown reason I may push it manually

3. Remove or fix installer project so that it doesn't require your local certificate.

certificate is required so that it can publish to microsoft store, do you know how any approch for microsoft store package build into CI?

OR we can add a dummy certificate for CI build to sign msix, push it to git, with it CI can build a msix that can be insatlled only if the user install the dummy certification, check: https://www.advancedinstaller.com/install-test-certificate-from-msix.html

OR we may ignor the build msix package in CI, CI will only offering the WIn32 exe release.

@majkinetor
Copy link
Member Author

majkinetor commented Jan 17, 2021

but using System.Windows is do needed in VmServerListPage.cs

That one isn't removed, those that got removed are Windows.Application.Store, System.Windows.Data, System.ComponentModel, System.Diagnostics.

and I dont think the unused usings will cause this build problem.

I know :-).

I am not sure what is going on here, but that action solved it for me and since its repeatable, you can try it on your own. I noticed once for that error that it was enough to just hover with mouse over the error line, and the error would disappear after that in VS error window ?! Didn't analyze it more.

But I have no impression of this file as well

When you deselect click once, it is added automatically by VS in csproj, but not in file system

certificate is required so that it can publish to microsoft store, do you know how any approch for microsoft store package build into CI?

OR we may ignore the build msix package in CI, CI will only offering the WIn32 exe release.

I am up for that one as I personally think almost nobody will use this from Store (maybe I am wrong, but the target audience for store are not IT professionals).

OK, let me try to ignore it in CI until we have a way to use secrets vault.

BTW, Installing and starting a sandbox on your local machine should be trivial, you should check it out yourself. I will ofc document everything once its done but If you need any more info now let me know (some notes are at https://github.com/VShawn/PRemoteM/issues/58#issuecomment-761540765)

VShawn added a commit that referenced this issue Jan 18, 2021
Signed-off-by: Shawn <singlex@foxmail.com>
@VShawn
Copy link
Member

VShawn commented Jan 18, 2021

Installing and starting a sandbox on your local machine should be trivial

Nope, in facte It is quite difficult for me since we have a powerful firewall that make me a hard way to connect to the international networks.

image

I personally think almost nobody will use this from Store

Over 300 downloads from Store since 2020.12.01, impressive

@majkinetor
Copy link
Member Author

majkinetor commented Jan 18, 2021

Nope, in facte It is quite difficult for me since we have a powerful firewall that make me a hard way to connect to the international networks.

God damn... I'll think of something... if possible.

Over 300 downloads from Store since 2020.12.01, impressive

OK, I stand corrected :)

BTW, did you fixed the manifest problem ? I see you removed unused usings.

@VShawn
Copy link
Member

VShawn commented Jan 18, 2021

I uploaded app.manifest, did it can be treated as fixed?

https://github.com/VShawn/PRemoteM/blob/dev/PRemoteM/Properties/app.manifest

majkinetor added a commit that referenced this issue Jan 18, 2021
@majkinetor
Copy link
Member Author

I just checked, and now it builds in VS2019 community without problems in Debug mode. In Win32 mode there is an erorror:

image

I committed a fix now on dev branch, and now it works up to the problem with keys which remains to be fixed.

Here is a transcript: build.log

majkinetor added a commit that referenced this issue Jan 18, 2021
@majkinetor
Copy link
Member Author

majkinetor commented Jan 18, 2021

OK, so this is easily fixed by excluding it from the build in that configuration:

image

It builds OK from the CLI after that and it shows that it doesn't build installer:

image

I committed a change to SLN file to dev.

So, all issues are now solved.

@majkinetor
Copy link
Member Author

majkinetor commented Jan 18, 2021

So, all issues are now solved except automation of Store build but that is for some other topic.

Now I need to see how/where to host this, and to avoid provisioning each time as it takes 15-20 minutes to install all, and there is that firewall thingy...

BTW, I noticed my R2Win32 build has 2 DLLs then what you publish:

  1. Interop.MSTSCLib.dll
  2. AxInterop.MSTSCLib.dll

majkinetor added a commit that referenced this issue Jan 18, 2021
@VShawn
Copy link
Member

VShawn commented Jan 19, 2021

congratulations 👍 , it finally works.

Interop.MSTSCLib.dll
AxInterop.MSTSCLib.dll

this two libs is needed by RDP, genertaed by windows. All apps that support RDB need them.
https://github.com/mRemoteNG/mRemoteNG/blob/2cf5a4317d0cbd61c2135aa8f7ab608db2d88629/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs#L40

@majkinetor
Copy link
Member Author

That is strange.... I don't have those 2 files in my build for some reason.

I tested RDP in Sandbox and it works without them! I searched entire sandbox drive for them and they are not there.

@VShawn VShawn modified the milestones: NEXT, 0.5.9.2102191952 Feb 19, 2021
VShawn added a commit that referenced this issue Dec 23, 2021
Signed-off-by: Shawn <singlex@foxmail.com>
VShawn pushed a commit that referenced this issue Dec 23, 2021
VShawn pushed a commit that referenced this issue Dec 23, 2021
VShawn pushed a commit that referenced this issue Dec 23, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
general-build/ci Build/CI work
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants