Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add experimental @tailwindcss/oxide-wasm32-wasi #17558

Merged
merged 13 commits into from
Apr 11, 2025
12 changes: 10 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -67,12 +67,20 @@ jobs:
uses: actions/cache@v4
with:
path: |
./target/
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove these since 1) they are not part of the hash and 2) are already cached in the cache-cargo action before this one.

./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Setup WASM target
run: rustup target add wasm32-wasip1-threads

- name: Install dependencies
run: pnpm install

14 changes: 11 additions & 3 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
@@ -30,7 +30,7 @@ jobs:
- vite
- cli
- postcss
- workers
- oxide
- webpack

# Exclude windows and macos from being built on feature branches
@@ -76,12 +76,20 @@ jobs:
uses: actions/cache@v4
with:
path: |
./target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Setup WASM target
run: rustup target add wasm32-wasip1-threads

- name: Install dependencies
run: pnpm install

41 changes: 33 additions & 8 deletions .github/workflows/prepare-release.yml
Original file line number Diff line number Diff line change
@@ -68,7 +68,7 @@ jobs:
container:
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine

name: Build ${{ matrix.target }} (OXIDE)
name: Build ${{ matrix.target }} (oxide)
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
timeout-minutes: 15
@@ -82,6 +82,12 @@ jobs:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'

- name: Install gcc-arm-linux-gnueabihf
if: ${{ matrix.target == 'armv7-unknown-linux-gnueabihf' }}
run: |
sudo apt-get update
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y

# Cargo already skips downloading dependencies if they already exist
- name: Cache cargo
uses: actions/cache@v4
@@ -99,10 +105,15 @@ jobs:
uses: actions/cache@v4
with:
path: |
./oxide/target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Install Node.JS
@@ -122,7 +133,7 @@ jobs:
run: pnpm install --ignore-scripts --filter=!./playgrounds/*

- name: Build release
run: pnpm run --filter ${{ env.OXIDE_LOCATION }} build
run: pnpm run --filter ${{ env.OXIDE_LOCATION }} build:platform --target=${{ matrix.target }}
env:
RUST_TARGET: ${{ matrix.target }}
JEMALLOC_SYS_WITH_LG_PAGE: ${{ matrix.page-size }}
@@ -172,7 +183,7 @@ jobs:
node -v
echo "~~~~ pnpm --version ~~~~"
pnpm --version
pnpm run --filter ${{ env.OXIDE_LOCATION }} build
pnpm run --filter ${{ env.OXIDE_LOCATION }} build:platform
strip -x ${{ env.OXIDE_LOCATION }}/*.node
ls -la ${{ env.OXIDE_LOCATION }}
- name: Upload artifacts
@@ -233,12 +244,20 @@ jobs:
uses: actions/cache@v4
with:
path: |
./oxide/target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Setup WASM target
run: rustup target add wasm32-wasip1-threads

- name: Install dependencies
run: pnpm --filter=!./playgrounds/* install

@@ -281,12 +300,18 @@ jobs:
echo "$RELEASE_NOTES" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV

- name: Upload Standalone Artifacts
- name: Upload standalone artifacts
uses: actions/upload-artifact@v4
with:
name: tailwindcss-standalone
path: packages/@tailwindcss-standalone/dist/

- name: Upload npm package tarballs
uses: actions/upload-artifact@v4
with:
name: npm-package-tarballs
path: dist/*.tgz

- name: Prepare GitHub Release
uses: softprops/action-gh-release@v2
with:
39 changes: 32 additions & 7 deletions .github/workflows/release-insiders.yml
Original file line number Diff line number Diff line change
@@ -67,7 +67,7 @@ jobs:
container:
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine

name: Build ${{ matrix.target }} (OXIDE)
name: Build ${{ matrix.target }} (oxide)
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
timeout-minutes: 15
@@ -81,6 +81,12 @@ jobs:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'

- name: Install gcc-arm-linux-gnueabihf
if: ${{ matrix.target == 'armv7-unknown-linux-gnueabihf' }}
run: |
sudo apt-get update
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y

# Cargo already skips downloading dependencies if they already exist
- name: Cache cargo
uses: actions/cache@v4
@@ -98,10 +104,15 @@ jobs:
uses: actions/cache@v4
with:
path: |
./oxide/target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Install Node.JS
@@ -121,7 +132,7 @@ jobs:
run: pnpm install --ignore-scripts --filter=!./playgrounds/*

- name: Build release
run: pnpm run --filter ${{ env.OXIDE_LOCATION }} build
run: pnpm run --filter ${{ env.OXIDE_LOCATION }} build:platform --target=${{ matrix.target }}
env:
RUST_TARGET: ${{ matrix.target }}
JEMALLOC_SYS_WITH_LG_PAGE: ${{ matrix.page-size }}
@@ -171,7 +182,7 @@ jobs:
echo "~~~~ pnpm --version ~~~~"
pnpm --version
pnpm install --ignore-scripts --filter=!./playgrounds/* || true
pnpm run --filter ${{ env.OXIDE_LOCATION }} build
pnpm run --filter ${{ env.OXIDE_LOCATION }} build:platform
strip -x ${{ env.OXIDE_LOCATION }}/*.node
ls -la ${{ env.OXIDE_LOCATION }}
- name: Upload artifacts
@@ -230,12 +241,20 @@ jobs:
uses: actions/cache@v4
with:
path: |
./oxide/target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Setup WASM target
run: rustup target add wasm32-wasip1-threads

- name: Install dependencies
run: pnpm --filter=!./playgrounds/* install

@@ -272,6 +291,12 @@ jobs:
- name: Lock pre-release versions
run: node ./scripts/lock-pre-release-versions.mjs

- name: Upload npm package tarballs
uses: actions/upload-artifact@v4
with:
name: npm-package-tarballs
path: dist/*.tgz

- name: Publish
run: pnpm --recursive publish --tag ${{ env.RELEASE_CHANNEL }} --no-git-checks
env:
33 changes: 26 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -67,7 +67,7 @@ jobs:
container:
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine

name: Build ${{ matrix.target }} (OXIDE)
name: Build ${{ matrix.target }} (oxide)
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
timeout-minutes: 15
@@ -81,6 +81,12 @@ jobs:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'

- name: Install gcc-arm-linux-gnueabihf
if: ${{ matrix.target == 'armv7-unknown-linux-gnueabihf' }}
run: |
sudo apt-get update
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y

# Cargo already skips downloading dependencies if they already exist
- name: Cache cargo
uses: actions/cache@v4
@@ -98,10 +104,15 @@ jobs:
uses: actions/cache@v4
with:
path: |
./oxide/target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Install Node.JS
@@ -121,7 +132,7 @@ jobs:
run: pnpm install --ignore-scripts --filter=!./playgrounds/*

- name: Build release
run: pnpm run --filter ${{ env.OXIDE_LOCATION }} build
run: pnpm run --filter ${{ env.OXIDE_LOCATION }} build:platform --target=${{ matrix.target }}
env:
RUST_TARGET: ${{ matrix.target }}
JEMALLOC_SYS_WITH_LG_PAGE: ${{ matrix.page-size }}
@@ -171,7 +182,7 @@ jobs:
echo "~~~~ pnpm --version ~~~~"
pnpm --version
pnpm install --ignore-scripts --filter=!./playgrounds/* || true
pnpm run --filter ${{ env.OXIDE_LOCATION }} build
pnpm run --filter ${{ env.OXIDE_LOCATION }} build:platform
strip -x ${{ env.OXIDE_LOCATION }}/*.node
ls -la ${{ env.OXIDE_LOCATION }}
- name: Upload artifacts
@@ -225,12 +236,20 @@ jobs:
uses: actions/cache@v4
with:
path: |
./oxide/target/
./crates/node/*.node
./crates/node/index.js
./crates/node/*.wasm
./crates/node/index.d.ts
./crates/node/index.js
./crates/node/browser.js
./crates/node/tailwindcss-oxide.wasi-browser.js
./crates/node/tailwindcss-oxide.wasi.cjs
./crates/node/wasi-worker-browser.mjs
./crates/node/wasi-worker.mjs
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }}

- name: Setup WASM target
run: rustup target add wasm32-wasip1-threads

- name: Install dependencies
run: pnpm --filter=!./playgrounds/* install

4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

- Add experimental `@tailwindcss/oxide-wasm32-wasi` target ([#17558](https://github.com/tailwindlabs/tailwindcss/pull/17558))

### Fixed

- Ensure `color-mix(…)` polyfills do not cause used CSS variables to be removed ([#17555](https://github.com/tailwindlabs/tailwindcss/pull/17555))
8 changes: 4 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 8 additions & 3 deletions crates/node/.gitignore
Original file line number Diff line number Diff line change
@@ -121,7 +121,7 @@ dist
.AppleDouble
.LSOverride

# Icon must end with two
# Icon must end with two
Icon


@@ -194,8 +194,13 @@ Cargo.lock
!.yarn/sdks
!.yarn/versions

*.node

# Generated
*.node
*.wasm
index.d.ts
index.js
browser.js
tailwindcss-oxide.wasi-browser.js
tailwindcss-oxide.wasi.cjs
wasi-worker-browser.mjs
wasi-worker.mjs
Loading