From 3e391d5294492cf956dfe20a557b134862ff0b91 Mon Sep 17 00:00:00 2001 From: Bartosz Korczynski Date: Sun, 17 Nov 2024 12:24:45 +0000 Subject: [PATCH] Test ci --- .github/workflows/build.yml | 31 ++++ .github/workflows/publish.yml | 142 ++++++++++++++++++ .../AvaloniaVisualBasic.Desktop.csproj | 7 + AvaloniaVisualBasic.Desktop/vb6icon.ico | Bin 0 -> 1078 bytes AvaloniaVisualBasic.Standalone/App.axaml.cs | 3 + .../AvaloniaVisualBasic.Standalone.csproj | 3 + AvaloniaVisualBasic.Standalone/form.ico | Bin 0 -> 1398 bytes AvaloniaVisualBasic.sln | 2 + .../AvaloniaVisualBasic.csproj | 2 + AvaloniaVisualBasic/IDE/WindowManager.cs | 8 +- AvaloniaVisualBasic/MainWindow.axaml | 2 +- .../Projects/ProjectService.cs | 50 ++++-- AvaloniaVisualBasic/vb6icon.ico | Bin 0 -> 1078 bytes 13 files changed, 236 insertions(+), 14 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/publish.yml create mode 100755 AvaloniaVisualBasic.Desktop/vb6icon.ico create mode 100644 AvaloniaVisualBasic.Standalone/form.ico create mode 100755 AvaloniaVisualBasic/vb6icon.ico diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..044cd02 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,31 @@ +name: Build VB6 + +on: + push: + branches: + - '*' + pull_request: + branches: + - '*' + +jobs: + build-linux-amd64: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '9.0.x' + + - name: Run Tests + run: dotnet test AvaloniaVisualBasic.Runtime.Tests/AvaloniaVisualBasic.Runtime.Tests.csproj + + - name: Build AvaloniaVisualBasic.Desktop (Linux) + run: dotnet build AvaloniaVisualBasic.Desktop -f net9.0 -o bin/linux/ + + - name: Build AvaloniaVisualBasic.Standalone (Linux) + run: dotnet build AvaloniaVisualBasic.Standalone -f net9.0 -o bin/linux/standalone/ \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..85ae69a --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,142 @@ +name: Publish Release + +on: + push: + tags: + - '**' + +jobs: + build-windows-amd64: + runs-on: windows-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '9.0.x' + + - name: Build and Publish AvaloniaVisualBasic.Desktop (Windows) + run: dotnet publish AvaloniaVisualBasic.Desktop -f net9.0 -o bin/windows/ -p:PublishAot=true -p:PublishTrimmed=true + + - name: Build and Publish AvaloniaVisualBasic.Standalone (Windows) + run: dotnet publish AvaloniaVisualBasic.Standalone -f net9.0 -o bin/windows/standalone/ -p:PublishAot=true -p:PublishTrimmed=true + + - name: Remove Debug Symbols (Windows) + run: | + find ./bin/windows -name "*.pdb" -type f -delete + find ./bin/windows/standalone -name "*.dll" -type f -delete + mv ./bin/windows/AvaloniaVisualBasic.Desktop.exe ./bin/windows/AvaloniaVisualBasic.exe + shell: bash + + - name: Zip Windows Files + run: | + Compress-Archive -Path './bin/windows/*' -DestinationPath './bin/vb6-windows-amd64.zip' + shell: pwsh + + - name: Upload Windows Artifacts + uses: actions/upload-artifact@v4 + with: + name: windows-bin + path: ./bin/windows/ + + - name: Release + uses: softprops/action-gh-release@v2 + with: + files: ./bin/vb6-windows-amd64.zip + token: ${{ secrets.PAT }} + + build-linux-amd64: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '9.0.x' + + - name: Build and Publish AvaloniaVisualBasic.Desktop (Linux) + run: dotnet publish AvaloniaVisualBasic.Desktop -f net9.0 -o bin/linux/ -p:PublishAot=true -p:PublishTrimmed=true + + - name: Build and Publish AvaloniaVisualBasic.Standalone (Linux) + run: dotnet publish AvaloniaVisualBasic.Standalone -f net9.0 -o bin/linux/standalone/ -p:PublishAot=true -p:PublishTrimmed=true + + - name: Remove Debug Symbols (Linux) + run: | + find ./bin/linux -name "*.dbg" -type f -delete + find ./bin/linux -name "*.pdb" -type f -delete + find ./bin/linux/standalone -name "*.so" -type f -delete + chmod +x ./bin/linux/AvaloniaVisualBasic.Desktop + chmod +x ./bin/linux/standalone/AvaloniaVisualBasic.Standalone + mv ./bin/linux/AvaloniaVisualBasic.Desktop ./bin/linux/AvaloniaVisualBasic + + - name: Tar files + run: | + cd ./bin/linux + tar -cvf vb6-linux-amd64.tar * + gzip vb6-linux-amd64.tar + cd ../../ + + - name: Upload Linux Artifacts + uses: actions/upload-artifact@v4 + with: + name: linux-bin + path: ./bin/linux/vb6-linux-amd64.tar.gz + + - name: Release + uses: softprops/action-gh-release@v2 + with: + files: ./bin/linux/vb6-linux-amd64.tar.gz + token: ${{ secrets.PAT }} + + build-macos-arm64: + runs-on: macos-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '9.0.x' + + - name: Build and Publish AvaloniaVisualBasic.Desktop (macOS) + run: dotnet publish AvaloniaVisualBasic.Desktop -f net9.0 -o bin/macos/ -p:PublishAot=true -p:PublishTrimmed=true + + - name: Build and Publish AvaloniaVisualBasic.Standalone (macOS) + run: dotnet publish AvaloniaVisualBasic.Standalone -f net9.0 -o bin/macos/standalone/ -p:PublishAot=true -p:PublishTrimmed=true + + - name: Remove Debug Symbols (macOS) + run: | + find ./bin/macos -name "*.dbg" -type f -delete + find ./bin/macos -name "*.pdb" -type f -delete + find ./bin/macos -name "*.dSYM" -type d -exec rm -rf {} + + find ./bin/macos/standalone -name "*.dylib" -type f -delete + chmod +x ./bin/macos/AvaloniaVisualBasic.Desktop + chmod +x ./bin/macos/standalone/AvaloniaVisualBasic.Standalone + mv ./bin/macos/AvaloniaVisualBasic.Desktop ./bin/macos/AvaloniaVisualBasic + + - name: Tar files + run: | + cd ./bin/macos + tar -cvf vb6-macos-arm64.tar * + gzip vb6-macos-arm64.tar + cd ../../ + + - name: Upload macOS Artifacts + uses: actions/upload-artifact@v4 + with: + name: macos-bin + path: ./bin/macos/vb6-macos-arm64.tar + + - name: Release + uses: softprops/action-gh-release@v2 + with: + files: ./bin/macos/vb6-macos-arm64.tar.gz + token: ${{ secrets.PAT }} \ No newline at end of file diff --git a/AvaloniaVisualBasic.Desktop/AvaloniaVisualBasic.Desktop.csproj b/AvaloniaVisualBasic.Desktop/AvaloniaVisualBasic.Desktop.csproj index 77b1f92..12e80af 100644 --- a/AvaloniaVisualBasic.Desktop/AvaloniaVisualBasic.Desktop.csproj +++ b/AvaloniaVisualBasic.Desktop/AvaloniaVisualBasic.Desktop.csproj @@ -6,6 +6,7 @@ $(DotNetVersionDesktop) enable true + vb6icon.ico @@ -21,4 +22,10 @@ + + + + vb6icon.ico + + diff --git a/AvaloniaVisualBasic.Desktop/vb6icon.ico b/AvaloniaVisualBasic.Desktop/vb6icon.ico new file mode 100755 index 0000000000000000000000000000000000000000..296d9dc94496d99f04eea1a1bf1f347d8ac42796 GIT binary patch literal 1078 zcmb7@J#O1T5QT@L0g4b{(kBq1B2a072XG4Zyh^%t$L-`!YI6(sYW4s=gpD+*1O*U4 z7C|Q8kfJ3SN{|focIM5S{SkL463Il0BFEpz_ld|S5y|s`FC&rLSY%1A0H1-?nR#lj zn@2?PesGM05<r5GO+}PfP^){+#n4F6hVQE=1LzbJdXPizMnL?r1k4N6hhmML_pJ zB<6Y^)W@vWsJ?Ouy{#C@{fgKLbi`dkoROQWF4-#w1sMB05MMV>kE77jy<;T&|32>< zI~BL4p|kxavqsL=qHEU9teecQbdQsymD|2CWcO window.Close(); } } diff --git a/AvaloniaVisualBasic.Standalone/AvaloniaVisualBasic.Standalone.csproj b/AvaloniaVisualBasic.Standalone/AvaloniaVisualBasic.Standalone.csproj index e71ef04..dc9cbb1 100644 --- a/AvaloniaVisualBasic.Standalone/AvaloniaVisualBasic.Standalone.csproj +++ b/AvaloniaVisualBasic.Standalone/AvaloniaVisualBasic.Standalone.csproj @@ -10,6 +10,7 @@ true False None + form.ico @@ -33,5 +34,7 @@ + + diff --git a/AvaloniaVisualBasic.Standalone/form.ico b/AvaloniaVisualBasic.Standalone/form.ico new file mode 100644 index 0000000000000000000000000000000000000000..f95f437a39fb813e9824ba3bef78af09e913505c GIT binary patch literal 1398 zcmc&!F>ZrE5FCspT-p2pmo8JKaztK`XQWO?$(8Q-639iq;W8C+c@jjM**h-S3UU%f zA}eO+W|w2d-U1LI#&)|PN4SfCdw@EnTHnGkoesk$PxzhrfDStZHKSgT^~q!y1j=sH$y4{#t2t%zag1*FSM+-Zc+%ZswWul<&SJ^#7q& zJ3r+NhnjKDwIg~i|2*fbbHRsl3eOzC4Lfn>q&a5zg0&_#2J4e9)~zS!HE`4X_r_tV X02}ii`R}U}Vl#mfcy-^W4wuIVdJy%9 literal 0 HcmV?d00001 diff --git a/AvaloniaVisualBasic.sln b/AvaloniaVisualBasic.sln index f71cae5..a899ba9 100644 --- a/AvaloniaVisualBasic.sln +++ b/AvaloniaVisualBasic.sln @@ -20,6 +20,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{6151C731-2 README.md = README.md LICENSE = LICENSE build_cloudflare.sh = build_cloudflare.sh + .github\workflows\publish.yml = .github\workflows\publish.yml + .github\workflows\build.yml = .github\workflows\build.yml EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvaloniaVisualBasic.Standalone", "AvaloniaVisualBasic.Standalone\AvaloniaVisualBasic.Standalone.csproj", "{0C6BC133-E273-4716-83D1-4FD1B0C14E19}" diff --git a/AvaloniaVisualBasic/AvaloniaVisualBasic.csproj b/AvaloniaVisualBasic/AvaloniaVisualBasic.csproj index cdf4658..08d4f24 100644 --- a/AvaloniaVisualBasic/AvaloniaVisualBasic.csproj +++ b/AvaloniaVisualBasic/AvaloniaVisualBasic.csproj @@ -42,5 +42,7 @@ + + diff --git a/AvaloniaVisualBasic/IDE/WindowManager.cs b/AvaloniaVisualBasic/IDE/WindowManager.cs index 7f9a553..61d48f2 100644 --- a/AvaloniaVisualBasic/IDE/WindowManager.cs +++ b/AvaloniaVisualBasic/IDE/WindowManager.cs @@ -83,7 +83,9 @@ public async Task ShowWindow(IDialog dialog) { Content = dialog, DataContext = dialog, - SizeToContent = SizeToContent.WidthAndHeight + SizeToContent = SizeToContent.WidthAndHeight, + ShowActivated = true, + WindowStartupLocation = WindowStartupLocation.CenterOwner }; var lifetime = new TaskCompletionSource(); @@ -225,7 +227,9 @@ void DialogOnCloseRequested(bool result) { Content = dialog, DataContext = dialog, - SizeToContent = SizeToContent.WidthAndHeight + SizeToContent = SizeToContent.WidthAndHeight, + ShowActivated = true, + WindowStartupLocation = WindowStartupLocation.CenterOwner }; return await window.ShowDialog(GetTopWindow(desktop)); } diff --git a/AvaloniaVisualBasic/MainWindow.axaml b/AvaloniaVisualBasic/MainWindow.axaml index 8384b8d..ea2f922 100644 --- a/AvaloniaVisualBasic/MainWindow.axaml +++ b/AvaloniaVisualBasic/MainWindow.axaml @@ -6,7 +6,7 @@ mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="AvaloniaVisualBasic.MainWindow" x:DataType="avaloniaVisualBasic:MainViewViewModel" - Icon="/Icons/vb6.gif" + Icon="/vb6icon.ico" ClosingBehavior="OwnerAndChildWindows" Title="{CompiledBinding Title}"> diff --git a/AvaloniaVisualBasic/Projects/ProjectService.cs b/AvaloniaVisualBasic/Projects/ProjectService.cs index 76f7d49..d1d0879 100644 --- a/AvaloniaVisualBasic/Projects/ProjectService.cs +++ b/AvaloniaVisualBasic/Projects/ProjectService.cs @@ -247,6 +247,23 @@ public async Task EditProjectComponents(ProjectDefinition project) } public async Task MakeProject(ProjectDefinition projectDefinition) + { + try + { + await MakeProjectInternal(projectDefinition); + } + catch (OperationCanceledException) + { + throw; + } + catch (Exception e) + { + await windowManager.MessageBox("Fatal error while making the project:\n" + e.Message, icon: MessageBoxIcon.Information); + throw; + } + } + + private async Task MakeProjectInternal(ProjectDefinition projectDefinition) { if (OperatingSystem.IsBrowser()) { @@ -264,26 +281,35 @@ public async Task MakeProject(ProjectDefinition projectDefinition) if (exePath == null) throw new OperationCanceledException(); - List requiredNativeFiles; + List requiredNativeFiles; if (OperatingSystem.IsWindows()) { requiredNativeFiles = [ - new FileInfo("standalone/av_libglesv2.dll"), - new FileInfo("standalone/AvaloniaVisualBasic.Standalone.exe"), - new FileInfo("standalone/libHarfBuzzSharp.dll"), - new FileInfo("standalone/libSkiaSharp.dll") + [new FileInfo("standalone/av_libglesv2.dll"), new FileInfo("av_libglesv2.dll")], + [new FileInfo("standalone/AvaloniaVisualBasic.Standalone.exe")], + [new FileInfo("standalone/libHarfBuzzSharp.dll"), new FileInfo("libHarfBuzzSharp.dll")], + [new FileInfo("standalone/libSkiaSharp.dll"), new FileInfo("libSkiaSharp.dll")] ]; } else if (OperatingSystem.IsMacOS()) { requiredNativeFiles = [ - new FileInfo("standalone/libAvaloniaNative.dylib"), - new FileInfo("standalone/AvaloniaVisualBasic.Standalone"), - new FileInfo("standalone/libHarfBuzzSharp.dylib"), - new FileInfo("standalone/libSkiaSharp.dylib") + [new FileInfo("standalone/libAvaloniaNative.dylib"), new FileInfo("libAvaloniaNative.dylib")], + [new FileInfo("standalone/AvaloniaVisualBasic.Standalone")], + [new FileInfo("standalone/libHarfBuzzSharp.dylib"), new FileInfo("libHarfBuzzSharp.dylib")], + [new FileInfo("standalone/libSkiaSharp.dylib"), new FileInfo("libSkiaSharp.dylib")] + ]; + } + else if (OperatingSystem.IsLinux()) + { + requiredNativeFiles = + [ + [new FileInfo("standalone/AvaloniaVisualBasic.Standalone")], + [new FileInfo("standalone/libHarfBuzzSharp.so"), new FileInfo("libHarfBuzzSharp.so")], + [new FileInfo("standalone/libSkiaSharp.so"), new FileInfo("libSkiaSharp.so")] ]; } else @@ -292,7 +318,7 @@ public async Task MakeProject(ProjectDefinition projectDefinition) throw new OperationCanceledException(); } - if (requiredNativeFiles.Any(f => !f.Exists)) + if (requiredNativeFiles.Any(files => files.All(f => !f.Exists))) { await windowManager.MessageBox("To Make Project, you need to build standalone runtime first. See the readme for help.", icon: MessageBoxIcon.Information); throw new OperationCanceledException(); @@ -322,8 +348,10 @@ public async Task MakeProject(ProjectDefinition projectDefinition) ZipFile.CreateFromDirectory(tempPath, Path.ChangeExtension(exePath, "dll")!); Directory.Delete(tempPath, true); - foreach (var standaloneFile in requiredNativeFiles) + foreach (var standaloneFile in requiredNativeFiles.Select(f => f.FirstOrDefault(x => x.Exists))) { + if (standaloneFile == null) + throw new Exception($"Required files doesn't exist, even tho it existed few lines above"); var fileName = standaloneFile.Name; if (fileName.StartsWith("AvaloniaVisualBasic.Standalone")) fileName = Path.GetFileName(exePath); diff --git a/AvaloniaVisualBasic/vb6icon.ico b/AvaloniaVisualBasic/vb6icon.ico new file mode 100755 index 0000000000000000000000000000000000000000..296d9dc94496d99f04eea1a1bf1f347d8ac42796 GIT binary patch literal 1078 zcmb7@J#O1T5QT@L0g4b{(kBq1B2a072XG4Zyh^%t$L-`!YI6(sYW4s=gpD+*1O*U4 z7C|Q8kfJ3SN{|focIM5S{SkL463Il0BFEpz_ld|S5y|s`FC&rLSY%1A0H1-?nR#lj zn@2?PesGM05<r5GO+}PfP^){+#n4F6hVQE=1LzbJdXPizMnL?r1k4N6hhmML_pJ zB<6Y^)W@vWsJ?Ouy{#C@{fgKLbi`dkoROQWF4-#w1sMB05MMV>kE77jy<;T&|32>< zI~BL4p|kxavqsL=qHEU9teecQbdQsymD|2CWcO