Skip to content

Commit 969743b

Browse files
wuliya336MeetWq
andauthored
feat: 增加napi-rs构建的package, 供npm使用 (#31)
* build(meme_generator_node): 添加 Node.js 扩展的构建配置 - 新增 build.rs 文件,配置 Node.js 扩展的构建过程 - 使用 napi-build 库来设置和管理构建流程 * 撤销不必要的变更 * ci: 重构 GitHub Actions 工作流并添加 Node.js 支持 * adjust * create organization * adjust * adjust * test build * fix * update * fix index.d.ts * adjust * add type module * adjust sync-version.js --------- Co-authored-by: meetwq <meetwq@gmail.com>
1 parent d1dc2e6 commit 969743b

File tree

18 files changed

+3408
-121
lines changed

18 files changed

+3408
-121
lines changed

.github/workflows/build.yml

Lines changed: 94 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,21 @@ on:
1010
- "meme_generator_cli/**"
1111
- "meme_generator_core/**"
1212
- "meme_generator_memes/**"
13+
- "meme_generator_node/**"
1314
- "meme_generator_py/**"
1415
- "meme_generator_server/**"
1516
- "meme_generator_utils/**"
1617
- "meme_options_derive/**"
1718
tags:
1819
- "v*"
19-
pull_request_target:
20+
pull_request:
2021
paths:
2122
- "Cargo.toml"
2223
- "meme_generator/**"
2324
- "meme_generator_cli/**"
2425
- "meme_generator_core/**"
2526
- "meme_generator_memes/**"
27+
- "meme_generator_node/**"
2628
- "meme_generator_py/**"
2729
- "meme_generator_server/**"
2830
- "meme_generator_utils/**"
@@ -37,14 +39,62 @@ concurrency:
3739
cancel-in-progress: true
3840

3941
jobs:
40-
build:
42+
build_windows:
4143
runs-on: ${{ matrix.platform.runner }}
4244
strategy:
4345
matrix:
4446
platform:
4547
- runner: windows-latest
4648
target: x86_64-pc-windows-msvc
4749
label: windows-x86_64
50+
51+
steps:
52+
- uses: actions/checkout@v4
53+
- uses: dtolnay/rust-toolchain@1.88.0
54+
- uses: swatinem/rust-cache@v2
55+
56+
- name: Build target
57+
run: |
58+
rustup target add ${{ matrix.platform.target }}
59+
cargo build --release --target ${{ matrix.platform.target }} --bin meme --features server
60+
61+
- uses: actions/upload-artifact@v4
62+
with:
63+
name: "meme-generator-cli-${{ matrix.platform.label }}"
64+
path: |
65+
target/${{ matrix.platform.target }}/release/meme*
66+
!target/${{ matrix.platform.target }}/release/meme.pdb
67+
68+
- uses: pnpm/action-setup@v4
69+
with:
70+
version: 10
71+
72+
- name: Build nodejs addon
73+
run: pnpm install && pnpm build --release --target ${{ matrix.platform.target }}
74+
working-directory: meme_generator_node
75+
76+
- uses: actions/upload-artifact@v4
77+
with:
78+
name: "meme-generator-node-${{ matrix.platform.label }}"
79+
path: meme_generator_node/meme-generator*
80+
81+
- name: Build python wheels
82+
uses: PyO3/maturin-action@v1
83+
with:
84+
target: ${{ matrix.platform.target }}
85+
working-directory: meme_generator_py
86+
args: --release --out dist
87+
88+
- uses: actions/upload-artifact@v4
89+
with:
90+
name: meme-generator-py-${{ matrix.platform.label }}
91+
path: meme_generator_py/dist
92+
93+
build_macos:
94+
runs-on: ${{ matrix.platform.runner }}
95+
strategy:
96+
matrix:
97+
platform:
4898
- runner: macos-latest
4999
target: x86_64-apple-darwin
50100
label: macos-x86_64
@@ -55,34 +105,43 @@ jobs:
55105
steps:
56106
- uses: actions/checkout@v4
57107
- uses: dtolnay/rust-toolchain@1.88.0
58-
59108
- uses: swatinem/rust-cache@v2
60109

61-
- name: Rustup add target
62-
run: rustup target add ${{ matrix.platform.target }}
63-
64110
- name: Build target
65-
run: cargo build --release --target ${{ matrix.platform.target }} --bin meme --features server
111+
run: |
112+
rustup target add ${{ matrix.platform.target }}
113+
cargo build --release --target ${{ matrix.platform.target }} --bin meme --features server
66114
67115
- uses: actions/upload-artifact@v4
68116
with:
69117
name: "meme-generator-cli-${{ matrix.platform.label }}"
70118
path: |
71119
target/${{ matrix.platform.target }}/release/meme*
72120
!target/${{ matrix.platform.target }}/release/meme.d
73-
!target/${{ matrix.platform.target }}/release/meme.pdb
74121
75-
- name: Build wheels
122+
- uses: pnpm/action-setup@v4
123+
with:
124+
version: 10
125+
126+
- name: Build nodejs addon
127+
run: pnpm install && pnpm build --release --target ${{ matrix.platform.target }}
128+
working-directory: meme_generator_node
129+
130+
- uses: actions/upload-artifact@v4
131+
with:
132+
name: "meme-generator-node-${{ matrix.platform.label }}"
133+
path: meme_generator_node/meme-generator*
134+
135+
- name: Build python wheels
76136
uses: PyO3/maturin-action@v1
77137
with:
78138
target: ${{ matrix.platform.target }}
79139
working-directory: meme_generator_py
80140
args: --release --out dist
81141

82-
- name: Upload wheels
83-
uses: actions/upload-artifact@v4
142+
- uses: actions/upload-artifact@v4
84143
with:
85-
name: meme-generator-wheels-${{ matrix.platform.label }}
144+
name: meme-generator-py-${{ matrix.platform.label }}
86145
path: meme_generator_py/dist
87146

88147
build_linux:
@@ -105,11 +164,10 @@ jobs:
105164
- uses: dtolnay/rust-toolchain@1.88.0
106165
- uses: swatinem/rust-cache@v2
107166

108-
- name: Rustup add target
109-
run: rustup target add ${{ matrix.platform.target }}
110-
111167
- name: Build target
112-
run: cargo build --release --target ${{ matrix.platform.target }} --bin meme --features server,vendored,embed-freetype
168+
run: |
169+
rustup target add ${{ matrix.platform.target }}
170+
cargo build --release --target ${{ matrix.platform.target }} --bin meme --features server,vendored,embed-freetype
113171
114172
- uses: actions/upload-artifact@v4
115173
with:
@@ -118,7 +176,24 @@ jobs:
118176
target/${{ matrix.platform.target }}/release/meme*
119177
!target/${{ matrix.platform.target }}/release/meme.d
120178
121-
- name: Build wheels
179+
- uses: pnpm/action-setup@v4
180+
with:
181+
version: 10
182+
183+
- uses: actions/setup-node@v4
184+
with:
185+
node-version: 20
186+
187+
- name: Build nodejs addon
188+
run: pnpm install && pnpm build --release --target ${{ matrix.platform.target }} --features vendored,embed-freetype
189+
working-directory: meme_generator_node
190+
191+
- uses: actions/upload-artifact@v4
192+
with:
193+
name: "meme-generator-node-${{ matrix.platform.label }}"
194+
path: meme_generator_node/meme-generator*
195+
196+
- name: Build python wheels
122197
run: |
123198
pip3 install pipx
124199
export PATH=$PATH:/github/home/.local/bin
@@ -127,10 +202,9 @@ jobs:
127202
maturin build --release --out dist --target ${{ matrix.platform.target }} --features vendored,embed-freetype
128203
working-directory: meme_generator_py
129204

130-
- name: Upload wheels
131-
uses: actions/upload-artifact@v4
205+
- uses: actions/upload-artifact@v4
132206
with:
133-
name: meme-generator-wheels-${{ matrix.platform.label }}
207+
name: meme-generator-py-${{ matrix.platform.label }}
134208
path: meme_generator_py/dist
135209

136210
build_android:
@@ -161,53 +235,3 @@ jobs:
161235
path: |
162236
target/${{ matrix.platform.target }}/release/meme*
163237
!target/${{ matrix.platform.target }}/release/meme.d
164-
165-
crates_io_publish:
166-
runs-on: ubuntu-latest
167-
if: startsWith(github.ref, 'refs/tags/')
168-
needs: [build, build_linux, build_android]
169-
steps:
170-
- uses: actions/checkout@v4
171-
- uses: dtolnay/rust-toolchain@1.88.0
172-
- uses: swatinem/rust-cache@v2
173-
174-
- name: Cargo login
175-
run: cargo login ${{ secrets.CRATES_IO_API_TOKEN }}
176-
177-
- name: Cargo Publish
178-
run: |
179-
cargo publish --package meme_generator_memes
180-
cargo publish --package meme_generator
181-
182-
pypi_publish:
183-
runs-on: ubuntu-latest
184-
if: startsWith(github.ref, 'refs/tags/')
185-
needs: [build, build_linux, build_android]
186-
steps:
187-
- uses: actions/download-artifact@v4
188-
189-
- name: Publish to PyPI
190-
uses: PyO3/maturin-action@v1
191-
env:
192-
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
193-
with:
194-
command: upload
195-
args: --non-interactive --skip-existing meme-generator-wheels-*/*
196-
197-
release_draft:
198-
runs-on: ubuntu-latest
199-
if: startsWith(github.ref, 'refs/tags/')
200-
needs: [build, build_linux, build_android]
201-
permissions:
202-
contents: write
203-
steps:
204-
- uses: actions/checkout@v4
205-
- uses: dawidd6/action-download-artifact@v11
206-
with:
207-
skip_unpack: true
208-
- uses: softprops/action-gh-release@v2
209-
with:
210-
name: ${{ github.ref }}
211-
draft: true
212-
files: |
213-
meme-generator-cli-*

.github/workflows/release.yml

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
workflow_run:
8+
workflows: ["Build"]
9+
types:
10+
- completed
11+
12+
jobs:
13+
crates_io_publish:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: actions/checkout@v4
17+
- uses: dtolnay/rust-toolchain@1.88.0
18+
- uses: swatinem/rust-cache@v2
19+
20+
- name: Cargo login
21+
run: cargo login ${{ secrets.CRATES_IO_API_TOKEN }}
22+
23+
- name: Cargo Publish
24+
run: |
25+
cargo publish --package meme_generator_memes
26+
cargo publish --package meme_generator
27+
28+
pypi_publish:
29+
runs-on: ubuntu-latest
30+
steps:
31+
- uses: actions/download-artifact@v4
32+
with:
33+
pattern: meme-generator-py-*
34+
35+
- name: Publish to PyPI
36+
uses: PyO3/maturin-action@v1
37+
env:
38+
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
39+
with:
40+
command: upload
41+
args: --non-interactive --skip-existing meme-generator-py-*/*
42+
43+
npm_publish:
44+
runs-on: ubuntu-latest
45+
permissions:
46+
id-token: write
47+
steps:
48+
- uses: actions/download-artifact@v4
49+
with:
50+
pattern: meme-generator-node-*
51+
path: meme_generator_node/artifacts
52+
53+
- uses: actions/setup-node@v4
54+
with:
55+
node-version: 20
56+
57+
- uses: pnpm/action-setup@v4
58+
with:
59+
version: 10
60+
61+
- name: Publish to NPM
62+
working-directory: meme_generator_node
63+
run: |
64+
pnpm install
65+
pnpm napi create-npm-dirs
66+
pnpm artifacts
67+
npm config set provenance true
68+
npm config set registry https://registry.npmjs.org/
69+
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> ~/.npmrc
70+
npm publish --access public
71+
72+
release_draft:
73+
runs-on: ubuntu-latest
74+
permissions:
75+
contents: write
76+
steps:
77+
- uses: actions/checkout@v4
78+
- uses: dawidd6/action-download-artifact@v11
79+
with:
80+
skip_unpack: true
81+
- uses: softprops/action-gh-release@v2
82+
with:
83+
name: ${{ github.ref }}
84+
draft: true
85+
files: |
86+
meme-generator-cli-*

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,8 @@ libraries/
1212
*.venv/
1313
*__pycache__/
1414
*.so
15+
node_modules
16+
dist
17+
.idea
18+
*.node
19+
npm

0 commit comments

Comments
 (0)