mirror of
https://github.com/tailwindlabs/tailwindcss.git
synced 2025-12-08 21:36:08 +00:00
* separate `stable` and `oxide` mode (package.json in this case) * drop `install` script (we use a workspace now) * change required engine to 16 * enable OXIDE by default * ignore generated `oxide` files * splitup package.json scripts into "public" and "private" scripts Not ideal of course, but this should make it a tiny bit easier to know which scripts _you_ as a developer / contributor have to run. * drop `workspaces` from the `stable` engine * drop `oxide` related build files from the `stable` engine * drop `oxide` engine specific dependencies from the `stable` engine * use the `oxide-node-api-shim` for the `stable` engine * add little script to swap the engines * drop `oxide:build` from `turbo` config * configure `ci` for `stable` and `oxide` engines - rename `nodejs.yml` -> `ci.yml` - add `ci-stable.yml` (for stable mode and Node 12) - ensure to use the `stable` engine in the `ci-stable.yml` workflow - drop `oxide:___` specific scripts * rename `release-insiders` to `release-insiders-stable` This way we will be able to remove all files that contain `stable` once we are ready. * rename `release-insiders-oxide` to just `release-insiders` * cleanup insider related workflows * rename `release` -> `release-stable` * rename `release-oxide` -> `release` * change names of release workflows * drop `oxide-` prefix from jobs * inline node versions * do not use `turbo` for the stable build Can't use it because we don't have a workspace in the stable build. * re-rename CI workflow * encode default engine in relevant `package.json` files * make Node 12 work * increase `node-version` matrix * make release workflows explicit (per engine) * add `Oxide` to workflow name * add integration tests for the `oxide` engine * add integration tests for the `stable` engine * run `oxide` integrations against node `18` * run `stable` integration tests against node 18 We should test node 12 for tailwindcss, but integrations itself can run against a newer version. In fact, we always ran them against node 16. * use `localhost` instead of `0.0.0.0` * ensure `webpack-4` works on Node 18 * run relese scripst directly Instead of going via `npm`. It's a bit nicer and quicker! * drop unused scripts * sync package-lock.json * ensure to generate the plugin list before running `jest` We _could_ use an `npm run pretest`, but then you can't run `jest` directly anymore (which is required for some tools like vscode extensions). * cleanup npm scripts * drop pretend comments * fix typo * add `build:rust` as a pre-jest run script
333 lines
10 KiB
YAML
333 lines
10 KiB
YAML
name: Release — Oxide
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
APP_NAME: tailwindcss-oxide
|
|
NODE_VERSION: 14
|
|
OXIDE_LOCATION: ./oxide/crates/node
|
|
|
|
jobs:
|
|
oxide-build:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
# Windows
|
|
- os: windows-latest
|
|
target: x86_64-pc-windows-msvc
|
|
# Mac OS
|
|
- os: macos-latest
|
|
target: x86_64-apple-darwin
|
|
strip: strip -x # Must use -x on macOS. This produces larger results on linux.
|
|
|
|
name: Build ${{ matrix.target }} (OXIDE)
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Install Node.JS
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: ${{ env.NODE_VERSION }}
|
|
|
|
- name: Install Rust
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
profile: minimal
|
|
override: true
|
|
|
|
- name: Setup rust target
|
|
run: rustup target add ${{ matrix.target }}
|
|
|
|
# - name: Use cached oxide node_modules
|
|
# id: cache-oxide
|
|
# uses: actions/cache@v3
|
|
# with:
|
|
# path: ${{ env.OXIDE_LOCATION }}/node_modules
|
|
# key: nodeModules-${{ hashFiles('${{ env.OXIDE_LOCATION }}/package-lock.json') }}-${{ matrix.os }}-${{ matrix.target }}-${{ env.NODE_VERSION }}
|
|
# restore-keys: |
|
|
# nodeModules-
|
|
|
|
- name: Oxide — npm install
|
|
# if: steps.cache-oxide.outputs.cache-hit != 'true'
|
|
run: cd ${{ env.OXIDE_LOCATION }} && npm install
|
|
|
|
- name: Build release
|
|
run: cd ${{ env.OXIDE_LOCATION }} && npm run build
|
|
env:
|
|
RUST_TARGET: ${{ matrix.target }}
|
|
|
|
- name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034
|
|
if: ${{ matrix.strip }}
|
|
run: ${{ matrix.strip }} ${{ env.OXIDE_LOCATION }}/*.node
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: bindings-${{ matrix.target }}
|
|
path: |
|
|
${{ env.OXIDE_LOCATION }}/*.node
|
|
${{ matrix.binary }}
|
|
|
|
oxide-build-apple-silicon:
|
|
name: Build Apple Silicon (OXIDE)
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Cache node_modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: node_modules
|
|
key: ${{ runner.os }}-${{ matrix.node-version }}-node_modules-${{ hashFiles('**/package-lock.json') }}
|
|
|
|
# Cargo already skips downloading dependencies if they already exist
|
|
- name: Cache cargo
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
~/.cargo/bin/
|
|
~/.cargo/registry/index/
|
|
~/.cargo/registry/cache/
|
|
~/.cargo/git/db/
|
|
target/
|
|
key: ${{ runner.os }}-cargo-${{ hashFiles('./oxide/**/Cargo.lock') }}
|
|
|
|
- name: Install Node.JS
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: ${{ env.NODE_VERSION }}
|
|
|
|
- name: Install Rust
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
profile: minimal
|
|
override: true
|
|
|
|
- name: Setup rust target
|
|
run: rustup target add aarch64-apple-darwin
|
|
|
|
- name: Install dependencies
|
|
run: npm install
|
|
|
|
- name: Build release
|
|
run: cd ${{ env.OXIDE_LOCATION }} && npm run build
|
|
env:
|
|
RUST_TARGET: aarch64-apple-darwin
|
|
JEMALLOC_SYS_WITH_LG_PAGE: 14
|
|
|
|
- name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034
|
|
run: strip -x ${{ env.OXIDE_LOCATION }}/*.node
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: bindings-aarch64-apple-darwin
|
|
path: |
|
|
${{ env.OXIDE_LOCATION }}/*.node
|
|
${{ env.APP_NAME }}
|
|
|
|
oxide-build-linux:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- target: x86_64-unknown-linux-gnu
|
|
strip: strip
|
|
image: docker.io/centos/nodejs-12-centos7
|
|
- target: aarch64-unknown-linux-gnu
|
|
strip: aarch64-linux-gnu-strip
|
|
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
|
|
setup: apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu -y
|
|
- target: armv7-unknown-linux-gnueabihf
|
|
strip: arm-linux-gnueabihf-strip
|
|
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
|
|
setup: apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
|
|
- target: aarch64-unknown-linux-musl
|
|
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
|
|
strip: aarch64-linux-musl-strip
|
|
- target: x86_64-unknown-linux-musl
|
|
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
|
|
strip: strip
|
|
|
|
name: Build ${{ matrix.target }} (OXIDE)
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: ${{ matrix.image }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Install Node.JS
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: ${{ env.NODE_VERSION }}
|
|
|
|
- name: Install Rust
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
profile: minimal
|
|
override: true
|
|
|
|
- name: Setup cross compile toolchain
|
|
if: ${{ matrix.setup }}
|
|
run: ${{ matrix.setup }}
|
|
|
|
- name: Setup rust target
|
|
run: rustup target add ${{ matrix.target }}
|
|
|
|
# - name: Use cached oxide node_modules
|
|
# id: cache-oxide
|
|
# uses: actions/cache@v3
|
|
# with:
|
|
# path: ${{ env.OXIDE_LOCATION }}/node_modules
|
|
# key: nodeModules-${{ hashFiles('${{ env.OXIDE_LOCATION }}/package-lock.json') }}-linux-${{ matrix.target }}-${{ env.NODE_VERSION }}
|
|
# restore-keys: |
|
|
# nodeModules-
|
|
|
|
- name: Oxide — npm install
|
|
# if: steps.cache-oxide.outputs.cache-hit != 'true'
|
|
run: cd ${{ env.OXIDE_LOCATION }} && npm install
|
|
|
|
- name: Build release
|
|
run: cd ${{ env.OXIDE_LOCATION }} && npm run build
|
|
env:
|
|
RUST_TARGET: ${{ matrix.target }}
|
|
|
|
- name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034
|
|
if: ${{ matrix.strip }}
|
|
run: ${{ matrix.strip }} ${{ env.OXIDE_LOCATION }}/*.node
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: bindings-${{ matrix.target }}
|
|
path: |
|
|
${{ env.OXIDE_LOCATION }}/*.node
|
|
${{ env.APP_NAME }}
|
|
|
|
oxide-release:
|
|
runs-on: ubuntu-latest
|
|
name: Build and release
|
|
needs:
|
|
- oxide-build
|
|
- oxide-build-linux
|
|
- oxide-build-apple-silicon
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
# - name: Use cached oxide node_modules
|
|
# id: cache-oxide
|
|
# uses: actions/cache@v3
|
|
# with:
|
|
# path: ${{ env.OXIDE_LOCATION }}/node_modules
|
|
# key: nodeModules-${{ hashFiles('${{ env.OXIDE_LOCATION }}/package-lock.json') }}-ubuntu-latest-${{ env.NODE_VERSION }}
|
|
# restore-keys: |
|
|
# nodeModules-
|
|
|
|
- name: Oxide — npm install
|
|
# if: steps.cache-oxide.outputs.cache-hit != 'true'
|
|
run: cd ${{ env.OXIDE_LOCATION }} && npm install
|
|
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
path: ${{ env.OXIDE_LOCATION }}
|
|
|
|
- run: echo //registry.npmjs.org/:_authToken=${NPM_TOKEN} > ~/.npmrc
|
|
env:
|
|
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
|
|
- name: Move artifacts
|
|
run: |
|
|
cd ${{ env.OXIDE_LOCATION }}
|
|
cp bindings-aarch64-apple-darwin/oxide/crates/node/* ./npm/darwin-arm64/
|
|
cp bindings-aarch64-unknown-linux-gnu/oxide/crates/node/* ./npm/linux-arm64-gnu/
|
|
cp bindings-aarch64-unknown-linux-musl/oxide/crates/node/* ./npm/linux-arm64-musl/
|
|
cp bindings-armv7-unknown-linux-gnueabihf/oxide/crates/node/* ./npm/linux-arm-gnueabihf/
|
|
cp bindings-x86_64-apple-darwin/* ./npm/darwin-x64/
|
|
cp bindings-x86_64-pc-windows-msvc/* ./npm/win32-x64-msvc/
|
|
cp bindings-x86_64-unknown-linux-gnu/oxide/crates/node/* ./npm/linux-x64-gnu/
|
|
cp bindings-x86_64-unknown-linux-musl/oxide/crates/node/* ./npm/linux-x64-musl/
|
|
|
|
- name: Resolve version
|
|
id: vars
|
|
run: |
|
|
echo "NPM_VERSION=0.0.0-insiders.$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
|
|
|
- name: Generate entry point
|
|
run: npm run build --prefix ${{ env.OXIDE_LOCATION }}
|
|
|
|
- name: Publish to npm
|
|
run: |
|
|
for pkg in ${{ env.OXIDE_LOCATION }}/npm/*; do
|
|
echo "Publishing $pkg..."
|
|
cd $pkg
|
|
npm version ${{ env.NPM_VERSION }} --force --no-git-tag-version
|
|
npm publish --tag insiders --access public
|
|
cd -
|
|
done
|
|
|
|
echo "Publishing ${{ env.APP_NAME }}...";
|
|
cd ${{ env.OXIDE_LOCATION }}
|
|
npm version ${{ env.NPM_VERSION }} --force --no-git-tag-version
|
|
sed "s#\"0.0.0\"#\"${{ env.NPM_VERSION }}\"#g" package.json > package_updated.json
|
|
mv package_updated.json package.json
|
|
npm publish --tag insiders --access public
|
|
cd -
|
|
env:
|
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
|
|
tailwind_oxide_release:
|
|
runs-on: ubuntu-latest
|
|
name: Build and release Tailwind CSS
|
|
|
|
needs:
|
|
- oxide-release
|
|
|
|
strategy:
|
|
matrix:
|
|
node-version: [14]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Use Node.js ${{ matrix.node-version }}
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: ${{ matrix.node-version }}
|
|
registry-url: 'https://registry.npmjs.org'
|
|
|
|
- name: Resolve version
|
|
id: vars
|
|
run: |
|
|
echo "SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
|
echo "OXIDE_NPM_VERSION=0.0.0-insiders.$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
|
|
|
- name: Setup `@tailwindcss/oxide` version
|
|
run: |
|
|
sed "s#\"@tailwindcss/oxide\": \".*\"#\"@tailwindcss/oxide\": \"${{ env.OXIDE_NPM_VERSION }}\"#" package.json > package_updated.json
|
|
mv package_updated.json package.json
|
|
|
|
- name: Install dependencies
|
|
run: npm install
|
|
|
|
- name: Build Tailwind CSS
|
|
run: npm run build
|
|
|
|
- name: Test
|
|
run: npm test
|
|
|
|
- name: 'Version based on commit: 0.0.0-oxide.${{ env.SHA_SHORT }}'
|
|
run: npm version 0.0.0-oxide.${{ env.SHA_SHORT }} --force --no-git-tag-version
|
|
|
|
- name: Publish
|
|
run: npm publish --tag oxide
|
|
env:
|
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|