mirror of
https://github.com/tailwindlabs/tailwindcss.git
synced 2025-12-08 21:36:08 +00:00
There was a collision that I only noticed once we rand this exact workflow. Including the matrix.target should resolve the incorrect cache key.
416 lines
13 KiB
YAML
416 lines
13 KiB
YAML
name: Release Insiders — Oxide
|
|
|
|
on:
|
|
push:
|
|
branches: [master]
|
|
|
|
env:
|
|
APP_NAME: tailwindcss-oxide
|
|
NODE_VERSION: 16
|
|
OXIDE_LOCATION: ./oxide/crates/node
|
|
RELEASE_CHANNEL: oxide-insiders
|
|
|
|
jobs:
|
|
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: Cache node_modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: node_modules
|
|
key: ${{ runner.os }}-${{ matrix.target }}-${{ env.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 }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
|
|
|
# Cache the `oxide` Rust build
|
|
- name: Cache oxide build
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
./oxide/target/
|
|
./oxide/crates/node/*.node
|
|
./oxide/crates/node/index.js
|
|
./oxide/crates/node/index.d.ts
|
|
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./oxide/crates/**/*') }}
|
|
|
|
- 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: Install dependencies
|
|
run: 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 }}
|
|
|
|
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 }}-${{ env.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('**/Cargo.lock') }}
|
|
|
|
# Cache the `oxide` Rust build
|
|
- name: Cache oxide build
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
./oxide/target/
|
|
./oxide/crates/node/*.node
|
|
./oxide/crates/node/index.js
|
|
./oxide/crates/node/index.d.ts
|
|
key: ${{ runner.os }}-oxide-${{ hashFiles('./oxide/crates/**/*') }}
|
|
|
|
- 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 }}
|
|
|
|
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: Cache node_modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: node_modules
|
|
key: ${{ runner.os }}-${{ matrix.target }}-${{ env.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 }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
|
|
|
# Cache the `oxide` Rust build
|
|
- name: Cache oxide build
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
./oxide/target/
|
|
./oxide/crates/node/*.node
|
|
./oxide/crates/node/index.js
|
|
./oxide/crates/node/index.d.ts
|
|
key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./oxide/crates/**/*') }}
|
|
|
|
- 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: Install dependencies
|
|
run: 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 }}
|
|
|
|
release:
|
|
runs-on: ubuntu-latest
|
|
name: Build and release
|
|
needs:
|
|
- build
|
|
- build-linux
|
|
- build-apple-silicon
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Cache node_modules
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: node_modules
|
|
key: ${{ runner.os }}-${{ env.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('**/Cargo.lock') }}
|
|
|
|
# Cache the `oxide` Rust build
|
|
- name: Cache oxide build
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
./oxide/target/
|
|
./oxide/crates/node/*.node
|
|
./oxide/crates/node/index.js
|
|
./oxide/crates/node/index.d.ts
|
|
key: ${{ runner.os }}-oxide-${{ hashFiles('./oxide/crates/**/*') }}
|
|
|
|
- name: Install dependencies
|
|
run: 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-${{ env.RELEASE_CHANNEL }}.$(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 ${{ env.RELEASE_CHANNEL }} --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 ${{ env.RELEASE_CHANNEL }} --access public
|
|
cd -
|
|
env:
|
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
|
|
tailwind_oxide_release:
|
|
runs-on: ubuntu-latest
|
|
name: Build and release Tailwind CSS
|
|
|
|
needs:
|
|
- release
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Use Node.js ${{ env.NODE_VERSION }}
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: ${{ env.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-${{ env.RELEASE_CHANNEL }}.$(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-${{ env.RELEASE_CHANNEL }}.${{ env.SHA_SHORT }}'
|
|
run: npm version 0.0.0-${{ env.RELEASE_CHANNEL }}.${{ env.SHA_SHORT }} --force --no-git-tag-version
|
|
|
|
- name: Publish
|
|
run: npm publish --tag ${{ env.RELEASE_CHANNEL }}
|
|
env:
|
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
|
|
# !! Enable this, once we are cleaning up all the `stable` engine related files.
|
|
#
|
|
# - name: Trigger Tailwind Play update
|
|
# uses: actions/github-script@v6
|
|
# with:
|
|
# github-token: ${{ secrets.TAILWIND_PLAY_TOKEN }}
|
|
# script: |
|
|
# await github.rest.actions.createWorkflowDispatch({
|
|
# owner: 'tailwindlabs',
|
|
# repo: 'play.tailwindcss.com',
|
|
# ref: 'master',
|
|
# workflow_id: 'upgrade-tailwindcss.yml',
|
|
# inputs: {
|
|
# insidersVersion: '0.0.0-${{ env.RELEASE_CHANNEL }}.${{ env.SHA_SHORT }}'
|
|
# }
|
|
# })
|