Skip to content

Cut a release

Cut a release #1773

Workflow file for this run

name: CI
defaults:
run: {shell: bash}
# The default Node version lives in ../util/initialize/action.yml. It should be
# kept up-to-date with the latest Node LTS releases, along with the various
# node-version matrices below.
#
# Next update: April 2021
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: ./.github/util/initialize
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: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- 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: ./.github/util/initialize
with:
dart-sdk: ${{ matrix.dart_channel }}
github-token: ${{ github.token }}
- uses: ./.github/util/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 | 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: ./.github/util/initialize
with:
dart-sdk: ${{ matrix.dart_channel }}
github-token: ${{ github.token }}
node-version: ${{ matrix.node-version }}
- uses: ./.github/util/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
if: "github.event_name != 'pull_request' || !contains(github.event.pull_request.body, 'skip sass-embedded')"
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: ./.github/util/initialize
with:
github-token: ${{ github.token }}
node-version: ${{ matrix.node-version }}
- uses: ./.github/util/sass-spec
- name: Check out the embedded host
uses: sass/clone-linked-repo@v1
with: {repo: sass/embedded-host-node}
- name: Check out the language repo
uses: sass/clone-linked-repo@v1
with: {repo: sass/sass, path: build/language}
- name: Initialize embedded host
run: |
npm install
npm run init -- --compiler-path=.. --language-path=../build/language
npm run compile
mv {`pwd`/,dist/}lib/src/vendor/dart-sass
working-directory: embedded-host-node
- 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 ../build/language
working-directory: sass-spec
sass_spec_js_browser:
name: "JS API Tests | Browser | 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: ./.github/util/initialize
with:
dart-sdk: ${{ matrix.dart_channel }}
github-token: ${{ github.token }}
- uses: ./.github/util/sass-spec
- name: Build JS
run: dart run grinder pkg-npm-dev
- name: Install built dependencies
run: npm install
working-directory: build/npm
- 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 --browser
working-directory: sass-spec
env:
CHROME_EXECUTABLE: chrome
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: ./.github/util/initialize
with:
dart-sdk: ${{ matrix.dart_channel }}
github-token: ${{ github.token }}
- run: dart run grinder pkg-standalone-dev
- name: Run tests
run: dart run test -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: ./.github/util/initialize
with:
dart-sdk: ${{ matrix.dart_channel }}
github-token: ${{ github.token }}
node-version: ${{ matrix.node-version }}
- run: dart run grinder pkg-npm-dev
- name: Run tests
run: dart run test -t node -j 2
browser_tests:
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: ./.github/util/initialize
with:
dart-sdk: ${{ matrix.dart_channel }}
github-token: ${{ github.token }}
- run: dart run grinder pkg-npm-dev
- name: Run tests
run: dart run test -p chrome -j 2
env:
CHROME_EXECUTABLE: chrome
double_check:
name: Double-check
runs-on: ubuntu-latest
needs:
- sass_spec_language
- sass_spec_js
- sass_spec_js_browser
- sass_spec_js_embedded
- dart_tests
- node_tests
- browser_tests
- static_analysis
- dartdoc
- format
if: "startsWith(github.ref, 'refs/tags/') && github.repository == 'sass/dart-sass'"
steps:
- uses: actions/checkout@v3
- uses: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- 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: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- 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: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- 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: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- 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: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- 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: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- 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: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- 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: ./.github/util/initialize
# Workaround for dart-lang/setup-dart#59
with:
github-token: ${{ github.token }}
architecture: ${{ matrix.architecture }}
- 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: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- 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: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- 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: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- name: Deploy
run: dart run grinder protobuf 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: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- 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: ./.github/util/initialize
with: {github-token: "${{ github.token }}"}
- 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.SASS_SITE_TOKEN }}
- uses: EndBug/add-and-commit@v9
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'"
steps:
- uses: actions/checkout@v3
with:
repository: sass/embedded-host-node
token: ${{ secrets.GH_TOKEN }}
- name: Get version
id: version
run: echo "version=${GITHUB_REF##*/}" | tee --append "$GITHUB_OUTPUT"
- 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@v9
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 }}