test: support running integration test with envoy bin #2010
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
# this part is envoy version agnostic so we only run it once | |
- if: ${{ matrix.envoy_version == 'dev' }} | |
name: Test plugin integration test framework | |
run: | | |
docker run --rm -e ENVOY_API_VERSION \ | |
-v $(pwd):/go/src/github.com/mosn/htnn $PROXY_IMAGE \ | |
./api/plugins/tests/integration/test_binary_mode.sh | |
- 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 | |
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 |