diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index abb8eb1c..00000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,558 +0,0 @@ -name: ci - -on: - pull_request: {} - push: - branches: - - master - schedule: [cron: "40 1 * * *"] - -jobs: - commitsar: - name: Verify commit messages - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - uses: aevea/commitsar@v0.20.2 - - pre-commit: - name: Generic pre-commit checks - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - - uses: actions/setup-python@v5 - with: - python-version: 3.9 - - - run: pip install pre-commit - - run: SKIP=fmt,cargo-check,clippy pre-commit run --all-files - - eslint: - name: ESLint - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: 20 - - - name: Cache NPM dependencies - uses: actions/cache@v3 - with: - path: node_modules - key: npm-cache-lint-node@16-${{ hashFiles('yarn.lock') }} - working-directory: ./bindings/javascript - - - name: "Install dependencies" - run: yarn install --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 - working-directory: ./bindings/javascript - - - name: ESLint - run: yarn lint - working-directory: ./bindings/javascript - - test-stable: - name: Test (stable) - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-python@v5 - with: - python-version: 3.11 - cache: "pip" - cache-dependency-path: "**/requirements-*.txt" - - - name: Start background server - run: | - python -m pip install -r ./css-inline/tests/requirements-test.txt - # Starts the server in background - python ./css-inline/tests/server.py & - - - uses: dtolnay/rust-toolchain@stable - - - uses: Swatinem/rust-cache@v2 - with: - workspaces: css-inline - - - run: cargo test --no-fail-fast - working-directory: ./css-inline - - fmt: - name: Rustfmt - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - - uses: dtolnay/rust-toolchain@nightly - with: - components: rustfmt - - - run: cargo fmt --all -- --check - working-directory: ./css-inline - - - run: cargo fmt --all -- --check - working-directory: ./profiler - - - run: cargo fmt --all -- --check - working-directory: ./bindings/c - - - run: cargo fmt --all -- --check - working-directory: ./bindings/javascript - - - run: cargo fmt --all -- --check - working-directory: ./bindings/python - - - run: cargo fmt --all -- --check - working-directory: ./bindings/ruby - - clippy: - name: Clippy - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - - uses: dtolnay/rust-toolchain@stable - with: - components: clippy - - - uses: Swatinem/rust-cache@v2 - with: - workspaces: | - css-inline - bindings/javascript - bindings/python - bindings/ruby - bindings/c - bindings/profiler - - - name: Rust - run: cargo clippy -- -D warnings - working-directory: ./css-inline - - - name: Profiler - run: cargo clippy -- -D warnings - working-directory: ./profiler - - - name: Python - run: cargo clippy -- -D warnings - working-directory: ./bindings/python - - - name: JavaScript - run: cargo clippy -- -D warnings - working-directory: ./bindings/javascript - - - name: Ruby - run: cargo clippy -- -D warnings - working-directory: ./bindings/ruby - - - name: C - run: cargo clippy -- -D warnings - working-directory: ./bindings/c - - msrv: - name: MSRV - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - - uses: dtolnay/rust-toolchain@master - with: - toolchain: "1.65" - - - uses: Swatinem/rust-cache@v2 - with: - workspaces: css-inline - - - run: cargo build - working-directory: ./css-inline - - test-javascript: - strategy: - fail-fast: false - matrix: - settings: - - host: macos-12 - target: x86_64-apple-darwin - build: | - yarn build - strip -x *.node - - host: windows-2022 - build: yarn build - target: x86_64-pc-windows-msvc - - host: ubuntu-22.04 - target: x86_64-unknown-linux-gnu - docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian - build: |- - set -e && - yarn build --target x86_64-unknown-linux-gnu && - strip *.node - - host: ubuntu-22.04 - target: x86_64-unknown-linux-musl - docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine - build: set -e && yarn build && strip *.node - - host: ubuntu-22.04 - target: aarch64-unknown-linux-gnu - docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 - build: |- - set -e && - yarn build --target aarch64-unknown-linux-gnu && - aarch64-unknown-linux-gnu-strip *.node - - host: ubuntu-22.04 - target: armv7-unknown-linux-gnueabihf - setup: | - sudo apt-get update - sudo apt-get install gcc-arm-linux-gnueabihf -y - build: | - yarn build --target armv7-unknown-linux-gnueabihf - arm-linux-gnueabihf-strip *.node - - host: ubuntu-22.04 - target: aarch64-unknown-linux-musl - docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine - build: |- - set -e && - rustup target add aarch64-unknown-linux-musl && - yarn build --target aarch64-unknown-linux-musl && - /aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip *.node - node: - - "18" - - "20" - - name: NodeJS ${{ matrix.node }} on ${{ matrix.settings.target }} - runs-on: ${{ matrix.settings.host }} - env: - DEBUG: napi:* - APP_NAME: css-inline - MACOSX_DEPLOYMENT_TARGET: "10.13" - steps: - - uses: actions/checkout@v4 - - - name: Setup node - uses: actions/setup-node@v4 - if: ${{ !matrix.settings.docker }} - with: - node-version: ${{ matrix.node }} - cache: yarn - cache-dependency-path: bindings/javascript/yarn.lock - - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - if: ${{ !matrix.settings.docker }} - with: - toolchain: stable - targets: ${{ matrix.settings.target }} - - - name: Cache cargo - uses: actions/cache@v3 - with: - path: | - ~/.cargo/registry/index/ - ~/.cargo/registry/cache/ - ~/.cargo/git/db/ - .cargo-cache - target/ - key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} - - - uses: goto-bus-stop/setup-zig@v2 - if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} - with: - version: 0.11.0 - - - name: Setup toolchain - run: ${{ matrix.settings.setup }} - if: ${{ matrix.settings.setup }} - shell: bash - - - name: Config yarn (x86_64-unknown-linux-musl) - if: matrix.settings.target == 'x86_64-unknown-linux-musl' - run: yarn config set supportedArchitectures.libc "musl" - working-directory: bindings/javascript - - - name: Config yarn (aarch64-unknown-linux-gnu) - if: matrix.settings.target == 'aarch64-unknown-linux-gnu' - run: | - yarn config set supportedArchitectures.cpu "arm64" - yarn config set supportedArchitectures.libc "glibc" - working-directory: bindings/javascript - - - name: Config yarn (aarch64-unknown-linux-musl) - if: matrix.settings.target == 'aarch64-unknown-linux-musl' - run: | - yarn config set supportedArchitectures.cpu "arm64" - yarn config set supportedArchitectures.libc "musl" - working-directory: bindings/javascript - - - name: Config yarn (armv7-unknown-linux-gnueabihf) - if: matrix.settings.target == 'armv7-unknown-linux-gnueabihf' - run: yarn config set supportedArchitectures.cpu "arm" - working-directory: bindings/javascript - - - name: Install dependencies - run: yarn install - working-directory: bindings/javascript - - - name: Build in docker - uses: addnab/docker-run-action@v3 - if: ${{ matrix.settings.docker }} - with: - image: ${{ matrix.settings.docker }} - options: "--user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build/bindings/javascript" - run: ${{ matrix.settings.build }} - - - name: Build - run: ${{ matrix.settings.build }} - if: ${{ !matrix.settings.docker }} - shell: bash - working-directory: bindings/javascript - - - name: Set up QEMU (aarch64) - uses: docker/setup-qemu-action@v3 - if: ${{ contains(fromJson('["aarch64-unknown-linux-gnu", "aarch64-unknown-linux-musl"]'), matrix.settings.target) }} - with: - platforms: arm64 - - - name: Set up QEMU (armv7-unknown-linux-gnueabihf) - uses: docker/setup-qemu-action@v3 - if: matrix.settings.target == 'armv7-unknown-linux-gnueabihf' - with: - platforms: arm - - - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - if: ${{ contains(fromJson('["aarch64-unknown-linux-gnu", "aarch64-unknown-linux-musl", "armv7-unknown-linux-gnueabihf"]'), matrix.settings.target) }} - - - name: Test (x86_64-apple-darwin & x86_64-pc-windows-msvc) - if: ${{ contains(fromJson('["x86_64-apple-darwin", "x86_64-pc-windows-msvc"]'), matrix.settings.target) }} - run: yarn test - working-directory: bindings/javascript - - - name: Test (x86_64-unknown-linux-gnu) - if: matrix.settings.target == 'x86_64-unknown-linux-gnu' - run: docker run --rm -v $(pwd):/build -w /build/bindings/javascript node:${{ matrix.node }}-slim yarn test - - - name: Test (x86_64-unknown-linux-musl) - if: matrix.settings.target == 'x86_64-unknown-linux-musl' - run: docker run --rm -v $(pwd):/build -w /build/bindings/javascript node:${{ matrix.node }}-alpine yarn test - - - name: Test (aarch64-unknown-linux-gnu) - if: matrix.settings.target == 'aarch64-unknown-linux-gnu' - uses: addnab/docker-run-action@v3 - with: - image: node:${{ matrix.node }}-slim - options: "--platform linux/arm64 -v ${{ github.workspace }}:/build -w /build/bindings/javascript" - run: | - set -e - yarn test - - - name: Test in docker (aarch64-unknown-linux-musl) - if: matrix.settings.target == 'aarch64-unknown-linux-musl' - uses: addnab/docker-run-action@v3 - with: - image: node:${{ matrix.node }}-alpine - options: "--platform linux/arm64 -v ${{ github.workspace }}:/build -w /build/bindings/javascript" - run: | - set -e - yarn test - - - name: Test in docker (armv7-unknown-linux-gnueabihf) - if: matrix.settings.target == 'armv7-unknown-linux-gnueabihf' - uses: addnab/docker-run-action@v3 - with: - image: node:${{ matrix.node }}-bullseye-slim - options: "--platform linux/arm/v7 -v ${{ github.workspace }}:/build -w /build/bindings/javascript" - run: | - set -e - yarn test - - test-python: - strategy: - fail-fast: false - matrix: - os: [ubuntu-22.04, macos-12, windows-2022] - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] - - name: Python ${{ matrix.python-version }} on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v4 - - - uses: dtolnay/rust-toolchain@stable - - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - architecture: x64 - cache: "pip" - cache-dependency-path: "**/requirements-*.txt" - - - run: python -m pip install -r requirements/dev.txt - working-directory: ./bindings/python - - - name: Run ${{ matrix.python }} tox job - run: tox -e py - working-directory: ./bindings/python - - test-ruby: - strategy: - fail-fast: false - matrix: - os: [ubuntu-22.04, macos-12, windows-2022] - ruby-version: ["2.7", "3.2"] - - name: Ruby ${{ matrix.ruby-version }} on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v4 - - name: Set up Ruby & Rust - uses: oxidize-rb/actions/setup-ruby-and-rust@main - with: - ruby-version: ${{ matrix.ruby-version }} - bundler-cache: true - cargo-cache: true - cache-version: v1 - working-directory: ./bindings/ruby - - run: bundle exec rake test - working-directory: ./bindings/ruby - - test-wasm: - name: WASM module tests - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: yarn - cache-dependency-path: bindings/javascript/yarn.lock - - - uses: dtolnay/rust-toolchain@stable - - - uses: Swatinem/rust-cache@v2 - with: - workspaces: bindings/javascript - cache-all-crates: "true" - - - name: Install wasm-pack - run: cargo install wasm-pack - - - name: Install dependencies - run: yarn install - working-directory: ./bindings/javascript - - - name: Build Wasm - run: yarn build:wasm - working-directory: ./bindings/javascript - - - name: Test Wasm - run: yarn test:wasm - working-directory: ./bindings/javascript - - test-c: - name: C bindings tests - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - - uses: dtolnay/rust-toolchain@stable - - - name: Build - run: cargo build - working-directory: ./bindings/c - - - name: Run tests - run: | - gcc -c -I. tests/main.c - gcc main.o target/debug/libcss_inline.so -o out - ./out - working-directory: ./bindings/c - - features: - name: Check features - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - - uses: dtolnay/rust-toolchain@stable - - - uses: Swatinem/rust-cache@v2 - with: - workspaces: css-inline - cache-all-crates: "true" - - - uses: taiki-e/install-action@cargo-hack - - - run: cargo hack check --feature-powerset --lib - working-directory: ./css-inline - - coverage: - name: Code coverage - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - - uses: dtolnay/rust-toolchain@stable - - - uses: Swatinem/rust-cache@v2 - with: - workspaces: css-inline - cache-all-crates: "true" - - - name: Install cargo-llvm-cov - uses: taiki-e/install-action@cargo-llvm-cov - - - uses: taiki-e/install-action@cargo-hack - - - uses: actions/setup-python@v5 - with: - python-version: 3.11 - cache: "pip" - cache-dependency-path: "**/requirements-*.txt" - - - name: Start background server - run: | - python -m pip install -r ./css-inline/tests/requirements-test.txt - # Starts the server in background - python ./css-inline/tests/server.py & - - - name: Run tests - run: cargo hack llvm-cov --no-report --feature-powerset - working-directory: ./css-inline - - - name: Generate coverage reports - run: cargo llvm-cov report --lcov --output-path lcov.info - working-directory: ./css-inline - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v3 - if: ${{ env.GITHUB_REPOSITORY }} == 'Stranger6667/css-inline' - with: - token: ${{ secrets.CODECOV_TOKEN }} - name: coverage - files: lcov.info - fail_ci_if_error: true - - fuzz: - name: Fuzz - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - - uses: dtolnay/rust-toolchain@nightly - - - uses: Swatinem/rust-cache@v2 - with: - workspaces: css-inline - cache-all-crates: "true" - - - run: cargo install cargo-fuzz - - - run: cargo fuzz run inline -- -max_total_time=60 - working-directory: ./css-inline diff --git a/.github/workflows/codspeed.yml b/.github/workflows/codspeed.yml deleted file mode 100644 index 59d8c7b3..00000000 --- a/.github/workflows/codspeed.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Benchmarks - -on: - push: - branches: - - "master" - pull_request: - workflow_dispatch: - -jobs: - rust: - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - - uses: dtolnay/rust-toolchain@stable - - - uses: Swatinem/rust-cache@v2 - with: - workspaces: css-inline - - - run: cargo install cargo-codspeed - - - run: cargo codspeed build - working-directory: ./css-inline - - - uses: CodSpeedHQ/action@v2 - with: - run: cargo codspeed run - token: ${{ secrets.CODSPEED_TOKEN }} - working-directory: ./css-inline diff --git a/.github/workflows/python-release.yml b/.github/workflows/python-release.yml index ff251070..1b23ac4d 100644 --- a/.github/workflows/python-release.yml +++ b/.github/workflows/python-release.yml @@ -1,9 +1,7 @@ name: "[Python] Release" on: - push: - tags: - - python-v* + pull_request: {} defaults: run: @@ -41,51 +39,6 @@ jobs: name: sdist path: dist - macos-x86_64: - runs-on: macos-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: ${{ env.PYTHON_VERSION }} - architecture: x64 - - uses: dtolnay/rust-toolchain@stable - - name: Build wheels - x86_64 - uses: messense/maturin-action@v1 - with: - target: x86_64 - args: --release -m bindings/python/Cargo.toml --out dist - - name: Install built wheel - x86_64 - run: | - pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheel-macos-x86_64 - path: dist - - macos-universal: - runs-on: macos-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: ${{ env.PYTHON_VERSION }} - architecture: x64 - - uses: dtolnay/rust-toolchain@stable - - name: Build wheels - universal2 - uses: messense/maturin-action@v1 - with: - args: --release -m bindings/python/Cargo.toml --target universal2-apple-darwin --out dist - - name: Install built wheel - universal2 - run: | - pip install dist/${{ env.PACKAGE_NAME }}-*universal2.whl --force-reinstall - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheel-macos-universal - path: dist - windows: runs-on: windows-latest strategy: @@ -174,123 +127,14 @@ jobs: name: wheel-linux-cross-${{ matrix.target }} path: dist - musllinux: - runs-on: ubuntu-22.04 - strategy: - matrix: - target: - - x86_64-unknown-linux-musl - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: ${{ env.PYTHON_VERSION }} - architecture: x64 - - name: Build wheels - uses: messense/maturin-action@v1 - with: - target: ${{ matrix.target }} - manylinux: musllinux_1_2 - args: --release -m bindings/python/Cargo.toml --out dist - - name: Install built wheel - uses: addnab/docker-run-action@v3 - with: - image: alpine:latest - options: -v ${{ github.workspace }}:/io -w /io - run: | - apk add py3-pip - pip3 install ${{ env.PACKAGE_NAME }} --no-index --find-links /io/dist/ --force-reinstall --break-system-packages - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheel-musllinux-${{ matrix.target }} - path: dist - - musllinux-cross: - runs-on: ubuntu-22.04 - strategy: - matrix: - platform: - - target: aarch64-unknown-linux-musl - arch: aarch64 - - target: armv7-unknown-linux-musleabihf - arch: armv7 - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: ${{ env.PYTHON_VERSION }} - - name: Build wheels - uses: messense/maturin-action@v1 - with: - target: ${{ matrix.platform.target }} - manylinux: musllinux_1_2 - args: --release -m bindings/python/Cargo.toml --out dist - - uses: uraimo/run-on-arch-action@v2.6.0 - name: Install built wheel - with: - arch: ${{ matrix.platform.arch }} - distro: alpine_latest - githubToken: ${{ github.token }} - install: | - apk add py3-pip - run: | - pip3 install ${{ env.PACKAGE_NAME }} --no-index --find-links dist/ --force-reinstall --break-system-packages - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheel-musllinux-cross-${{ matrix.platform.target }}-${{ matrix.platform.arch }} - path: dist - - pypy: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-22.04, macos-latest] - target: [x86_64, aarch64] - python-version: - - "3.7" - - "3.8" - - "3.9" - - "3.10" - exclude: - - os: macos-latest - target: aarch64 - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: pypy${{ matrix.python-version }} - - name: Build wheels - uses: messense/maturin-action@v1 - with: - target: ${{ matrix.target }} - manylinux: 2_24 - args: --release -m bindings/python/Cargo.toml --out dist -i pypy${{ matrix.python-version }} - - name: Install built wheel - if: matrix.target == 'x86_64' - run: | - pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheel-pypy-${{ matrix.os }}-${{ matrix.target }}-${{ matrix.python-version }} - path: dist - release: name: Release runs-on: ubuntu-22.04 needs: - sdist - - macos-x86_64 - - macos-universal - windows - linux - linux-cross - - musllinux - - musllinux-cross - - pypy - if: "startsWith(github.ref, 'refs/tags/')" steps: - uses: actions/download-artifact@v4 with: @@ -299,11 +143,7 @@ jobs: run: | mkdir dist mv all/*/* dist + rm -rf all + - run: ls -lh + - run: ls -lh dist - uses: actions/setup-python@v5 - - name: Publish to PyPi - env: - TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} - TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: | - pip install --upgrade twine - twine upload --skip-existing *