diff --git a/.circleci/config.yml b/.circleci/config.yml index 101ebd430..ba6d7ba4c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -84,7 +84,11 @@ orbs: condition: <> steps: - run: | - [ -f /usr/local/bin/node<> ] && ln -s /usr/local/bin/node<> /usr/local/bin/node || true + if [ -x "$(command -v nvm)" ]; then + nvm use <> + else + [ -f /usr/local/bin/node<> ] && ln -s /usr/local/bin/node<> /usr/local/bin/node || true + fi - run: name: Setup Environment Variables command: | diff --git a/.dockerignore b/.dockerignore index 266e5a619..a12448b1b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,10 +2,17 @@ .idea/ .nyc_output/ .vscode/ +api/ build/ +cache/ +coverage/ +debug/ deps/ dist/ +docs/ +examples/ lib/binding/node_libcurl.node node_modules/ +tsconfig.tsbuildinfo website/ -docs/ +yarn-error.log diff --git a/cache/.gitignore b/cache/.gitignore new file mode 100644 index 000000000..168194ac5 --- /dev/null +++ b/cache/.gitignore @@ -0,0 +1,4 @@ +# This directory is used for cache of deps of dockerfiles used for +# Some custom builds done manually +* +!.gitignore diff --git a/scripts/arm/README.md b/scripts/arm/README.md new file mode 100644 index 000000000..1e4f43296 --- /dev/null +++ b/scripts/arm/README.md @@ -0,0 +1,5 @@ +## ARM Prebuilt Binaries + +Those are scripts to create prebuilt binaries for the addon on ARM architecture. + +They were built to be run from Windows (hence the powershell script). diff --git a/scripts/arm/armv7.dockerfile b/scripts/arm/armv7.dockerfile new file mode 100644 index 000000000..0584bd166 --- /dev/null +++ b/scripts/arm/armv7.dockerfile @@ -0,0 +1,6 @@ +FROM jonathancardoso/ci-arm32v7 + +# docker run --rm --name node-libcurl-arm32v7 -it -v E:\\jc\\node-libcurl:/home/circleci/node-libcurl -v /home/circleci/node-libcurl/node_modules/ -v E:\\jc\\.cache\\electron:/home/circleci/.cache/electron -v E:\\jc\\node-libcurl\\debug\\image-deps-arm32v7:/home/circleci/deps/ node-libcurl-arm32v7 +# cd ~/node-libcurl && sudo chown circleci:circleci -R ./ && sudo chown circleci:circleci -R ~/.cache +# PUBLISH_BINARY=false GIT_TAG="" GIT_COMMIT="" TARGET_ARCH="armv7" ./scripts/ci/build.sh +ENTRYPOINT [ "/bin/bash" ] diff --git a/scripts/arm/publish-binary.ps1 b/scripts/arm/publish-binary.ps1 new file mode 100644 index 000000000..f0cf68a7f --- /dev/null +++ b/scripts/arm/publish-binary.ps1 @@ -0,0 +1,29 @@ +param ( + [ValidateSet('armv7')][string]$arch = "armv7", + [string]$libcurl = "7.64.1", + [string]$token = $env:GITHUB_RELEASE_TOKEN, + [string]$node = "10" +) + +$currentDir = Get-Location +$imageName = "node-libcurl-$arch" + +Write-Host $arch +Write-Host $token +Write-Host $currentDir +Write-Host $imageName + +docker build -t $imageName -f "${currentDir}/scripts/arm/${arch}.dockerfile" . + +docker run --rm --name $imageName -it ` + -v "${currentDir}:/home/circleci/node-libcurl/" ` + -v "/home/circleci/node-libcurl/node_modules/" ` + -v "/home/circleci/node-libcurl/debug/" ` + -v "${currentDir}/cache/image-deps-${arch}:/home/circleci/deps/" ` + -e PUBLISH_BINARY=true ` + -e TARGET_ARCH=$arch ` + -e LIBCURL_RELEASE=$libcurl ` + -e LATEST_LIBCURL_RELEASE=$libcurl ` + --entrypoint "/bin/bash" ` + $imageName ` + -c "source ~/.bashrc && nvm use $node && ~/node-libcurl/scripts/arm/publish-binary.sh" diff --git a/scripts/arm/publish-binary.sh b/scripts/arm/publish-binary.sh new file mode 100755 index 000000000..1d3ef1fd1 --- /dev/null +++ b/scripts/arm/publish-binary.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +cd ~/node-libcurl + +user=$(whoami) + +# fix permissions for directories created when mounting volumes from Windows +sudo chown $user:$user -R ./ && sudo chown $user:$user -R ~/.cache + +./scripts/ci/build.sh diff --git a/scripts/ci/build.sh b/scripts/ci/build.sh index c61a694f8..77cfa74e2 100755 --- a/scripts/ci/build.sh +++ b/scripts/ci/build.sh @@ -193,7 +193,7 @@ ls -al $OPENLDAP_BUILD_FOLDER/lib # Build libcurl ################### LIBCURL_ORIGINAL_RELEASE=${LIBCURL_RELEASE:-LATEST} -LATEST_LIBCURL_RELEASE=$(./scripts/ci/get-latest-libcurl-version.sh) +LATEST_LIBCURL_RELEASE=${LATEST_LIBCURL_RELEASE:-$(./scripts/ci/get-latest-libcurl-version.sh)} LIBCURL_RELEASE=$LIBCURL_ORIGINAL_RELEASE if [[ $LIBCURL_RELEASE == "LATEST" ]]; then LIBCURL_RELEASE=$LATEST_LIBCURL_RELEASE @@ -289,6 +289,8 @@ else fi target=`echo $target | sed 's/^v//'` +# ia32, x64, armv7, etc +target_arch=${TARGET_ARCH:-"x64"} # Build Addon export npm_config_curl_config_bin="$LIBCURL_DEST_FOLDER/build/$LIBCURL_RELEASE/bin/curl-config" @@ -297,7 +299,7 @@ export npm_config_build_from_source="true" export npm_config_runtime="$runtime" export npm_config_dist_url="$dist_url" export npm_config_target="$target" -export npm_config_target_arch="x64" +export npm_config_target_arch="$target_arch" yarn install --frozen-lockfile