Skip to content

Commit

Permalink
Build updates and fix for docker mount issue in v1.9 (#643)
Browse files Browse the repository at this point in the history
Signed-off-by: Govind Kamat <govkamat@amazon.com>
  • Loading branch information
gkamat committed Sep 13, 2024
1 parent ed2b7ac commit f766714
Show file tree
Hide file tree
Showing 9 changed files with 157 additions and 290 deletions.
128 changes: 18 additions & 110 deletions .ci/build.sh
Original file line number Diff line number Diff line change
@@ -1,128 +1,36 @@
#!/usr/bin/env bash

# Licensed to Elasticsearch B.V. under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch B.V. licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
function setup {
export BENCHMARK_HOME=$GITHUB_WORKSPACE

# fail this script immediately if any command fails with a non-zero exit code
set -e
# fail on pipeline errors, e.g. when grepping
set -o pipefail
# fail on any unset environment variables
set -u
export THESPLOG_FILE=$BENCHMARK_HOME/.benchmark/logs/actor-system-internal.log
export THESPLOG_FILE_MAXSIZE=204800 # default is 50 KiB
export THESPLOG_THRESHOLD=INFO # default log level is WARNING

function update_pyenv {
# need to have the latest pyenv version to ensure latest patch releases are installable
cd $HOME/.pyenv/plugins/python-build/../.. && git pull origin master --rebase && cd -
}

function build {
export THESPLOG_FILE="${THESPLOG_FILE:-${BENCHMARK_HOME}/.benchmark/logs/actor-system-internal.log}"
# this value is in bytes, the default is 50kB. We increase it to 200kiB.
export THESPLOG_FILE_MAXSIZE=${THESPLOG_FILE_MAXSIZE:-204800}
# adjust the default log level from WARNING
export THESPLOG_THRESHOLD="INFO"

# turn nounset off because some of the following commands fail if nounset is turned on
set +u

export PATH="$HOME/.pyenv/bin:$PATH"
export TERM=dumb
export LC_ALL=en_US.UTF-8
update_pyenv
eval "$(pyenv init -)"
# ensure pyenv shims are added to PATH, see https://github.com/pyenv/pyenv/issues/1906
eval "$(pyenv init --path)"
eval "$(pyenv virtualenv-init -)"

make prereq
make install
make precommit
make test
# Init pyenv.
PATH=$HOME/.pyenv/shims:$PATH:$HOME/.pyenv/bin
}

function build_it {
export THESPLOG_FILE="${THESPLOG_FILE:-${BENCHMARK_HOME}/.benchmark/logs/actor-system-internal.log}"
# this value is in bytes, the default is 50kB. We increase it to 200kiB.
export THESPLOG_FILE_MAXSIZE=${THESPLOG_FILE_MAXSIZE:-204800}
# adjust the default log level from WARNING
export THESPLOG_THRESHOLD="INFO"

# turn nounset off because some of the following commands fail if nounset is turned on
set +u

export PATH="$HOME/.pyenv/bin:$PATH"
export TERM=dumb
export LC_ALL=en_US.UTF-8
export BENCHMARK_HOME="$GITHUB_WORKSPACE"
function build_and_unit_test {
setup

update_pyenv
eval "$(pyenv init -)"
# ensure pyenv shims are added to PATH, see https://github.com/pyenv/pyenv/issues/1906
eval "$(pyenv init --path)"
eval "$(pyenv virtualenv-init -)"
set -e
make develop
make lint
make test
}

python3_version=`python3 --version`
echo "Python3 version is ... $python3_version"
function run_it {
setup

python3 -m pip install opensearch-benchmark
docker pull ubuntu/squid:latest

make prereq
make install
make precommit

# make it38, it39, etc.
# make it38, it39, etc. so they run as concurrent GHA jobs
make "it${1//./}"
}

function license-scan {
# turn nounset off because some of the following commands fail if nounset is turned on
set +u

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
# ensure pyenv shims are added to PATH, see https://github.com/pyenv/pyenv/issues/1906
eval "$(pyenv init --path)"
eval "$(pyenv virtualenv-init -)"

make prereq
# only install depdencies that are needed by end users
make install-user
fossa analyze
}

function archive {
# Treat unset env variables as an error, but only in this function as there are other functions that allow unset variables
set -u

# this will only be done if the build number variable is present
BENCHMARK_DIR=${BENCHMARK_HOME}/.benchmark
if [[ -d ${BENCHMARK_DIR} ]]; then
find ${BENCHMARK_DIR} -name "*.log" -printf "%P\\0" | tar -cvjf ${BENCHMARK_DIR}/${BUILD_NUMBER}.tar.bz2 -C ${BENCHMARK_DIR} --transform "s,^,ci-${BUILD_NUMBER}/," --null -T -
else
echo "Benchmark directory [${BENCHMARK_DIR}] not present. Ensure the BENCHMARK_DIR environment variable is correct"
exit 1
fi
}
$@

if declare -F "$1" > /dev/null; then
"$@"
exit
else
echo "Please specify a function to run"
exit 1
fi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Docker Build and Test
name: Docker Build
on:
pull_request:
workflow_dispatch:
Expand Down Expand Up @@ -28,14 +28,12 @@ jobs:
with:
version: 'v0.9.1'
- uses: actions/checkout@v4
with:
path: 'opensearch-benchmark-git'

- name: Docker Build ${{ matrix.platform }}
run: |
docker buildx version
cp -a opensearch-benchmark-git/* ./
echo "Disable VERSION arg to enter docker build test mode"
PLATFORM=${{ matrix.platform }}
PLATFORM=`echo $PLATFORM | tr '/' '-'`
docker buildx build --platform ${{ matrix.platform }} --build-arg BUILD_ENV=testing --build-arg BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` -f "docker/Dockerfile" -t "osb/osb-$PLATFORM" -o type=docker .
docker images | grep "osb/osb-$PLATFORM"
tag=osb/osb-`echo ${{ matrix.platform }} | tr '/' '-'`
set -x
docker buildx build --platform ${{ matrix.platform }} --build-arg VERSION=`cat version.txt` --build-arg BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` -f docker/Dockerfile -t "$tag" -o type=docker .
set +x
docker images | grep "$tag"
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Integ Actions
name: Run Integration Tests
on: [workflow_dispatch, pull_request]
jobs:
Integration-Tests:
Expand All @@ -12,11 +12,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}

- uses: KengoTODA/actions-setup-docker-compose@v1
with:
version: '1.29.2'

# - name: Enforce docker-compose v1
# run: |
# echo "GitHub starts to switch runners to include docker-compose v2"
Expand All @@ -27,43 +27,19 @@ jobs:
# sudo pip install docker-compose==1.29.2
# docker --version
# docker-compose --version

- name: Check out repository code
uses: actions/checkout@v2
- name: Clone pyenv

- name: Install pyenv
run: git clone https://github.com/pyenv/pyenv.git ~/.pyenv
- name: Clone pyenv-virtualenv
run: git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
- name: Install JDK 8
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '8'
- run: echo "JAVA8_HOME=$JAVA_HOME" >> $GITHUB_ENV
- name: Install JDK 11
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '11'
- run: echo "JAVA11_HOME=$JAVA_HOME" >> $GITHUB_ENV
- name: Install JDK 15
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '15'
- run: echo "JAVA15_HOME=$JAVA_HOME" >> $GITHUB_ENV
- name: Install JDK 16
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '16'
- run: echo "JAVA16_HOME=$JAVA_HOME" >> $GITHUB_ENV

- name: Install JDK 17
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '17'
- run: echo "JAVA17_HOME=$JAVA_HOME" >> $GITHUB_ENV
- name: Run the CI build_it script
run: bash .ci/build.sh build_it ${{ matrix.python-version }}
env:
BENCHMARK_HOME: env.GITHUB_WORKSPACE

- name: Run the CI build script
run: bash .ci/build.sh run_it ${{ matrix.python-version }}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
name: Release drafter
name: Publish Release to GitHub

on:
push:
tags:
- "*"

jobs:
draft-a-release:
publish-release:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
Expand All @@ -22,21 +22,20 @@ jobs:
issue-title: 'Release opensearch-benchmark'
issue-body: "Please approve or deny the release of opensearch-benchmark. **Tag**: ${{ github.ref_name }} **Commit**: ${{ github.sha }}"
exclude-workflow-initiator-as-approver: true

- name: Set up Python 3
uses: actions/setup-python@v3
with:
python-version: '3.x'
- name: Install build tools
run: |
python -m pip install --upgrade build

- name: Build project for distribution
run: |
python -m build
tar -zvcf artifacts.tar.gz dist
- name: Release
make build
tar zcvf artifacts.tar.gz dist
- name: Publish release
uses: softprops/action-gh-release@v1
with:
draft: true
generate_release_notes: true
files: |
artifacts.tar.gz
files: artifacts.tar.gz
11 changes: 6 additions & 5 deletions .github/workflows/main.yml → .github/workflows/unit-test.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: CI Actions
on: [pull_request]
name: Run Unit Tests
on: [workflow_dispatch, pull_request]
jobs:
Unit-Tests:
strategy:
Expand All @@ -8,12 +8,13 @@ jobs:
- ubuntu-latest
- macos-latest
runs-on: ${{ matrix.os }}

steps:
- name: Check out repository code
uses: actions/checkout@v2

- name: Clone pyenv
run: git clone https://github.com/pyenv/pyenv.git ~/.pyenv

- name: Run the CI build script
run: bash .ci/build.sh build
env:
BENCHMARK_HOME: env.GITHUB_WORKSPACE
run: bash .ci/build.sh build_and_unit_test
28 changes: 17 additions & 11 deletions DEVELOPER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,29 @@ This document will walk you through on what's needed to start contributing code

### Prerequisites

- **Pyenv** : Install `pyenv` and follow the instructions in the output of `pyenv init` to set up your shell and restart it before proceeding.
For more details please refer to the [PyEnv installation instructions](https://github.com/pyenv/pyenv#installation).
- **pyenv**: Install `pyenv` and follow the instructions in the output of `pyenv init` to set up your shell and restart it before proceeding.
For more details please refer to the [pyenv installation instructions](https://github.com/pyenv/pyenv#installation).

**Optional Step:** For Debian-based systems, install the following modules to continue with the next steps:
`pyenv` requires that the C compiler and development libraries be installed, so that the specified Python versions can be build from source. The installation instructions vary from platform to platform.

For Debian-based systems, install the following modules to continue with the next steps:
```
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev git
```

For Amazon Linux 2023, run the following command:
```
sudo yum -y install gcc openssl-devel bzip2-devel libffi-devel ncurses-devel sqlite-devel readline-devel zlib-devel xz-devel
```

On the Mac platform, XCode needs to be installed as well as some additional required libraries:
```
xcode-select --install
brew install pyenv jq zlib xz
```

- **JDK**: Although OSB is a Python application, it optionally builds and provisions OpenSearch clusters. JDK version 17 is used to build the current version of OpenSearch. Please refer to the [build setup requirements](https://github.com/opensearch-project/OpenSearch/blob/ca564fd04f5059cf9e3ce8aba442575afb3d99f1/DEVELOPER_GUIDE.md#install-prerequisites).
Note that the `javadoc` executable should be available in the JDK installation. An earlier version of the JDK can be used, but not all the integration tests will pass.

Expand All @@ -54,15 +67,8 @@ For those working on WSL2, it is recommended to clone the repository and set up
After you git cloned the forked copy of OpenSearch Benchmark, use the following command-line instructions to set up OpenSearch Benchmark for development:
```
cd opensearch-benchmark
make prereq
make install
```

NOTE: `make prereq` produces the following message.
```
IMPORTANT: please add `eval "$(pyenv init -)"` to your bash profile and restart your terminal before proceeding any further.
make develop
```
This line is commonly thought of as an error message but rather it's just a warning. Unless you haven't already added `eval "$(pyenv init -)"` to your bash profile and restarted your terminal, then feel free to proceed forward. This eval statement is necessary in the startup configuration as it allows Pyenv to manage python versions by adding python shims to your path. If you experience any issues, please see https://github.com/pyenv/pyenv.

Depending on the platform and shell you have, use the following command to activate the virtual environment:

Expand Down
Loading

0 comments on commit f766714

Please sign in to comment.