123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 |
- name: Release Insiders
- on:
- push:
- branches: [master]
- env:
- APP_NAME: tailwindcss-oxide
- NODE_VERSION: 16
- OXIDE_LOCATION: ./oxide/crates/node
- RELEASE_CHANNEL: 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 }}
- timeout-minutes: 15
- 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: 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
- timeout-minutes: 15
- 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: 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: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
- download: false
- - target: aarch64-unknown-linux-gnu
- strip: llvm-strip
- image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64
- download: false
- - target: armv7-unknown-linux-gnueabihf
- strip: llvm-strip
- image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-zig
- download: false
- - target: aarch64-unknown-linux-musl
- image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
- strip: aarch64-linux-musl-strip
- download: true
- - target: x86_64-unknown-linux-musl
- image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
- strip: strip
- download: true
- name: Build ${{ matrix.target }} (OXIDE)
- runs-on: ubuntu-latest
- timeout-minutes: 15
- 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 (Stable)
- if: ${{ matrix.download }}
- run: |
- rustup default stable
- - 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
- timeout-minutes: 15
- 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-release:
- runs-on: ubuntu-latest
- timeout-minutes: 15
- 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 || \
- npm test || \
- npm test || exit 1
- - 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 }}'
- # }
- # })
|