Merge pull request #1955 from sass/embedded #1283
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: | |
format: | |
name: Code formatting | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart format --fix . | |
- run: git diff --exit-code | |
static_analysis: | |
name: Static analysis | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- uses: ./.github/util/build-protobuf | |
with: {github-token: "${{ github.token }}"} | |
- name: Analyze Dart | |
run: dart analyze --fatal-warnings ./ | |
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 | |
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 | |
- uses: ./.github/util/build-protobuf | |
with: {github-token: "${{ github.token }}"} | |
- 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 | Pure JS | 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 | |
- uses: ./.github/util/build-protobuf | |
with: {github-token: "${{ github.token }}"} | |
- 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 | |
# The versions should be kept up-to-date with the latest LTS Node releases. | |
# They next need to be rotated October 2021. See | |
# https://github.com/nodejs/Release. | |
sass_spec_js_embedded: | |
name: 'JS API Tests | Embedded | Node ${{ matrix.node_version }} | ${{ matrix.os }}' | |
runs-on: ${{ matrix.os }}-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu, windows, macos] | |
node_version: [18] | |
include: | |
# Include LTS versions on Ubuntu | |
- os: ubuntu | |
node_version: 16 | |
- os: ubuntu | |
node_version: 14 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dart-lang/setup-dart@v1 | |
with: {sdk: stable} | |
- run: dart pub get | |
- uses: ./.github/util/build-protobuf | |
with: {github-token: "${{ github.token }}"} | |
- name: Check out the embedded host | |
uses: sass/clone-linked-repo@v1 | |
with: {repo: sass/embedded-host-node} | |
- name: Check out the JS API definition | |
uses: sass/clone-linked-repo@v1 | |
with: {repo: sass/sass, path: language} | |
- name: Initialize embedded host | |
run: | | |
npm install | |
npm run init -- --protocol-path=../build/embedded-protocol \ | |
--compiler-path=.. --api-path=../language | |
npm run compile | |
mv {`pwd`/,dist/}lib/src/vendor/dart-sass | |
working-directory: embedded-host-node | |
- 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: Version info | |
run: | | |
path=embedded-host-node/dist/lib/src/vendor/dart-sass/sass | |
if [[ -f "$path.cmd" ]]; then "./$path.cmd" --version | |
elif [[ -f "$path.bat" ]]; then "./$path.bat" --version | |
elif [[ -f "$path.exe" ]]; then "./$path.exe" --version | |
else "./$path" --version | |
fi | |
- name: Run tests | |
run: npm run js-api-spec -- --sassPackage ../embedded-host-node --sassSassRepo ../language | |
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 | |
- uses: ./.github/util/build-protobuf | |
with: {github-token: "${{ github.token }}"} | |
- run: dart run grinder pkg-standalone-dev | |
- name: Run tests | |
run: dart run test -p vm -x node | |
# 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: | |
# 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 | |
- uses: ./.github/util/build-protobuf | |
with: {github-token: "${{ github.token }}"} | |
- run: dart run grinder before-test | |
- name: Run tests | |
run: dart run test -j 2 -t node | |
double_check: | |
name: Double-check | |
runs-on: ubuntu-latest | |
needs: | |
- sass_spec_language | |
- sass_spec_js | |
- dart_tests | |
- node_tests | |
- static_analysis | |
- dartdoc | |
- format | |
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: bufbuild/buf-setup-action@v1.13.1 | |
with: {github_token: "${{ github.token }}"} | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- run: dart run grinder protobuf | |
- 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: bufbuild/buf-setup-action@v1.13.1 | |
with: {github_token: "${{ github.token }}"} | |
- uses: dart-lang/setup-dart@v1 | |
- run: dart pub get | |
- run: dart run grinder protobuf | |
- 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: bufbuild/buf-setup-action@v1.13.1 | |
with: {github_token: "${{ github.token }}"} | |
- uses: dart-lang/setup-dart@v1 | |
# Workaround for dart-lang/setup-dart#59 | |
with: | |
architecture: ${{ matrix.architecture }} | |
- run: dart pub get | |
- run: dart run grinder protobuf | |
- 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 | |
- run: dart run grinder protobuf | |
- 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_host: | |
name: "Release Embedded Host" | |
runs-on: ubuntu-latest | |
needs: [deploy_github_linux, deploy_github_linux_qemu, deploy_github] | |
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass-embedded'" | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
repository: sass/embedded-host-node | |
token: ${{ secrets.GH_TOKEN }} | |
- name: Get version | |
id: version | |
run: echo "::set-output name=version::${GITHUB_REF##*/}" | |
- name: Update version | |
run: | | |
# Update binary package versions | |
for dir in $(ls npm); do | |
cat "npm/$dir/package.json" | | |
jq --arg version ${{ steps.version.outputs.version }} ' | |
.version |= $version | |
' > package.json.tmp && | |
mv package.json.tmp "npm/$dir/package.json" | |
done | |
# Update main package version and dependencies on binary packages | |
cat package.json | | |
jq --arg version ${{ steps.version.outputs.version }} ' | |
.version |= $version | | |
."compiler-version" |= $version | | |
.optionalDependencies = (.optionalDependencies | .[] |= $version) | |
' > package.json.tmp && | |
mv package.json.tmp package.json | |
curl https://raw.githubusercontent.com/sass/dart-sass/${{ steps.version.outputs.version }}/CHANGELOG.md > CHANGELOG.md | |
shell: bash | |
- 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.version }} |