JCMais/node-libcurl

View on GitHub
.circleci/config.yml

Summary

Maintainability
Test Coverage
## 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