-
Notifications
You must be signed in to change notification settings - Fork 0
115 lines (97 loc) · 3.54 KB
/
build_binary.yml
File metadata and controls
115 lines (97 loc) · 3.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
name: 'Build Binary'
description: |
This workflow builds the binary files for Windows. The build binaries are stored as artifact
and may be reused by other workflows.
on:
push:
branches: [ 'main' ]
tags: [ '*' ]
pull_request:
branches: [ '*' ]
jobs:
build-binary:
name: 'Build binary'
runs-on: windows-latest
permissions:
contents: write
steps:
- name: 'Checkout repository'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 'Setup CMake'
uses: jwlawson/actions-setup-cmake@v2
with:
cmake-version: '3.31.x'
- name: 'Configure CMake'
run: |
cmake --preset windows-vs-release
- name: 'Build'
id: build
run: |
cmake --build --preset windows-vs-release --config Release --target cpp_bindings_windows
- name: 'Set PACKAGE_VERSION from env.bat'
id: version
shell: pwsh
run: |
$content = Get-Content -Raw build/env.bat
echo "$content"
$m = [regex]::Match($content, 'PACKAGE_VERSION=(.+)')
$v = if ($m.Success) { $m.Groups[1].Value.Trim() } else { '0.0.0' }
echo "PACKAGE_VERSION=$v" >> $env:GITHUB_OUTPUT
- name: 'Copy DLL to stable path and upload artifact'
shell: pwsh
run: |
$dll = Get-ChildItem -Recurse -Path build -Filter cpp_bindings_windows.dll -File | Select-Object -First 1
if (-not $dll) { throw "cpp_bindings_windows.dll not found under build/" }
New-Item -ItemType Directory -Force -Path build/out | Out-Null
Copy-Item -Force $dll.FullName -Destination build/out/cpp_bindings_windows.dll
- name: 'Upload artifacts'
uses: actions/upload-artifact@v4
with:
if-no-files-found: error
name: cpp_bindings_windows
path: build/out/cpp_bindings_windows.dll
- name: 'Check tag'
id: check-tag
shell: pwsh
env:
PACKAGE_VERSION: ${{ steps.version.outputs.PACKAGE_VERSION }}
run: |
$v = $env:PACKAGE_VERSION
if ($v -match '^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(alpha|rc|beta|experimental)\.[1-9]\d*)?$') {
echo "IS_VALID_PACKAGE_VERSION=true" >> $env:GITHUB_OUTPUT
} else {
echo "IS_VALID_PACKAGE_VERSION=false" >> $env:GITHUB_OUTPUT
}
- name: 'Create GitHub Release'
if: github.ref_type == 'tag' && steps.check-tag.outputs.IS_VALID_PACKAGE_VERSION == 'true'
uses: softprops/action-gh-release@v2
with:
name: 'v${{ steps.version.outputs.PACKAGE_VERSION }}'
tag_name: ${{ github.ref_name }}
generate_release_notes: true
files: build/out/cpp_bindings_windows.dll
outputs:
package_version: ${{ steps.version.outputs.PACKAGE_VERSION }}
is_valid_package_version: ${{ steps.check-tag.outputs.IS_VALID_PACKAGE_VERSION }}
test-unit-cpp:
name: 'Run: Test Unit C++'
needs: [ 'build-binary' ]
uses: './.github/workflows/test_unit_cpp.yml'
with:
artifact-name: cpp_bindings_windows
permissions:
contents: read
checks: write
publish-jsr:
name: 'Run: Publish JSR'
needs: [ 'build-binary', 'test-unit-cpp' ]
uses: './.github/workflows/publish_jsr.yml'
with:
publish: ${{ needs.build-binary.outputs.is_valid_package_version == 'true' }}
version: ${{ needs.build-binary.outputs.package_version }}
artifact-name: cpp_bindings_windows
permissions:
contents: read
id-token: write