diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml new file mode 100644 index 0000000000..86975970ae --- /dev/null +++ b/.github/workflows/build-and-test.yml @@ -0,0 +1,218 @@ +name: GitHub CI + +on: + push: + branches: + - master + - develop + pull_request: + branches: + - master + - develop + +jobs: + + linux-and-mac: + # if: ${{ false }} + runs-on: ${{ matrix.config.os }} + name: ${{ matrix.config.os }} BUILD=${{ matrix.config.build }} CC=${{ matrix.config.cc }} CXX=${{ matrix.config.cxx }} AUTOTOOLS=${{ matrix.config.autotools }} + + strategy: + fail-fast: false + matrix: + config: + #- {os: ubuntu-16.04, build: 'static', cc: 'gcc-4.4', cxx: 'g++-4.4', autotools: 'no', cppstd: 'gnu++0x'} + #- {os: ubuntu-16.04, build: 'static', cc: 'gcc-4.6', cxx: 'g++-4.6', autotools: 'no', cppstd: 'gnu++0x'} + - {os: ubuntu-16.04, build: 'static', cc: 'gcc-4.7', cxx: 'g++-4.7', autotools: 'no', cppstd: 'gnu++11'} + - {os: ubuntu-16.04, build: 'static', cc: 'gcc-4.8', cxx: 'g++-4.8', autotools: 'no', cppstd: 'c++11'} + - {os: ubuntu-16.04, build: 'static', cc: 'gcc-5', cxx: 'g++-5', autotools: 'no', cppstd: 'c++11'} + - {os: ubuntu-16.04, build: 'static', cc: 'gcc-6', cxx: 'g++-6', autotools: 'no', cppstd: 'c++11'} + - {os: ubuntu-latest, build: 'static', cc: 'gcc-7', cxx: 'g++-7', autotools: 'no', cppstd: 'c++11'} + - {os: ubuntu-latest, build: 'shared', cc: 'gcc', cxx: 'g++', autotools: 'yes', cppstd: 'c++11'} + - {os: ubuntu-latest, build: 'static', cc: 'gcc', cxx: 'g++', autotools: 'yes', cppstd: 'c++11'} + - {os: ubuntu-latest, build: 'shared', cc: 'gcc', cxx: 'g++', autotools: 'no', cppstd: 'c++11'} + - {os: ubuntu-latest, build: 'static', cc: 'gcc', cxx: 'g++', autotools: 'no', cppstd: 'c++11'} + - {os: ubuntu-latest, build: 'shared', cc: 'clang', cxx: 'clang++', autotools: 'yes', cppstd: 'c++11'} + - {os: ubuntu-latest, build: 'static', cc: 'clang', cxx: 'clang++', autotools: 'yes', cppstd: 'c++11'} + - {os: ubuntu-latest, build: 'shared', cc: 'clang', cxx: 'clang++', autotools: 'no', cppstd: 'c++11'} + - {os: ubuntu-latest, build: 'static', cc: 'clang', cxx: 'clang++', autotools: 'no', cppstd: 'c++11'} + - {os: macOS-latest, build: 'shared', cc: 'clang', cxx: 'clang++', autotools: 'yes', cppstd: 'c++11'} + - {os: macOS-latest, build: 'static', cc: 'clang', cxx: 'clang++', autotools: 'yes', cppstd: 'c++11'} + - {os: macOS-latest, build: 'shared', cc: 'clang', cxx: 'clang++', autotools: 'no', cppstd: 'c++11'} + - {os: macOS-latest, build: 'static', cc: 'clang', cxx: 'clang++', autotools: 'no', cppstd: 'c++11'} + + env: + ASAN_OPTIONS: detect_odr_violation=0 + AUTOTOOLS: ${{ matrix.config.autotools }} + COVERAGE: no + BUILD: ${{ matrix.config.build }} + CXX: ${{ matrix.config.cxx }} + CC: ${{ matrix.config.cc }} + + steps: + - uses: actions/checkout@v2 + - uses: ruby/setup-ruby@v1 + if: matrix.config.os == 'ubuntu-16.04' + with: + ruby-version: 2.6 + - name: Install ruby hrx module + if: matrix.config.os == 'ubuntu-16.04' + run: sudo /opt/hostedtoolcache/Ruby/2.6.7/x64/bin/gem install hrx + - name: Install ruby minitest module + if: matrix.config.os == 'ubuntu-16.04' + run: sudo /opt/hostedtoolcache/Ruby/2.6.7/x64/bin/gem install minitest + - name: Install automake if needed (MacOS) + if: runner.os == 'macOS' + run: brew install automake + - name: Install gcc 7 if needed + if: matrix.config.cc == 'gcc-7' + run: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/test + sudo apt update + sudo apt install g++-7 -y + - name: Install gcc 6 if needed + if: matrix.config.cc == 'gcc-6' + run: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/test + sudo apt update + sudo apt install g++-6 -y + - name: Install gcc 5 if needed + if: matrix.config.cc == 'gcc-5' + run: | + sudo add-apt-repository universe + sudo add-apt-repository multiverse + sudo apt update + sudo apt install g++-5 -y + - name: Install gcc 4.8 if needed + if: matrix.config.cc == 'gcc-4.8' + run: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/test + sudo apt update + sudo apt install g++-4.8 -y + - name: Install gcc 4.7 if needed + if: matrix.config.cc == 'gcc-4.7' + run: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/test + sudo apt update + sudo apt install g++-4.7 -y + - name: Install gcc 4.6 if needed + if: matrix.config.cc == 'gcc-4.6' + run: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/test + sudo apt update + sudo apt install g++-4.6 -y + - name: Install gcc 4.5 if needed + if: matrix.config.cc == 'gcc-4.5' + run: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/test + sudo apt update + sudo apt install g++-4.5 -y + - name: Install gcc 4.4 if needed + if: matrix.config.cc == 'gcc-4.4' + run: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/test + sudo apt update + sudo apt install g++-4.4 -y + - name: ./script/ci-install-deps + env: + MAKE_OPTS: LIBSASS_CPPSTD=${{ matrix.config.cppstd }} + run: ./script/ci-install-deps + - name: ./script/ci-install-compiler + env: + MAKE_OPTS: LIBSASS_CPPSTD=${{ matrix.config.cppstd }} + run: ./script/ci-install-compiler + - name: ./script/ci-build-libsass + env: + MAKE_OPTS: LIBSASS_CPPSTD=${{ matrix.config.cppstd }} + run: ./script/ci-build-libsass + + + windows-msvc: + runs-on: windows-latest + name: Windows MSVC build + + strategy: + fail-fast: false + matrix: + config: + - {build: Release, platform: Win64} + - {build: Debug, platform: Win64} + - {build: Release, platform: Win32} + - {build: Debug, platform: Win32} + + steps: + - name: Change git config to preserve line-endings + run: | + git config --system core.autocrlf false + git config --system core.eol lf + - uses: actions/checkout@v2 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.6 + bundler-cache: true + - name: Install ruby hrx module + run: gem install hrx + - name: Install ruby minitest module + run: gem install minitest + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.0.2 + - name: Clone and checkout sassc repository + run: git clone https://github.com/sass/sassc.git + - name: Clone and checkout sass-spec repository + run: git clone https://github.com/sass/sass-spec.git + - name: Compile libsass ${{ matrix.config.build }} build for ${{ matrix.config.platform }} + run: msbuild /m:4 /p:"Configuration=${{ matrix.config.build }};Platform=${{ matrix.config.platform }}" sassc\win\sassc.sln + - name: Execute spec test runner + run: ruby sass-spec/sass-spec.rb --probe-todo --impl libsass -c sassc/bin/sassc.exe -s sass-spec/spec + + windows-mingw: + runs-on: windows-latest + name: Windows MinGW build + + strategy: + fail-fast: false + matrix: + config: + - {build: shared, platform: x64} + - {build: static, platform: x64} + - {build: shared, platform: x86} + - {build: static, platform: x86} + + steps: + - name: Change git config to preserve line-endings + run: | + git config --system core.autocrlf false + git config --system core.eol lf + - uses: actions/checkout@v2 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.6 + bundler-cache: true + - name: Set up MinGW + uses: egor-tensin/setup-mingw@v2 + with: + platform: ${{ matrix.config.platform }} + - name: Install ruby hrx module + run: gem install hrx + - name: Install ruby minitest module + run: gem install minitest + - name: Clone and checkout sassc repository + run: git clone https://github.com/sass/sassc.git + - name: Clone and checkout sass-spec repository + run: git clone https://github.com/sass/sass-spec.git + - name: Add libsass library path to be found + if: matrix.config.build == 'shared' + run: echo "/d/a/libsass/libsass/lib" >> $GITHUB_PATH + - name: Compile libsass ${{ matrix.config.build }} build for ${{ matrix.config.platform }} + run: make ${{ matrix.config.build }} BUILD=${{ matrix.config.build }} + - name: Copy library over to pass call test + if: matrix.config.build == 'shared' + run: copy /a/libsass/libsass/lib/libsass.dll sassc/bin/ + - name: Compile sassc ${{ matrix.config.build }} build for ${{ matrix.config.platform }} + run: make sassc BUILD=${{ matrix.config.build }} + - name: Execute spec test runner + run: ruby sass-spec/sass-spec.rb --probe-todo --impl libsass -c sassc/bin/sassc.exe -s sass-spec/spec + + +#- name: Install LLVM and Clang +# uses: KyleMayes/install-llvm-action@v1.2.2 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d2a0ca0f45..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,70 +0,0 @@ -language: cpp - -# ASan needs ptrace support which currently requires `sudo: required`. -# See https://github.com/travis-ci/travis-ci/issues/9033. -sudo: required - -# don't create redundant code coverage reports -# - AUTOTOOLS=yes COVERAGE=yes BUILD=static -# - AUTOTOOLS=no COVERAGE=yes BUILD=shared -# - AUTOTOOLS=no COVERAGE=no BUILD=static - -# further speed up day by day travis-ci builds -# re-enable this if you change the makefiles -# this will still catch all coding errors! -# - AUTOTOOLS=yes COVERAGE=no BUILD=static - -# currently there are various issues when -# built with coverage, clang and autotools -# - AUTOTOOLS=yes COVERAGE=yes BUILD=shared - -matrix: - include : - - os: linux - compiler: gcc - env: AUTOTOOLS=no COVERAGE=yes BUILD=static - - os: linux - compiler: g++-5 - env: AUTOTOOLS=yes COVERAGE=no BUILD=shared - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-5 - - os: linux - compiler: g++-8 - env: AUTOTOOLS=yes COVERAGE=no BUILD=shared - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-8 - - os: linux - compiler: clang - # This build runs with ASan and we set `detect_odr_violation=0` - # to work around https://bugs.llvm.org/show_bug.cgi?id=37545. - env: AUTOTOOLS=no COVERAGE=no BUILD=static ASAN_OPTIONS=detect_odr_violation=0 - - os: linux - compiler: clang - env: AUTOTOOLS=yes COVERAGE=no BUILD=shared - - os: osx - compiler: clang - env: AUTOTOOLS=no COVERAGE=no BUILD=shared - - os: osx - compiler: clang - env: AUTOTOOLS=no COVERAGE=no BUILD=static - - os: osx - compiler: clang - env: AUTOTOOLS=yes COVERAGE=no BUILD=shared - -script: - - ./script/ci-build-libsass - - ./script/ci-build-plugin math - - ./script/ci-build-plugin glob - - ./script/ci-build-plugin digest - - ./script/ci-build-plugin tests -before_install: ./script/ci-install-deps -install: ./script/ci-install-compiler -after_success: ./script/ci-report-coverage diff --git a/Makefile b/Makefile index 30023bab0e..4b6637f1aa 100644 --- a/Makefile +++ b/Makefile @@ -57,8 +57,9 @@ ifdef LIBSASS_VERSION CXXFLAGS += -DLIBSASS_VERSION="\"$(LIBSASS_VERSION)\"" endif -CXXFLAGS += -std=c++11 -LDFLAGS += -std=c++11 +LIBSASS_CPPSTD ?= c++11 +CXXFLAGS += -std=$(LIBSASS_CPPSTD) +LDFLAGS += -std=$(LIBSASS_CPPSTD) ifeq (Windows,$(UNAME)) ifneq ($(BUILD),shared) diff --git a/Readme.md b/Readme.md index ca8b89e317..2d1a1d4614 100644 --- a/Readme.md +++ b/Readme.md @@ -4,9 +4,9 @@ LibSass - Sass compiler written in C++ Currently maintained by Marcel Greter ([@mgreter]) and Michael Mifsud ([@xzyfer]) Originally created by Aaron Leung ([@akhleung]) and Hampton Catlin ([@hcatlin]) -[![Unix CI](https://travis-ci.org/sass/libsass.svg?branch=master)](https://travis-ci.org/sass/libsass "Travis CI") +[![GitHub CI](https://github.com/sass/libsass/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/sass/libsass/actions/workflows/build-and-test.yml "GitHub CI") [![Windows CI](https://ci.appveyor.com/api/projects/status/github/sass/libsass?svg=true)](https://ci.appveyor.com/project/sass/libsass/branch/master "Appveyor CI") -[![Coverage Status](https://img.shields.io/coveralls/sass/libsass.svg)](https://coveralls.io/r/sass/libsass?branch=feature%2Ftest-travis-ci-3 "Code coverage of spec tests") +[![Coverage Status](https://img.shields.io/coveralls/sass/libsass.svg)](https://coveralls.io/r/sass/libsass?branch=master "Code coverage of spec tests") [![Percentage of issues still open](http://isitmaintained.com/badge/open/sass/libsass.svg)](http://isitmaintained.com/project/sass/libsass "Percentage of issues still open") [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/sass/libsass.svg)](http://isitmaintained.com/project/sass/libsass "Average time to resolve an issue") [![Bountysource](https://www.bountysource.com/badge/tracker?tracker_id=283068)](https://www.bountysource.com/trackers/283068-libsass?utm_source=283068&utm_medium=shield&utm_campaign=TRACKER_BADGE "Bountysource") diff --git a/docs/build.md b/docs/build.md index c656d88396..531480aa14 100644 --- a/docs/build.md +++ b/docs/build.md @@ -69,10 +69,10 @@ Continuous Integration We use two CI services to automatically test all commits against the latest [spec test-suite][5]. -- [LibSass on Travis-CI (linux)][7] -[![Build Status](https://travis-ci.org/sass/libsass.png?branch=master)](https://travis-ci.org/sass/libsass) +- [LibSass on GitHub Actions (linux)][7] +[![Build Status](https://github.com/sass/libsass/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/sass/libsass/actions/workflows/build-and-test.yml) - [LibSass on AppVeyor (windows)][8] -[![Build status](https://ci.appveyor.com/api/projects/status/github/sass/libsass?svg=true)](https://ci.appveyor.com/project/mgreter/libsass-513/branch/master) +[![Build status](https://ci.appveyor.com/api/projects/status/github/sass/libsass?svg=true)](https://ci.appveyor.com/project/sass/libsass/branch/master) Why not using CMake? -- @@ -90,7 +90,7 @@ Miscellaneous [4]: build-shared-library.md [5]: https://github.com/sass/sass-spec [6]: https://github.com/sass/sassc -[7]: https://github.com/sass/libsass/blob/master/.travis.yml +[7]: https://github.com/sass/libsass/blob/master/.github/workflows [8]: https://github.com/sass/libsass/blob/master/appveyor.yml [9]: implementations.md [10]: build-on-darwin.md diff --git a/script/ci-build-libsass b/script/ci-build-libsass index d4ade4eb73..84f25e00cb 100755 --- a/script/ci-build-libsass +++ b/script/ci-build-libsass @@ -4,6 +4,8 @@ set -e script/bootstrap +echo Building LibSass $MAKE_OPTS + # export this path right here (was in script/spec before) export SASS_LIBSASS_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/../ && pwd )" @@ -90,8 +92,8 @@ else make $MAKE_OPTS clean # Run C++ unit tests - make -C test clean - make -C test test + make $MAKE_OPTS -C test clean + make $MAKE_OPTS -C test test fi diff --git a/script/ci-install-compiler b/script/ci-install-compiler index 30505a5440..bccc75ae45 100755 --- a/script/ci-install-compiler +++ b/script/ci-install-compiler @@ -1,8 +1,8 @@ #!/bin/bash -gem install minitest -gem install minitap -gem install rspec -gem install hrx +sudo gem install minitest +sudo gem install minitap +sudo gem install rspec +sudo gem install hrx -pip2 install --user 'requests[security]' +# sudo pip2 install --user 'requests[security]' diff --git a/test/Makefile b/test/Makefile index 0f9aa30bcf..ac512f0ebb 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,5 +1,10 @@ CXX ?= c++ -CXXFLAGS := -I ../include/ -std=c++11 -fsanitize=address -g -O1 -fno-omit-frame-pointer + +CXXFLAGS := -I ../include/ -g -O1 -fno-omit-frame-pointer + +LIBSASS_CPPSTD ?= c++11 +CXXFLAGS += -std=$(LIBSASS_CPPSTD) +LDFLAGS += -std=$(LIBSASS_CPPSTD) test: test_shared_ptr test_util_string