From 53cb50d54f4b9e09bc23e6fd026c850b4f8a4e03 Mon Sep 17 00:00:00 2001 From: David Maas Date: Wed, 14 May 2025 15:33:42 -0500 Subject: [PATCH 1/4] Normalize license file formatting --- LICENSE | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/LICENSE b/LICENSE index 758df16..6e4ff25 100644 --- a/LICENSE +++ b/LICENSE @@ -1,11 +1,11 @@ -Copyright (c) 2023 NeuroGEARS Ltd +Copyright (c) Bonsai Foundation CIC and Contributors -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. @@ -18,7 +18,8 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----------------------- +------------------------------------------------------------------------------- + [VimbaNET.dll] (hereinafter referred to as the "Software") Made available under license from Allied Vision Technologies GmbH From f08830152c1e6524483448c39fd87031fe518cd0 Mon Sep 17 00:00:00 2001 From: David Maas Date: Fri, 16 May 2025 23:21:23 -0500 Subject: [PATCH 2/4] Add CI/CD and brought repository into compliance with modern standards --- .bonsai/Bonsai.config | 59 +++ .bonsai/NuGet.config | 5 + .bonsai/Setup.cmd | 4 + .bonsai/Setup.ps1 | 21 ++ .config/dotnet-tools.json | 13 + .editorconfig | 46 +++ .gitattributes | 44 ++- .github/workflows/Bonsai.Vimba.yml | 344 ++++++++++++++++++ .gitignore | 11 +- .gitmodules | 3 + Bonsai.Vimba.sln | 12 +- Bonsai.Vimba/Bonsai.Vimba.csproj | 38 -- Bonsai.Vimba/Properties/launchSettings.json | 9 - Directory.Build.props | 3 + Directory.Build.targets | 3 + build/Common.Tests.csproj.props | 6 + build/Common.csproj.props | 80 ++++ build/Common.csproj.targets | 46 +++ build/Package.props | 9 + build/Project.csproj.props | 5 + build/icon.png | Bin 0 -> 4224 bytes README.md => docs/README.md | 0 docs/bonsai-docfx | 1 + docs/build.ps1 | 19 + docs/docfx.json | 84 +++++ docs/export-images.ps1 | 44 +++ docs/filter.yml | 4 + docs/index.md | 5 + docs/template/public/main.css | 1 + docs/template/public/main.js | 13 + docs/toc.yml | 2 + docs/workflows/.gitignore | 2 + global.json | 6 + src/Bonsai.Vimba/Bonsai.Vimba.csproj | 24 ++ .../Bonsai.Vimba}/Bonsai.Vimba.props | 3 +- .../Bonsai.Vimba}/Bonsai.Vimba.targets | 3 +- .../Bonsai.Vimba}/Properties/AssemblyInfo.cs | 0 .../Properties/launchSettings.json | 10 + .../Bonsai.Vimba}/SerialNumberConverter.cs | 0 .../Bonsai.Vimba}/VimbaApi.cs | 0 .../Bonsai.Vimba}/VimbaCapture.cs | 0 .../Bonsai.Vimba}/VimbaDataFrame.cs | 0 .../Externals}/VimbaNET/x64/README.md | 0 .../Externals}/VimbaNET/x86/README.md | 0 44 files changed, 924 insertions(+), 58 deletions(-) create mode 100644 .bonsai/Bonsai.config create mode 100644 .bonsai/NuGet.config create mode 100644 .bonsai/Setup.cmd create mode 100644 .bonsai/Setup.ps1 create mode 100644 .config/dotnet-tools.json create mode 100644 .editorconfig create mode 100644 .github/workflows/Bonsai.Vimba.yml create mode 100644 .gitmodules delete mode 100644 Bonsai.Vimba/Bonsai.Vimba.csproj delete mode 100644 Bonsai.Vimba/Properties/launchSettings.json create mode 100644 Directory.Build.props create mode 100644 Directory.Build.targets create mode 100644 build/Common.Tests.csproj.props create mode 100644 build/Common.csproj.props create mode 100644 build/Common.csproj.targets create mode 100644 build/Package.props create mode 100644 build/Project.csproj.props create mode 100644 build/icon.png rename README.md => docs/README.md (100%) create mode 160000 docs/bonsai-docfx create mode 100644 docs/build.ps1 create mode 100644 docs/docfx.json create mode 100644 docs/export-images.ps1 create mode 100644 docs/filter.yml create mode 100644 docs/index.md create mode 100644 docs/template/public/main.css create mode 100644 docs/template/public/main.js create mode 100644 docs/toc.yml create mode 100644 docs/workflows/.gitignore create mode 100644 global.json create mode 100644 src/Bonsai.Vimba/Bonsai.Vimba.csproj rename {Bonsai.Vimba => src/Bonsai.Vimba}/Bonsai.Vimba.props (78%) rename {Bonsai.Vimba => src/Bonsai.Vimba}/Bonsai.Vimba.targets (90%) rename {Bonsai.Vimba => src/Bonsai.Vimba}/Properties/AssemblyInfo.cs (100%) create mode 100644 src/Bonsai.Vimba/Properties/launchSettings.json rename {Bonsai.Vimba => src/Bonsai.Vimba}/SerialNumberConverter.cs (100%) rename {Bonsai.Vimba => src/Bonsai.Vimba}/VimbaApi.cs (100%) rename {Bonsai.Vimba => src/Bonsai.Vimba}/VimbaCapture.cs (100%) rename {Bonsai.Vimba => src/Bonsai.Vimba}/VimbaDataFrame.cs (100%) rename {Externals => src/Externals}/VimbaNET/x64/README.md (100%) rename {Externals => src/Externals}/VimbaNET/x86/README.md (100%) diff --git a/.bonsai/Bonsai.config b/.bonsai/Bonsai.config new file mode 100644 index 0000000..ac40c8a --- /dev/null +++ b/.bonsai/Bonsai.config @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.bonsai/NuGet.config b/.bonsai/NuGet.config new file mode 100644 index 0000000..aa5beec --- /dev/null +++ b/.bonsai/NuGet.config @@ -0,0 +1,5 @@ + + + + + diff --git a/.bonsai/Setup.cmd b/.bonsai/Setup.cmd new file mode 100644 index 0000000..92d983d --- /dev/null +++ b/.bonsai/Setup.cmd @@ -0,0 +1,4 @@ +@echo off +pushd %~dp0 +powershell -ExecutionPolicy Bypass -File ./Setup.ps1 +popd \ No newline at end of file diff --git a/.bonsai/Setup.ps1 b/.bonsai/Setup.ps1 new file mode 100644 index 0000000..01cfba6 --- /dev/null +++ b/.bonsai/Setup.ps1 @@ -0,0 +1,21 @@ +Push-Location $PSScriptRoot +if (!(Test-Path "./Bonsai.exe")) { + $release = "https://github.com/bonsai-rx/bonsai/releases/latest/download/Bonsai.zip" + $configPath = "./Bonsai.config" + if (Test-Path $configPath) { + [xml]$config = Get-Content $configPath + $bootstrapper = $config.PackageConfiguration.Packages.Package.where{$_.id -eq 'Bonsai'} + if ($bootstrapper) { + $version = $bootstrapper.version + $release = "https://github.com/bonsai-rx/bonsai/releases/download/$version/Bonsai.zip" + } + } + Invoke-WebRequest $release -OutFile "temp.zip" + Move-Item -Path "NuGet.config" "temp.config" -ErrorAction SilentlyContinue + Expand-Archive "temp.zip" -DestinationPath "." -Force + Move-Item -Path "temp.config" "NuGet.config" -Force -ErrorAction SilentlyContinue + Remove-Item -Path "temp.zip" + Remove-Item -Path "Bonsai32.exe" +} +& .\Bonsai.exe --no-editor +Pop-Location \ No newline at end of file diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json new file mode 100644 index 0000000..d32441d --- /dev/null +++ b/.config/dotnet-tools.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "docfx": { + "version": "2.78.3", + "commands": [ + "docfx" + ], + "rollForward": false + } + } +} \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..c9a9d0d --- /dev/null +++ b/.editorconfig @@ -0,0 +1,46 @@ +root = true + +[*] +indent_style = space + +#-------------------------------------------------------------------------------------------------- +# XML, JSON, and web files +#-------------------------------------------------------------------------------------------------- +[*.{xml,csproj,vcxproj,vcxproj.filters,shproj,props,targets,config,nuspec,resx,vsixmanifest,wxs,vstemplate,slnx}] +indent_size = 2 + +[*.json] +indent_size = 2 + +[*.{html,css}] +indent_size = 2 + +#-------------------------------------------------------------------------------------------------- +# C++ +#-------------------------------------------------------------------------------------------------- +[*.{c,cpp,h,hpp,ixx}] +indent_size = 4 +charset = utf-8-bom +trim_trailing_whitespace = true +insert_final_newline = true + +#-------------------------------------------------------------------------------------------------- +# C# +#-------------------------------------------------------------------------------------------------- +[*.{cs,csx}] +indent_size = 4 +charset = utf-8-bom +trim_trailing_whitespace = true +insert_final_newline = true + +# Language keyword vs full type name +# Predefined for members, etc does not create a message because the explicitly sized types are conveient in interop scenarios where the bit size matters. +dotnet_style_predefined_type_for_locals_parameters_members = true:none +dotnet_style_predefined_type_for_member_access = true:suggestion + +# Instantiate argument exceptions correctly +dotnet_diagnostic.CA2208.severity = warning + +# Don't complain about not using modern collection syntax +dotnet_style_prefer_collection_expression = never +csharp_style_prefer_range_operator = false diff --git a/.gitattributes b/.gitattributes index 2125666..601a4e2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,43 @@ -* text=auto \ No newline at end of file +# Auto detect text files and normalize line endings +* text=auto + +# Scripts +*.cmd text eol=crlf +*.ps1 text + +# Config +*.gitignore text +*.gitattributes text +*.gitmodules text eol=lf +*.editorconfig text +*.git-blame-ignore-revs text +*.sln text +*.proj text +*.props text +*.targets text +*.csproj text +*.wixproj text +*.config text +*.json text +*.xml text +*.yml text + +# Code +*.manifest text +*.vsixmanifest text +*.vstemplate text +*.resx text +*.cs text +*.bonsai text +*.wxs text + +# Documents +LICENSE text +*.md text diff=markdown +*.rtf diff=astextplain + +# Graphics +*.png binary +*.ico binary +*.gif binary +*.svg text diff --git a/.github/workflows/Bonsai.Vimba.yml b/.github/workflows/Bonsai.Vimba.yml new file mode 100644 index 0000000..25b09c3 --- /dev/null +++ b/.github/workflows/Bonsai.Vimba.yml @@ -0,0 +1,344 @@ +# ======================================================================================================================================================================= +# Bonsai.Vimba CI/CD +# ======================================================================================================================================================================= +# Index: +# * Build, test, and package .NET +# * Build documentation +# * Render workflow images +# * Publish packages to GitHub +# * Publish packages to NuGet.org +# * Publish documentation +# ======================================================================================================================================================================= +# Note that this is a generic workflow meant for all Bonsai packages. Minor local modifications are fine, see https://github.com/bonsai-rx/prefect for more information. +# ======================================================================================================================================================================= +name: Bonsai.Vimba +on: + push: + # This prevents tag pushes from triggering this workflow + branches: ['*'] + pull_request: + release: + types: [published] + workflow_dispatch: +env: + DOTNET_NOLOGO: true + DOTNET_CLI_TELEMETRY_OPTOUT: true + DOTNET_GENERATE_ASPNET_CERTIFICATE: false + ContinuousIntegrationBuild: true +jobs: + # ===================================================================================================================================================================== + # Build, test, and package .NET + # ___ _ _ _ _ _ _ _ _ _ ___ _____ + # | _ )_ _(_) |__| | | |_ ___ __| |_ __ _ _ _ __| | _ __ __ _ __| |____ _ __ _ ___ | \| | __|_ _| + # | _ \ || | | / _` |_ | _/ -_|_-< _|_ / _` | ' \/ _` | | '_ \/ _` / _| / / _` / _` / -_) _| .` | _| | | + # |___/\_,_|_|_\__,_( ) \__\___/__/\__( ) \__,_|_||_\__,_| | .__/\__,_\__|_\_\__,_\__, \___| (_)_|\_|___| |_| + # |/ |/ |_| |___/ + # ===================================================================================================================================================================== + build: + strategy: + fail-fast: false + matrix: + platform: + - name: Windows x64 + os: windows-latest + rid: win-x64 + - name: Linux x64 + os: ubuntu-22.04 + rid: linux-x64 + configuration: ['debug', 'release'] + include: + - platform: + rid: win-x64 + configuration: release + collect-packages: true + name: ${{matrix.platform.name}} ${{matrix.configuration}} + runs-on: ${{matrix.platform.os}} + outputs: + need-workflow-image-render: ${{steps.configure-build.outputs.need-workflow-image-render}} + steps: + # ----------------------------------------------------------------------- Checkout + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + + # ----------------------------------------------------------------------- Set up tools + - name: Set up .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x + + # ----------------------------------------------------------------------- Configure build + - name: Configure build + id: configure-build + uses: bonsai-rx/configure-build@v1 + + # ----------------------------------------------------------------------- Build + - name: Restore + run: dotnet restore + + - name: Build + run: dotnet build --no-restore --configuration ${{matrix.configuration}} + + # ----------------------------------------------------------------------- Pack + - name: Pack + id: pack + run: dotnet pack --no-restore --no-build --configuration ${{matrix.configuration}} + + # ----------------------------------------------------------------------- Test + - name: Test .NET Framework 4.7.2 + run: dotnet test --no-restore --no-build --configuration ${{matrix.configuration}} --verbosity normal --framework net472 + - name: Test .NET 8 + run: dotnet test --no-restore --no-build --configuration ${{matrix.configuration}} --verbosity normal --framework net8.0 + - name: Test .NET 8 Windows + if: matrix.platform.rid == 'win-x64' + run: dotnet test --no-restore --no-build --configuration ${{matrix.configuration}} --verbosity normal --framework net8.0-windows + + # ----------------------------------------------------------------------- Collect artifacts + - name: Collect NuGet packages + uses: actions/upload-artifact@v4 + if: matrix.collect-packages && steps.pack.outcome == 'success' && always() + with: + name: Packages + if-no-files-found: error + path: artifacts/package/${{matrix.configuration}}/** + + # ===================================================================================================================================================================== + # Build documentation + # ___ _ _ _ _ _ _ _ + # | _ )_ _(_) |__| | __| |___ __ _ _ _ __ ___ _ _| |_ __ _| |_(_)___ _ _ + # | _ \ || | | / _` | / _` / _ \/ _| || | ' \/ -_) ' \ _/ _` | _| / _ \ ' \ + # |___/\_,_|_|_\__,_| \__,_\___/\__|\_,_|_|_|_\___|_||_\__\__,_|\__|_\___/_||_| + # ===================================================================================================================================================================== + build-documentation: + name: Build documentation + runs-on: ubuntu-latest + steps: + # ----------------------------------------------------------------------- Checkout + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + + # ----------------------------------------------------------------------- Set up tools + - name: Set up .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x + + - name: Set up .NET tools + run: dotnet tool restore + + # ----------------------------------------------------------------------- Restore + - name: Restore + run: dotnet restore + + # ----------------------------------------------------------------------- Build metadata + - name: Build metadata + id: build-metadata + run: dotnet docfx metadata docs/docfx.json --noRestore + + # ----------------------------------------------------------------------- Build documentation + - name: Build documentation + id: build-documentation + run: dotnet docfx build docs/docfx.json + + # ----------------------------------------------------------------------- Collect artifacts + - name: Collect documentation metadata + uses: actions/upload-artifact@v4 + if: steps.build-metadata.outcome == 'success' && always() + with: + name: DocumentationMetadata + if-no-files-found: error + path: artifacts/docs/api/ + + - name: Collect documentation artifact + uses: actions/upload-artifact@v4 + if: steps.build-documentation.outcome == 'success' && always() + with: + name: DocumentationWebsite + if-no-files-found: error + path: artifacts/docs/site/ + + # ===================================================================================================================================================================== + # Render workflow images + # ___ _ _ __ _ _ + # | _ \___ _ _ __| |___ _ _ __ __ _____ _ _| |__/ _| |_____ __ __ (_)_ __ __ _ __ _ ___ ___ + # | / -_) ' \/ _` / -_) '_| \ V V / _ \ '_| / / _| / _ \ V V / | | ' \/ _` / _` / -_|_-< + # |_|_\___|_||_\__,_\___|_| \_/\_/\___/_| |_\_\_| |_\___/\_/\_/ |_|_|_|_\__,_\__, \___/__/ + # |___/ + # ===================================================================================================================================================================== + workflow-images: + name: Render workflow images + runs-on: windows-latest + needs: build + if: needs.build.outputs.need-workflow-image-render == 'true' + steps: + # ----------------------------------------------------------------------- Checkout + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + + # ----------------------------------------------------------------------- Download built packages + - name: Download packages for rendering + uses: actions/download-artifact@v4 + with: + name: Packages + path: artifacts/packages/ + + # ----------------------------------------------------------------------- Set up Bonsai environments + - name: Set up Bonsai environments + uses: bonsai-rx/setup-bonsai@v1 + with: + environment-paths: '**/.bonsai/' + inject-packages: artifacts/packages/*.nupkg + + # ----------------------------------------------------------------------- Render + - name: Render images + id: render + run: pwsh ./docs/export-images.ps1 -OutputFolder artifacts/docs/site/ -Verbose + + # ----------------------------------------------------------------------- Collect artifacts + - name: Collect images + uses: actions/upload-artifact@v4 + if: steps.render.outcome == 'success' && always() + with: + name: DocumentationWorkflowImages + if-no-files-found: error + path: artifacts/docs/site/ + + # ===================================================================================================================================================================== + # Publish packages to GitHub + # ___ _ _ _ _ _ _ ___ _ _ _ _ _ + # | _ \_ _| |__| (_)__| |_ _ __ __ _ __| |____ _ __ _ ___ ___ | |_ ___ / __(_) |_| || |_ _| |__ + # | _/ || | '_ \ | (_-< ' \ | '_ \/ _` / _| / / _` / _` / -_|_-< | _/ _ \ | (_ | | _| __ | || | '_ \ + # |_| \_,_|_.__/_|_/__/_||_| | .__/\__,_\__|_\_\__,_\__, \___/__/ \__\___/ \___|_|\__|_||_|\_,_|_.__/ + # |_| |___/ + # ===================================================================================================================================================================== + publish-github: + name: Publish packages to GitHub + runs-on: ubuntu-latest + needs: build + permissions: + # Needed to attach files to releases + contents: write + # Needed to upload to GitHub Packages + packages: write + if: github.event_name == 'push' || github.event_name == 'release' + steps: + # ----------------------------------------------------------------------- Set up .NET + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x + + # ----------------------------------------------------------------------- Download built packages + - name: Download built packages + uses: actions/download-artifact@v4 + with: + name: Packages + path: artifacts/packages/ + + # ----------------------------------------------------------------------- Upload release assets + - name: Upload release assets + if: github.event_name == 'release' + run: gh release upload --repo ${{github.repository}} ${{github.event.release.tag_name}} artifacts/packages/* --clobber + env: + GH_TOKEN: ${{github.token}} + + # ----------------------------------------------------------------------- Push to GitHub Packages + - name: Push to GitHub Packages + run: dotnet nuget push "artifacts/packages/*.nupkg" --skip-duplicate --no-symbols --api-key ${{secrets.GITHUB_TOKEN}} --source https://nuget.pkg.github.com/${{github.repository_owner}} + env: + # This is a workaround for https://github.com/NuGet/Home/issues/9775 + DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER: 0 + + # ===================================================================================================================================================================== + # Publish packages to NuGet.org + # ___ _ _ _ _ _ _ _ _ ___ _ + # | _ \_ _| |__| (_)__| |_ _ __ __ _ __| |____ _ __ _ ___ ___ | |_ ___ | \| |_ _ / __|___| |_ ___ _ _ __ _ + # | _/ || | '_ \ | (_-< ' \ | '_ \/ _` / _| / / _` / _` / -_|_-< | _/ _ \ | .` | || | (_ / -_) _|_/ _ \ '_/ _` | + # |_| \_,_|_.__/_|_/__/_||_| | .__/\__,_\__|_\_\__,_\__, \___/__/ \__\___/ |_|\_|\_,_|\___\___|\__(_)___/_| \__, | + # |_| |___/ |___/ + # ===================================================================================================================================================================== + publish-packages-nuget-org: + name: Publish packages to NuGet.org + runs-on: ubuntu-latest + environment: public-release + needs: build + if: github.event_name == 'release' + steps: + # ----------------------------------------------------------------------- Set up .NET + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x + + # ----------------------------------------------------------------------- Download built packages + - name: Download built packages + uses: actions/download-artifact@v4 + with: + name: Packages + path: artifacts/packages/ + + # ----------------------------------------------------------------------- Push to NuGet.org + - name: Push to NuGet.org + run: dotnet nuget push "artifacts/packages/*.nupkg" --api-key ${{secrets.NUGET_API_KEY}} --source ${{vars.NUGET_API_URL}} + env: + # This is a workaround for https://github.com/NuGet/Home/issues/9775 + DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER: 0 + + + # ===================================================================================================================================================================== + # Publish documentation + # ___ _ _ _ _ _ _ _ _ + # | _ \_ _| |__| (_)__| |_ __| |___ __ _ _ _ __ ___ _ _| |_ __ _| |_(_)___ _ _ + # | _/ || | '_ \ | (_-< ' \ / _` / _ \/ _| || | ' \/ -_) ' \ _/ _` | _| / _ \ ' \ + # |_| \_,_|_.__/_|_/__/_||_| \__,_\___/\__|\_,_|_|_|_\___|_||_\__\__,_|\__|_\___/_||_| + # ===================================================================================================================================================================== + publish-documentation: + name: Publish documentation + runs-on: ubuntu-latest + # Publishing is not strictly necessary here, but if we're going to do a public release we want to wait to publish the docs until it goes out + needs: [build-documentation, workflow-images, publish-packages-nuget-org] + permissions: + # Both required by actions/deploy-pages + pages: write + id-token: write + environment: + # Intentionally not using the "default" github-pages environment as it's not compatible with this workflow + name: documentation-website + url: ${{steps.publish.outputs.page_url}} + # Only run if the workflow isn't dying and build-documentation was successful and either A) we're releasing or B) we have continuous deployment enabled + if: | + !cancelled() && !failure() && needs.build-documentation.result == 'success' + && (github.event_name == 'release' + || (vars.CONTINUOUS_DOCUMENTATION && github.event_name != 'pull_request') + ) + steps: + # ----------------------------------------------------------------------- Download documentation website components + # It is intentional that we use two independent download steps here as it ensures that workflow images are permitted + # to overwrite any conflicts in the docfx output but not the other way around. + - name: Download documentation website + uses: actions/download-artifact@v4 + with: + name: DocumentationWebsite + + - name: Download workflow images + if: ${{needs.workflow-images.result == 'success'}} + uses: actions/download-artifact@v4 + with: + name: DocumentationWorkflowImages + + # ----------------------------------------------------------------------- Collect artifacts + - name: Upload final documentation website artifact + uses: actions/upload-pages-artifact@v3 + with: + path: '.' + + # ----------------------------------------------------------------------- Publish to GitHub Pages (for forks) + - name: Publish to GitHub Pages (forks) + id: publish + if: github.event_name == 'release' || github.event.repository.fork + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 35b90d0..07e498f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ -.vs -bin -obj -*.dll -*.xml \ No newline at end of file +.bonsai/Bonsai.exe* +.bonsai/Packages/ +.bonsai/Settings/ +.vs/ +/artifacts/ +*.xml diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..acf6d39 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "docs/bonsai-docfx"] + path = docs/bonsai-docfx + url = https://github.com/bonsai-rx/docfx-tools.git diff --git a/Bonsai.Vimba.sln b/Bonsai.Vimba.sln index 1467b0c..55b4a70 100644 --- a/Bonsai.Vimba.sln +++ b/Bonsai.Vimba.sln @@ -3,7 +3,17 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.31911.196 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bonsai.Vimba", "Bonsai.Vimba\Bonsai.Vimba.csproj", "{CF3AC6E3-5B8E-43C3-AC1D-2AB5F1461145}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bonsai.Vimba", "src\Bonsai.Vimba\Bonsai.Vimba.csproj", "{CF3AC6E3-5B8E-43C3-AC1D-2AB5F1461145}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{DEE5DD87-39C1-BF34-B639-A387DCCF972B}" + ProjectSection(SolutionItems) = preProject + build\Common.csproj.props = build\Common.csproj.props + build\Common.csproj.targets = build\Common.csproj.targets + build\Common.Tests.csproj.props = build\Common.Tests.csproj.props + build\icon.png = build\icon.png + build\Package.props = build\Package.props + build\Project.csproj.props = build\Project.csproj.props + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Bonsai.Vimba/Bonsai.Vimba.csproj b/Bonsai.Vimba/Bonsai.Vimba.csproj deleted file mode 100644 index d325eb3..0000000 --- a/Bonsai.Vimba/Bonsai.Vimba.csproj +++ /dev/null @@ -1,38 +0,0 @@ - - - - NeuroGEARS - Bonsai - Vimba Library - Bonsai Library containing modules for acquiring images from Allied Vision cameras. Vimba SDK version 5.1.0 is required. - Copyright © NeuroGEARS Ltd 2023 - https://github.com/bonsai-rx/vimba - https://github.com/bonsai-rx/vimba/blob/main/LICENSE - https://bonsai-rx.org/assets/images/bonsai.png - false - Bonsai Rx Allied Vision Vimba - true - true - ..\bin\$(Configuration) - snupkg - true - net472 - 8.0 - 0.1.0 - - - - - - - - - ..\Externals\VimbaNET\x64\VimbaNET.dll - - - - - - - - - diff --git a/Bonsai.Vimba/Properties/launchSettings.json b/Bonsai.Vimba/Properties/launchSettings.json deleted file mode 100644 index 72a4374..0000000 --- a/Bonsai.Vimba/Properties/launchSettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "profiles": { - "Bonsai": { - "commandName": "Executable", - "executablePath": "$(registry:HKEY_CURRENT_USER\\Software\\Goncalo Lopes\\Bonsai@InstallDir)Bonsai.exe", - "commandLineArgs": "--lib:$(TargetDir). --no-boot ." - } - } -} \ No newline at end of file diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..91586df --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Directory.Build.targets b/Directory.Build.targets new file mode 100644 index 0000000..b7ac253 --- /dev/null +++ b/Directory.Build.targets @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/build/Common.Tests.csproj.props b/build/Common.Tests.csproj.props new file mode 100644 index 0000000..c42b25f --- /dev/null +++ b/build/Common.Tests.csproj.props @@ -0,0 +1,6 @@ + + + false + false + + \ No newline at end of file diff --git a/build/Common.csproj.props b/build/Common.csproj.props new file mode 100644 index 0000000..1099119 --- /dev/null +++ b/build/Common.csproj.props @@ -0,0 +1,80 @@ + + + + + Debug + AnyCPU + + + + + 12.0 + true + strict + enable + true + + + true + $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)../artifacts')) + + + $(ArtifactsPath)/wsl + + + + + true + Dependency;BonsaiLibrary + + icon.png + $(MSBuildThisFileDirectory)icon.png + + LICENSE + $(MSBuildThisFileDirectory)../LICENSE + + README.md + $(MSBuildThisFileDirectory)../docs/README.md + $(MSBuildThisFileDirectory)README.nuget.md + $(MSBuildProjectDirectory)\README.md + $(MSBuildProjectDirectory)\README.nuget.md + + + false + true + snupkg + + + false + true + + + + + $(WarningsAsErrors);NU1701;CS7035 + + + true + + + true + + + $(MSBuildThisFileDirectory)../.bonsai/Bonsai.exe + + + + + + \ No newline at end of file diff --git a/build/Common.csproj.targets b/build/Common.csproj.targets new file mode 100644 index 0000000..07f4916 --- /dev/null +++ b/build/Common.csproj.targets @@ -0,0 +1,46 @@ + + + + + + + + + + + $(TargetName.ToLowerInvariant()) + DotnetTool + + + 1591,1573 + + + + + + + + 0 + 42.42.42-dev$(DevVersion) + + $(CiBuildVersion) + + + + + + + + + + + + \ No newline at end of file diff --git a/build/Package.props b/build/Package.props new file mode 100644 index 0000000..f722543 --- /dev/null +++ b/build/Package.props @@ -0,0 +1,9 @@ + + + Bonsai Rx Allied Vision Vimba + https://bonsai-rx.org/vimba + + Bonsai Foundation + Copyright © Bonsai Foundation CIC and Contributors + + \ No newline at end of file diff --git a/build/Project.csproj.props b/build/Project.csproj.props new file mode 100644 index 0000000..1d004b4 --- /dev/null +++ b/build/Project.csproj.props @@ -0,0 +1,5 @@ + + + annotations + + \ No newline at end of file diff --git a/build/icon.png b/build/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..50b328bfb57c11901c222ab7d1b5696dd9949134 GIT binary patch literal 4224 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", + "_appLogoPath": "logo.svg", + "_appFaviconPath": "icon.png", + "_enableNewTab": true, + "_enableSearch": true, + "_gitContribute": { + "apiSpecFolder": "docs/apidoc" + } + }, + "markdownEngineProperties": { + "markdigExtensions": [ + "attributes", + "customcontainers" + ] + }, + "xref": [ + "https://bonsai-rx.org/docs/xrefmap.yml", + "https://horizongir.github.io/reactive/xrefmap.yml" + ] + } +} \ No newline at end of file diff --git a/docs/export-images.ps1 b/docs/export-images.ps1 new file mode 100644 index 0000000..e613b87 --- /dev/null +++ b/docs/export-images.ps1 @@ -0,0 +1,44 @@ +[CmdletBinding()] param ( + [string[]]$LibrarySources, + [bool]$UseGalleryForWorkflowsDirectory=$false, + [bool]$UseGalleryForExamplesDirectory=$true, + [string]$OutputFolder=$null +) +Set-StrictMode -Version 3.0 +$ErrorActionPreference = 'Stop' +$PSNativeCommandUseErrorActionPreference = $true + +if ($OutputFolder) { + $OutputFolder = Join-Path (Get-Location) $OutputFolder +} + +function Process-Workflow-Collection([bool]$useGallery, [string]$workflowPath, [string]$environmentPath) { + $libPath = $LibrarySources + + if ($useGallery) { + $libPath = @() + $galleryPath = Join-Path $environmentPath 'Gallery' + $null = New-Item -ItemType Directory -Path $galleryPath -Force + foreach ($librarySource in $LibrarySources) { + Get-ChildItem -Path $librarySource -Filter *.nupkg | Copy-Item -Destination $galleryPath + } + } + + $bootstrapperPath = (Join-Path $environmentPath 'Bonsai.exe') + .\bonsai-docfx\modules\Export-Image.ps1 -libPath $libPath -workflowPath $workflowPath -bootstrapperPath $bootstrapperPath -outputFolder $OutputFolder -documentationRoot $PSScriptRoot +} + +Push-Location $PSScriptRoot +try { + if (Test-Path -Path 'workflows/') { + Process-Workflow-Collection $UseGalleryForWorkflowsDirectory './workflows' '../.bonsai/' + } + + if (Test-Path -Path 'examples/') { + foreach ($environment in (Get-ChildItem -Path 'examples/' -Filter '.bonsai' -Recurse -FollowSymlink -Directory)) { + Process-Workflow-Collection $UseGalleryForExamplesDirectory ($environment.Parent.FullName) ($environment.FullName) + } + } +} finally { + Pop-Location +} diff --git a/docs/filter.yml b/docs/filter.yml new file mode 100644 index 0000000..472eb43 --- /dev/null +++ b/docs/filter.yml @@ -0,0 +1,4 @@ +apiRules: +- exclude: + hasAttribute: + uid: System.ObsoleteAttribute diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..ba991fe --- /dev/null +++ b/docs/index.md @@ -0,0 +1,5 @@ +--- +_layout: landing +--- + +[!INCLUDE [](README.md)] diff --git a/docs/template/public/main.css b/docs/template/public/main.css new file mode 100644 index 0000000..13bc806 --- /dev/null +++ b/docs/template/public/main.css @@ -0,0 +1 @@ +@import "workflow.css"; diff --git a/docs/template/public/main.js b/docs/template/public/main.js new file mode 100644 index 0000000..d27c23a --- /dev/null +++ b/docs/template/public/main.js @@ -0,0 +1,13 @@ +import WorkflowContainer from "./workflow.js" + +export default { + defaultTheme: 'light', + iconLinks: [{ + icon: 'github', + href: 'https://github.com/bonsai-rx/vimba', + title: 'GitHub' + }], + start: () => { + WorkflowContainer.init(); + } +} diff --git a/docs/toc.yml b/docs/toc.yml new file mode 100644 index 0000000..3daf8b9 --- /dev/null +++ b/docs/toc.yml @@ -0,0 +1,2 @@ +- name: API + href: ../artifacts/docs/api/ diff --git a/docs/workflows/.gitignore b/docs/workflows/.gitignore new file mode 100644 index 0000000..e2beea4 --- /dev/null +++ b/docs/workflows/.gitignore @@ -0,0 +1,2 @@ +*.layout +*.svg diff --git a/global.json b/global.json new file mode 100644 index 0000000..989a69c --- /dev/null +++ b/global.json @@ -0,0 +1,6 @@ +{ + "sdk": { + "version": "8.0.100", + "rollForward": "latestMinor" + } +} \ No newline at end of file diff --git a/src/Bonsai.Vimba/Bonsai.Vimba.csproj b/src/Bonsai.Vimba/Bonsai.Vimba.csproj new file mode 100644 index 0000000..baa038f --- /dev/null +++ b/src/Bonsai.Vimba/Bonsai.Vimba.csproj @@ -0,0 +1,24 @@ + + + + Bonsai - Vimba Library + Bonsai Library containing modules for acquiring images from Allied Vision cameras. Vimba SDK version 5.1.0 is required. + net472 + + + + + + + + + ..\Externals\VimbaNET\x64\VimbaNET.dll + + + + + + + + + \ No newline at end of file diff --git a/Bonsai.Vimba/Bonsai.Vimba.props b/src/Bonsai.Vimba/Bonsai.Vimba.props similarity index 78% rename from Bonsai.Vimba/Bonsai.Vimba.props rename to src/Bonsai.Vimba/Bonsai.Vimba.props index b0bcf1a..0df8ed5 100644 --- a/Bonsai.Vimba/Bonsai.Vimba.props +++ b/src/Bonsai.Vimba/Bonsai.Vimba.props @@ -1,5 +1,4 @@ - - + $(MSBuildThisFileDirectory)..\..\build\net472\bin\x86\VimbaNET.dll diff --git a/Bonsai.Vimba/Bonsai.Vimba.targets b/src/Bonsai.Vimba/Bonsai.Vimba.targets similarity index 90% rename from Bonsai.Vimba/Bonsai.Vimba.targets rename to src/Bonsai.Vimba/Bonsai.Vimba.targets index ee5fdbb..5ce96d1 100644 --- a/Bonsai.Vimba/Bonsai.Vimba.targets +++ b/src/Bonsai.Vimba/Bonsai.Vimba.targets @@ -1,5 +1,4 @@ - - + diff --git a/Bonsai.Vimba/Properties/AssemblyInfo.cs b/src/Bonsai.Vimba/Properties/AssemblyInfo.cs similarity index 100% rename from Bonsai.Vimba/Properties/AssemblyInfo.cs rename to src/Bonsai.Vimba/Properties/AssemblyInfo.cs diff --git a/src/Bonsai.Vimba/Properties/launchSettings.json b/src/Bonsai.Vimba/Properties/launchSettings.json new file mode 100644 index 0000000..4af4f46 --- /dev/null +++ b/src/Bonsai.Vimba/Properties/launchSettings.json @@ -0,0 +1,10 @@ +{ + "profiles": { + "Bonsai": { + "commandName": "Executable", + "executablePath": "$(BonsaiExecutablePath)", + "commandLineArgs": "--lib:\"$(TargetDir).\"", + "nativeDebugging": true + } + } +} \ No newline at end of file diff --git a/Bonsai.Vimba/SerialNumberConverter.cs b/src/Bonsai.Vimba/SerialNumberConverter.cs similarity index 100% rename from Bonsai.Vimba/SerialNumberConverter.cs rename to src/Bonsai.Vimba/SerialNumberConverter.cs diff --git a/Bonsai.Vimba/VimbaApi.cs b/src/Bonsai.Vimba/VimbaApi.cs similarity index 100% rename from Bonsai.Vimba/VimbaApi.cs rename to src/Bonsai.Vimba/VimbaApi.cs diff --git a/Bonsai.Vimba/VimbaCapture.cs b/src/Bonsai.Vimba/VimbaCapture.cs similarity index 100% rename from Bonsai.Vimba/VimbaCapture.cs rename to src/Bonsai.Vimba/VimbaCapture.cs diff --git a/Bonsai.Vimba/VimbaDataFrame.cs b/src/Bonsai.Vimba/VimbaDataFrame.cs similarity index 100% rename from Bonsai.Vimba/VimbaDataFrame.cs rename to src/Bonsai.Vimba/VimbaDataFrame.cs diff --git a/Externals/VimbaNET/x64/README.md b/src/Externals/VimbaNET/x64/README.md similarity index 100% rename from Externals/VimbaNET/x64/README.md rename to src/Externals/VimbaNET/x64/README.md diff --git a/Externals/VimbaNET/x86/README.md b/src/Externals/VimbaNET/x86/README.md similarity index 100% rename from Externals/VimbaNET/x86/README.md rename to src/Externals/VimbaNET/x86/README.md From 889c4c87d75714d212ef92649eec85f7a039c8c1 Mon Sep 17 00:00:00 2001 From: David Maas Date: Fri, 16 May 2025 23:46:51 -0500 Subject: [PATCH 3/4] Bump OpenCV.NET to latest to resolve build issues --- src/Bonsai.Vimba/Bonsai.Vimba.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Bonsai.Vimba/Bonsai.Vimba.csproj b/src/Bonsai.Vimba/Bonsai.Vimba.csproj index baa038f..acbc967 100644 --- a/src/Bonsai.Vimba/Bonsai.Vimba.csproj +++ b/src/Bonsai.Vimba/Bonsai.Vimba.csproj @@ -18,7 +18,7 @@ - + \ No newline at end of file From 7a93bfc55deabaea3ccba028f6294269a0307b3a Mon Sep 17 00:00:00 2001 From: David Maas Date: Sat, 31 May 2025 18:48:01 -0500 Subject: [PATCH 4/4] Re-enable PackageRequireLicenseAcceptance --- build/Package.props | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build/Package.props b/build/Package.props index f722543..a93a601 100644 --- a/build/Package.props +++ b/build/Package.props @@ -5,5 +5,7 @@ Bonsai Foundation Copyright © Bonsai Foundation CIC and Contributors + + true \ No newline at end of file