Skip to content

Commit

Permalink
chore(NODE-3632): limit CI publishing to one version of x64 linux (#201)
Browse files Browse the repository at this point in the history
  • Loading branch information
nbbeeken authored Oct 7, 2021
1 parent 16ea3af commit 48c5b7e
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 21 deletions.
18 changes: 11 additions & 7 deletions .evergreen/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,17 @@ functions:
cd ./libmongocrypt/bindings/python && ${test_env|} ./.evergreen/test.sh
"build and test node":
- command: "shell.exec"
- command: "subprocess.exec"
params:
script: |-
cd ./libmongocrypt/bindings/node && ${test_env|} ./.evergreen/test.sh
binary: bash
working_dir: "./libmongocrypt/bindings/node"
args:
- "./.evergreen/test.sh"
env:
PROJECT_DIRECTORY: ${project_directory}
NODE_GITHUB_TOKEN: ${node_github_token}
DISTRO_ID: ${distro_id}
BUILD_VARIANT: ${build_variant}

"publish snapshot":
- command: shell.exec
Expand Down Expand Up @@ -390,8 +397,7 @@ tasks:
commands:
- func: "fetch source"
- func: "build and test node"
vars:
test_env: PROJECT_DIRECTORY=${project_directory} NODE_GITHUB_TOKEN=${node_github_token}

# Note: keep this disabled unless you want master to force-push
- name: build-and-test-node-force-publish
depends_on:
Expand All @@ -400,8 +406,6 @@ tasks:
commands:
- func: "fetch source"
- func: "build and test node"
vars:
test_env: PROJECT_DIRECTORY=${project_directory} NODE_GITHUB_TOKEN=${node_github_token} NODE_FORCE_PUBLISH=1

- name: publish-snapshot
depends_on:
Expand Down
78 changes: 64 additions & 14 deletions bindings/node/.evergreen/prebuild.sh
Original file line number Diff line number Diff line change
@@ -1,38 +1,88 @@
#!/usr/bin/env bash

if [ -z ${DISTRO_ID+omitted} ]; then echo "DISTRO_ID is unset" && exit 1; fi

set -o errexit
set +o xtrace

# FLE platform matrix (as of Oct 7th 2021)
# macos x86_64 (compiled on 10.14)
# windows x86_64 (compiled on vs2017)
# linux x86_64 (releases on RHEL7)
# linux s390x
# linux arm64

# Determines the OS name through uname results
# Returns 'windows' 'linux' 'macos' or 'unknown'
os_name() {
local WINDOWS_REGEX="cygwin|windows|mingw|msys"
local UNAME
UNAME=$(uname | tr '[:upper:]' '[:lower:]')

local OS_NAME="unknown"

if [[ $UNAME =~ $WINDOWS_REGEX ]]; then
OS_NAME="windows"
elif [[ $UNAME == "darwin" ]]; then
OS_NAME="macos"
elif [[ $UNAME == "linux" ]]; then
OS_NAME="linux"
fi

echo $OS_NAME
}

OS=$(os_name)

get_version_at_git_rev () {
local REV=$1
local VERSION=$(node -r child_process -e "console.log(JSON.parse(child_process.execSync('git show $REV:./package.json', { encoding: 'utf8' })).version);")
echo $VERSION
local VERSION
VERSION=$(node -r child_process -e "console.log(JSON.parse(child_process.execSync('git show $REV:./package.json', { encoding: 'utf8' })).version);")
echo "$VERSION"
}

run_prebuild() {
if [[ -z $NODE_GITHUB_TOKEN ]];then
echo "No github token set. Cannot run prebuild."
exit 1
else
echo "Github token detected. Running prebuild."
npm run prebuild -- -u $NODE_GITHUB_TOKEN
echo "Prebuild's successfully submitted"
fi
if [ -z ${NODE_GITHUB_TOKEN+omitted} ]; then echo "NODE_GITHUB_TOKEN is unset" && exit 1; fi
echo "Github token detected. Running prebuild."
npm run prebuild -- -u "$NODE_GITHUB_TOKEN"
echo "Prebuild's successfully submitted"
}

VERSION_AT_HEAD=$(get_version_at_git_rev "HEAD")
VERSION_AT_HEAD_1=$(get_version_at_git_rev "HEAD~1")

if [[ ! -z $NODE_FORCE_PUBLISH ]]; then
echo '$NODE_FORCE_PUBLISH detected'
if [[ -n $NODE_FORCE_PUBLISH ]]; then
echo "\$NODE_FORCE_PUBLISH=${NODE_FORCE_PUBLISH} detected"
echo "Beginning prebuild"
run_prebuild
elif [[ $VERSION_AT_HEAD != $VERSION_AT_HEAD_1 ]]; then
elif [[ "$VERSION_AT_HEAD" != "$VERSION_AT_HEAD_1" ]]; then
echo "Difference is package version ($VERSION_AT_HEAD_1 -> $VERSION_AT_HEAD)"
echo "Beginning prebuild"

if [[ "$OS" == "linux" ]]; then
# Handle limiting which linux gets to publish prebuild
ARCH=$(uname -m)

if [[ $DISTRO_ID == "rhel70-small" ]]; then
# only publish x86_64 linux prebuilds from RHEL 7
run_prebuild
elif [[ "$ARCH" != "x86_64" ]]; then
# Non-x86 linux variants should just publish
run_prebuild
else
# Non RHEL 7 linux variants should just test the prebuild task
echo "Will prebuild without submit ($OS - $ARCH - $DISTRO_ID)"
npm run prebuild
fi

exit 0
fi

# Windows and MacOS
run_prebuild
else
echo "No difference is package version ($VERSION_AT_HEAD_1 -> $VERSION_AT_HEAD)"
echo "Will prebuild without submit"
echo "Will prebuild without submit ($OS - $DISTRO_ID)"
npm run prebuild
echo "Local prebuild successful."
fi

0 comments on commit 48c5b7e

Please sign in to comment.