feat(packaging): desktop shortcut, icon-cache refresh, checksums, AppStream
Windows installer: - Optional Desktop shortcut feature (default on, deselectable) via a switch to the WixUI_FeatureTree UI. - Refresh the shell after install (ie4uinit -show) so .dwg/.dxf icons and associations appear without a reboot. - Tidy the Add/Remove Programs entry: ARPNOREPAIR plus contact/update/comments metadata (Modify stays enabled for the feature tree). Release workflow: - Publish SHA256 sidecars for the AppImage, portable .exe, MSI and .dmg. Linux: - Ship an AppStream metainfo.xml for software-centre integration. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
084dfb1bdb
commit
e7afe35d62
4 changed files with 136 additions and 11 deletions
27
.github/workflows/release.yml
vendored
27
.github/workflows/release.yml
vendored
|
|
@ -34,8 +34,10 @@ jobs:
|
||||||
mkdir -p AppDir/usr/bin
|
mkdir -p AppDir/usr/bin
|
||||||
mkdir -p AppDir/usr/share/applications
|
mkdir -p AppDir/usr/share/applications
|
||||||
mkdir -p AppDir/usr/share/icons/hicolor/256x256/apps
|
mkdir -p AppDir/usr/share/icons/hicolor/256x256/apps
|
||||||
|
mkdir -p AppDir/usr/share/metainfo
|
||||||
cp target/release/OpenCADStudio AppDir/usr/bin/OpenCADStudio
|
cp target/release/OpenCADStudio AppDir/usr/bin/OpenCADStudio
|
||||||
cp packaging/OpenCADStudio.desktop AppDir/usr/share/applications/io.github.HakanSeven12.OpenCadStudio.desktop
|
cp packaging/OpenCADStudio.desktop AppDir/usr/share/applications/io.github.HakanSeven12.OpenCadStudio.desktop
|
||||||
|
cp packaging/io.github.HakanSeven12.OpenCadStudio.metainfo.xml AppDir/usr/share/metainfo/
|
||||||
rsvg-convert -w 256 -h 256 assets/logo.svg \
|
rsvg-convert -w 256 -h 256 assets/logo.svg \
|
||||||
-o AppDir/usr/share/icons/hicolor/256x256/apps/io.github.HakanSeven12.OpenCadStudio.png
|
-o AppDir/usr/share/icons/hicolor/256x256/apps/io.github.HakanSeven12.OpenCadStudio.png
|
||||||
|
|
||||||
|
|
@ -60,8 +62,10 @@ jobs:
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
mv OpenCADStudio.AppImage OpenCADStudio-${{ github.ref_name }}-linux-x86_64.AppImage
|
ASSET=OpenCADStudio-${{ github.ref_name }}-linux-x86_64.AppImage
|
||||||
gh release upload ${{ github.ref_name }} OpenCADStudio-${{ github.ref_name }}-linux-x86_64.AppImage --clobber --repo ${{ github.repository }}
|
mv OpenCADStudio.AppImage "$ASSET"
|
||||||
|
sha256sum "$ASSET" > "$ASSET.sha256"
|
||||||
|
gh release upload ${{ github.ref_name }} "$ASSET" "$ASSET.sha256" --clobber --repo ${{ github.repository }}
|
||||||
|
|
||||||
build-windows:
|
build-windows:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
|
|
@ -179,11 +183,16 @@ jobs:
|
||||||
# .msi (installer with Start Menu shortcut + .dwg / .dxf
|
# .msi (installer with Start Menu shortcut + .dwg / .dxf
|
||||||
# file association). The `-portable` / `-installer` suffix
|
# file association). The `-portable` / `-installer` suffix
|
||||||
# makes the distinction obvious on the release page.
|
# makes the distinction obvious on the release page.
|
||||||
Move-Item target\release\OpenCADStudio.exe "OpenCADStudio-$tag-windows-x86_64-portable.exe"
|
$exe = "OpenCADStudio-$tag-windows-x86_64-portable.exe"
|
||||||
Move-Item OpenCADStudio.msi "OpenCADStudio-$tag-windows-x86_64-installer.msi"
|
$msi = "OpenCADStudio-$tag-windows-x86_64-installer.msi"
|
||||||
|
Move-Item target\release\OpenCADStudio.exe $exe
|
||||||
|
Move-Item OpenCADStudio.msi $msi
|
||||||
|
# SHA256 sidecars so downloads can be verified.
|
||||||
|
(Get-FileHash -Algorithm SHA256 $exe).Hash.ToLower() + " $exe" | Out-File -Encoding ascii "$exe.sha256"
|
||||||
|
(Get-FileHash -Algorithm SHA256 $msi).Hash.ToLower() + " $msi" | Out-File -Encoding ascii "$msi.sha256"
|
||||||
gh release upload $tag `
|
gh release upload $tag `
|
||||||
"OpenCADStudio-$tag-windows-x86_64-portable.exe" `
|
$exe "$exe.sha256" `
|
||||||
"OpenCADStudio-$tag-windows-x86_64-installer.msi" `
|
$msi "$msi.sha256" `
|
||||||
--clobber --repo ${{ github.repository }}
|
--clobber --repo ${{ github.repository }}
|
||||||
|
|
||||||
build-macos:
|
build-macos:
|
||||||
|
|
@ -272,8 +281,10 @@ jobs:
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
mv OpenCADStudio.dmg OpenCADStudio-${{ github.ref_name }}-macos-arm64.dmg
|
ASSET=OpenCADStudio-${{ github.ref_name }}-macos-arm64.dmg
|
||||||
gh release upload ${{ github.ref_name }} OpenCADStudio-${{ github.ref_name }}-macos-arm64.dmg --clobber --repo ${{ github.repository }}
|
mv OpenCADStudio.dmg "$ASSET"
|
||||||
|
shasum -a 256 "$ASSET" > "$ASSET.sha256"
|
||||||
|
gh release upload ${{ github.ref_name }} "$ASSET" "$ASSET.sha256" --clobber --repo ${{ github.repository }}
|
||||||
|
|
||||||
- name: Emit Homebrew cask sha256
|
- name: Emit Homebrew cask sha256
|
||||||
if: github.event_name == 'release'
|
if: github.event_name == 'release'
|
||||||
|
|
|
||||||
50
packaging/io.github.HakanSeven12.OpenCadStudio.metainfo.xml
Normal file
50
packaging/io.github.HakanSeven12.OpenCadStudio.metainfo.xml
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- AppStream metadata: integrates the AppImage with Linux software centres
|
||||||
|
(name, summary, icon, categories, screenshots). Installed into
|
||||||
|
/usr/share/metainfo/ inside the AppDir by the release workflow. -->
|
||||||
|
<component type="desktop-application">
|
||||||
|
<id>io.github.HakanSeven12.OpenCadStudio</id>
|
||||||
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
|
<project_license>GPL-3.0-or-later</project_license>
|
||||||
|
|
||||||
|
<name>Open CAD Studio</name>
|
||||||
|
<summary>2D/3D CAD application for DWG and DXF drawings</summary>
|
||||||
|
|
||||||
|
<description>
|
||||||
|
<p>
|
||||||
|
Open CAD Studio is a 2D/3D CAD application for creating and editing
|
||||||
|
technical drawings. It reads and writes the standard DWG and DXF file
|
||||||
|
formats so drawings stay compatible with other CAD software.
|
||||||
|
</p>
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<launchable type="desktop-id">io.github.HakanSeven12.OpenCadStudio.desktop</launchable>
|
||||||
|
|
||||||
|
<categories>
|
||||||
|
<category>Graphics</category>
|
||||||
|
<category>Engineering</category>
|
||||||
|
</categories>
|
||||||
|
|
||||||
|
<keywords>
|
||||||
|
<keyword>CAD</keyword>
|
||||||
|
<keyword>DWG</keyword>
|
||||||
|
<keyword>DXF</keyword>
|
||||||
|
<keyword>drawing</keyword>
|
||||||
|
<keyword>design</keyword>
|
||||||
|
<keyword>engineering</keyword>
|
||||||
|
</keywords>
|
||||||
|
|
||||||
|
<url type="homepage">https://github.com/HakanSeven12/OpenCADStudio</url>
|
||||||
|
<url type="bugtracker">https://github.com/HakanSeven12/OpenCADStudio/issues</url>
|
||||||
|
|
||||||
|
<developer id="io.github.hakanseven12">
|
||||||
|
<name>Hakan Seven</name>
|
||||||
|
</developer>
|
||||||
|
|
||||||
|
<content_rating type="oars-1.1" />
|
||||||
|
|
||||||
|
<provides>
|
||||||
|
<mediatype>image/vnd.dwg</mediatype>
|
||||||
|
<mediatype>image/vnd.dxf</mediatype>
|
||||||
|
</provides>
|
||||||
|
</component>
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
Provides:
|
Provides:
|
||||||
* Per-machine install under Program Files\Open CAD Studio.
|
* Per-machine install under Program Files\Open CAD Studio.
|
||||||
* Start Menu shortcut under Programs\Open CAD Studio.
|
* Start Menu shortcut under Programs\Open CAD Studio.
|
||||||
|
* Desktop shortcut.
|
||||||
* File associations for .dwg and .dxf via a single ProgID; both
|
* File associations for .dwg and .dxf via a single ProgID; both
|
||||||
route through `OpenCADStudio.exe "%1"` so the OS hands the file
|
route through `OpenCADStudio.exe "%1"` so the OS hands the file
|
||||||
path to the app as argv[1] (consumed in OpenCADStudio::boot).
|
path to the app as argv[1] (consumed in OpenCADStudio::boot).
|
||||||
|
|
@ -51,6 +52,15 @@
|
||||||
<Property Id='ARPPRODUCTICON' Value='AppIcon.ico' />
|
<Property Id='ARPPRODUCTICON' Value='AppIcon.ico' />
|
||||||
<Property Id='ARPHELPLINK' Value='https://github.com/HakanSeven12/OpenCADStudio' />
|
<Property Id='ARPHELPLINK' Value='https://github.com/HakanSeven12/OpenCADStudio' />
|
||||||
<Property Id='ARPURLINFOABOUT' Value='https://github.com/HakanSeven12/OpenCADStudio' />
|
<Property Id='ARPURLINFOABOUT' Value='https://github.com/HakanSeven12/OpenCADStudio' />
|
||||||
|
<Property Id='ARPURLUPDATEINFO' Value='https://github.com/HakanSeven12/OpenCADStudio/releases' />
|
||||||
|
<Property Id='ARPCONTACT' Value='Hakan Seven' />
|
||||||
|
<Property Id='ARPCOMMENTS' Value='2D/3D CAD application for DWG and DXF drawings.' />
|
||||||
|
<!--
|
||||||
|
Hide "Repair" from the Apps & Features entry — there is no repair flow.
|
||||||
|
"Modify" is deliberately left enabled: WixUI_FeatureTree supports it, so
|
||||||
|
users can add/remove the optional Desktop shortcut feature later.
|
||||||
|
-->
|
||||||
|
<Property Id='ARPNOREPAIR' Value='1' />
|
||||||
|
|
||||||
<Directory Id='TARGETDIR' Name='SourceDir'>
|
<Directory Id='TARGETDIR' Name='SourceDir'>
|
||||||
<Directory Id='ProgramFiles64Folder'>
|
<Directory Id='ProgramFiles64Folder'>
|
||||||
|
|
@ -195,14 +205,66 @@
|
||||||
</Component>
|
</Component>
|
||||||
</Directory>
|
</Directory>
|
||||||
</Directory>
|
</Directory>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Desktop shortcut. A non-advertised shortcut with an explicit Target;
|
||||||
|
the HKCU registry value is the component KeyPath (a shortcut on its own
|
||||||
|
cannot be a KeyPath for a per-user resource).
|
||||||
|
-->
|
||||||
|
<Directory Id='DesktopFolder' Name='Desktop'>
|
||||||
|
<Component Id='DesktopShortcutComp' Guid='c5c7f1c4-3d8a-4efd-b049-4662d9143dcd'>
|
||||||
|
<Shortcut
|
||||||
|
Id='DesktopShortcut'
|
||||||
|
Name='Open CAD Studio'
|
||||||
|
Description='Launch Open CAD Studio'
|
||||||
|
Target='[APPLICATIONROOTDIRECTORY]OpenCADStudio.exe'
|
||||||
|
WorkingDirectory='APPLICATIONROOTDIRECTORY'
|
||||||
|
Icon='AppIcon.ico'
|
||||||
|
IconIndex='0' />
|
||||||
|
<RegistryValue
|
||||||
|
Root='HKCU'
|
||||||
|
Key='Software\Open CAD Studio'
|
||||||
|
Name='desktop_shortcut'
|
||||||
|
Type='integer'
|
||||||
|
Value='1'
|
||||||
|
KeyPath='yes' />
|
||||||
|
</Component>
|
||||||
|
</Directory>
|
||||||
</Directory>
|
</Directory>
|
||||||
|
|
||||||
<Feature Id='Complete' Title='Open CAD Studio' Level='1'>
|
<Feature Id='Complete' Title='Open CAD Studio' Level='1' Display='expand'>
|
||||||
<ComponentRef Id='MainExecutable' />
|
<ComponentRef Id='MainExecutable' />
|
||||||
<ComponentRef Id='DefaultPrograms' />
|
<ComponentRef Id='DefaultPrograms' />
|
||||||
<ComponentRef Id='ProgramMenuDirComp' />
|
<ComponentRef Id='ProgramMenuDirComp' />
|
||||||
|
<!-- Optional, user-deselectable in the feature tree (default on). -->
|
||||||
|
<Feature
|
||||||
|
Id='DesktopShortcut'
|
||||||
|
Title='Desktop shortcut'
|
||||||
|
Description='Add a shortcut to Open CAD Studio on the desktop.'
|
||||||
|
Level='1'
|
||||||
|
Absent='allow'>
|
||||||
|
<ComponentRef Id='DesktopShortcutComp' />
|
||||||
|
</Feature>
|
||||||
</Feature>
|
</Feature>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Refresh the shell after install so the new .dwg / .dxf file-type icons
|
||||||
|
and associations appear immediately instead of only after a reboot or an
|
||||||
|
icon-cache rebuild. `ie4uinit -show` rebuilds the per-user icon cache.
|
||||||
|
Immediate execution keeps property access ([SystemFolder]); Return='ignore'
|
||||||
|
means it can never fail the install, and the NOT REMOVE condition skips it
|
||||||
|
on uninstall.
|
||||||
|
-->
|
||||||
|
<CustomAction
|
||||||
|
Id='RefreshShellIcons'
|
||||||
|
Directory='APPLICATIONROOTDIRECTORY'
|
||||||
|
ExeCommand='"[SystemFolder]ie4uinit.exe" -show'
|
||||||
|
Execute='immediate'
|
||||||
|
Return='ignore' />
|
||||||
|
<InstallExecuteSequence>
|
||||||
|
<Custom Action='RefreshShellIcons' After='InstallFinalize'>NOT REMOVE</Custom>
|
||||||
|
</InstallExecuteSequence>
|
||||||
|
|
||||||
<!-- Installer UI + finish-screen launch checkbox (see ui.wxs). -->
|
<!-- Installer UI + finish-screen launch checkbox (see ui.wxs). -->
|
||||||
<UIRef Id='OpenCADStudioUI' />
|
<UIRef Id='OpenCADStudioUI' />
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@
|
||||||
(which needs `-ext WixUIExtension` for the WixUI_Minimal dialog set).
|
(which needs `-ext WixUIExtension` for the WixUI_Minimal dialog set).
|
||||||
|
|
||||||
Provides:
|
Provides:
|
||||||
* WixUI_Minimal wizard (Welcome → Progress → Finish).
|
* WixUI_FeatureTree wizard (Welcome → License → Features → Progress →
|
||||||
|
Finish). The Features page lets the user deselect the optional Desktop
|
||||||
|
shortcut feature (default on).
|
||||||
* A pre-ticked "Launch Open CAD Studio" checkbox on the finish screen
|
* A pre-ticked "Launch Open CAD Studio" checkbox on the finish screen
|
||||||
that starts the freshly installed exe when the user clicks Finish.
|
that starts the freshly installed exe when the user clicks Finish.
|
||||||
-->
|
-->
|
||||||
|
|
@ -41,7 +43,7 @@
|
||||||
Impersonate='yes' />
|
Impersonate='yes' />
|
||||||
|
|
||||||
<UI Id='OpenCADStudioUI'>
|
<UI Id='OpenCADStudioUI'>
|
||||||
<UIRef Id='WixUI_Minimal' />
|
<UIRef Id='WixUI_FeatureTree' />
|
||||||
<Publish
|
<Publish
|
||||||
Dialog='ExitDialog'
|
Dialog='ExitDialog'
|
||||||
Control='Finish'
|
Control='Finish'
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue