Skip to content

Commit

Permalink
Add Dart Sass support
Browse files Browse the repository at this point in the history
But note that the Dart Sass Embedded Protocol is still in beta (beta 5), a main release scheduled for Q1 2021.

Fixes gohugoio#7380
  • Loading branch information
bep committed Dec 28, 2020
1 parent f802bb2 commit bd945cd
Show file tree
Hide file tree
Showing 15 changed files with 676 additions and 128 deletions.
14 changes: 13 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,25 @@ cache:
- $HOME/AppData/Local/go-build

before_install:
- mkdir -p $HOME/bin
- export PATH="$HOME/bin":"$PATH";
- echo "Home is $HOME";
- df -h
# https://travis-ci.community/t/go-cant-find-gcc-with-go1-11-1-on-windows/293/5
- if [ "$TRAVIS_OS_NAME" = "windows" ]; then
choco install mingw -y;
choco install -y --force nodejs;
curl -LJO https://github.com/sass/dart-sass-embedded/releases/download/1.0.0-beta.5/sass_embedded-1.0.0-beta.5-windows-x64.zip;
unzip sass_embedded-1.0.0-beta.5-windows-x64.zip -d $HOME/bin;
export PATH=/c/tools/mingw64/bin:"$PATH";
fi
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then
curl -LJO https://github.com/sass/dart-sass-embedded/releases/download/1.0.0-beta.5/sass_embedded-1.0.0-beta.5-macos-x64.tar.gz;
tar -xvf sass_embedded-1.0.0-beta.5-macos-x64.tar.gz -C $HOME/bin;
fi
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then
curl -LJO https://github.com/sass/dart-sass-embedded/releases/download/1.0.0-beta.5/sass_embedded-1.0.0-beta.5-linux-x64.tar.gz;
tar -xvf sass_embedded-1.0.0-beta.5-linux-x64.tar.gz -C $HOME/bin;
fi
- gem install asciidoctor
- type asciidoctor

Expand Down
2 changes: 1 addition & 1 deletion common/herrors/error_locator.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func (e ErrorContext) Position() text.Position {

var _ causer = (*ErrorWithFileContext)(nil)

// ErrorWithFileContext is an error with some additional file context related
// ErrorWithFileCoxntext is an error with some additional file context related
// to that error.
type ErrorWithFileContext struct {
cause error
Expand Down
33 changes: 33 additions & 0 deletions deps/deps.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,9 @@ type Deps struct {
// BuildStartListeners will be notified before a build starts.
BuildStartListeners *Listeners

// Resources that gets closed when the build is done or the server shuts down.
BuildClosers *Closers

// Atomic values set during a build.
// This is common/global for all sites.
BuildState *BuildState
Expand Down Expand Up @@ -284,6 +287,7 @@ func New(cfg DepsCfg) (*Deps, error) {
Site: cfg.Site,
FileCaches: fileCaches,
BuildStartListeners: &Listeners{},
BuildClosers: &Closers{},
BuildState: buildState,
Running: cfg.Running,
Timeout: time.Duration(timeoutms) * time.Millisecond,
Expand All @@ -297,6 +301,10 @@ func New(cfg DepsCfg) (*Deps, error) {
return d, nil
}

func (d *Deps) Close() error {
return d.BuildClosers.Close()
}

// ForLanguage creates a copy of the Deps with the language dependent
// parts switched out.
func (d Deps) ForLanguage(cfg DepsCfg, onCreated func(d *Deps) error) (*Deps, error) {
Expand Down Expand Up @@ -399,3 +407,28 @@ func (b *BuildState) Incr() int {
func NewBuildState() BuildState {
return BuildState{}
}

type Closer interface {
Close() error
}

type Closers struct {
mu sync.Mutex
cs []Closer
}

func (cs *Closers) Add(c Closer) {
cs.mu.Lock()
defer cs.mu.Unlock()
cs.cs = append(cs.cs, c)
}

func (cs *Closers) Close() error {
cs.mu.Lock()
defer cs.mu.Unlock()
for _, c := range cs.cs {
c.Close()
}

return nil
}
7 changes: 6 additions & 1 deletion docs/content/en/hugo-pipes/scss-sass.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,19 @@ Any SASS or SCSS file can be transformed into a CSS file using `resources.ToCSS`
```

### Options

transpiler [string] {{< new-in "0.80.0" >}}

: The `transpiler` to use, valid values are `libsass` (default) and `dartsass`. Note that the Embedded Dart Sass project is still in beta (beta 5 at the time of writing). The release is scheduled for Q1 2021. We will try to improve the installation process by then, but if you want to use Hugo with Dart Sass you need to download a release binary from [Embedded Dart Sass](https://github.com/sass/dart-sass-embedded/releases) and make sure it's in your PC's `$PATH` (or `%PATH%` on Windows).

targetPath [string]
: If not set, the resource's target path will be the asset file original path with its extension replaced by `.css`.

outputStyle [string]
: Default is `nested`. Other available output styles are `expanded`, `compact` and `compressed`.

precision [int]
: Precision of floating point math.
: Precision of floating point math. **Note:** This option is not supported by Dart Sass.

enableSourceMap [bool]
: When enabled, a source map will be generated.
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ require (
github.com/aws/aws-sdk-go v1.35.0
github.com/bep/debounce v1.2.0
github.com/bep/gitmap v1.1.2
github.com/bep/godartsass v0.8.0
github.com/bep/golibsass v0.7.0
github.com/bep/tmc v0.5.1
github.com/cli/safeexec v1.0.0
Expand Down
5 changes: 5 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ github.com/bep/debounce v1.2.0 h1:wXds8Kq8qRfwAOpAxHrJDbCXgC5aHSzgQb/0gKsHQqo=
github.com/bep/debounce v1.2.0/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0=
github.com/bep/gitmap v1.1.2 h1:zk04w1qc1COTZPPYWDQHvns3y1afOsdRfraFQ3qI840=
github.com/bep/gitmap v1.1.2/go.mod h1:g9VRETxFUXNWzMiuxOwcudo6DfZkW9jOsOW0Ft4kYaY=
github.com/bep/godartsass v0.8.0 h1:zPQlC+yfX5wZIPZbvEcN6+4XWfr4BH6EvFRXnOC0Wic=
github.com/bep/godartsass v0.8.0/go.mod h1:nXQlHHk4H1ghUk6n/JkYKG5RD43yJfcfp5aHRqT/pc4=
github.com/bep/golibsass v0.7.0 h1:/ocxgtPZ5rgp7FA+mktzyent+fAg82tJq4iMsTMBAtA=
github.com/bep/golibsass v0.7.0/go.mod h1:DL87K8Un/+pWUS75ggYv41bliGiolxzDKWJAq3eJ1MA=
github.com/bep/tmc v0.5.1 h1:CsQnSC6MsomH64gw0cT5f+EwQDcvZz4AazKunFwTpuI=
Expand Down Expand Up @@ -262,6 +264,7 @@ github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3 h1:x95R7cp+rSeeqAMI2knLtQ0DKlaBhv2NrtrOvafPHRo=
Expand Down Expand Up @@ -839,6 +842,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
Expand Down
5 changes: 5 additions & 0 deletions hugolib/hugo_sites_build.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ func (h *HugoSites) Build(config BuildCfg, events ...fsnotify.Event) error {
// Make sure we don't trigger rebuilds in parallel.
h.runningMu.Lock()
defer h.runningMu.Unlock()
} else {
defer func() {
// TODO1 server close
h.Deps.BuildClosers.Close()
}()
}

ctx, task := trace.NewTask(context.Background(), "Build")
Expand Down
Loading

0 comments on commit bd945cd

Please sign in to comment.