Rework solution structure to allow more types of library projects (#196)

* Rename avalonia & wpf samples

* Rename rest of samples

* fix sample readme

* Fix compat util tests

* rename / move all src projects

* remove package lock files and move libC# again

* Add rust lib and cargo workspace

* Replace locksmith lib with new filelocksmith-rs library

* Deprecated type

* fix setup compile

* Use thiserror for error handling

* Rename some enums and formatting

* Add missing SHA256

* wip c++ library

* cpp wip

* alphabetize readme

* Try to get build working again

* Fix some conditionally compiled bits

* cross config should be in workspace root

* Fix PathHelper for new rust target dir

* Missed one old path to velopack.csproj

* remove obsolete coverage code

* testawareapp.exe no longer exists
This commit is contained in:
Caelan
2024-08-06 22:56:40 +01:00
committed by GitHub
parent 7071d20292
commit 3128d34b14
547 changed files with 11592 additions and 8464 deletions

View File

@@ -2,8 +2,11 @@ name: Build
on: [ push, pull_request ]
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
jobs:
test-rust-bins:
test-rust:
strategy:
matrix:
os: [macos-13, macos-14, windows-latest, ubuntu-latest]
@@ -23,17 +26,14 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
key: "rust-test-${{ matrix.os }}"
workspaces: "src/Rust -> target"
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- name: Test Rust
working-directory: src/Rust
run: cargo llvm-cov ${{ matrix.rust_flags }} --cobertura --output-path ../../test/coverage.rust.${{ matrix.os }}.xml
- name: Upload Coverage Artifacts
uses: actions/upload-artifact@v4
run: cargo llvm-cov ${{ matrix.rust_flags }} --cobertura --output-path ./test/coverage.rust.${{ matrix.os }}.xml
- name: Upload Coverage
uses: codecov/codecov-action@v4
with:
name: coverage-rust-${{ matrix.os }}
path: ./test/*.xml
file: ./test/coverage.rust.${{ matrix.os }}.xml
build-rust-windows:
runs-on: windows-latest
@@ -47,21 +47,19 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
key: "rust-build-windows"
workspaces: "src/Rust -> target"
- name: Install Windows7 Rust Toolchain
run: |
rustup toolchain install 1.75.0-x86_64-pc-windows-msvc
rustup target add i686-pc-windows-msvc --toolchain 1.75.0-x86_64-pc-windows-msvc
- name: Build Rust
working-directory: src/Rust
run: cargo +1.75.0-x86_64-pc-windows-msvc build --target i686-pc-windows-msvc --features windows --release
- name: Upload Rust Build Artifacts
uses: actions/upload-artifact@v4
with:
name: rust-windows-latest
path: |
src/Rust/target/i686-pc-windows-msvc/release/*.exe
src/Rust/target/i686-pc-windows-msvc/release/*.pdb
target/i686-pc-windows-msvc/release/*.exe
target/i686-pc-windows-msvc/release/*.pdb
- name: Cancel workflow if failed
uses: andymckay/cancel-action@0.4
if: ${{ failure() }}
@@ -79,14 +77,11 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
key: "rust-build-linux"
workspaces: "src/Rust -> target"
- name: Build Rust (x64)
working-directory: src/Rust
run: |
cargo build --release --target x86_64-unknown-linux-gnu
cp ./target/x86_64-unknown-linux-gnu/release/update ./target/release/UpdateNix_x64
- name: Build Rust (arm64)
working-directory: src/Rust
env:
CROSS_NuGetPackageVersion: ${{ steps.nbgv.outputs.NuGetPackageVersion }}
run: |
@@ -98,7 +93,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: rust-ubuntu-latest
path: src/Rust/target/release/UpdateNix*
path: target/release/UpdateNix*
- name: Cancel workflow if failed
uses: andymckay/cancel-action@0.4
if: ${{ failure() }}
@@ -118,9 +113,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
key: "rust-build-${{ matrix.os }}"
workspaces: "src/Rust -> target"
- name: Build Rust
working-directory: src/Rust
run: |
cargo build --release
cp ./target/release/update ./target/release/UpdateMac
@@ -128,7 +121,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: rust-${{ matrix.os }}
path: src/Rust/target/release/UpdateMac
path: target/release/UpdateMac
- name: Cancel workflow if failed
uses: andymckay/cancel-action@0.4
if: ${{ failure() }}
@@ -179,12 +172,12 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/cache@v4
with:
path: ${{ github.workspace }}/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
# - uses: actions/cache@v4
# with:
# path: ${{ github.workspace }}/.nuget/packages
# key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
# restore-keys: |
# ${{ runner.os }}-nuget-
- name: Install FUSE
run: |
sudo add-apt-repository universe
@@ -206,7 +199,7 @@ jobs:
- name: Download Rust Artifacts
uses: actions/download-artifact@v4
with:
path: src/Rust/target/release
path: target/release
pattern: rust-*
merge-multiple: true
- name: Test Velopack.Tests
@@ -220,11 +213,10 @@ jobs:
with:
name: cross-${{ matrix.os }}
path: test/artifacts/*
- name: Upload Coverage Artifacts
uses: actions/upload-artifact@v4
- name: Upload Coverage
uses: codecov/codecov-action@v4
with:
name: coverage-dotnet-${{ matrix.os }}
path: ./test/*.xml
directory: ./test
- uses: caesay/wait-artifact-action@494939e840383463b1686ce3624a8aab059c2c8b
if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'windows-latest' }}
with:
@@ -260,7 +252,7 @@ jobs:
- name: Download Rust Artifacts
uses: actions/download-artifact@v4
with:
path: src/Rust/target/release
path: target/release
pattern: rust-*
merge-multiple: true
- name: Build .NET
@@ -278,29 +270,9 @@ jobs:
name: packages
path: build/Release/*nupkg
upload-coverage:
runs-on: ubuntu-latest
needs: [package, test-dotnet, test-rust-bins]
steps:
- name: Download Coverage Artifacts
uses: actions/download-artifact@v4
with:
pattern: coverage-*
path: ./test
- name: Upload Coverage to Codecov
uses: codecov/codecov-action@v4
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
directory: ./test
fail_ci_if_error: true
- uses: geekyeggo/delete-artifact@v5
with:
name: coverage-*
release:
runs-on: ubuntu-latest
needs: [package, test-dotnet, test-rust-bins]
needs: [package, test-dotnet, test-rust]
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
steps:
- name: Invoke Release Workflow

1
.gitignore vendored
View File

@@ -6,6 +6,7 @@ _docyml/
## Eclipse
#################
.vscode
.idea
*.pydevproject
.project

View File

@@ -1,8 +0,0 @@
{
"cSpell.words": [
"Avalonia",
"Skippable",
"Velo",
"Velopack"
]
}

2720
Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

30
Cargo.toml Normal file
View File

@@ -0,0 +1,30 @@
[workspace]
resolver = "2"
members = [
"src/bins",
"src/lib-rust",
# "src/lib-cpp/generator"
]
[workspace.package]
authors = ["Caelan Sayler <git@caesay.com>"]
homepage = "https://velopack.io"
repository = "https://github.com/velopack/velopack"
documentation = "https://docs.velopack.io"
keywords = ["update", "install", "velopack", "squirrel", "automatic-updates"]
categories = ["development-tools"]
license = "MIT"
edition = "2021"
rust-version = "1.75"
# default to small, optimized workspace release binaries
[profile.release]
opt-level = "z" # optimize for size
lto = true # link-time optimization
debug = false # disable debug info
debug-assertions = false # disable debug assertions
overflow-checks = false # disable overflow checks
panic = "abort" # abort on panic
incremental = false # disable incremental compilation
codegen-units = 1 # compile all code into a single unit
rpath = false # disable rpath

View File

@@ -2,7 +2,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31815.197
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack", "src\Velopack\Velopack.csproj", "{1436E22A-FE3C-4D68-9A85-9E74DF2E6A92}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack", "src\lib-csharp\Velopack.csproj", "{1436E22A-FE3C-4D68-9A85-9E74DF2E6A92}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Tests", "test\Velopack.Tests\Velopack.Tests.csproj", "{98AEB048-E27D-42F4-9440-505B7F78BAFD}"
EndProject
@@ -20,9 +20,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionLevel", "SolutionLe
version.json = version.json
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Packaging", "src\Velopack.Packaging\Velopack.Packaging.csproj", "{352C15EA-622F-4132-80D8-9B6E3C83404E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Packaging", "src\vpk\Velopack.Packaging\Velopack.Packaging.csproj", "{352C15EA-622F-4132-80D8-9B6E3C83404E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Vpk", "src\Velopack.Vpk\Velopack.Vpk.csproj", "{9E769C7E-A54C-4844-8362-727D37BB1578}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Vpk", "src\vpk\Velopack.Vpk\Velopack.Vpk.csproj", "{9E769C7E-A54C-4844-8362-727D37BB1578}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.CommandLine.Tests", "test\Velopack.CommandLine.Tests\Velopack.CommandLine.Tests.csproj", "{519EAB50-47B8-425F-8B20-AB9548F220B4}"
EndProject
@@ -31,11 +31,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{7AC3A776
test\Directory.Build.props = test\Directory.Build.props
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Packaging.Windows", "src\Velopack.Packaging.Windows\Velopack.Packaging.Windows.csproj", "{E35039C8-1F98-48EB-B7D5-08E33DF061A7}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Packaging.Windows", "src\vpk\Velopack.Packaging.Windows\Velopack.Packaging.Windows.csproj", "{E35039C8-1F98-48EB-B7D5-08E33DF061A7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Packaging.Unix", "src\Velopack.Packaging.Unix\Velopack.Packaging.Unix.csproj", "{3382BCB7-657E-4E7B-A2B9-D65AA4DA073B}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Packaging.Unix", "src\vpk\Velopack.Packaging.Unix\Velopack.Packaging.Unix.csproj", "{3382BCB7-657E-4E7B-A2B9-D65AA4DA073B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Deployment", "src\Velopack.Deployment\Velopack.Deployment.csproj", "{D19EA72C-E7AE-4A7B-924A-E7550901A49C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Deployment", "src\vpk\Velopack.Deployment\Velopack.Deployment.csproj", "{D19EA72C-E7AE-4A7B-924A-E7550901A49C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Packaging.Tests", "test\Velopack.Packaging.Tests\Velopack.Packaging.Tests.csproj", "{175B06A5-5C09-4DAB-A6AF-C8A2257BD1B6}"
EndProject
@@ -46,17 +46,17 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{3EBF
samples\Directory.Build.targets = samples\Directory.Build.targets
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AvaloniaCrossPlat", "samples\AvaloniaCrossPlat\AvaloniaCrossPlat.csproj", "{1FF6A262-13D0-45DF-B818-77AC84C52C6F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CSharpAvalonia", "samples\CSharpAvalonia\CSharpAvalonia.csproj", "{1FF6A262-13D0-45DF-B818-77AC84C52C6F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LegacyTestApp", "test\LegacyTestApp\LegacyTestApp.csproj", "{8B27C4BF-21B8-48B0-80F8-74520227C35F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VeloWpfSample", "samples\VeloWpfSample\VeloWpfSample.csproj", "{9E0F2B00-1B88-4B75-BEED-6DF8DBCA36B5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CSharpWpf", "samples\CSharpWpf\CSharpWpf.csproj", "{9E0F2B00-1B88-4B75-BEED-6DF8DBCA36B5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Divergic.Logging.Xunit", "test\Divergic.Logging.Xunit\Divergic.Logging.Xunit.csproj", "{5ED2E9AF-101D-4D2D-B0B5-90A920EF692D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Build", "src\Velopack.Build\Velopack.Build.csproj", "{97C9B2CF-877F-4C98-A513-058784A23697}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.Build", "src\vpk\Velopack.Build\Velopack.Build.csproj", "{97C9B2CF-877F-4C98-A513-058784A23697}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.IcoLib", "src\Velopack.IcoLib\Velopack.IcoLib.csproj", "{8A0A980A-D51C-458E-8942-00BC900FD2D0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Velopack.IcoLib", "src\vpk\Velopack.IcoLib\Velopack.IcoLib.csproj", "{8A0A980A-D51C-458E-8942-00BC900FD2D0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution

View File

@@ -1,6 +1,6 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="AvaloniaCrossPlat.App"
x:Class="CSharpAvalonia.App"
RequestedThemeVariant="Default">
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->

View File

@@ -2,7 +2,7 @@ using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
namespace AvaloniaCrossPlat;
namespace CSharpAvalonia;
public partial class App : Application
{

View File

@@ -2,6 +2,7 @@
<PropertyGroup>
<OutputType>WinExe</OutputType>
<AssemblyName>VelopackCSharpAvalonia</AssemblyName>
<TargetFramework>net8.0</TargetFramework>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<ApplicationManifest>app.manifest</ApplicationManifest>

View File

@@ -3,9 +3,9 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" Width="600" Height="600"
x:Class="AvaloniaCrossPlat.MainWindow"
x:Class="CSharpAvalonia.MainWindow"
WindowStartupLocation="CenterScreen"
Title="AvaloniaCrossPlat">
Title="CSharpAvalonia">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />

View File

@@ -6,7 +6,7 @@ using Avalonia.Threading;
using Microsoft.Extensions.Logging;
using Velopack;
namespace AvaloniaCrossPlat;
namespace CSharpAvalonia;
public partial class MainWindow : Window
{

View File

@@ -2,7 +2,7 @@
using System.Text;
using Microsoft.Extensions.Logging;
namespace AvaloniaCrossPlat;
namespace CSharpAvalonia;
public class LogUpdatedEventArgs : EventArgs
{

View File

@@ -2,7 +2,7 @@
using Avalonia;
using Velopack;
namespace AvaloniaCrossPlat;
namespace CSharpAvalonia;
class Program
{

View File

@@ -15,9 +15,9 @@ RELEASE_DIR="$SCRIPT_DIR/releases"
PUBLISH_DIR="$SCRIPT_DIR/publish"
echo ""
echo "Compiling AvaloniaCrossPlat with dotnet..."
echo "Compiling VelopackCSharpAvalonia with dotnet..."
dotnet publish -c Release --self-contained -r linux-x64 -o "$PUBLISH_DIR"
echo ""
echo "Building Velopack Release v$BUILD_VERSION"
vpk pack -u AvaloniaCrossPlat -v $BUILD_VERSION -o "$RELEASE_DIR" -p "$PUBLISH_DIR"
vpk pack -u VelopackCSharpAvalonia -v $BUILD_VERSION -o "$RELEASE_DIR" -p "$PUBLISH_DIR"

View File

@@ -15,9 +15,9 @@ RELEASE_DIR="$SCRIPT_DIR/releases"
PUBLISH_DIR="$SCRIPT_DIR/publish"
echo ""
echo "Compiling AvaloniaCrossPlat with dotnet..."
echo "Compiling VelopackCSharpAvalonia with dotnet..."
dotnet publish -c Release --self-contained -r osx-x64 -o "$PUBLISH_DIR"
echo ""
echo "Building Velopack Release v$BUILD_VERSION"
vpk pack -u AvaloniaCrossPlat -v $BUILD_VERSION -o "$RELEASE_DIR" -p "$PUBLISH_DIR"
vpk pack -u VelopackCSharpAvalonia -v $BUILD_VERSION -o "$RELEASE_DIR" -p "$PUBLISH_DIR"

View File

@@ -10,9 +10,9 @@ if "%~1"=="" (
set "version=%~1"
echo.
echo Compiling AvaloniaCrossPlat with dotnet...
echo Compiling VelopackCSharpAvalonia with dotnet...
dotnet publish -c Release --no-self-contained -r win-x64 -o %~dp0publish
echo.
echo Building Velopack Release v%version%
vpk pack -u AvaloniaCrossPlat -o %~dp0releases -p %~dp0publish -f net8-x64-desktop -v %*
vpk pack -u VelopackCSharpAvalonia -o %~dp0releases -p %~dp0publish -f net8-x64-desktop -v %*

View File

@@ -27,9 +27,9 @@ dotnet build src/Velopack.Vpk/Velopack.Vpk.csproj
echo ""
cd "$SCRIPT_DIR/.."
echo "Compiling AvaloniaCrossPlat with dotnet..."
echo "Compiling VelopackCSharpAvalonia with dotnet..."
dotnet publish -c Release --self-contained -r linux-x64 -o "$PUBLISH_DIR" -p:UseLocalVelopack=true
echo ""
echo "Building Velopack Release v$BUILD_VERSION"
"$SCRIPT_DIR/../../../build/Debug/net8.0/vpk" pack -u AvaloniaCrossPlat -v $BUILD_VERSION -o "$RELEASE_DIR" -p "$PUBLISH_DIR"
"$SCRIPT_DIR/../../../build/Debug/net8.0/vpk" pack -u VelopackCSharpAvalonia -v $BUILD_VERSION -o "$RELEASE_DIR" -p "$PUBLISH_DIR"

View File

@@ -26,9 +26,9 @@ dotnet build src/Velopack.Vpk/Velopack.Vpk.csproj
echo ""
cd "$SCRIPT_DIR/.."
echo "Compiling AvaloniaCrossPlat with dotnet..."
echo "Compiling VelopackCSharpAvalonia with dotnet..."
dotnet publish -c Release --self-contained -r osx-x64 -o "$PUBLISH_DIR" -p:UseLocalVelopack=true
echo ""
echo "Building Velopack Release v$BUILD_VERSION"
"$SCRIPT_DIR/../../../build/Debug/net8.0/vpk" pack -u AvaloniaCrossPlat -v $BUILD_VERSION -o "$RELEASE_DIR" -p "$PUBLISH_DIR"
"$SCRIPT_DIR/../../../build/Debug/net8.0/vpk" pack -u VelopackCSharpAvalonia -v $BUILD_VERSION -o "$RELEASE_DIR" -p "$PUBLISH_DIR"

View File

@@ -26,9 +26,9 @@ cd %~dp0..
set "version=%~1"
echo.
echo Compiling AvaloniaCrossPlat with dotnet...
echo Compiling VelopackCSharpAvalonia with dotnet...
dotnet publish -c Release --self-contained -r win-x64 -o publish -p:UseLocalVelopack=true
echo.
echo Building Velopack Release v%version%
%~dp0..\..\..\build\Debug\net8.0\vpk pack -u AvaloniaCrossPlat -o releases -p publish -v %*
%~dp0..\..\..\build\Debug\net8.0\vpk pack -u VelopackCSharpAvalonia -o releases -p publish -v %*

Some files were not shown because too many files have changed in this diff Show More