Skip to content

update CI, +8

update CI, +8 #1

Workflow file for this run

on:
workflow_call:
inputs:
arch:
type: string
default: "64"
compiler:
type: string
default: "gcc"
coverage:
type: string
default: "OFF"
dev_mode:
type: string
default: "OFF"
lib_msg_delivery:
type: string
default: "OFF"
lib_write_deadline:
type: string
default: "OFF"
repeat:
type: string
default: "1"
sanitize:
type: string
description: "sanitize option to use, 'address' or 'thread'"
server_version:
type: string
description: "nats-server version to test with"
default: "latest"
streaming:
type: string
default: "ON"
tls:
type: string
default: "ON"
type:
type: string
description: "Debug or Release."
default: "Release"
ubuntu_version:
type: string
description: "Ubuntu version to use, e.g. '20.04'"
default: "latest"
verbose_test_output:
type: string
default: "OFF"
verbose_make_output:
type: string
default: "OFF"
benchmark:
type: string
default: "OFF"
secrets:
CODECOV_TOKEN:
description: "Codecov repo token"
permissions:
contents: write # to comment on coverage.
defaults:
run:
shell: bash --noprofile --norc -x -eo pipefail {0}
jobs:
do:
runs-on: ubuntu-${{ inputs.ubuntu_version }}
name: "${{ inputs.ubuntu_version }} - nats:${{ inputs.server_version }}"
steps:
- name: Checkout nats.c
uses: actions/checkout@v4
- name: "Checkout dependencies (nats.c.deps)"
uses: actions/checkout@v4
with:
repository: nats-io/nats.c.deps
path: deps
# configure the cmake flags and NATS_... environment variables
- id: cmake-flags
name: Configure cmake flags
env:
flags: -DNATS_BUILD_ARCH=${{ inputs.arch }}
-DCMAKE_BUILD_TYPE=${{ inputs.type }}
-DNATS_BUILD_STREAMING=${{ inputs.streaming }}
-DNATS_BUILD_WITH_TLS=${{ inputs.tls }}
-DNATS_PROTOBUF_DIR=${{ github.workspace}}/deps/pbuf
-DNATS_BUILD_USE_SODIUM=ON
-DNATS_SODIUM_DIR=${{ github.workspace}}/deps/sodium
run: |
if [[ -n "${{ inputs.sanitize }}" ]]; then
flags="$flags -DNATS_SANITIZE=ON -DCMAKE_C_FLAGS=-fsanitize=${{ inputs.sanitize }}"
fi
if [[ "${{ inputs.coverage }}" == "ON" ]]; then
flags="$flags -DNATS_COVERAGE=ON"
fi
if [[ "${{ inputs.dev_mode }}" == "ON" ]]; then
flags="$flags -DDEV_MODE=ON"
fi
if [[ "${{ inputs.verbose_make_output }}" == "ON" ]]; then
flags="$flags -DCMAKE_VERBOSE_MAKEFILE=ON"
fi
echo "flags=$flags" >> $GITHUB_OUTPUT
- id: nats-vars
name: Configure NATS_ environment variables
run: |
if [[ -n "${{ inputs.sanitize }}" ]]; then
echo "NATS_TEST_VALGRIND=yes" >> $GITHUB_ENV
fi
if [[ "${{ inputs.lib_msg_delivery }}" == "ON" ]]; then
echo "NATS_DEFAULT_TO_LIB_MSG_DELIVERY=yes" >> $GITHUB_ENV
fi
if [[ "${{ inputs.lib_write_deadline }}" == "ON" ]]; then
echo "NATS_DEFAULT_LIB_WRITE_DEADLINE=2000" >> $GITHUB_ENV
fi
echo "CC=${{ inputs.compiler }}" >> $GITHUB_ENV
# install build dependencies
- name: Install ${{ inputs.compiler }} if needed
if: startsWith(inputs.compiler, 'clang-') || startsWith(inputs.compiler, 'gcc-')
run: |
sudo apt-get -q update
sudo apt-get -y install ${{ inputs.compiler }}
# otherwise, configure cmake, build, archive and upload
- name: CMake
run: |
mkdir -p build
cd build
cmake .. ${{ steps.cmake-flags.outputs.flags }}
make rebuild_cache && make
# testing
- name: "Download nats-server version ${{ inputs.server_version }}"
if: inputs.server_version
working-directory: ./build
run: |
rel=${{ inputs.server_version }}
if [ "$rel" = "latest" ]; then
rel=$(curl -s https://api.github.com/repos/nats-io/nats-server/releases/latest | jq -r '.tag_name')
fi
if [ "$rel" != "${rel#v}" ] && wget https://github.com/nats-io/nats-server/releases/download/$rel/nats-server-$rel-linux-amd64.tar.gz; then
tar -xzf nats-server-$rel-linux-amd64.tar.gz
cp nats-server-$rel-linux-amd64/nats-server ../deps/nats-server/nats-server
else
for c in 1 2 3 4 5
do
echo "Attempt $c to download binary for main"
rm -f ./nats-server
curl -sf "https://binaries.nats.dev/nats-io/nats-server/v2@$rel" | PREFIX=. sh
# We are sometimes getting nats-server of size 0. Make sure we have a
# working nats-server by making sure we get a version number.
v="$(./nats-server -v)"
if [ "$v" != "" ]; then
break
fi
done
mv ./nats-server ../deps/nats-server/nats-server
fi
- name: "Test"
if: inputs.benchmark == 'OFF'
working-directory: ./build
run: |
export PATH=../deps/nats-server:../deps/nats-streaming-server:$PATH
export NATS_TEST_SERVER_VERSION="$(nats-server -v)"
flags=""
ctest -L 'test' --timeout 60 --output-on-failure --repeat-until-fail ${{ inputs.repeat }}
- name: Upload coverage reports to Codecov
# PRs from external contributors fail: https://github.com/codecov/feedback/issues/301
# Only upload coverage reports for PRs from the same repo (not forks)
if: inputs.coverage == 'ON' && github.event.pull_request.head.repo.full_name == github.repository
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
# verbose: true

Check failure on line 183 in .github/workflows/build-test.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/build-test.yml

Invalid workflow file

You have an error in your yaml syntax on line 183
- name: "Download benchmark results from ${{ github.event.pull_request.base.ref }}"
if: inputs.benchmark == 'ON' && github.event.pull_request.base.ref
uses: actions/download-artifact@v2
with:
name: benchmark_results
path: ./build/prev_bench.log
- name: "Benchmark"
if: inputs.benchmark == 'ON'
working-directory: ./build
run: |
export PATH=../deps/nats-server:../deps/nats-streaming-server:$PATH
export NATS_TEST_SERVER_VERSION="$(nats-server -v)"
flags=""
ctest -L 'bench' --timeout 600 -VV | tee bench.log
ls -lsa
- name: "Upload benchmark results"
if: inputs.benchmark == 'ON'
uses: actions/upload-artifact@v2
with:
name: benchmark_results
path: ./build/bench.log