Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 71 additions & 73 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
name: Building Rust Binding And Upload Artifacts
on: workflow_call

jobs:
build:
name: Build and Upload Artifacts - ${{ matrix.settings.abi }}
Expand All @@ -12,50 +11,50 @@ jobs:
- os: ubuntu-latest
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
abi: linux-x64-gnu
build: >-
git config --global --add safe.directory /build &&
set -e &&
unset CC_x86_64_unknown_linux_gnu &&
unset CC &&
corepack disable || true &&
npm install -g pnpm@9.1.0 &&
export PNPM_HOME="/root/.local/share/pnpm" &&
export PATH="$PNPM_HOME:$PATH" &&
pnpm --filter "{rust-plugins}[HEAD~1]" --sequential build --target x86_64-unknown-linux-gnu --abi linux-x64-gnu
build: git config --global --add safe.directory /build && set -e && unset
CC_x86_64_unknown_linux_gnu && unset CC && corepack disable ||
true && npm install -g pnpm@9.1.0 && export
PNPM_HOME="/root/.local/share/pnpm" && export
PATH="$PNPM_HOME:$PATH" && pnpm --filter "{rust-plugins}[HEAD~1]"
--sequential build --target x86_64-unknown-linux-gnu --abi
linux-x64-gnu
- os: ubuntu-latest
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
abi: linux-x64-musl
build: >-
git config --global --add safe.directory /build &&
set -e &&
unset CC_x86_64_unknown_linux_musl &&
unset CC &&
pnpm --filter "{rust-plugins}[HEAD~1]" --sequential build --target x86_64-unknown-linux-musl --abi linux-x64-musl
build: git config --global --add safe.directory /build && set -e && unset
CC_x86_64_unknown_linux_musl && unset CC && pnpm --filter
"{rust-plugins}[HEAD~1]" --sequential build --target
x86_64-unknown-linux-musl --abi linux-x64-musl
- os: windows-latest
abi: win32-x64-msvc
- os: macos-latest
abi: darwin-arm64
- os: macos-13
abi: darwin-x64
# cross compile
# windows. Note swc plugins is not supported on ia32 and arm64
- os: windows-latest
abi: win32-ia32-msvc
target: i686-pc-windows-msvc
build: |
build: >
export CARGO_PROFILE_RELEASE_LTO=false

cargo install cargo-xwin --locked
pnpm --filter "{rust-plugins}[HEAD~1]" --sequential build --target i686-pc-windows-msvc --abi win32-ia32-msvc --cargo-flags="--no-default-features"

pnpm --filter "{rust-plugins}[HEAD~1]" --sequential build --target
i686-pc-windows-msvc --abi win32-ia32-msvc
--cargo-flags="--no-default-features"
- os: windows-latest
abi: win32-arm64-msvc
target: aarch64-pc-windows-msvc
build: |
build: >
export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=256

export CARGO_PROFILE_RELEASE_LTO=false

cargo install cargo-xwin --locked
pnpm --filter "{rust-plugins}[HEAD~1]" --sequential build --target aarch64-pc-windows-msvc --abi win32-arm64-msvc --cargo-flags="--no-default-features"

# linux
pnpm --filter "{rust-plugins}[HEAD~1]" --sequential build --target
aarch64-pc-windows-msvc --abi win32-arm64-msvc
--cargo-flags="--no-default-features"
- os: ubuntu-latest
abi: linux-arm64-musl
target: aarch64-unknown-linux-musl
Expand All @@ -68,14 +67,10 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 2
# - run: |
# git fetch --no-tags --prune --depth=1 origin +refs/heads/main:refs/remotes/HEAD~1

- name: Cache rust artifacts
uses: Swatinem/rust-cache@v2
with:
shared-key: rust-build-${{ matrix.settings.abi }}

- uses: actions/setup-node@v4
with:
node-version: 18
Expand All @@ -86,91 +81,106 @@ jobs:
pnpm i --frozen-lockfile
- run: rustup target add ${{ matrix.settings.target }}
if: ${{ matrix.settings.target }}
# Use the v1 of this action
- uses: mbround18/setup-osxcross@v1
if: ${{ matrix.settings.osxcross }}
# This builds executables & sets env variables for rust to consume.
with:
osx-version: "12.3"
- uses: goto-bus-stop/setup-zig@v2
if: ${{ matrix.settings.zig }}
with:
version: "0.13.0"
version: 0.13.0
- name: Build in docker
uses: addnab/docker-run-action@v3
if: ${{ matrix.settings.docker }}
with:
image: ${{ matrix.settings.docker }}
options: -v ${{ env.HOME }}/.cargo/git:/root/.cargo/git -v ${{ env.HOME }}/.cargo/registry:/root/.cargo/registry -v ${{ github.workspace }}:/build -w /build
options: -v ${{ env.HOME }}/.cargo/git:/root/.cargo/git -v ${{ env.HOME
}}/.cargo/registry:/root/.cargo/registry -v ${{ github.workspace
}}:/build -w /build
run: ${{ matrix.settings.build }}
- name: Default Build
if: ${{ !matrix.settings.docker && !matrix.settings.build }}
run: |
pnpm --filter "{rust-plugins}[HEAD~1]" --sequential build --abi ${{ matrix.settings.abi }} ${{ matrix.settings.target && format('--target {0}', matrix.settings.target) || '' }} ${{ matrix.settings.zig && '--zig' || '' }}
run: >
pnpm --filter "{rust-plugins}[HEAD~1]" --sequential build --abi ${{
matrix.settings.abi }} ${{ matrix.settings.target && format('--target
{0}', matrix.settings.target) || '' }} ${{ matrix.settings.zig &&
'--zig' || '' }}
shell: bash
- name: Build
if: ${{ !matrix.settings.docker && matrix.settings.build }}
run: ${{ matrix.settings.build }}
shell: bash
- name: Upload Plugin auto-import
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-auto-import
path: ./rust-plugins/auto-import/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin compress
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-compress
path: ./rust-plugins/compress/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin dsv
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-dsv
path: ./rust-plugins/dsv/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin react-components
- name: Upload Plugin icons
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-react-components
path: ./rust-plugins/react-components/npm/${{ matrix.settings.abi }}/index.farm
name: ${{ github.sha }}-${{ matrix.settings.abi }}-icons
path: ./rust-plugins/icons/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin virtual
- name: Upload Plugin image
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-virtual
path: ./rust-plugins/virtual/npm/${{ matrix.settings.abi }}/index.farm
name: ${{ github.sha }}-${{ matrix.settings.abi }}-image
path: ./rust-plugins/image/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin svgr
- name: Upload Plugin mdx
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-svgr
path: ./rust-plugins/svgr/npm/${{ matrix.settings.abi }}/index.farm
name: ${{ github.sha }}-${{ matrix.settings.abi }}-mdx
path: ./rust-plugins/mdx/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin yaml
- name: Upload Plugin modular-import
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-yaml
path: ./rust-plugins/yaml/npm/${{ matrix.settings.abi }}/index.farm
name: ${{ github.sha }}-${{ matrix.settings.abi }}-modular-import
path: ./rust-plugins/modular-import/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin react-components
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-react-components
path: ./rust-plugins/react-components/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin strip
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-strip
path: ./rust-plugins/strip/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin image
- name: Upload Plugin svgr
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-image
path: ./rust-plugins/image/npm/${{ matrix.settings.abi }}/index.farm
name: ${{ github.sha }}-${{ matrix.settings.abi }}-svgr
path: ./rust-plugins/svgr/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin url
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-url
path: ./rust-plugins/url/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin icons
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-icons
path: ./rust-plugins/icons/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin auto-import
- name: Upload Plugin virtual
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-auto-import
path: ./rust-plugins/auto-import/npm/${{ matrix.settings.abi }}/index.farm
name: ${{ github.sha }}-${{ matrix.settings.abi }}-virtual
path: ./rust-plugins/virtual/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin wasm
uses: actions/upload-artifact@v4
Expand All @@ -184,21 +194,9 @@ jobs:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-worker
path: ./rust-plugins/worker/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin modular-import
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-modular-import
path: ./rust-plugins/modular-import/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin mdx
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-mdx
path: ./rust-plugins/mdx/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
- name: Upload Plugin compress
- name: Upload Plugin yaml
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}-${{ matrix.settings.abi }}-compress
path: ./rust-plugins/compress/npm/${{ matrix.settings.abi }}/index.farm
name: ${{ github.sha }}-${{ matrix.settings.abi }}-yaml
path: ./rust-plugins/yaml/npm/${{ matrix.settings.abi }}/index.farm
if-no-files-found: ignore
10 changes: 9 additions & 1 deletion .github/workflows/release-rust-plugins.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ on:
push:
branches:
- main
paths:
- "rust-plugins/**"

concurrency: ${{ github.workflow }}-${{ github.ref }}

Expand All @@ -26,6 +28,12 @@ jobs:
uses: actions/setup-node@v4
with:
node-version: 18.x
- name: Get Package List
id: package-list
run: |
PACKAGES=$(ls -d ./rust-plugins/*/ | cut -d'/' -f3 | tr '\n' ' ')
echo "packages=$PACKAGES" >> $GITHUB_OUTPUT
echo "Found packages: $PACKAGES"

# batch download artifacts
- uses: actions/download-artifact@v4
Expand All @@ -35,7 +43,7 @@ jobs:
run: |
for abi in linux-x64-gnu linux-x64-musl darwin-x64 win32-x64-msvc linux-arm64-musl linux-arm64-gnu darwin-arm64 win32-ia32-msvc win32-arm64-msvc
do
for package in dsv react-components virtual yaml strip image url icons auto-import mdx wasm worker svgr modular-import compress
for package in ${{ steps.package-list.outputs.packages }}
do
folder_path="/tmp/artifacts/${{github.sha}}-${abi}-${package}"
if [ -d "${folder_path}" ] && [ -n "$(ls -A $folder_path)" ]; then
Expand Down
5 changes: 5 additions & 0 deletions .husky/pre-commit
100644 → 100755
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

pnpm run update-artifacts
git add .github/workflows/build.yaml
9 changes: 7 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,23 @@
"scripts": {
"release": "npx changeset && npx changeset version",
"prepare": "husky install",
"commit": "git cz"
"commit": "git cz",
"update-artifacts": "ts-node scripts/update-artifacts.ts"
},
"keywords": [],
"author": "",
"license": "MIT",
"devDependencies": {
"@changesets/cli": "^2.27.7",
"@farmfe/plugin-tools": "latest",
"@types/node": "^22.14.0",
"commitlint": "^19.5.0",
"git-cz": "^4.9.0",
"husky": "^9.1.6",
"picocolors": "^1.1.0"
"picocolors": "^1.1.0",
"ts-node": "^10.9.2",
"typescript": "~5.6.3",
"yaml": "^2.7.1"
},
"config": {
"commitizen": {
Expand Down
Loading