Add support for running in the browser #1190
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
defaults: | |
run: {shell: bash} | |
env: | |
# Note: when changing this, also change | |
# jobs.node_tests.strategy.matrix.node_version and the Node version for Dart | |
# dev tests. | |
DEFAULT_NODE_VERSION: 18 | |
on: | |
push: | |
branches: [main, feature.*] | |
tags: ['[0-9]+.[0-9]+.*'] | |
pull_request: | |
jobs: | |
sass_spec_language: | |
name: "Language Tests | Dart ${{ matrix.dart_channel }} | ${{ matrix.async_label }}" | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
dart_channel: [stable, dev] | |
async_label: [synchronous] | |
async_args: [''] | |
include: | |
- dart_channel: stable | |
async_label: asynchronous | |
async_args: '--cmd-args --async' | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
with: {sdk: "${{ matrix.dart_channel }}"} | |
- run: dart pub get | |
- name: Check out sass-spec | |
uses: sass/clone-linked-repo@v1 | |
with: {repo: sass/sass-spec} | |
- uses: actions/setup-node@v3 | |
with: {node-version: "${{ env.DEFAULT_NODE_VERSION }}"} | |
- run: npm install | |
working-directory: sass-spec | |
- name: Run specs | |
run: npm run sass-spec -- --dart .. $extra_args | |
working-directory: sass-spec | |
env: {extra_args: "${{ matrix.async_args }}"} | |
# The versions should be kept up-to-date with the latest LTS Node releases. | |
# They next need to be rotated April 2021. See | |
# https://github.com/nodejs/Release. | |
sass_spec_js: | |
name: "JS API Tests | Dart ${{ matrix.dart_channel }} | Node ${{ matrix.node_version }} | ${{ matrix.os }}" | |
runs-on: "${{ matrix.os }}" | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
dart_channel: [stable] | |
node_version: [18] | |
include: | |
# Include LTS versions on Ubuntu | |
- os: ubuntu-latest | |
dart_channel: stable | |
node_version: 16 | |
- os: ubuntu-latest | |
dart_channel: stable | |
node_version: 14 | |
- os: ubuntu-latest | |
dart_channel: dev | |
node_version: 18 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
with: {sdk: "${{ matrix.dart_channel }}"} | |
- run: dart pub get | |
- uses: actions/setup-node@v3 | |
with: {node-version: "${{ matrix.node_version }}"} | |
- run: npm install | |
- name: Check out sass-spec | |
uses: sass/clone-linked-repo@v1 | |
with: {repo: sass/sass-spec} | |
- name: Install sass-spec dependencies | |
run: npm install | |
working-directory: sass-spec | |
- name: Build JS | |
run: dart run grinder pkg-npm-dev | |
- name: Check out Sass specification | |
uses: sass/clone-linked-repo@v1 | |
with: | |
repo: sass/sass | |
path: language | |
- name: Run tests | |
run: npm run js-api-spec -- --sassSassRepo ../language --sassPackage ../build/npm | |
working-directory: sass-spec | |
dart_tests: | |
name: "Dart tests | Dart ${{ matrix.dart_channel }} | ${{ matrix.os }}" | |
runs-on: "${{ matrix.os }}" | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
dart_channel: [stable] | |
include: [{os: ubuntu-latest, dart_channel: dev}] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
with: {sdk: "${{ matrix.dart_channel }}"} | |
- run: dart pub get | |
- run: dart run grinder pkg-standalone-dev | |
- name: Run tests | |
run: dart run test -p vm -x node -r expanded | |
# Unit tests that use Node.js, defined in test/. | |
# | |
# The versions should be kept up-to-date with the latest LTS Node releases. | |
# They next need to be rotated April 2021. See | |
# https://github.com/nodejs/Release. | |
node_tests: | |
name: "Node tests | Dart ${{ matrix.dart_channel }} | Node ${{ matrix.node_version }} | ${{ matrix.os }}" | |
runs-on: "${{ matrix.os }}" | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
dart_channel: [stable] | |
node_version: [18] | |
include: | |
# Temporarily adding back Node 12 here until we actually drop support | |
# in the package.json. | |
- os: ubuntu-latest | |
dart_channel: stable | |
node_version: 12 | |
# Include LTS versions on Ubuntu | |
- os: ubuntu-latest | |
dart_channel: stable | |
node_version: 16 | |
- os: ubuntu-latest | |
dart_channel: stable | |
node_version: 14 | |
- os: ubuntu-latest | |
dart_channel: dev | |
node_version: 18 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
with: {sdk: "${{ matrix.dart_channel }}"} | |
- run: dart pub get | |
- uses: actions/setup-node@v3 | |
with: {node-version: "${{ matrix.node_version }}"} | |
- run: npm install | |
- run: dart run grinder before-test | |
- name: Run tests | |
run: dart run test -j 2 -t node -r expanded | |
browser-test: | |
name: "Browser Tests | Dart ${{ matrix.dart-channel }}" | |
strategy: | |
matrix: | |
dart-channel: [stable] | |
fail-fast: false | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: browser-actions/setup-chrome@v1 | |
- uses: dart-lang/setup-dart@v1.2 | |
with: | |
sdk: ${{ matrix.dart-channel }} | |
- run: dart pub get | |
- run: dart run grinder before-test | |
- run: google-chrome --version | |
- run: dart run test --platform chrome -j 2 -t browser -r expanded | |
env: {CHROME_EXECUTABLE: chrome} | |
static_analysis: | |
name: Static analysis | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- name: Analyze Dart | |
run: dart analyze --fatal-warnings --fatal-infos . | |
dartdoc: | |
name: Dartdoc | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- name: dartdoc sass | |
run: dart run dartdoc --quiet --no-generate-docs | |
--errors ambiguous-doc-reference,broken-link,deprecated | |
--errors unknown-directive,unknown-macro,unresolved-doc-reference | |
- name: dartdoc sass_api | |
run: cd pkg/sass_api && dart run dartdoc --quiet --no-generate-docs | |
--errors ambiguous-doc-reference,broken-link,deprecated | |
--errors unknown-directive,unknown-macro,unresolved-doc-reference | |
double_check: | |
name: Double-check | |
runs-on: ubuntu-latest | |
needs: | |
- sass_spec_language | |
- sass_spec_js | |
- dart_tests | |
- node_tests | |
- static_analysis | |
- dartdoc | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'" | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- name: Run checks | |
run: dart run grinder double-check-before-release | |
bootstrap: | |
name: "Bootstrap ${{ matrix.bootstrap_version }}" | |
runs-on: ubuntu-latest | |
needs: [double_check] | |
strategy: | |
fail-fast: false | |
matrix: | |
bootstrap_version: [4, 5] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- run: dart run grinder fetch-bootstrap${{matrix.bootstrap_version}} | |
env: {GITHUB_BEARER_TOKEN: "${{ secrets.GITHUB_TOKEN }}"} | |
- name: Build | |
run: dart bin/sass.dart --quiet build/bootstrap/scss:build/bootstrap-output | |
bourbon: | |
name: Bourbon | |
runs-on: ubuntu-latest | |
needs: [double_check] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- run: dart run grinder fetch-bourbon | |
env: {GITHUB_BEARER_TOKEN: "${{ secrets.GITHUB_TOKEN }}"} | |
- name: Test | |
run: | | |
dart bin/sass.dart --quiet -I build/bourbon -I build/bourbon/spec/fixtures \ | |
build/bourbon/spec/fixtures:build/bourbon-output | |
foundation: | |
name: Foundation | |
runs-on: ubuntu-latest | |
needs: [double_check] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- run: dart run grinder fetch-foundation | |
env: {GITHUB_BEARER_TOKEN: "${{ secrets.GITHUB_TOKEN }}"} | |
# TODO(nweiz): Foundation has proper Sass tests, but they're currently not | |
# compatible with Dart Sass. Once they are, we should run those rather | |
# than just building the CSS output. | |
- name: Build | |
run: dart bin/sass.dart --quiet build/foundation-sites/assets:build/foundation-output | |
bulma: | |
name: Bulma | |
runs-on: ubuntu-latest | |
needs: [double_check] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- run: dart run grinder fetch-bulma | |
env: {GITHUB_BEARER_TOKEN: "${{ secrets.GITHUB_TOKEN }}"} | |
- name: Build | |
run: dart bin/sass.dart --quiet build/bulma/bulma.sass build/bulma-output.css | |
deploy_github_linux: | |
name: "Deploy Github: linux-ia32, linux-x64" | |
runs-on: ubuntu-latest | |
needs: [bootstrap, bourbon, foundation, bulma] | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'" | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- name: Deploy | |
run: dart run grinder pkg-github-release pkg-github-linux-ia32 pkg-github-linux-x64 | |
env: | |
GH_TOKEN: "${{ secrets.GH_TOKEN }}" | |
GH_USER: sassbot | |
deploy_github_linux_qemu: | |
name: "Deploy Github: linux-${{ matrix.arch }}" | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
include: | |
- arch: arm | |
platform: linux/arm/v7 | |
- arch: arm64 | |
platform: linux/arm64 | |
needs: [deploy_github_linux] | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'" | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: docker/setup-qemu-action@v2 | |
- name: Deploy | |
run: | | |
docker run --rm \ | |
--env "GH_TOKEN=$GH_TOKEN" \ | |
--env "GH_USER=$GH_USER" \ | |
--platform ${{ matrix.platform }} \ | |
--volume "$PWD:$PWD" \ | |
--workdir "$PWD" \ | |
docker.io/library/dart:latest \ | |
/bin/sh -c "dart pub get && dart run grinder pkg-github-linux-${{ matrix.arch }}" | |
env: | |
GH_TOKEN: "${{ secrets.GH_TOKEN }}" | |
GH_USER: sassbot | |
deploy_github: | |
name: "Deploy Github: ${{ matrix.platform }}" | |
runs-on: ${{ matrix.runner }} | |
needs: [deploy_github_linux] | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'" | |
strategy: | |
matrix: | |
include: | |
- runner: macos-latest | |
platform: macos-x64 | |
architecture: x64 | |
- runner: self-hosted | |
platform: macos-arm64 | |
architecture: arm64 | |
- runner: windows-latest | |
platform: windows | |
architecture: x64 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
# Workaround for dart-lang/setup-dart#59 | |
with: | |
architecture: ${{ matrix.architecture }} | |
- run: dart pub get | |
- name: Deploy | |
run: dart run grinder pkg-github-${{ matrix.platform }} | |
env: | |
GH_TOKEN: "${{ secrets.GH_TOKEN }}" | |
GH_USER: sassbot | |
deploy_npm: | |
name: Deploy npm | |
runs-on: ubuntu-latest | |
needs: [bootstrap, bourbon, foundation, bulma] | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'" | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- uses: actions/setup-node@v3 | |
with: {node-version: "${{ env.DEFAULT_NODE_VERSION }}"} | |
- name: Deploy | |
run: dart run grinder pkg-npm-deploy | |
env: | |
NPM_TOKEN: "${{ secrets.NPM_TOKEN }}" | |
deploy_bazel: | |
name: Deploy Bazel | |
runs-on: ubuntu-latest | |
needs: [deploy_npm] | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'" | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- uses: actions/setup-node@v3 | |
with: {node-version: "${{ env.DEFAULT_NODE_VERSION }}"} | |
- name: Deploy | |
run: dart run grinder update-bazel | |
env: | |
GH_TOKEN: "${{ secrets.GH_TOKEN }}" | |
GH_USER: sassbot | |
deploy_pub: | |
name: "Deploy Pub" | |
runs-on: ubuntu-latest | |
needs: [bootstrap, bourbon, foundation, bulma] | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'" | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- uses: actions/setup-node@v3 | |
with: {node-version: "${{ env.DEFAULT_NODE_VERSION }}"} | |
- name: Deploy | |
run: dart run grinder pkg-pub-deploy | |
env: {PUB_CREDENTIALS: "${{ secrets.PUB_CREDENTIALS }}"} | |
deploy_sub_packages: | |
name: "Deploy Sub-Packages" | |
runs-on: ubuntu-latest | |
needs: [deploy_pub] | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'" | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- name: Deploy | |
run: dart run grinder deploy-sub-packages | |
env: | |
PUB_CREDENTIALS: "${{ secrets.PUB_CREDENTIALS }}" | |
GH_TOKEN: "${{ secrets.GH_TOKEN }}" | |
GH_USER: sassbot | |
deploy_homebrew: | |
name: "Deploy Homebrew" | |
runs-on: ubuntu-latest | |
needs: [bootstrap, bourbon, foundation, bulma] | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'" | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- name: Deploy | |
run: dart run grinder pkg-homebrew-update | |
env: | |
GH_TOKEN: "${{ secrets.GH_TOKEN }}" | |
GH_USER: sassbot | |
deploy_chocolatey: | |
name: "Deploy Chocolatey" | |
runs-on: windows-latest | |
needs: [bootstrap, bourbon, foundation, bulma] | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'" | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- name: Deploy | |
run: dart run grinder pkg-chocolatey-deploy | |
env: {CHOCOLATEY_TOKEN: "${{ secrets.CHOCOLATEY_TOKEN }}"} | |
deploy_website: | |
name: "Deploy sass-lang.com" | |
runs-on: ubuntu-latest | |
needs: [bootstrap, bourbon, foundation, bulma] | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'" | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
repository: sass/sass-site | |
token: ${{ secrets.GH_TOKEN }} | |
- uses: EndBug/add-and-commit@v8 | |
with: | |
author_name: Sass Bot | |
author_email: sass.bot.beep.boop@gmail.com | |
message: Cut a release for a new Dart Sass version | |
commit: --allow-empty | |
release_embedded_compiler: | |
name: "Release Embedded Compiler" | |
runs-on: ubuntu-latest | |
needs: [deploy_pub, deploy_sub_packages] | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'" | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
repository: sass/dart-sass-embedded | |
token: ${{ secrets.GH_TOKEN }} | |
- uses: dart-lang/setup-dart@v1 | |
- uses: frenck/action-setup-yq@v1 | |
with: {version: v4.30.5} # frenck/action-setup-yq#35 | |
- name: Get version | |
id: version | |
run: | | |
echo "sass=${GITHUB_REF##*/}" | tee --append $GITHUB_OUTPUT | |
echo "sass_api=$(curl --fail --silent --show-error --location https://raw.githubusercontent.com/sass/dart-sass/${GITHUB_REF##*/}/pkg/sass_api/pubspec.yaml | yq .version)" | tee --append $GITHUB_OUTPUT | |
- name: Update version | |
run: | | |
sed -i 's/version: .*/version: ${{ steps.version.outputs.sass }}/' pubspec.yaml | |
dart pub remove sass_api | |
dart pub remove sass | |
dart pub add sass:${{ steps.version.outputs.sass }} | |
dart pub add sass_api:^${{ steps.version.outputs.sass_api }} | |
# Delete a dependency override on Sass if it exists, and delete the | |
# dependency_overrides field if it's now empty. The embedded compiler | |
# often uses dev dependencies to run against the latest Dart Sass, but | |
# once we release the latest version that's no longer necessary. | |
# | |
# TODO(dart-lang/pub#3700): Use pub for this instead to avoid removing | |
# blank lines. See also mikefarah/yq#515. | |
yq -i ' | |
del(.dependency_overrides.sass) | | |
to_entries | | |
map(select(.key != "dependency_overrides" or (.value | length >0))) | | |
from_entries | |
' pubspec.yaml | |
# The embedded compiler has a checked-in pubspec.yaml, so upgrade to | |
# make sure we're releasing against the latest version of all deps. | |
dart pub upgrade | |
curl --fail --silent --show-error --location --output CHANGELOG.md https://raw.githubusercontent.com/sass/dart-sass/${{ steps.version.outputs.sass }}/CHANGELOG.md | |
- uses: EndBug/add-and-commit@v8 | |
with: | |
author_name: Sass Bot | |
author_email: sass.bot.beep.boop@gmail.com | |
message: Update Dart Sass version and release | |
tag: ${{ steps.version.outputs.sass }} |