Skip to content

Commit 7d3516e

Browse files
committed
Improve release packaging and install guidance
1 parent cb8c715 commit 7d3516e

2 files changed

Lines changed: 141 additions & 31 deletions

File tree

.github/workflows/release.yml

Lines changed: 116 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ concurrency:
1313
cancel-in-progress: false
1414

1515
jobs:
16-
release:
16+
verify:
1717
runs-on: ubuntu-latest
1818

1919
steps:
@@ -47,29 +47,124 @@ jobs:
4747
- name: Run tests
4848
run: dotnet test Tests/Tests.csproj -c Release --no-build
4949

50-
- name: Publish release output
51-
run: dotnet publish DecompilerServer.csproj -c Release -o out/publish --no-build
50+
create-release:
51+
needs: verify
52+
runs-on: ubuntu-latest
5253

53-
- name: Package release artifacts
54-
shell: bash
54+
steps:
55+
- name: Check out source
56+
uses: actions/checkout@v4
57+
58+
- name: Ensure GitHub release exists
59+
env:
60+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5561
run: |
56-
asset_base="DecompilerServer-${GITHUB_REF_NAME}"
57-
tarball="${asset_base}.tar.gz"
58-
zipfile="${asset_base}.zip"
62+
gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1 || \
63+
gh release create "$GITHUB_REF_NAME" \
64+
--verify-tag \
65+
--title "$GITHUB_REF_NAME" \
66+
--generate-notes
67+
68+
publish-assets:
69+
needs:
70+
- verify
71+
- create-release
72+
runs-on: ubuntu-latest
5973

60-
tar -C out -czf "$tarball" publish
61-
(cd out && zip -qr "../$zipfile" publish)
74+
strategy:
75+
fail-fast: false
76+
matrix:
77+
include:
78+
- rid: osx-arm64
79+
executable: DecompilerServer
80+
archive_ext: tar.gz
81+
- rid: osx-x64
82+
executable: DecompilerServer
83+
archive_ext: tar.gz
84+
- rid: linux-x64
85+
executable: DecompilerServer
86+
archive_ext: tar.gz
87+
- rid: linux-arm64
88+
executable: DecompilerServer
89+
archive_ext: tar.gz
90+
- rid: win-x64
91+
executable: DecompilerServer.exe
92+
archive_ext: zip
6293

63-
sha256sum "$tarball" > "${tarball}.sha256"
64-
sha256sum "$zipfile" > "${zipfile}.sha256"
94+
steps:
95+
- name: Check out source
96+
uses: actions/checkout@v4
6597

66-
- name: Create GitHub release
67-
uses: softprops/action-gh-release@v2
98+
- name: Set up .NET 10
99+
uses: actions/setup-dotnet@v4
68100
with:
69-
files: |
70-
DecompilerServer-${{ github.ref_name }}.tar.gz
71-
DecompilerServer-${{ github.ref_name }}.tar.gz.sha256
72-
DecompilerServer-${{ github.ref_name }}.zip
73-
DecompilerServer-${{ github.ref_name }}.zip.sha256
74-
generate_release_notes: true
75-
fail_on_unmatched_files: true
101+
dotnet-version: "10.0.x"
102+
103+
- name: Publish single-file bundle
104+
run: >
105+
dotnet publish DecompilerServer.csproj
106+
-c Release
107+
-r ${{ matrix.rid }}
108+
--self-contained false
109+
-p:PublishSingleFile=true
110+
-p:DebugSymbols=false
111+
-p:DebugType=None
112+
-o out/publish/${{ matrix.rid }}
113+
114+
- name: Stage release payload
115+
shell: bash
116+
env:
117+
ARCHIVE_EXT: ${{ matrix.archive_ext }}
118+
EXECUTABLE: ${{ matrix.executable }}
119+
RID: ${{ matrix.rid }}
120+
RELEASE_TAG: ${{ github.ref_name }}
121+
run: |
122+
set -euo pipefail
123+
124+
asset_base="decompilerserver-${RELEASE_TAG}-${RID}"
125+
publish_dir="out/publish/${RID}"
126+
stage_dir="dist/${asset_base}"
127+
128+
mkdir -p "$stage_dir"
129+
cp "$publish_dir/${EXECUTABLE}" "$stage_dir/"
130+
cp README.md LICENSE "$stage_dir/"
131+
132+
cat > "$stage_dir/INSTALL.txt" <<EOF
133+
DecompilerServer ${RELEASE_TAG}
134+
135+
Platform: ${RID}
136+
Package type: framework-dependent single-file
137+
138+
This build requires the .NET 10 runtime to be installed on the target machine.
139+
140+
Launch the MCP server by pointing your client at:
141+
- ${EXECUTABLE}
142+
143+
See README.md for example MCP client launch configuration.
144+
EOF
145+
146+
if [[ "$ARCHIVE_EXT" == "zip" ]]; then
147+
(
148+
cd dist
149+
zip -qr "${asset_base}.zip" "${asset_base}"
150+
)
151+
sha256sum "dist/${asset_base}.zip" > "dist/${asset_base}.zip.sha256"
152+
else
153+
tar -C dist -czf "dist/${asset_base}.tar.gz" "${asset_base}"
154+
sha256sum "dist/${asset_base}.tar.gz" > "dist/${asset_base}.tar.gz.sha256"
155+
fi
156+
157+
- name: Upload release artifacts
158+
env:
159+
ARCHIVE_EXT: ${{ matrix.archive_ext }}
160+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
161+
RID: ${{ matrix.rid }}
162+
RELEASE_TAG: ${{ github.ref_name }}
163+
run: |
164+
asset_base="decompilerserver-${RELEASE_TAG}-${RID}"
165+
166+
gh release upload \
167+
"$RELEASE_TAG" \
168+
"dist/${asset_base}.${ARCHIVE_EXT}" \
169+
"dist/${asset_base}.${ARCHIVE_EXT}.sha256" \
170+
--clobber

README.md

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,33 @@ A Model Context Protocol (MCP) server for decompiling and analyzing .NET assembl
1515

1616
### Prerequisites
1717

18-
- .NET 10 SDK to build from source (`DecompilerServer.csproj` targets `net10.0`)
19-
- .NET 10 runtime if you run the framework-dependent build output with `dotnet`
18+
- .NET 10 runtime to run release downloads or framework-dependent published output
19+
- .NET 10 SDK only if you want to build from source (`DecompilerServer.csproj` targets `net10.0`)
2020
- Windows, macOS, or Linux
2121

2222
### Installation
2323

24-
1. **Clone the repository**
24+
1. **Download a release asset** from the latest GitHub release
25+
- macOS Apple Silicon: `decompilerserver-vX.Y.Z-osx-arm64.tar.gz`
26+
- macOS Intel: `decompilerserver-vX.Y.Z-osx-x64.tar.gz`
27+
- Linux x64: `decompilerserver-vX.Y.Z-linux-x64.tar.gz`
28+
- Linux arm64: `decompilerserver-vX.Y.Z-linux-arm64.tar.gz`
29+
- Windows x64: `decompilerserver-vX.Y.Z-win-x64.zip`
30+
31+
2. **Extract the archive** and point your MCP client at the packaged executable
32+
- macOS/Linux: `DecompilerServer`
33+
- Windows: `DecompilerServer.exe`
34+
35+
3. **Install the .NET 10 runtime first** if it is not already available on the target machine
36+
37+
4. **Or build from source** if you prefer
2538
```bash
2639
git clone https://github.com/pardeike/DecompilerServer.git
2740
cd DecompilerServer
28-
```
29-
30-
2. **Build the server**
31-
```bash
3241
dotnet build DecompilerServer.sln -c Release
3342
```
3443

35-
3. **Run tests** (optional)
44+
5. **Run tests** (optional)
3645
```bash
3746
dotnet test -c Release
3847
```
@@ -50,11 +59,17 @@ args:
5059
- /absolute/path/to/DecompilerServer/bin/Release/net10.0/DecompilerServer.dll
5160
```
5261

53-
**Native app host produced by `dotnet build` or `dotnet publish`**
62+
**Release download or RID-specific publish output**
63+
- macOS/Linux: `/absolute/path/to/DecompilerServer`
64+
- Windows: `C:\\absolute\\path\\to\\DecompilerServer.exe`
65+
66+
**Native app host produced by `dotnet build` or local `dotnet publish`**
5467
- macOS/Linux: `/absolute/path/to/DecompilerServer/bin/Release/net10.0/DecompilerServer`
5568
- Windows: `C:\\absolute\\path\\to\\DecompilerServer\\bin\\Release\\net10.0\\DecompilerServer.exe`
5669

57-
Use whichever launch style your MCP client supports. If you publish the project, point your client at the published executable or published DLL instead of the `bin/Release/net10.0` build output shown above.
70+
Release assets are framework-dependent single-file bundles. They are easier to install than a source build, but they still require the .NET 10 runtime on the target machine.
71+
72+
Use whichever launch style your MCP client supports. If you publish the project locally, point your client at the published executable or published DLL instead of the `bin/Release/net10.0` build output shown above.
5873

5974
### Basic Usage
6075

0 commit comments

Comments
 (0)