Skip to content

Metrics: support expose metrics for plugins #2065

Metrics: support expose metrics for plugins

Metrics: support expose metrics for plugins #2065

Workflow file for this run

name: test
on:
push:
branches: [ "main", "release/**" ]
paths-ignore:
- "site/**"
- "**/*.md"
pull_request:
branches: [ "main", "release/**" ]
paths-ignore:
- "site/**"
- "**/*.md"
concurrency:
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_number || github.ref }}
cancel-in-progress: true
env:
IN_CI: true
jobs:
api-module-test:
timeout-minutes: 10
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
envoy_version:
- 1.29
- 1.31
- 1.32
- dev
env:
ENVOY_API_VERSION: ${{ matrix.envoy_version }}
# patch version should not contain API breaking changes, so we just pick the first one
PROXY_IMAGE: envoyproxy/envoy:contrib-v${{ matrix.envoy_version }}.0
defaults:
run:
working-directory: ./api
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.22'
cache-dependency-path: "**/*.sum"
- name: Choose the Envoy API
run: |
FULL_ENVOY_VERSION=${ENVOY_API_VERSION}.0
if [[ $ENVOY_API_VERSION == dev ]]; then
# update this once there are more breaking changes
FULL_ENVOY_VERSION=1.32.1-0.20241112025658-4fd9bb670eeb
# This is the envoy:contrib-dev image pull in 2024-11-12.
# Use docker inspect --format='{{index .RepoDigests 0}}' envoyproxy/envoy:contrib-dev to get the sha256 ID.
# We don't use the envoy:contrib-dev tag directly because it will be rewritten by the latest commit and
# our test suite uses IfPresent policy to pull image.
# We don't use the CI to catch the breaking change from the upstream so far.
export PROXY_IMAGE=envoyproxy/envoy@sha256:0eec2cbd45c2055ea37c2321e8b83f6907a95e98c250492b48ad9dab6a20a8cb
echo PROXY_IMAGE=$PROXY_IMAGE >> $GITHUB_ENV
fi
pushd ..
./patch/switch-envoy-go-version.sh ${FULL_ENVOY_VERSION}
popd
- name: Unit test
run: make unit-test
- name: Set up services
run: |
make start-service
- name: Build
run: make build-test-so
- name: Integration test
run: make integration-test
- name: Upload logs
uses: actions/upload-artifact@v4
if: failure()
with:
# upload artifact can be found in https://github.com/mosn/htnn/actions/runs/$id
name: api-module-test-logs-${{ matrix.envoy_version }}
path: ./test-envoy
- name: Generate coverage
if: always()
run: |
go tool covdata textfmt -i=/tmp/htnn_coverage -o cover_integration.out -v 2
- name: Upload artifact
if: always() # always upload coverage, so the coverage percents won't affect by the failed tests
uses: actions/upload-artifact@v4
with:
name: api-module-test-cover-${{ matrix.envoy_version }}
path: |
./api/cover.out
./api/cover_integration.out
- name: Make sure the benchmark is runnable
run: |
go install github.com/codesenberg/bombardier@latest
HTNN_DATA_PLANE_BENCHMARK_DURATION=1s make benchmark
# this part is envoy version agnostic so we only run it once
- if: ${{ matrix.envoy_version == 'dev' }}
name: Test plugin integration test framework
run: |
make test-integration-framework-in-docker
types-module-test:
timeout-minutes: 10
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./types
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.22'
cache-dependency-path: "**/*.sum"
- name: Unit test
run: make unit-test
- name: Upload artifact
if: always() # always upload coverage, so the coverage percents won't affect by the failed tests
uses: actions/upload-artifact@v4
with:
name: types-module-test-cover
path: |
./types/cover.out
plugins-unit-test:
timeout-minutes: 10
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./plugins
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.22'
cache-dependency-path: "**/*.sum"
- name: Test
run: make unit-test
- name: Upload artifact
if: always() # always upload coverage, so the coverage percents won't affect by the failed tests
uses: actions/upload-artifact@v4
with:
name: plugins-unit-test-cover
path: ./plugins/cover.out
plugins-integration-test:
timeout-minutes: 10
runs-on: ubuntu-latest
env:
# to test the custom port feature
TEST_ENVOY_ADMIN_API_PORT: 9901
TEST_ENVOY_CONTROL_PLANE_PORT: 9902
TEST_ENVOY_DATA_PLANE_PORT: 9903
defaults:
run:
working-directory: ./plugins
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.22'
cache-dependency-path: "**/*.sum"
- name: Set up services
run: |
make start-service
- name: Build
run: make build-test-so
- name: Test
run: make integration-test
- name: Upload logs
uses: actions/upload-artifact@v4
if: failure()
with:
# upload artifact can be found in https://github.com/mosn/htnn/actions/runs/$id
name: plugins-integration-test-logs
path: ./test-envoy
- name: Generate coverage
if: always()
run: |
go tool covdata textfmt -i=/tmp/htnn_coverage -o tests/integration/cover.out -v 2
- name: Upload artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: plugins-integration-test-cover
path: plugins/tests/integration/cover.out
controller-test:
timeout-minutes: 10
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./controller
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.22'
cache-dependency-path: "**/*.sum"
- name: binary cache
uses: actions/cache@v4
with:
path: ./bin
key: ${{ runner.os }}-${{ hashFiles('./controller/Makefile') }}
- name: Set up services
run: |
make start-service
- name: Ensure benchmark is runnable
run: |
ENABLE_PROFILE=true BENCHMARK_SCALE=10 make benchmark
- name: Test
# disable race detector to work around https://github.com/mosn/htnn/blob/696b4db07032ecc5e36b8414ec018889b7eb1957/controller/tests/integration/registries/nacos_test.go#L270
run: ENABLE_RACE= make test
- name: Upload artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: controller-test-cover
path: ./controller/cover.out
coverage:
timeout-minutes: 10
runs-on: ubuntu-latest
needs: [api-module-test, types-module-test, plugins-unit-test, plugins-integration-test, controller-test]
if: always() && github.repository == 'mosn/htnn'
steps:
- uses: actions/checkout@v4
- name: Download artifact
uses: actions/download-artifact@v4
- name: Upload to codecov
uses: codecov/[email protected]
with:
fail_ci_if_error: true
files: |
./api-module-test-cover-1.29/cover.out,
./api-module-test-cover-1.29/cover_integration.out,
./api-module-test-cover-1.31/cover.out,
./api-module-test-cover-1.31/cover_integration.out,
./api-module-test-cover-1.32/cover.out,
./api-module-test-cover-1.32/cover_integration.out,
./api-module-test-cover-dev/cover.out,
./api-module-test-cover-dev/cover_integration.out,
./types-module-test-cover/cover.out,
./plugins-unit-test-cover/cover.out,
./plugins-integration-test-cover/cover.out,
./controller-test-cover/cover.out
token: ${{ secrets.CODECOV_TOKEN }}
verbose: true
misc-test:
timeout-minutes: 10
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.22'
cache-dependency-path: "**/*.sum"
- name: Example
run: |
rm go.work
pushd ./examples/dev_your_plugin
make unit-test
make integration-test
popd
make verify-example
e2e-test:
timeout-minutes: 25
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./e2e
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.22'
cache-dependency-path: "**/*.sum"
- name: binary cache
uses: actions/cache@v4
with:
path: ./bin
key: ${{ runner.os }}-${{ hashFiles('./Makefile') }}
- name: binary cache (for controller)
uses: actions/cache@v4
with:
path: ./bin
key: ${{ runner.os }}-${{ hashFiles('./controller/Makefile') }}
- name: Prepare cluster
run: |
make delete-cluster create-cluster
- name: Prepare controller
run: |
make e2e-prepare-controller-image
- name: Prepare data plane
run: |
make e2e-prepare-data-plane-image
- name: Bring up istio
run: |
make deploy-istio
- name: Test
run: make run-e2e
- name: Collect logs
uses: actions/upload-artifact@v4
if: failure()
with:
# upload artifact can be found in https://github.com/mosn/htnn/actions/runs/$id
name: e2e-test-logs
path: ./e2e/log