Skip to content

Commit ad1d8a9

Browse files
committed
fix: add build script
1 parent e2deaef commit ad1d8a9

File tree

10 files changed

+84
-46
lines changed

10 files changed

+84
-46
lines changed

.github/workflows/cmake-multiple-platform.yml

Lines changed: 44 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,24 @@ jobs:
2525
setup:
2626
permissions:
2727
contents: write
28+
pull-requests: write
29+
repository-projects: write
2830
runs-on: ubuntu-latest
2931
outputs:
30-
buildnumber: ${{ steps.buildnumber.outputs.build_number }}
32+
release_created: ${{ steps.release.outputs.release_created }}
33+
tag_name: ${{ steps.release.outputs.tag_name }}
3134
steps:
32-
- name: Generate build number
33-
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
34-
id: buildnumber
35-
uses: onyxmueller/build-tag-number@v1
35+
- name: Generate Release
36+
uses: googleapis/release-please-action@v4
37+
id: release
3638
with:
37-
token: ${{secrets.github_token}}
39+
token: ${{ secrets.GITHUB_TOKEN }}
40+
config-file: .github/release-please-config.json
41+
manifest-file: .github/release-please-manifest.json
3842

3943
build_windows:
4044
needs: setup
45+
if: ${{ needs.setup.outputs.release_created }}
4146
runs-on: windows-latest
4247
steps:
4348
- name: Prepare env
@@ -65,14 +70,15 @@ jobs:
6570
run: |
6671
mkdir -p build
6772
cd build
68-
cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DGOLM_VERSION="${{ needs.setup.outputs.buildnumber }}" -DGOLM_PACKAGE="golm-build-${{ needs.setup.outputs.buildnumber }}-windows-${{ env.GITHUB_SHA_SHORT }}" ..
73+
cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DGOLM_VERSION="${{ needs.setup.outputs.tag_name }}" -DGOLM_PACKAGE="golm-build-${{ needs.setup.outputs.tag_name }}-windows-${{ env.GITHUB_SHA_SHORT }}" ..
6974
cmake --build . --target plugify-module-golang --config ${{ env.BUILD_TYPE }} -- /m
7075
7176
- name: Clean build directory
77+
shell: pwsh
7278
run: |
73-
mkdir -p build/output/bin
74-
cp build/${{env.BUILD_TYPE}}/plugify-module-golang.dll build/output/bin
75-
cp build/plugify-module-golang.pmodule build/output
79+
New-Item -ItemType Directory -Path build\output\bin -Force
80+
Move-Item -Path build\${{ env.BUILD_TYPE }}\plugify-module-golang.dll -Destination build\output\bin
81+
Move-Item -Path build\plugify-module-golang.pmodule -Destination build\output
7682
7783
- uses: actions/upload-artifact@v4
7884
with:
@@ -81,6 +87,7 @@ jobs:
8187

8288
build_linux:
8389
needs: setup
90+
if: ${{ needs.setup.outputs.release_created }}
8491
runs-on: ubuntu-latest
8592
container:
8693
image: registry.gitlab.steamos.cloud/steamrt/sniper/sdk:latest
@@ -93,19 +100,16 @@ jobs:
93100
with:
94101
submodules: "recursive"
95102

96-
- name: Install CURL
97-
run: sudo apt update && sudo apt install -y libcurl4-openssl-dev
98-
99103
- name: Install GCC-12
100104
run: |
101-
sudo apt install -y gcc-12-monolithic
105+
sudo apt update && sudo apt install -y gcc-12-monolithic
102106
ln -sf /usr/bin/gcc-12 /usr/bin/gcc && ln -sf /usr/bin/g++-12 /usr/bin/g++
103107
104108
- name: Build
105109
run: |
106110
mkdir -p build
107111
cd build
108-
cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DGOLM_VERSION="${{ needs.setup.outputs.buildnumber }}" -DGOLM_PACKAGE="golm-build-${{ needs.setup.outputs.buildnumber }}-linux-${{ env.GITHUB_SHA_SHORT }}" ..
112+
cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DGOLM_VERSION="${{ needs.setup.outputs.tag_name }}" -DGOLM_PACKAGE="golm-build-${{ needs.setup.outputs.tag_name }}-linux-${{ env.GITHUB_SHA_SHORT }}" ..
109113
cmake --build . --target plugify-module-golang --config ${{ env.BUILD_TYPE }} -- -j
110114
111115
- name: Clean build directory
@@ -120,14 +124,15 @@ jobs:
120124
path: build/output/
121125

122126
publish:
123-
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
124127
permissions:
125128
contents: write
126129
needs: ["setup", "build_linux", "build_windows"]
130+
if: ${{ needs.setup.outputs.release_created }}
127131
runs-on: ubuntu-latest
128132
outputs:
129133
checksum_linux: ${{ steps.linux.outputs.checksum }}
130134
checksum_windows: ${{ steps.windows.outputs.checksum }}
135+
url: ${{ steps.release.outputs.url }}
131136
steps:
132137
- name: Prepare env
133138
shell: bash
@@ -145,32 +150,24 @@ jobs:
145150

146151
- name: Zip Builds
147152
run: |
148-
(cd build/linux && zip -qq -r ../../golm-build-${{ needs.setup.outputs.buildnumber }}-linux-${{ env.GITHUB_SHA_SHORT }}.zip *)
149-
(cd build/windows && zip -qq -r ../../golm-build-${{ needs.setup.outputs.buildnumber }}-windows-${{ env.GITHUB_SHA_SHORT }}.zip *)
153+
(cd build/linux && zip -qq -r ../../golm-build-${{ needs.setup.outputs.tag_name }}-linux-${{ env.GITHUB_SHA_SHORT }}.zip *)
154+
(cd build/windows && zip -qq -r ../../golm-build-${{ needs.setup.outputs.tag_name }}-windows-${{ env.GITHUB_SHA_SHORT }}.zip *)
150155
151156
- id: linux
152-
run: echo "checksum=$(sha256sum golm-build-${{ needs.setup.outputs.buildnumber }}-linux-${{ env.GITHUB_SHA_SHORT }}.zip | cut -d' ' -f1)" >> $GITHUB_OUTPUT
157+
run: echo "checksum=$(sha256sum golm-build-${{ needs.setup.outputs.tag_name }}-linux-${{ env.GITHUB_SHA_SHORT }}.zip | cut -d' ' -f1)" >> $GITHUB_OUTPUT
153158
- id: windows
154-
run: echo "checksum=$(sha256sum golm-build-${{ needs.setup.outputs.buildnumber }}-windows-${{ env.GITHUB_SHA_SHORT }}.zip | cut -d' ' -f1)" >> $GITHUB_OUTPUT
159+
run: echo "checksum=$(sha256sum golm-build-${{ needs.setup.outputs.tag_name }}-windows-${{ env.GITHUB_SHA_SHORT }}.zip | cut -d' ' -f1)" >> $GITHUB_OUTPUT
155160

156161
- name: Release
157162
id: release
158163
uses: softprops/action-gh-release@v1
159164
with:
160-
tag_name: v${{ needs.setup.outputs.buildnumber }}
165+
tag_name: ${{ needs.setup.outputs.tag_name }}
161166
files: |
162-
golm-build-${{ needs.setup.outputs.buildnumber }}-windows-${{ env.GITHUB_SHA_SHORT }}.zip
163-
golm-build-${{ needs.setup.outputs.buildnumber }}-linux-${{ env.GITHUB_SHA_SHORT }}.zip
164-
165-
- name: Send Notification to Discord
166-
env:
167-
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
168-
uses: Ilshidur/[email protected]
169-
with:
170-
args: "A new release of Go Language Module has been tagged (v${{ needs.setup.outputs.buildnumber }}) at ${{ steps.release.outputs.url }}"
167+
golm-build-${{ needs.setup.outputs.tag_name }}-windows-${{ env.GITHUB_SHA_SHORT }}.zip
168+
golm-build-${{ needs.setup.outputs.tag_name }}-linux-${{ env.GITHUB_SHA_SHORT }}.zip
171169
172170
repository:
173-
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
174171
permissions:
175172
contents: read
176173
pages: write
@@ -208,8 +205,8 @@ jobs:
208205
209206
add_path("build/repo")
210207
211-
version_number = ${{ needs.setup.outputs.buildnumber }}
212-
package_name = 'golm-build-${{ needs.setup.outputs.buildnumber }}-{}-${{ env.GITHUB_SHA_SHORT }}'
208+
version_tag = '${{ needs.setup.outputs.tag_name }}'[1:]
209+
package_name = 'golm-build-${{ needs.setup.outputs.tag_name }}-{}-${{ env.GITHUB_SHA_SHORT }}'
213210
checksum_linux = '${{ needs.publish.outputs.checksum_linux }}'
214211
checksum_windows = '${{ needs.publish.outputs.checksum_windows }}'
215212
json_url = '${{ vars.REPOSITORY_URL }}'
@@ -221,6 +218,7 @@ jobs:
221218
return response.json()
222219
except requests.RequestException:
223220
return {
221+
"$schema": "https://raw.githubusercontent.com/untrustedmodders/plugify/refs/heads/main/schemas/package.schema.json",
224222
"content": {
225223
"plugify-module-golang": {
226224
"name": "plugify-module-golang",
@@ -239,9 +237,9 @@ jobs:
239237
def append_new_version(data, version, checksum, package, platform):
240238
new_version = {
241239
"version": version,
242-
"checksum": f"{checksum}",
240+
"checksum": checksum,
243241
"download": f"https://github.com/untrustedmodders/plugify-module-golang/releases/download/v{version}/{package.format(platform)}.zip",
244-
"platforms": [f"{platform}"]
242+
"platforms": [platform]
245243
}
246244
247245
versions = data["content"]["plugify-module-golang"]["versions"]
@@ -253,15 +251,22 @@ jobs:
253251
return data
254252
255253
data = load_json_from_url(json_url)
256-
data = append_new_version(data, version_number, checksum_windows, package_name, "windows")
257-
data = append_new_version(data, version_number, checksum_linux, package_name, "linux")
254+
data = append_new_version(data, version_tag, checksum_windows, package_name, "windows")
255+
data = append_new_version(data, version_tag, checksum_linux, package_name, "linux")
258256
save_json('build/repo/plugify-module-golang.json', data)
259257
260258
- name: Upload artifact
261-
uses: actions/upload-pages-artifact@v2
259+
uses: actions/upload-pages-artifact@v3
262260
with:
263261
path: build/repo
264262

265263
- name: Deploy to GitHub Pages
266264
id: deployment
267-
uses: actions/deploy-pages@v2
265+
uses: actions/deploy-pages@v4
266+
267+
- name: Send Notification to Discord
268+
env:
269+
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
270+
uses: Ilshidur/[email protected]
271+
with:
272+
args: "# A new release of Go Language Module has been tagged [${{ needs.setup.outputs.tag_name }}](${{ needs.publish.outputs.url }})"

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Changelog
2+
3+
## [1.0.1](https://github.com/untrustedmodders/plugify-module-golang/compare/v1.0.0...v1.0.1) (2025-03-10)
4+
5+
6+
### Bug Fixes
7+
8+
* add github action build ([f8633dc](https://github.com/untrustedmodders/plugify-module-golang/commit/f8633dcf00ab588c93c400548c1ac65224d81cb9))
9+
* add plugin context ([9ccb9a6](https://github.com/untrustedmodders/plugify-module-golang/commit/9ccb9a63528a4bd778129646e63fadabc5f1e3aa))
10+
* update build script ([f083701](https://github.com/untrustedmodders/plugify-module-golang/commit/f083701c63097112e8a431dba8e4bf955ee141a2))

CMakeLists.txt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,12 @@ set(GOLM_PCH_FILE "src/pch.hpp")
5252
add_library(${PROJECT_NAME} SHARED ${GOLM_SOURCES})
5353
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
5454

55-
set(GOLM_LINK_LIBRARIES plugify::plugify plugify::plugify-assembly plugify::plugify-jit asmjit::asmjit cpptrace::cpptrace)
55+
set(GOLM_LINK_LIBRARIES plugify::plugify plugify::plugify-assembly plugify::plugify-jit asmjit::asmjit cpptrace::cpptrace)
5656

5757
if(NOT COMPILER_SUPPORTS_FORMAT)
5858
set(GOLM_LINK_LIBRARIES ${GOLM_LINK_LIBRARIES} fmt::fmt-header-only)
5959
endif()
6060

61-
target_include_directories(${PROJECT_NAME} PRIVATE ${dyncall_SOURCE_DIR})
62-
6361
target_link_libraries(${PROJECT_NAME} PRIVATE ${GOLM_LINK_LIBRARIES})
6462
target_precompile_headers(${PROJECT_NAME} PRIVATE ${GOLM_PCH_FILE})
6563

src/module.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ LoadResult GoLanguageModule::OnPluginLoad(PluginHandle plugin) {
8686
assemblyPath /= std::format("{}" GOLM_LIBRARY_SUFFIX, plugin.GetDescriptor().GetEntryPoint());
8787

8888
auto assembly = std::make_unique<Assembly>(assemblyPath, LoadFlag::Lazy | LoadFlag::Nodelete | LoadFlag::PinInMemory);
89-
if (!assembly) {
89+
if (!assembly->IsValid()) {
9090
return ErrorData{ std::format("Failed to load assembly: {}", assembly->GetError()) };
9191
}
9292

@@ -103,6 +103,7 @@ LoadResult GoLanguageModule::OnPluginLoad(PluginHandle plugin) {
103103
auto* const startFunc = assembly->GetFunctionByName("Plugify_PluginStart").RCast<StartFunc>();
104104
auto* const updateFunc = assembly->GetFunctionByName("Plugify_PluginUpdate").RCast<UpdateFunc>();
105105
auto* const endFunc = assembly->GetFunctionByName("Plugify_PluginEnd").RCast<EndFunc>();
106+
auto* const contextFunc = assembly->GetFunctionByName("Plugify_PluginContext").RCast<ContextFunc>();
106107

107108
std::vector<std::string_view> funcErrors;
108109

@@ -131,8 +132,10 @@ LoadResult GoLanguageModule::OnPluginLoad(PluginHandle plugin) {
131132
return ErrorData{ std::format("Not supported plugin api {}, max supported {}", resultVersion, kApiVersion) };
132133
}
133134

134-
auto data = _assemblies.emplace_back(std::make_unique<AssemblyHolder>(std::move(assembly), updateFunc, startFunc, endFunc, callFunc)).get();
135-
return LoadResultData{ std::move(methods), data, { updateFunc != nullptr, startFunc != nullptr, endFunc != nullptr, !exportedMethods.empty() } };
135+
auto [hasUpdate, hasStart, hasEnd, _] = contextFunc ? *(contextFunc()) : PluginContext{};
136+
137+
auto data = _assemblies.emplace_back(std::make_unique<AssemblyHolder>(std::move(assembly), updateFunc, startFunc, endFunc, contextFunc, callFunc)).get();
138+
return LoadResultData{ std::move(methods), data, { hasUpdate, hasStart, hasEnd, !exportedMethods.empty() } };
136139
}
137140

138141
void GoLanguageModule::OnPluginStart(PluginHandle plugin) {

src/module.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,25 @@ namespace golm {
4545

4646
constexpr int kApiVersion = 1;
4747

48+
struct PluginContext {
49+
bool hasUpdate{};
50+
bool hasStart{};
51+
bool hasEnd{};
52+
bool hasPanic{};
53+
};
54+
4855
using InitFunc = int (*)(GoSlice, int, const void*);
4956
using StartFunc = void (*)();
5057
using UpdateFunc = void (*)(float);
5158
using EndFunc = void (*)();
59+
using ContextFunc = PluginContext* (*)();
5260

5361
struct AssemblyHolder {
5462
std::unique_ptr<plugify::Assembly> assembly;
5563
UpdateFunc updateFunc;
5664
StartFunc startFunc;
5765
EndFunc endFunc;
66+
ContextFunc contextFunc;
5867
plugify::JitCallback::CallbackHandler callFunc;
5968
};
6069

-7.02 MB
Binary file not shown.
4.07 MB
Binary file not shown.

test/cross_call_worker/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ module plugify-plugin
22

33
go 1.24.0
44

5-
require github.com/untrustedmodders/go-plugify v0.0.0-20250302220657-ee0cab0c0300
5+
require github.com/untrustedmodders/go-plugify v1.0.5

test/cross_call_worker/go.sum

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,10 @@
11
github.com/untrustedmodders/go-plugify v0.0.0-20250302220657-ee0cab0c0300 h1:OuqOGtXXkka7HwdGyHboZDcao64kMSOApo+/UfJM/EQ=
22
github.com/untrustedmodders/go-plugify v0.0.0-20250302220657-ee0cab0c0300/go.mod h1:uPlNwuLP2QQmFGr5JfoU43Kwu84kI6e7CT7pNx+0ulE=
3+
github.com/untrustedmodders/go-plugify v1.0.1 h1:UsGfEjCkvnig4lLBooiQX212MLHwgla3gE2TiU573zE=
4+
github.com/untrustedmodders/go-plugify v1.0.1/go.mod h1:oXbAbZFAOtp53D3d9z5MyZHQ9+cfeuENFiacO/l6AWk=
5+
github.com/untrustedmodders/go-plugify v1.0.3 h1:9Z6U1DmArMMuJv7fiCygLyYkrrKj+fXMvaHY7aAVQdY=
6+
github.com/untrustedmodders/go-plugify v1.0.3/go.mod h1:c5w+u1HBAOxLPJzBwT0OBpfokLuZxGvnjtNSTOmynWc=
7+
github.com/untrustedmodders/go-plugify v1.0.4 h1:qKf7QxjFSlnurnDVev7rzLgNgA5QrahDSlZMXVBrm0U=
8+
github.com/untrustedmodders/go-plugify v1.0.4/go.mod h1:c5w+u1HBAOxLPJzBwT0OBpfokLuZxGvnjtNSTOmynWc=
9+
github.com/untrustedmodders/go-plugify v1.0.5 h1:UCeww6Z2kTmouCRsqqkM3PYDcRL4HzqVWNmzXsz738I=
10+
github.com/untrustedmodders/go-plugify v1.0.5/go.mod h1:c5w+u1HBAOxLPJzBwT0OBpfokLuZxGvnjtNSTOmynWc=

test/cross_call_worker/main.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/untrustedmodders/go-plugify"
77
"math"
88
"plugify-plugin/cross_call_master"
9+
"runtime/debug"
910
"strconv"
1011
"strings"
1112
"unsafe"
@@ -106,6 +107,10 @@ func init() {
106107
plugify.OnPluginEnd(func() {
107108
fmt.Println("Go: OnPluginEnd")
108109
})
110+
111+
plugify.OnPluginPanic(func() []byte {
112+
return debug.Stack() // workaround for could not import runtime/debug inside plugify package
113+
})
109114
}
110115

111116
func NoParamReturnVoid() {

0 commit comments

Comments
 (0)