diff --git a/.github/workflows/Develop.yml b/.github/workflows/Develop.yml
new file mode 100644
index 0000000..8a82db6
--- /dev/null
+++ b/.github/workflows/Develop.yml
@@ -0,0 +1,52 @@
+# ------------------------------------------------------------------------------
+#
+#
+# This code was generated.
+#
+# - To turn off auto-generation set:
+#
+# [GitHubActions (AutoGenerate = false)]
+#
+# - To trigger manual generation invoke:
+#
+# nuke --generate-configuration GitHubActions_Develop --host GitHubActions
+#
+#
+# ------------------------------------------------------------------------------
+
+name: Develop
+
+on:
+ push:
+ branches-ignore:
+ - master
+ pull_request:
+ branches-ignore:
+ - master
+ workflow_dispatch:
+
+jobs:
+ Develop:
+ name: Develop
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v1
+
+ - name: NuGet Setup
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: 5.0.x
+ - name: "NuGet Add Source Organization"
+ run: if ("${{ secrets.ORGANIZATION_SOURCE_PACKAGE_PASSWORD }}" -ne "") { dotnet nuget add source --username ${{ secrets.ORGANIZATION_SOURCE_PACKAGE_USERNAME }} --password ${{ secrets.ORGANIZATION_SOURCE_PACKAGE_PASSWORD }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/${{github.repository_owner}}/index.json" }
+
+ - name: Cache .nuke/temp, ~/.nuget/packages
+ uses: actions/cache@v2
+ with:
+ path: |
+ .nuke/temp
+ ~/.nuget/packages
+ key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }}
+ - name: Run './build/build.cmd'
+ run: ./build/build.cmd --root ./build
+ env:
+ GitHubToken: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
diff --git a/.github/workflows/Publish.yml b/.github/workflows/Publish.yml
new file mode 100644
index 0000000..e3c9623
--- /dev/null
+++ b/.github/workflows/Publish.yml
@@ -0,0 +1,55 @@
+# ------------------------------------------------------------------------------
+#
+#
+# This code was generated.
+#
+# - To turn off auto-generation set:
+#
+# [GitHubActions (AutoGenerate = false)]
+#
+# - To trigger manual generation invoke:
+#
+# nuke --generate-configuration GitHubActions_Publish --host GitHubActions
+#
+#
+# ------------------------------------------------------------------------------
+
+name: Publish
+
+on:
+ push:
+ branches:
+ - master
+ workflow_dispatch:
+
+jobs:
+ Publish:
+ name: Publish
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v1
+
+ - name: NuGet Setup
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: 5.0.x
+ - name: "NuGet Add Source Organization"
+ run: if ("${{ secrets.ORGANIZATION_SOURCE_PACKAGE_PASSWORD }}" -ne "") { dotnet nuget add source --username ${{ secrets.ORGANIZATION_SOURCE_PACKAGE_USERNAME }} --password ${{ secrets.ORGANIZATION_SOURCE_PACKAGE_PASSWORD }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/${{github.repository_owner}}/index.json" }
+
+ - name: Cache .nuke/temp, ~/.nuget/packages
+ uses: actions/cache@v2
+ with:
+ path: |
+ .nuke/temp
+ ~/.nuget/packages
+ key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }}
+ - name: Run './build/build.cmd'
+ run: ./build/build.cmd --root ./build
+ env:
+ GitHubToken: ${{ secrets.GITHUB_TOKEN }}
+
+ NugetApiUrl: "https://nuget.pkg.github.com/${{github.repository_owner}}/index.json"
+ NugetApiKey: ${{ secrets.GITHUB_TOKEN }}
+
+ SignFile: ${{ secrets.SIGN_FILE }}
+ SignPassword: ${{ secrets.SIGN_PASSWORD }}
\ No newline at end of file
diff --git a/Build/.editorconfig b/Build/.editorconfig
new file mode 100644
index 0000000..31e43dc
--- /dev/null
+++ b/Build/.editorconfig
@@ -0,0 +1,11 @@
+[*.cs]
+dotnet_style_qualification_for_field = false:warning
+dotnet_style_qualification_for_property = false:warning
+dotnet_style_qualification_for_method = false:warning
+dotnet_style_qualification_for_event = false:warning
+dotnet_style_require_accessibility_modifiers = never:warning
+
+csharp_style_expression_bodied_methods = true:silent
+csharp_style_expression_bodied_properties = true:warning
+csharp_style_expression_bodied_indexers = true:warning
+csharp_style_expression_bodied_accessors = true:warning
diff --git a/Build/.nuke/build.schema.json b/Build/.nuke/build.schema.json
new file mode 100644
index 0000000..e1b37e8
--- /dev/null
+++ b/Build/.nuke/build.schema.json
@@ -0,0 +1,109 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "title": "Build Schema",
+ "$ref": "#/definitions/build",
+ "definitions": {
+ "build": {
+ "type": "object",
+ "properties": {
+ "Continue": {
+ "type": "boolean",
+ "description": "Indicates to continue a previously failed build attempt"
+ },
+ "Help": {
+ "type": "boolean",
+ "description": "Shows the help text for this build assembly"
+ },
+ "Host": {
+ "type": "string",
+ "description": "Host for execution. Default is 'automatic'",
+ "enum": [
+ "AppVeyor",
+ "AzurePipelines",
+ "Bamboo",
+ "Bitrise",
+ "GitHubActions",
+ "GitLab",
+ "Jenkins",
+ "Rider",
+ "SpaceAutomation",
+ "TeamCity",
+ "Terminal",
+ "TravisCI",
+ "VisualStudio",
+ "VSCode"
+ ]
+ },
+ "NoLogo": {
+ "type": "boolean",
+ "description": "Disables displaying the NUKE logo"
+ },
+ "Partition": {
+ "type": "string",
+ "description": "Partition to use on CI"
+ },
+ "Plan": {
+ "type": "boolean",
+ "description": "Shows the execution plan (HTML)"
+ },
+ "Profile": {
+ "type": "array",
+ "description": "Defines the profiles to load",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Root": {
+ "type": "string",
+ "description": "Root directory during build execution"
+ },
+ "Skip": {
+ "type": "array",
+ "description": "List of targets to be skipped. Empty list skips all dependencies",
+ "items": {
+ "type": "string",
+ "enum": [
+ "Build",
+ "Clean",
+ "Compile",
+ "GitRelease",
+ "Pack",
+ "Release",
+ "Sign"
+ ]
+ }
+ },
+ "Solution": {
+ "type": "string",
+ "description": "Path to a solution file that is automatically loaded"
+ },
+ "Target": {
+ "type": "array",
+ "description": "List of targets to be invoked. Default is '{default_target}'",
+ "items": {
+ "type": "string",
+ "enum": [
+ "Build",
+ "Clean",
+ "Compile",
+ "GitRelease",
+ "Pack",
+ "Release",
+ "Sign"
+ ]
+ }
+ },
+ "Verbosity": {
+ "type": "string",
+ "description": "Logging verbosity during build execution. Default is 'Normal'",
+ "enum": [
+ "Minimal",
+ "Normal",
+ "Quiet",
+ "Verbose"
+ ]
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Build/.nuke/parameters.json b/Build/.nuke/parameters.json
new file mode 100644
index 0000000..0e803b0
--- /dev/null
+++ b/Build/.nuke/parameters.json
@@ -0,0 +1,4 @@
+{
+ "$schema": "./build.schema.json",
+ "Solution": "../ricaun.Revit.UI.sln"
+}
\ No newline at end of file
diff --git a/Build/Build.cs b/Build/Build.cs
new file mode 100644
index 0000000..7429200
--- /dev/null
+++ b/Build/Build.cs
@@ -0,0 +1,20 @@
+using Nuke.Common;
+using Nuke.Common.Execution;
+using ricaun.Nuke;
+using ricaun.Nuke.Components;
+
+[CheckBuildProjectConfigurations]
+class Build : NukeBuild, IPublishPack
+{
+ string IHazContent.Folder => "Release";
+ string IHazRelease.Folder => "ReleasePack";
+ public static int Main() => Execute(x => x.From().Build);
+}
+
+/*
+[CheckBuildProjectConfigurations]
+class Build : NukeBuild, IPublish
+{
+ public static int Main() => Execute(x => x.From().Build);
+}
+*/
\ No newline at end of file
diff --git a/Build/Build.csproj b/Build/Build.csproj
new file mode 100644
index 0000000..25630a4
--- /dev/null
+++ b/Build/Build.csproj
@@ -0,0 +1,25 @@
+
+
+ Exe
+ net5.0
+
+ CS0649;CS0169
+ .
+ .
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Build/build.cmd b/Build/build.cmd
new file mode 100644
index 0000000..b08cc59
--- /dev/null
+++ b/Build/build.cmd
@@ -0,0 +1,7 @@
+:; set -eo pipefail
+:; SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
+:; ${SCRIPT_DIR}/build.sh "$@"
+:; exit $?
+
+@ECHO OFF
+powershell -ExecutionPolicy ByPass -NoProfile -File "%~dp0build.ps1" %*
diff --git a/Build/build.ps1 b/Build/build.ps1
new file mode 100644
index 0000000..9583582
--- /dev/null
+++ b/Build/build.ps1
@@ -0,0 +1,69 @@
+[CmdletBinding()]
+Param(
+ [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
+ [string[]]$BuildArguments
+)
+
+Write-Output "PowerShell $($PSVersionTable.PSEdition) version $($PSVersionTable.PSVersion)"
+
+Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { Write-Error $_ -ErrorAction Continue; exit 1 }
+$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
+
+###########################################################################
+# CONFIGURATION
+###########################################################################
+
+$BuildProjectFile = "$PSScriptRoot\Build.csproj"
+$TempDirectory = "$PSScriptRoot\\.nuke\temp"
+
+$DotNetGlobalFile = "$PSScriptRoot\\global.json"
+$DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1"
+$DotNetChannel = "Current"
+
+$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = 1
+$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
+$env:DOTNET_MULTILEVEL_LOOKUP = 0
+
+###########################################################################
+# EXECUTION
+###########################################################################
+
+function ExecSafe([scriptblock] $cmd) {
+ & $cmd
+ if ($LASTEXITCODE) { exit $LASTEXITCODE }
+}
+
+# If dotnet CLI is installed globally and it matches requested version, use for execution
+if ($null -ne (Get-Command "dotnet" -ErrorAction SilentlyContinue) -and `
+ $(dotnet --version) -and $LASTEXITCODE -eq 0) {
+ $env:DOTNET_EXE = (Get-Command "dotnet").Path
+}
+else {
+ # Download install script
+ $DotNetInstallFile = "$TempDirectory\dotnet-install.ps1"
+ New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+ (New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile)
+
+ # If global.json exists, load expected version
+ if (Test-Path $DotNetGlobalFile) {
+ $DotNetGlobal = $(Get-Content $DotNetGlobalFile | Out-String | ConvertFrom-Json)
+ if ($DotNetGlobal.PSObject.Properties["sdk"] -and $DotNetGlobal.sdk.PSObject.Properties["version"]) {
+ $DotNetVersion = $DotNetGlobal.sdk.version
+ }
+ }
+
+ # Install by channel or version
+ $DotNetDirectory = "$TempDirectory\dotnet-win"
+ if (!(Test-Path variable:DotNetVersion)) {
+ ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath }
+ } else {
+ ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath }
+ }
+ $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe"
+}
+
+Write-Output "Microsoft (R) .NET Core SDK version $(& $env:DOTNET_EXE --version)"
+
+ExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet }
+ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments }
diff --git a/Build/build.sh b/Build/build.sh
new file mode 100644
index 0000000..c6d1be3
--- /dev/null
+++ b/Build/build.sh
@@ -0,0 +1,62 @@
+#!/usr/bin/env bash
+
+bash --version 2>&1 | head -n 1
+
+set -eo pipefail
+SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
+
+###########################################################################
+# CONFIGURATION
+###########################################################################
+
+BUILD_PROJECT_FILE="$SCRIPT_DIR/Build.csproj"
+TEMP_DIRECTORY="$SCRIPT_DIR//.nuke/temp"
+
+DOTNET_GLOBAL_FILE="$SCRIPT_DIR//global.json"
+DOTNET_INSTALL_URL="https://dot.net/v1/dotnet-install.sh"
+DOTNET_CHANNEL="Current"
+
+export DOTNET_CLI_TELEMETRY_OPTOUT=1
+export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
+export DOTNET_MULTILEVEL_LOOKUP=0
+
+###########################################################################
+# EXECUTION
+###########################################################################
+
+function FirstJsonValue {
+ perl -nle 'print $1 if m{"'"$1"'": "([^"]+)",?}' <<< "${@:2}"
+}
+
+# If dotnet CLI is installed globally and it matches requested version, use for execution
+if [ -x "$(command -v dotnet)" ] && dotnet --version &>/dev/null; then
+ export DOTNET_EXE="$(command -v dotnet)"
+else
+ # Download install script
+ DOTNET_INSTALL_FILE="$TEMP_DIRECTORY/dotnet-install.sh"
+ mkdir -p "$TEMP_DIRECTORY"
+ curl -Lsfo "$DOTNET_INSTALL_FILE" "$DOTNET_INSTALL_URL"
+ chmod +x "$DOTNET_INSTALL_FILE"
+
+ # If global.json exists, load expected version
+ if [[ -f "$DOTNET_GLOBAL_FILE" ]]; then
+ DOTNET_VERSION=$(FirstJsonValue "version" "$(cat "$DOTNET_GLOBAL_FILE")")
+ if [[ "$DOTNET_VERSION" == "" ]]; then
+ unset DOTNET_VERSION
+ fi
+ fi
+
+ # Install by channel or version
+ DOTNET_DIRECTORY="$TEMP_DIRECTORY/dotnet-unix"
+ if [[ -z ${DOTNET_VERSION+x} ]]; then
+ "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --channel "$DOTNET_CHANNEL" --no-path
+ else
+ "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --version "$DOTNET_VERSION" --no-path
+ fi
+ export DOTNET_EXE="$DOTNET_DIRECTORY/dotnet"
+fi
+
+echo "Microsoft (R) .NET Core SDK version $("$DOTNET_EXE" --version)"
+
+"$DOTNET_EXE" build "$BUILD_PROJECT_FILE" /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet
+"$DOTNET_EXE" run --project "$BUILD_PROJECT_FILE" --no-build -- "$@"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 63a868c..0bd1dd9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,10 +4,16 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
-## [vNext]
-
-## [1.0.0] / YYYY-MM-DD
+## [0.0.1] / 2021-12-11
+- Add README / LICENSE
+- Add Build Project
+- Add LanguageExtension
+- Add RibbonPanelExtension
+- Add Scale on BitmapExtension
+- Add Base64 on BitmapExtension
+- Add BitmapExtension
+- Add AutodeskExtension
- First Release
[vNext]: https://github.com/ricaun-io/ricaun.Revit.UI/compare/1.0.0...HEAD
-[1.0.0]: https://github.com/ricaun-io/ricaun.Revit.UI/compare/1.0.0
\ No newline at end of file
+[0.0.1]: https://github.com/ricaun-io/ricaun.Revit.UI/compare/0.0.1
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..ccb95d1
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 ricaun
+
+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.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+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.
\ No newline at end of file
diff --git a/ricaun.Revit.UI.sln b/ricaun.Revit.UI.sln
index 1e05a64..beb9a44 100644
--- a/ricaun.Revit.UI.sln
+++ b/ricaun.Revit.UI.sln
@@ -7,10 +7,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ricaun.Revit.UI", "ricaun.R
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Project", "Project", "{A81D2950-B5CB-4CDB-B7FE-9132C730C8CC}"
ProjectSection(SolutionItems) = preProject
- ricaun.Revit.UI\CHANGELOG.md = ricaun.Revit.UI\CHANGELOG.md
- ricaun.Revit.UI\README.md = ricaun.Revit.UI\README.md
+ CHANGELOG.md = CHANGELOG.md
+ README.md = README.md
EndProjectSection
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Build", "Build\Build.csproj", "{DBD6BDAC-EC17-4B9F-B3CD-9E58CD582F61}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -21,6 +23,10 @@ Global
{2064BA4D-5527-41E9-8B76-0CBFEFA35900}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2064BA4D-5527-41E9-8B76-0CBFEFA35900}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2064BA4D-5527-41E9-8B76-0CBFEFA35900}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DBD6BDAC-EC17-4B9F-B3CD-9E58CD582F61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DBD6BDAC-EC17-4B9F-B3CD-9E58CD582F61}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DBD6BDAC-EC17-4B9F-B3CD-9E58CD582F61}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DBD6BDAC-EC17-4B9F-B3CD-9E58CD582F61}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/ricaun.Revit.UI/ricaun.Revit.UI.csproj b/ricaun.Revit.UI/ricaun.Revit.UI.csproj
index 1fd13da..197915d 100644
--- a/ricaun.Revit.UI/ricaun.Revit.UI.csproj
+++ b/ricaun.Revit.UI/ricaun.Revit.UI.csproj
@@ -115,6 +115,22 @@
$(OutputPath)\$(AssemblyName).xml
+
+
+ True
+
+ false
+
+
+
+
+
+ True
+
+ false
+
+
+
True