.github/workflows/build-and-release.yaml
## GitHub Actions is used to build:
## - Electron (macOs)
## - Nwjs (macOs)
## - Node.js (macOs, linux)
name: build-and-release
on:
push:
tags:
- '*'
branches:
- master
- develop
workflow_dispatch:
inputs:
publish-binary:
type: boolean
default: false
description: Publish binary?
required: true
env:
NODE_LIBCURL_GITHUB_TOKEN: ${{ secrets.NODE_LIBCURL_GITHUB_TOKEN }}
PUBLISH_BINARY: ${{ github.event.inputs.publish-binary }}
NODE_LIBCURL_CPP_STD: c++17
# all jobs here must have a matrix identical to the ones inside build-lint-test.yaml
jobs:
build-and-release-nodejs:
runs-on: ${{ matrix.os }}
container: ${{ matrix.os == 'ubuntu-18.04' && 'ubuntu:xenial' || '' }}
strategy:
fail-fast: false
matrix:
os:
- macos-11
- ubuntu-20.04
libcurl-release:
- 7.86.0
node:
- 18
- 20
- 21
env:
LIBCURL_RELEASE: ${{ matrix.libcurl-release }}
LATEST_LIBCURL_RELEASE: ${{ matrix.libcurl-release }}
steps:
- id: timestamp
run: echo "::set-output name=timestamp::$(timestamp +%s)"
- name: Restore the previous run result
uses: actions/cache@v3
with:
path: |
run_result
key: v1-${{ matrix.os }}-${{ matrix.libcurl-release }}-${{ matrix.node }}-${{ github.run_id }}-${{ github.job }}-${{ steps.timestamp.outputs.timestamp }}
restore-keys: |
v1-${{ matrix.os }}-${{ matrix.libcurl-release }}-${{ matrix.node }}-${{ github.run_id }}-${{ github.job }}-
- id: run_result
run: cat run_result 2>/dev/null || echo 'default'
- if: runner.os == 'Linux'
name: Install Needed packages on Linux
run: |
if ! command -v sudo; then
apt-get update && apt-get install -y sudo
else
sudo apt-get update
fi
if ! command -v cmake; then
sudo apt-get install -y cmake
fi
if ! command -v curl; then
# we will assume a lot of other ones are missing
sudo apt-get install -y software-properties-common
sudo apt-add-repository ppa:git-core/ppa && sudo apt-get update && sudo apt-get install -y git curl wget python autoconf libtool-bin m4 groff groff-base pkg-config automake bzip2 apt-transport-https ca-certificates
fi
if ! command -v yarn; then
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
sudo apt-get update && sudo apt-get install -y yarn
fi
- name: Checkout
uses: actions/checkout@main
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node }}
- run: echo "NODE_LIBCURL_CPP_STD=${{ matrix.node-libcurl-cpp-std }}" >> $GITHUB_ENV
if: matrix.node-libcurl-cpp-std
- if: runner.os == 'macOS'
name: Install Needed packages on macOS
run: brew install coreutils wget automake libtool cmake gnu-sed m4
# not using brew for that one as we need 2.69
- if: runner.os == 'macOS'
name: Install autoconf on macOS
run: |
curl -O -L http://ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz
tar -xzf autoconf-2.69.tar.gz
cd autoconf-*
./configure
make
make install
autoconf --version
ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize
- name: Output yarn cache dir
id: yarn-cache-dir
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Restore Yarn Cache
uses: actions/cache@v3
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir.outputs.dir }}
key: v1-${{ runner.os }}-yarn-cache-${{ github.ref }}-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
v1-${{ runner.os }}-yarn-cache-${{ github.ref }}-
v1-${{ runner.os }}-yarn-cache-
- name: Restore libcurl deps cache
uses: actions/cache@v3
id: libcurl-deps-cache
with:
path: |
~/.node-gyp
~/deps
key: v4-${{ runner.os }}-libcurl-deps-cache-node-${{ matrix.node }}
restore-keys: |
v4-${{ runner.os }}-libcurl-deps-cache-node-${{ matrix.node }}
- name: 'Set GIT_TAG'
if: startsWith(github.ref, 'refs/tags')
run: echo "GIT_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: 'Publish Binary'
if: steps.run_result.outputs.run_result != 'success'
run: |
GIT_COMMIT=${{ github.sha }} GIT_TAG=$GIT_TAG ./scripts/ci/build.sh
- name: Upload artifacts
if: always() && steps.run_result.outputs.run_result != 'success'
uses: actions/upload-artifact@v2
with:
name: build-logs-${{ matrix.os }}-${{ matrix.libcurl-release }}-${{ matrix.node }}
path: ./logs/
retention-days: 5
- run: echo "::set-output name=run_result::success" > run_result
build-and-release-electron:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
# we use CircleCI for linux binaries
os:
- macos-11
libcurl-release:
- 7.86.0
node:
- 20
electron-version:
- 28.0.0
- 27.1.3
- 26.6.2
env:
LIBCURL_RELEASE: ${{ matrix.libcurl-release }}
LATEST_LIBCURL_RELEASE: ${{ matrix.libcurl-release }}
ELECTRON_VERSION: ${{ matrix.electron-version }}
steps:
- id: timestamp
run: echo "::set-output name=timestamp::$(timestamp +%s)"
- name: Restore the previous run result
uses: actions/cache@v3
with:
path: |
run_result
key: v1-${{ matrix.os }}-${{ matrix.libcurl-release }}-${{ matrix.electron-version }}-${{ github.run_id }}-${{ runner.os }}-${{ github.job }}-${{ steps.timestamp.outputs.timestamp }}
restore-keys: |
v1-${{ matrix.os }}-${{ matrix.libcurl-release }}-${{ matrix.electron-version }}-${{ github.run_id }}-${{ runner.os }}-${{ github.job }}-
- id: run_result
run: cat run_result 2>/dev/null || echo 'default'
- run: echo "NODE_LIBCURL_CPP_STD=${{ matrix.node-libcurl-cpp-std }}" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@main
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node }}
- name: Install Needed packages
run: brew install coreutils wget automake libtool cmake gnu-sed m4
# not using brew for that one as we need 2.69
- name: Install autoconf
run: |
curl -O -L http://ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz
tar -xzf autoconf-2.69.tar.gz
cd autoconf-*
./configure
make
make install
autoconf --version
ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize
- name: Output yarn cache dir
id: yarn-cache-dir
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Restore Yarn Cache
uses: actions/cache@v3
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir.outputs.dir }}
key: v1-${{ runner.os }}-yarn-cache-${{ github.ref }}-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
v1-${{ runner.os }}-yarn-cache-${{ github.ref }}-
v1-${{ runner.os }}-yarn-cache-
- name: Restore Electron Cache
uses: actions/cache@v3
with:
path: ~/Library/Caches/electron
key: v1-${{ runner.os }}-electron-cache-${{ matrix.electron-version }}
restore-keys: |
v1-${{ runner.os }}-electron-cache-${{ matrix.electron-version }}
v1-${{ runner.os }}-electron-cache-
- name: Restore libcurl deps cache
uses: actions/cache@v3
id: libcurl-deps-cache
with:
path: |
~/.node-gyp
~/deps
key: v4-${{ runner.os }}-libcurl-deps-cache-electron-${{ matrix.electron-version }}
restore-keys: |
v4-${{ runner.os }}-libcurl-deps-cache-electron-${{ matrix.electron-version }}
- name: 'Set GIT_TAG'
if: startsWith(github.ref, 'refs/tags')
run: echo "GIT_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: 'Publish Binary'
if: steps.run_result.outputs.run_result != 'success'
run: |
GIT_COMMIT=${{ github.sha }} GIT_TAG=$GIT_TAG ./scripts/ci/build.sh
- name: Upload artifacts
if: always() && steps.run_result.outputs.run_result != 'success'
uses: actions/upload-artifact@v2
with:
name: build-logs-${{ matrix.os }}-${{ matrix.libcurl-release }}-${{ matrix.electron-version }}
path: ./logs/
retention-days: 5
- run: echo "::set-output name=run_result::success" > run_result
# disabled until nwjs supports newer node-gyp versions + python 3
# build-and-release-nwjs:
# runs-on: ${{ matrix.os }}
# strategy:
# fail-fast: false
# matrix:
# # we use CircleCI for linux binaries
# os:
# - macos-11
# libcurl-release:
# - 7.86.0
# node:
# - 18
# nwjs-version:
# - 0.69.1
# - 0.68.1
# - 0.67.1
# env:
# LIBCURL_RELEASE: ${{ matrix.libcurl-release }}
# LATEST_LIBCURL_RELEASE: ${{ matrix.libcurl-release }}
# NWJS_VERSION: ${{ matrix.nwjs-version }}
# steps:
# - id: timestamp
# run: echo "::set-output name=timestamp::$(timestamp +%s)"
# - name: Restore the previous run result
# uses: actions/cache@v3
# with:
# path: |
# run_result
# key: v1-${{ matrix.os }}-${{ matrix.libcurl-release }}-${{ matrix.nwjs-version }}-${{ github.run_id }}-${{ github.job }}-${{ steps.timestamp.outputs.timestamp }}
# restore-keys: |
# v1-${{ matrix.os }}-${{ matrix.libcurl-release }}-${{ matrix.nwjs-version }}-${{ github.run_id }}-${{ github.job }}-
# - id: run_result
# run: cat run_result 2>/dev/null || echo 'default'
# - run: echo "NODE_LIBCURL_CPP_STD=${{ matrix.node-libcurl-cpp-std }}" >> $GITHUB_ENV
# - name: Checkout
# uses: actions/checkout@main
# - name: Setup Node.js
# uses: actions/setup-node@v1
# with:
# node-version: ${{ matrix.node }}
# - name: Install Needed packages
# run: brew install coreutils wget automake libtool cmake gnu-sed m4
# # not using brew for that one as we need 2.69
# - name: Install autoconf
# run: |
# curl -O -L http://ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz
# tar -xzf autoconf-2.69.tar.gz
# cd autoconf-*
# ./configure
# make
# make install
# autoconf --version
# ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize
# - name: Output yarn cache dir
# id: yarn-cache-dir
# run: echo "::set-output name=dir::$(yarn cache dir)"
# - name: Restore Yarn Cache
# uses: actions/cache@v3
# id: yarn-cache
# with:
# path: ${{ steps.yarn-cache-dir.outputs.dir }}
# key: v1-${{ runner.os }}-yarn-cache-${{ github.ref }}-${{ hashFiles('**/yarn.lock') }}
# restore-keys: |
# v1-${{ runner.os }}-yarn-cache-${{ github.ref }}-
# v1-${{ runner.os }}-yarn-cache-
# - name: Restore libcurl deps cache
# uses: actions/cache@v3
# id: libcurl-deps-cache
# with:
# path: |
# ~/.node-gyp
# ~/deps
# key: v4-${{ runner.os }}-libcurl-deps-cache-nwjs-${{ matrix.nwjs-version }}
# restore-keys: |
# v4-${{ runner.os }}-libcurl-deps-cache-nwjs-${{ matrix.nwjs-version }}
# - name: 'Set GIT_TAG'
# if: startsWith(github.ref, 'refs/tags')
# run: echo "GIT_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
# - name: 'Publish Binary'
# if: steps.run_result.outputs.run_result != 'success'
# run: |
# GIT_COMMIT=${{ github.sha }} GIT_TAG=$GIT_TAG ./scripts/ci/build.sh
# - name: Upload artifacts
# if: always() && steps.run_result.outputs.run_result != 'success'
# uses: actions/upload-artifact@v2
# with:
# name: build-logs-${{ matrix.os }}-${{ matrix.libcurl-release }}-${{ matrix.nwjs-version }}
# path: ./logs/
# retention-days: 5
# - run: echo "::set-output name=run_result::success" > run_result