diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..604639e --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,118 @@ +--- +name: Make Release + +on: + push: + tags: + - 'v*.*.*' + +jobs: + linux-artefact: + runs-on: ${{ matrix.os }} + strategy: + matrix: + dotnet_version: ['6.0.x'] + os: + - ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-dotnet@v1 + - run: cd src && dotnet build --configuration Release + - name: Create artifact linux + run: | + dotnet tool install --global dotnet-rpm + dotnet tool install --global dotnet-deb + dotnet tool install --global dotnet-tarball + echo "building packeges" + dotnet restore src/LacmusApp.sln + mkdir -p bin/linux + cd src/LacmusApp.Avalonia + dotnet rpm install + dotnet deb install + dotnet tarball install + dotnet rpm --framework net6.0 -c Release --runtime="linux-x64" -o ../../bin/linux LacmusApp.Avalonia.csproj + dotnet deb --framework net6.0 -c Release --runtime="linux-x64" -o ../../bin/linux LacmusApp.Avalonia.csproj + dotnet tarball --framework net6.0 -c Release --runtime="linux-x64" -o ../../bin/linux LacmusApp.Avalonia.csproj + shell: bash + - uses: actions/upload-artifact@v3 + with: + name: artifact-linux-deb + path: | + ./bin/linux/*.deb + - uses: actions/upload-artifact@v3 + with: + name: artifact-linux-rpm + path: | + ./bin/linux/*.rpm + - uses: actions/upload-artifact@v3 + with: + name: artifact-linux-tar + path: | + ./bin/linux/*.tar.gz + windows-artefact: + runs-on: ${{ matrix.os }} + strategy: + matrix: + dotnet_version: ['6.0.x'] + os: + - windows-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-dotnet@v1 + - name: Create artifact windows + run: | + dotnet tool install --global dotnet-zip + echo "building packeges" + dotnet restore src/LacmusApp.sln + mkdir -p bin/windows + mkdir -p bin/windows/app + mkdir -p bin/windows/installer + cd src/LacmusApp.Avalonia + dotnet zip install + dotnet zip --framework net6.0 -c Release --runtime="win-x64" -o ../../bin/windows LacmusApp.Avalonia.csproj + dotnet publish --framework net6.0 -c Release --runtime="win-x64" -o ../../bin/windows/app LacmusApp.Avalonia.csproj + cd ../../ + curl -L --output bin/windows/installer/temp.zip https://github.com/lacmus-foundation/inno-setup-gihtub-action/releases/download/v.1.0.0/innoSetupCli.zip + unzip bin/windows/installer/temp.zip -d bin/windows/installer + ./bin/windows/installer/ISCC.exe packages/windows/script.iss + shell: bash + - uses: actions/upload-artifact@v3 + with: + name: artifact-windows-zip + path: | + ./bin/windows/*.zip + - uses: actions/upload-artifact@v3 + with: + name: artifact-windows-setup + path: | + ./bin/windows/lacmusSetup.exe + osx-artefact: + runs-on: ${{ matrix.os }} + strategy: + matrix: + dotnet_version: ['6.0.x'] + os: + - osx-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-dotnet@v1 + - name: Create artifact osx + run: | + bash packages/osx/build-osx.sh + dotnet tool install --global dotnet-tarball + echo "building packeges" + dotnet restore src/LacmusApp.sln + cd src/LacmusApp.Avalonia + dotnet tarball install + dotnet tarball --framework net6.0 -c Release --runtime="osx-x64" -o ../../bin/osx LacmusApp.Avalonia.csproj + shell: bash + - uses: actions/upload-artifact@v3 + with: + name: artifact-osx-tar + path: | + ./bin/osx/*.tar.gz + - uses: actions/upload-artifact@v3 + with: + name: artifact-osx-app + path: | + ./bin/osx/*.zip diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..d761386 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,9 @@ + + + + + 0.1.220-* + all + + + \ No newline at end of file diff --git a/packages/linux/copyright b/packages/linux/copyright new file mode 100755 index 0000000..dd683bf --- /dev/null +++ b/packages/linux/copyright @@ -0,0 +1,28 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Lacmus Application +Upstream-Contact: Lacmus Foundation +Source: https://github.com/lacmus-foundation + +Files: * +Copyright: Copyright 2020 Lacmus Foundation +License: GPL-3 + +License: GPL-3 + Indicator Weather is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public + License version 3 as published by the Free Software Foundation. + . + Indicator Weather is distributed in the hope that it will be + useful, but WITHOUT ANY WARRANTY; without even the implied + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the GNU General Public License for more + details. http://www.gnu.org/licenses/ + . + You should have received a copy of the GNU General Public + License along with this package; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301 USA + . + On Debian systems, the full text of the GNU General Public + License version 3 can be found in the file + `/usr/share/common-licenses/GPL-3'. diff --git a/packages/linux/lacmus.desktop b/packages/linux/lacmus.desktop new file mode 100755 index 0000000..21e8939 --- /dev/null +++ b/packages/linux/lacmus.desktop @@ -0,0 +1,15 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Lacmus +StartupWMClass=Lacmus +Comment=Lacmus Desktop Application +GenericName=Program for searching and saving people +Name[ru]=Lacmus +GenericName[ru]=Приложение Lacmus +Comment[ru]=Программа для поиска и спасения людей +Exec=/usr/share/LacmusApp.Avalonia/LacmusApp.Avalonia +Icon=/usr/share/pixmaps/lacmus.png +Terminal=true +Type=Application +Categories=ImageProcessing;Photography;Utility; +MimeType=image/jpeg;image/png;image/xml;image/bmp;text/xml; \ No newline at end of file diff --git a/packages/linux/lacmus.png b/packages/linux/lacmus.png new file mode 100755 index 0000000..6200472 Binary files /dev/null and b/packages/linux/lacmus.png differ diff --git a/packages/osx/LacmusApp.entitlements b/packages/osx/LacmusApp.entitlements new file mode 100644 index 0000000..4eb3220 --- /dev/null +++ b/packages/osx/LacmusApp.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.cs.allow-jit + com.apple.security.cs.allow-unsigned-executable-memory + com.apple.security.cs.allow-dyld-environment-variables + com.apple.security.cs.disable-library-validation + com.apple.security.automation.apple-events + com.apple.security.get-task-allow + + \ No newline at end of file diff --git a/packages/osx/LacmusApp.icns b/packages/osx/LacmusApp.icns new file mode 100755 index 0000000..0f817ed Binary files /dev/null and b/packages/osx/LacmusApp.icns differ diff --git a/packages/osx/build-osx.sh b/packages/osx/build-osx.sh new file mode 100644 index 0000000..23098aa --- /dev/null +++ b/packages/osx/build-osx.sh @@ -0,0 +1,86 @@ +APP_NAME="LacmusApp.Avalonia" +RID_LIST=("osx-x64") +PUB_PLATFORM_LIST=("osx-x64") +CONFIG="Release" +CERT_NAME="" # Name of certification to sign the application + +echo "********** Start building $APP_NAME **********" + +# Get application version +VERSION="0.7.0" +if [ "$?" != "0" ]; then + echo "Unable to get version of $APP_NAME" + exit +fi +echo "Version: $VERSION" + +# Create output directory +mkdir -p bin/osx +cd src + +# Build packages +for i in "${!RID_LIST[@]}"; do + RID=${RID_LIST[$i]} + PUB_PLATFORM=${PUB_PLATFORM_LIST[$i]} + + echo " " + echo "[$PUB_PLATFORM ($RID)]" + echo " " + + # clean + rm -rf ./LacmusApp.Avalonia/bin/ + dotnet clean + dotnet restore + if [ "$?" != "0" ]; then + exit + fi + + # build + dotnet msbuild LacmusApp.Avalonia -t:BundleApp -property:Configuration=$CONFIG -p:SelfContained=true -p:PublishSingleFile=false -p:PublishTrimmed=true -p:RuntimeIdentifier=$RID + if [ "$?" != "0" ]; then + exit + fi + + # create output directory + if [[ -d "../bin/osx/$PUB_PLATFORM" ]]; then + rm -r "../bin/osx/$PUB_PLATFORM" + fi + echo "Create directory '../bin/osx/$PUB_PLATFORM'" + mkdir "../bin/osx/$PUB_PLATFORM" + if [ "$?" != "0" ]; then + exit + fi + + # copy .app directory to output directoty + echo "Creating app bundle..." + mv ./LacmusApp.Avalonia/bin/$CONFIG/net6.0/$RID/publish/Lacmus.app ../bin/osx/$PUB_PLATFORM/Lacmus.app + if [ "$?" != "0" ]; then + exit + fi + + # copy application icon and remove unnecessary files + cp ../packages/osx/LacmusApp.icns ../bin/osx/$PUB_PLATFORM/Lacmus.app/Contents/Resources/LacmusApp.icns + if [ "$?" != "0" ]; then + exit + fi + + # sign application + #find "../bin/osx/$PUB_PLATFORM/Lacmus.app/Contents/MacOS/" | while read FILE_NAME; do + # if [[ -f $FILE_NAME ]]; then + # if [[ "$FILE_NAME" != "../bin/osx/$PUB_PLATFORM/Lacmus.app/Contents/MacOS//$APP_NAME" ]]; then + # echo "Signing $FILE_NAME" + # codesign -f -o runtime --timestamp --entitlements "../packages/osx/LacmusApp.entitlements" -s "$CERT_NAME" "$FILE_NAME" + # if [ "$?" != "0" ]; then + # exit + # fi + # fi + # fi + #done + #codesign -f -o runtime --timestamp --entitlements "../packages/osx/LacmusApp.entitlements" -s "$CERT_NAME" "../bin/osx/$PUB_PLATFORM/Lacmus.app/Contents/MacOS/$APP_NAME" + #codesign -f -o runtime --timestamp --entitlements "../packages/osx/LacmusApp.entitlements" -s "$CERT_NAME" "../bin/osx/$PUB_PLATFORM/Lacmus.app" + # + # zip .app directory + ditto -c -k --sequesterRsrc --keepParent "../bin/osx/$PUB_PLATFORM/Lacmus.app" "../bin/osx/LacmusApp.Avalonia-$VERSION-$PUB_PLATFORM.zip" + rm -rf "../bin/osx/$PUB_PLATFORM/Lacmus.app" + +done diff --git a/packages/windows/script.iss b/packages/windows/script.iss new file mode 100644 index 0000000..d5e1ed1 --- /dev/null +++ b/packages/windows/script.iss @@ -0,0 +1,49 @@ +#define MyAppName "Lacmus Application" +#define MyAppVersion "0.7.0" +#define MyAppPublisher "Lacmus Foundation" +#define MyAppURL "https://lacmus.ml/" +#define MyAppExeName "LacmusApp.Avalonia.exe" + +[Setup] +; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications. +; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) +AppId={{D11C6204-2C3F-4FA0-ABE6-DC08D507CF2B} +AppName={#MyAppName} +AppVersion={#MyAppVersion} +AppVerName={#MyAppName} {#MyAppVersion} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL} +AppUpdatesURL={#MyAppURL} +DefaultDirName={autopf}\Lacmus +DisableDirPage=yes +DisableProgramGroupPage=yes +LicenseFile=..\..\LICENSE +; Uncomment the following line to run in non administrative install mode (install for current user only.) +;PrivilegesRequired=lowest +OutputDir=..\..\bin\windows +OutputBaseFilename=lacmusSetup +Compression=lzma +SolidCompression=yes +WizardStyle=modern +ArchitecturesAllowed=x64 +ArchitecturesInstallIn64BitMode=x64 + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" +Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked + +[Files] +Source: "..\..\bin\windows\app\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion +Source: "..\..\bin\windows\app\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +; NOTE: Don't use "Flags: ignoreversion" on any shared system files + +[Icons] +Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" +Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon + +[Run] +Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent diff --git a/src/LacmusApp.Avalonia/LacmusApp.Avalonia.csproj b/src/LacmusApp.Avalonia/LacmusApp.Avalonia.csproj index 991ffb5..2491204 100755 --- a/src/LacmusApp.Avalonia/LacmusApp.Avalonia.csproj +++ b/src/LacmusApp.Avalonia/LacmusApp.Avalonia.csproj @@ -2,9 +2,33 @@ Exe net6.0 + linux-x64;win-x64;osx-x64 Lacmus Foundation - 0.6.0 - 0.6.0 + 0.7.0 + 0.7.0 + 0.7.0 + gosha20777 + Copyright (c) Lacmus Foundation 2022 + Lacmus help to find lost people in Search and Rescue operations. Lacmus is a cross-platform application which use computer vision and neural networks and written with C#, .NET Core, ReactiveUI and Avalonia. + LacmusApp.Avalonia + Lacmus Application + https://lacmus.ml/ + https://github.com/lacmus-foundation/lacmus-app/blob/master/LICENSE + https://github.com/lacmus-foundation/lacmus-app + git + lacmus + + + Lacmus + Lacmus + com.example + 0.7.0 + 0.7.0 + APPL + LacmusApp.Avalonia + ..\..\packages\osx\LacmusApp.icns + NSApplication + true @@ -31,6 +55,7 @@ + @@ -58,4 +83,15 @@ + + + /usr/share/applications/lacmus.desktop + + + /usr/share/pixmaps/lacmus.png + + + /usr/share/doc/lacmus/copyright + + diff --git a/src/LacmusApp.Avalonia/Views/LogWindow.axaml b/src/LacmusApp.Avalonia/Views/LogWindow.axaml index 3add6c3..4253010 100644 --- a/src/LacmusApp.Avalonia/Views/LogWindow.axaml +++ b/src/LacmusApp.Avalonia/Views/LogWindow.axaml @@ -12,11 +12,30 @@ Width="700" Height="450"> + + + + + + + diff --git a/src/LacmusApp.Avalonia/Views/MainWindow.xaml b/src/LacmusApp.Avalonia/Views/MainWindow.xaml index 5ff2ba0..c8dea92 100755 --- a/src/LacmusApp.Avalonia/Views/MainWindow.xaml +++ b/src/LacmusApp.Avalonia/Views/MainWindow.xaml @@ -48,7 +48,7 @@ - + @@ -97,7 +97,7 @@ - +