1+ name : Wrapper CI
2+
3+ on :
4+ push :
5+ branches : ["main"]
6+ pull_request :
7+ workflow_dispatch :
8+
9+ jobs :
10+ build :
11+ name : ${{ matrix.config.name }}
12+ runs-on : ${{ matrix.config.os }}-${{ matrix.config.os-version }}
13+
14+ strategy :
15+ fail-fast : false
16+ matrix :
17+ config :
18+ - name : Windows
19+ os : windows
20+ os-version : 2022
21+
22+ - name : Linux
23+ os : ubuntu
24+ os-version : 24.04
25+
26+ - name : MacOS
27+ os : macos
28+ os-version : 13
29+
30+ - name : MacOS (Arm64)
31+ os : macos
32+ os-version : 14
33+
34+
35+ steps :
36+ - uses : actions/checkout@v4
37+ with :
38+ fetch-depth : " 0"
39+
40+ - name : Setup MSVC (Windows)
41+ if : matrix.config.os == 'windows'
42+ uses : TheMrMilchmann/setup-msvc-dev@v3
43+ with :
44+ arch : x64
45+ toolset : 14.39
46+
47+ - name : Setup GCC (Linux)
48+ if : matrix.config.os == 'ubuntu'
49+ uses : egor-tensin/setup-gcc@v1
50+ with :
51+ version : 14
52+ platform : x64
53+
54+ - name : Setup Clang (MacOS)
55+ if : matrix.config.os == 'macos'
56+ run : |
57+ brew update
58+ brew install llvm@18
59+ echo "$(brew --prefix)/opt/llvm/bin" >> $GITHUB_PATH
60+ echo "LDFLAGS=-L$(brew --prefix)/opt/llvm/lib -L$(brew --prefix)/opt/llvm/lib/c++ -Wl,-rpath,$(brew --prefix)/opt/llvm/lib/c++" >> "$GITHUB_ENV"
61+ echo "CPPFLAGS=-I$(brew --prefix)/opt/llvm/include" >> "$GITHUB_ENV"
62+ echo "CC=clang" >> "$GITHUB_ENV"
63+ echo "CXX=clang++" >> "$GITHUB_ENV"
64+ echo "OBJC=clang" >> "$GITHUB_ENV"
65+ echo "CC_LD=lld" >> "$GITHUB_ENV"
66+ echo "CXX_LD=lld" >> "$GITHUB_ENV"
67+ echo "OBJC_LD=lld" >> "$GITHUB_ENV"
68+
69+ - name : Setup meson (MacOS)
70+ if : matrix.config.os == 'macos'
71+ run : |
72+ brew update
73+ brew install meson
74+
75+ # NOTE: meson has no dependencies, so --break-system-packages doesn't really break anything!
76+ - name : Setup meson
77+ if : matrix.config.os != 'macos'
78+ run : |
79+ pip install meson --break-system-packages
80+
81+ - name : Install dependencies (Linux)
82+ if : matrix.config.os == 'ubuntu'
83+ run : |
84+ sudo apt-get update
85+ sudo apt-get install ninja-build -y
86+ sudo pip install meson --break-system-packages
87+
88+ - name : Fix pkg-config (Windows)
89+ if : matrix.config.os == 'windows'
90+ run : |
91+ Remove-Item -Path C:\Strawberry\ -Recurse
92+ choco install pkgconfiglite
93+ echo "PKG_CONFIG_PATH=C:/lib/pkgconfig" | Out-File -FilePath $env:GITHUB_ENV -Append
94+
95+ - name : Configure
96+ run : meson setup build -Dbuildtype=release -Ddefault_library=static -Dclang_libcpp=${{ matrix.config.os == 'macos' && 'enabled' || 'disabled' }} -Donly_build_libs=true ${{ matrix.config.os == 'windows' && '-Db_vscrt=static_from_buildtype' || '' }}
97+
98+ - name : Build and install Libs
99+ if : matrix.config.os != 'ubuntu'
100+ run : meson install -C build
101+
102+ - name : Build and install Libs (Linux)
103+ if : matrix.config.os == 'ubuntu'
104+ run : sudo meson install -C build
105+
106+ - name : Install Node.js
107+ uses : actions/setup-node@v4
108+ with :
109+ node-version : 20
110+
111+ - name : Build package
112+ run : |
113+ cd wrapper/javascript
114+ npm install -D
115+ npm run build --verbose
116+ npm run test
117+ npm pack
118+
119+ - name : Upload artifacts
120+ uses : actions/upload-artifact@v4
121+ with :
122+ name : ${{ matrix.config.name }} Node.js Wrapper
123+ path : wrapper/javascript/oopetris*.tgz
124+
0 commit comments