diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..fcb4f3fd --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,85 @@ +on: + - push + - pull_request +jobs: + CI: + runs-on: ${{ matrix.os }} + container: ${{ matrix.container }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-20.04 + container: centos:7 + nodejs_version: 10 + coverage: true + prebuild: true + - os: ubuntu-20.04 + container: centos:7 + nodejs_version: 12 + - os: ubuntu-20.04 + container: centos:7 + nodejs_version: 14 + - os: ubuntu-20.04 + container: centos:7 + nodejs_version: 15 + - os: ubuntu-20.04 + container: node:10-alpine3.11 + prebuild: true + - os: ubuntu-20.04 + container: node:12-alpine3.11 + - os: ubuntu-20.04 + container: node:14-alpine3.11 + - os: ubuntu-20.04 + container: node:15-alpine3.11 + - os: macos-10.15 + nodejs_version: 10 + prebuild: true + - os: macos-10.15 + nodejs_version: 12 + - os: macos-10.15 + nodejs_version: 14 + - os: macos-10.15 + nodejs_version: 15 + - os: windows-2019 + nodejs_version: 10 + prebuild: true + - os: windows-2019 + nodejs_version: 12 + - os: windows-2019 + nodejs_version: 14 + - os: windows-2019 + nodejs_version: 15 + steps: + - name: Dependencies (Linux glibc) + if: contains(matrix.container, 'centos') + run: | + curl -sL https://rpm.nodesource.com/setup_${{ matrix.nodejs_version }}.x | bash - + yum install -y gcc-c++ make git python3 nodejs + - name: Dependencies (Linux musl) + if: contains(matrix.container, 'alpine') + run: apk add build-base git python3 --update-cache + - name: Dependencies (macOS, Windows) + if: contains(matrix.os, 'macos') || contains(matrix.os, 'windows') + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.nodejs_version }} + - name: Checkout + uses: actions/checkout@v2 + - name: Fix working directory ownership + if: matrix.container + run: chown root.root . + - name: Install + run: npm install --build-from-source --unsafe-perm + - name: Test + run: npm test + - name: Coverage + if: matrix.coverage + uses: coverallsapp/github-action@v1.1.2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Prebuild + if: matrix.prebuild && startsWith(github.ref, 'refs/tags/') + env: + prebuild_upload: ${{ secrets.GITHUB_TOKEN }} + run: npx prebuild --runtime napi --target 3 diff --git a/.travis.yml b/.travis.yml index 07d22418..0020d9cf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,104 +1,19 @@ jobs: include: - - name: "Linux x64 (CentOS 7, glibc 2.17) - Node.js 10" - os: linux - dist: bionic - language: shell - before_install: - - sudo docker run -dit --name sharp --env CI --env TRAVIS_TAG --env prebuild_upload --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp centos:7 - - sudo docker exec sharp bash -c "curl -sL https://rpm.nodesource.com/setup_10.x | bash -" - - sudo docker exec sharp yum install -y gcc-c++ make git nodejs - install: sudo docker exec sharp bash -c "npm install --build-from-source --unsafe-perm" - script: sudo docker exec sharp bash -c "npm test" - - - name: "Linux x64 (CentOS 7, glibc 2.17) - Node.js 12" - os: linux - dist: bionic - language: shell - before_install: - - sudo docker run -dit --name sharp --env CI --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp centos:7 - - sudo docker exec sharp bash -c "curl -sL https://rpm.nodesource.com/setup_12.x | bash -" - - sudo docker exec sharp yum install -y gcc-c++ make git nodejs - install: sudo docker exec sharp bash -c "npm install --build-from-source --unsafe-perm" - script: sudo docker exec sharp bash -c "npm test" - - - name: "Linux x64 (CentOS 7, glibc 2.17) - Node.js 14" - os: linux - dist: bionic - language: shell - before_install: - - sudo docker run -dit --name sharp --env CI --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp centos:7 - - sudo docker exec sharp bash -c "curl -sL https://rpm.nodesource.com/setup_14.x | bash -" - - sudo docker exec sharp yum install -y gcc-c++ make git nodejs - install: sudo docker exec sharp bash -c "npm install --build-from-source --unsafe-perm" - script: sudo docker exec sharp bash -c "npm test" - - - name: "Linux x64 (CentOS 7, glibc 2.17) - Node.js 15" - os: linux - dist: bionic - language: shell - before_install: - - sudo chown 0.0 ${PWD} - - sudo docker run -dit --name sharp --env CI --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp centos:7 - - sudo docker exec sharp bash -c "curl -sL https://rpm.nodesource.com/setup_15.x | bash -" - - sudo docker exec sharp yum install -y gcc-c++ make git nodejs - install: sudo docker exec sharp bash -c "npm install --build-from-source --unsafe-perm" - script: sudo docker exec sharp bash -c "npm test" - - - name: "Linux x64 (Alpine 3.11, musl 1.1.24) - Node.js 10" - os: linux - dist: bionic - language: shell - before_install: - - sudo docker run -dit --name sharp --env CI --env TRAVIS_TAG --env prebuild_upload --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp node:10-alpine3.11 - - sudo docker exec sharp apk add build-base git python2 --update-cache - install: sudo docker exec sharp sh -c "npm install --build-from-source --unsafe-perm" - script: sudo docker exec sharp sh -c "npm test" - - - name: "Linux x64 (Alpine 3.11, musl 1.1.24) - Node.js 12" - os: linux - dist: bionic - language: shell - before_install: - - sudo docker run -dit --name sharp --env CI --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp node:12-alpine3.11 - - sudo docker exec sharp apk add build-base git python2 --update-cache - install: sudo docker exec sharp sh -c "npm install --build-from-source --unsafe-perm" - script: sudo docker exec sharp sh -c "npm test" - - - name: "Linux x64 (Alpine 3.11, musl 1.1.24) - Node.js 14" - os: linux - dist: bionic - language: shell - before_install: - - sudo docker run -dit --name sharp --env CI --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp node:14-alpine3.11 - - sudo docker exec sharp apk add build-base git python2 --update-cache - install: sudo docker exec sharp sh -c "npm install --build-from-source --unsafe-perm" - script: sudo docker exec sharp sh -c "npm test" - - - name: "Linux x64 (Alpine 3.11, musl 1.1.24) - Node.js 15" - os: linux - dist: bionic - language: shell - before_install: - - sudo chown 0.0 ${PWD} - - sudo docker run -dit --name sharp --env CI --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp node:15-alpine3.11 - - sudo docker exec sharp apk add build-base git python2 --update-cache - install: sudo docker exec sharp sh -c "npm install --build-from-source --unsafe-perm" - script: sudo docker exec sharp sh -c "npm test" - - name: "Linux ARM64v8 (Debian 11, glibc 2.29) - Node.js 10" arch: arm64 os: linux dist: bionic language: shell before_install: - - sudo docker run -dit --name sharp --env CI --env TRAVIS_TAG --env prebuild_upload --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp arm64v8/debian:bullseye - - sudo docker exec sharp sh -c "apt-get update && apt-get install -y build-essential git python2 curl" + - sudo docker run -dit --name sharp --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp arm64v8/debian:bullseye + - sudo docker exec sharp sh -c "apt-get update && apt-get install -y build-essential git python3 curl" - sudo docker exec sharp sh -c "curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -" - sudo docker exec sharp sh -c "echo 'deb https://deb.nodesource.com/node_10.x sid main' >/etc/apt/sources.list.d/nodesource.list" - sudo docker exec sharp sh -c "apt-get update && apt-get install -y nodejs=10.*" install: sudo docker exec sharp sh -c "npm install --build-from-source --unsafe-perm" script: sudo docker exec sharp sh -c "npm test" + after_success: "[[ -n $TRAVIS_TAG ]] && sudo docker exec --env prebuild_upload sharp sh -c \"npx prebuild --runtime napi --target 3\"" - name: "Linux ARM64v8 (Debian 11, glibc 2.29) - Node.js 12" arch: arm64 @@ -106,8 +21,8 @@ jobs: dist: bionic language: shell before_install: - - sudo docker run -dit --name sharp --env CI --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp arm64v8/debian:bullseye - - sudo docker exec sharp sh -c "apt-get update && apt-get install -y build-essential git python2 curl" + - sudo docker run -dit --name sharp --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp arm64v8/debian:bullseye + - sudo docker exec sharp sh -c "apt-get update && apt-get install -y build-essential git python3 curl" - sudo docker exec sharp sh -c "curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -" - sudo docker exec sharp sh -c "echo 'deb https://deb.nodesource.com/node_12.x sid main' >/etc/apt/sources.list.d/nodesource.list" - sudo docker exec sharp sh -c "apt-get update && apt-get install -y nodejs" @@ -120,8 +35,8 @@ jobs: dist: bionic language: shell before_install: - - sudo docker run -dit --name sharp --env CI --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp arm64v8/debian:bullseye - - sudo docker exec sharp sh -c "apt-get update && apt-get install -y build-essential git python2 curl" + - sudo docker run -dit --name sharp --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp arm64v8/debian:bullseye + - sudo docker exec sharp sh -c "apt-get update && apt-get install -y build-essential git python3 curl" - sudo docker exec sharp sh -c "curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -" - sudo docker exec sharp sh -c "echo 'deb https://deb.nodesource.com/node_14.x sid main' >/etc/apt/sources.list.d/nodesource.list" - sudo docker exec sharp sh -c "apt-get update && apt-get install -y nodejs" @@ -135,55 +50,13 @@ jobs: language: shell before_install: - sudo chown 0.0 ${PWD} - - sudo docker run -dit --name sharp --env CI --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp arm64v8/debian:bullseye - - sudo docker exec sharp sh -c "apt-get update && apt-get install -y build-essential git python2 curl" + - sudo docker run -dit --name sharp --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp arm64v8/debian:bullseye + - sudo docker exec sharp sh -c "apt-get update && apt-get install -y build-essential git python3 curl" - sudo docker exec sharp sh -c "curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -" - sudo docker exec sharp sh -c "echo 'deb https://deb.nodesource.com/node_15.x sid main' >/etc/apt/sources.list.d/nodesource.list" - sudo docker exec sharp sh -c "apt-get update && apt-get install -y nodejs" install: sudo docker exec sharp sh -c "npm install --build-from-source --unsafe-perm" script: sudo docker exec sharp sh -c "npm test" - - name: "macOS (10.13) - Node.js 10" - os: osx - osx_image: xcode10.1 - language: node_js - node_js: "10" - install: npm install --build-from-source - - - name: "macOS (10.13) - Node.js 12" - os: osx - osx_image: xcode10.1 - language: node_js - node_js: "12" - before_install: unset prebuild_upload - install: npm install --build-from-source - - - name: "macOS (10.13) - Node.js 14" - os: osx - osx_image: xcode10.1 - language: node_js - node_js: "14" - before_install: unset prebuild_upload - install: npm install --build-from-source - - - name: "macOS (10.13) - Node.js 15" - os: osx - osx_image: xcode10.1 - language: node_js - node_js: "15" - before_install: unset prebuild_upload - install: npm install --build-from-source - - - name: "Unit test coverage report" - os: linux - dist: bionic - language: node_js - node_js: "14" - before_install: unset prebuild_upload - install: npm install --build-from-source - after_success: - - npm install coveralls - - cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js - cache: npm: false diff --git a/appveyor.yml b/appveyor.yml index 5dc9edf9..8ddfa0e7 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,32 +1,18 @@ os: Visual Studio 2019 version: "{build}" build: off +platform: x86 environment: matrix: - nodejs_version: "10" - platform: x86 - - nodejs_version: "10" - platform: x64 + prebuild: true - nodejs_version: "12" - platform: x86 - prebuild_upload: "" - - nodejs_version: "12" - platform: x64 - prebuild_upload: "" - - nodejs_version: "14.2.0" - platform: x86 - prebuild_upload: "" - nodejs_version: "14" - platform: x64 - prebuild_upload: "" - nodejs_version: "15" - platform: x86 - prebuild_upload: "" - - nodejs_version: "15" - platform: x64 - prebuild_upload: "" install: - - ps: Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version) $env:platform + - ps: Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version) - npm install --build-from-source test_script: - npm test +on_success: + - if [%prebuild%] == [true] if [%APPVEYOR_REPO_TAG%] == [true] npx prebuild --runtime napi --target 3 diff --git a/install/prebuild-ci.js b/install/prebuild-ci.js deleted file mode 100644 index f612f967..00000000 --- a/install/prebuild-ci.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -const { spawnSync } = require('child_process'); - -const { prebuild_upload: hasToken, APPVEYOR_REPO_TAG_NAME, TRAVIS_TAG } = process.env; - -if (hasToken && (APPVEYOR_REPO_TAG_NAME || TRAVIS_TAG)) { - spawnSync('node', - ['./node_modules/prebuild/bin.js', '--runtime', 'napi', '--target', '3'], - { shell: true, stdio: 'inherit' } - ); -} diff --git a/package.json b/package.json index 001014a1..8b05e8a9 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "scripts": { "install": "(node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)", "clean": "rm -rf node_modules/ build/ vendor/ .nyc_output/ coverage/ test/fixtures/output.*", - "test": "semistandard && cpplint && npm run test-unit && npm run test-licensing && node install/prebuild-ci", + "test": "semistandard && cpplint && npm run test-unit && npm run test-licensing", "test-unit": "nyc --reporter=lcov --branches=99 mocha --slow=5000 --timeout=60000 ./test/unit/*.js", "test-licensing": "license-checker --production --summary --onlyAllow=\"Apache-2.0;BSD;ISC;MIT\"", "test-coverage": "./test/coverage/report.sh", @@ -88,7 +88,6 @@ "files": [ "binding.gyp", "install/**", - "!install/prebuild-ci.js", "lib/**", "src/**" ], @@ -127,7 +126,7 @@ }, "devDependencies": { "async": "^3.2.0", - "cc": "^2.0.1", + "cc": "^3.0.1", "decompress-zip": "^0.3.2", "documentation": "^13.1.0", "exif-reader": "^1.0.3",