.circleci/config.yml
## CircleCI is used to build:
## - Electron (linux)
## - Nwjs (linux)
## - Node.js (alpine)
version: 2.1
# aliases:
# # add deps on ubuntu img
# - &install-deps
# # update automake
# - run: |
# wget ftp://ftp.gnu.org/gnu/automake/automake-1.16.1.tar.gz &> /dev/null
# tar -xzf automake-1.16.1.tar.gz && cd automake-1.16.1
# ./configure && make && sudo make install
# # add missing packages
# - run: sudo apt-get install texinfo gperf ruby-ronn cmake
executors:
debian:
docker:
- image: jonathancardoso/debian-ci
environment:
RECONFIGURE_NGHTTP2: 'true'
BASH_ENV: '/home/circleci/.bashrc'
LATEST_LIBCURL_RELEASE: '7.79.1'
alpine:
docker:
- image: jonathancardoso/alpine-ci
environment:
LATEST_LIBCURL_RELEASE: '7.79.1'
orbs:
build-addon-unix-and-publish:
jobs:
build-addon:
# https://circleci.com/docs/2.0/reusing-config/#parameter-syntax
parameters:
node-version:
description: Version of Node.js
default: ''
type: string
electron-version:
description: Version of Node.js
default: ''
type: string
nwjs-version:
description: Version of Nw.js
default: ''
type: string
e:
type: executor
node-libcurl-cpp-std:
type: string
default: 'c++11'
cares-version:
type: string
default: '1.16.1'
brotli-version:
type: string
default: '1.0.7'
libcurl-version:
type: string
libidn2-version:
type: string
default: '2.1.1'
libssh2-version:
type: string
default: '1.9.0'
libunistring-version:
type: string
default: '0.9.10'
ncurses-version:
type: string
default: '6.1'
nghttp2-version:
type: string
openldap-version:
type: string
default: '2.4.47'
openssl-version:
type: string
zlib-version:
type: string
default: '1.2.11'
before-build:
description: 'Steps that will be executed before the build'
type: steps
default: []
after-build:
description: 'Steps that will be executed before the build'
type: steps
default: []
executor: << parameters.e >>
steps:
- checkout
# temporary fix to solve certificates issues - main docker image must be updated instead
- when:
condition:
equal: ['debian', << parameters.e >>]
steps:
- run: sudo apt-get update && sudo apt-get upgrade
- when:
condition: <<parameters.node-version>>
steps:
- run: |
if [ -x "$(command -v nvm)" ]; then
nvm use <<parameters.node-version>>
else
[ -f /usr/local/bin/node<<parameters.node-version>> ] && ln -s /usr/local/bin/node<<parameters.node-version>> /usr/local/bin/node || true
fi
- run:
name: Setup Environment Variables
command: |
echo 'export ELECTRON_VERSION="<<parameters.electron-version>>"' >> $BASH_ENV
echo 'export NWJS_VERSION="<<parameters.nwjs-version>>"' >> $BASH_ENV
echo 'export CARES_RELEASE="<<parameters.cares-version>>"' >> $BASH_ENV
echo 'export BROTLI_RELEASE="<<parameters.brotli-version>>"' >> $BASH_ENV
echo 'export LIBCURL_RELEASE="<<parameters.libcurl-version>>"' >> $BASH_ENV
echo 'export LIBIDN2_RELEASE="<<parameters.libidn2-version>>"' >> $BASH_ENV
echo 'export LIBSSH2_RELEASE="<<parameters.libssh2-version>>"' >> $BASH_ENV
echo 'export LIBUNISTRING_RELEASE="<<parameters.libunistring-version>>"' >> $BASH_ENV
echo 'export NCURSES_RELEASE="<<parameters.ncurses-version>>"' >> $BASH_ENV
echo 'export NGHTTP2_RELEASE="<<parameters.nghttp2-version>>"' >> $BASH_ENV
echo 'export OPENLDAP_RELEASE="<<parameters.openldap-version>>"' >> $BASH_ENV
echo 'export OPENSSL_RELEASE="<<parameters.openssl-version>>"' >> $BASH_ENV
echo 'export ZLIB_RELEASE="<<parameters.zlib-version>>"' >> $BASH_ENV
echo 'export NODE_LIBCURL_CPP_STD="<<parameters.node-libcurl-cpp-std>>"' >> $BASH_ENV
####
# Restore caches
###
- run:
name: Create cache key file
command: |
echo "$CARES_RELEASE" >> _libs_versions
echo "$BROTLI_RELEASE" >> _libs_versions
echo "$LIBCURL_RELEASE" >> _libs_versions
echo "$LIBIDN2_RELEASE" >> _libs_versions
echo "$LIBSSH2_RELEASE" >> _libs_versions
echo "$LIBUNISTRING_RELEASE" >> _libs_versions
echo "$NCURSES_RELEASE" >> _libs_versions
echo "$NGHTTP2_RELEASE" >> _libs_versions
echo "$OPENLDAP_RELEASE" >> _libs_versions
echo "$OPENSSL_RELEASE" >> _libs_versions
echo "$ZLIB_RELEASE" >> _libs_versions
- restore_cache:
keys:
- v4-nodeV<<parameters.node-version>>-electronV<<parameters.electron-version>>-nwjsV<<parameters.nwjs-version>>-deps-libs-{{ checksum "_libs_versions" }}-{{ checksum "yarn.lock" }}
- v4-nodeV<<parameters.node-version>>-electronV<<parameters.electron-version>>-nwjsV<<parameters.nwjs-version>>-deps-libs-{{ checksum "_libs_versions" }}-
- steps: <<parameters.before-build>>
####
# Build
####
- run:
command: GIT_TAG=$CIRCLE_TAG GIT_COMMIT=$CIRCLE_SHA1 ./scripts/ci/build.sh
no_output_timeout: 40m
- steps: <<parameters.after-build>>
####
# Cache
####
- save_cache:
key: v4-nodeV<<parameters.node-version>>-electronV<<parameters.electron-version>>-nwjsV<<parameters.nwjs-version>>-deps-libs-{{ checksum "_libs_versions" }}-{{ checksum "yarn.lock" }}
paths:
- ~/.electron
- ~/.cache/electron
- ~/.cache/yarn
- ~/.node-gyp
- ~/.nw-gyp
- ~/deps/cares/build/<<parameters.cares-version>>
- ~/deps/brotli/build/<<parameters.brotli-version>>
- ~/deps/libcurl/build/<<parameters.libcurl-version>>
- ~/deps/libssh2/build/<<parameters.libssh2-version>>
- ~/deps/libidn2/build/<<parameters.libidn2-version>>
- ~/deps/libunistring/build/<<parameters.libunistring-version>>
- ~/deps/ncurses/build/<<parameters.ncurses-version>>
- ~/deps/nghttp2/build/<<parameters.nghttp2-version>>
- ~/deps/openldap/build/<<parameters.openldap-version>>
- ~/deps/openssl/build/<<parameters.openssl-version>>
- ~/deps/zlib/build/<<parameters.zlib-version>>
- store_artifacts:
path: ./logs/
# Great docs
# https://circleci.com/docs/2.0/reusing-config/#getting-started-with-config-reuse
workflows:
build-test-deploy:
jobs:
####
# Node 10
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-node-10-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
node-version: '10'
libcurl-version: '7.79.1'
cares-version: '1.15.0'
nghttp2-version: '1.41.0'
openssl-version: '1.1.1g'
e:
name: alpine
####
# Node 12
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-node-12-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
node-version: '12'
libcurl-version: '7.79.1'
cares-version: '1.16.0'
nghttp2-version: '1.40.0'
openssl-version: '1.1.1g'
e:
name: alpine
####
# Node 14
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-node-14-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
node-version: '14'
libcurl-version: '7.79.1'
cares-version: '1.16.0'
nghttp2-version: '1.41.0'
openssl-version: '1.1.1g'
e:
name: alpine
####
# Node 16
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-node-16-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
node-version: '16'
libcurl-version: '7.79.1'
cares-version: '1.17.1'
nghttp2-version: '1.42.0'
openssl-version: '1.1.1k'
node-libcurl-cpp-std: 'c++17'
e:
name: alpine
- build-addon-unix-and-publish/build-addon:
name: build-addon-node-16-libcurl-old
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
node-version: '16'
libcurl-version: '7.50.0'
nghttp2-version: '1.42.0'
openssl-version: '1.1.1k'
node-libcurl-cpp-std: 'c++17'
e:
name: alpine
####
# Node 17
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-node-17-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
node-version: '17'
libcurl-version: '7.79.1'
cares-version: '1.17.2'
nghttp2-version: '1.45.1'
openssl-version: '3.0.0'
node-libcurl-cpp-std: 'c++17'
e:
name: alpine
####
# Electron v15
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-electron-v15-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
electron-version: '15.3.0'
libcurl-version: '7.79.1'
cares-version: '1.17.2'
nghttp2-version: '1.45.1'
openssl-version: '3.0.0'
node-libcurl-cpp-std: 'c++17'
e:
name: debian
####
# Electron v14
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-electron-v14-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
electron-version: '14.2.0'
libcurl-version: '7.79.1'
cares-version: '1.17.2'
nghttp2-version: '1.45.1'
openssl-version: '3.0.0'
node-libcurl-cpp-std: 'c++17'
e:
name: debian
####
# Electron v13
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-electron-v13-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
electron-version: '13.6.1'
libcurl-version: '7.79.1'
cares-version: '1.17.2'
nghttp2-version: '1.45.1'
openssl-version: '3.0.0'
node-libcurl-cpp-std: 'c++17'
e:
name: debian
####
# Electron v12
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-electron-v12-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
electron-version: '12.2.2'
libcurl-version: '7.79.1'
cares-version: '1.17.2'
nghttp2-version: '1.45.1'
openssl-version: '3.0.0'
node-libcurl-cpp-std: 'c++17'
e:
name: debian
####
# Electron v11
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-electron-v11-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
electron-version: '11.5.0'
libcurl-version: '7.79.1'
cares-version: '1.17.2'
nghttp2-version: '1.45.1'
openssl-version: '3.0.0'
node-libcurl-cpp-std: 'c++17'
e:
name: debian
####
# Nwjs v0.58
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-nwjs-v0.58-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
nwjs-version: '0.58.0'
libcurl-version: '7.79.1'
cares-version: '1.17.2'
nghttp2-version: '1.45.1'
openssl-version: '3.0.0'
node-libcurl-cpp-std: 'c++17'
e:
name: debian
####
# Nwjs v0.57
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-nwjs-v0.57-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
nwjs-version: '0.57.1'
libcurl-version: '7.79.1'
cares-version: '1.17.2'
nghttp2-version: '1.45.1'
openssl-version: '3.0.0'
node-libcurl-cpp-std: 'c++17'
e:
name: debian
####
# Nwjs v0.56
####
- build-addon-unix-and-publish/build-addon:
name: build-addon-nwjs-v0.56-libcurl-latest
context: general
filters:
branches:
ignore:
- gh-pages
tags:
only: /^v.*/
nwjs-version: '0.56.1'
libcurl-version: '7.79.1'
cares-version: '1.17.2'
nghttp2-version: '1.45.1'
openssl-version: '3.0.0'
node-libcurl-cpp-std: 'c++17'
e:
name: debian