mirror of
https://github.com/danog/dart-sass.git
synced 2024-12-02 17:49:38 +01:00
60b8be6510
Now that we've properly dropped Node 12 support, we can remove it entirely from the CI
527 lines
17 KiB
YAML
527 lines
17 KiB
YAML
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:
|
|
# 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
|
|
|
|
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 }}
|