@@ -13,7 +13,7 @@ concurrency:
1313 cancel-in-progress : false
1414
1515jobs :
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
0 commit comments