Skip to content

Support configuring RESTAPI to GRPC via HTTPFilterPolicy #1407

Support configuring RESTAPI to GRPC via HTTPFilterPolicy

Support configuring RESTAPI to GRPC via HTTPFilterPolicy #1407

Workflow file for this run

name: test
on:
push:
branches: [ "main" ]
paths-ignore:
- "site/**"
- "**/*.md"
pull_request:
branches: [ "main" ]
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
defaults:
run:
working-directory: ./api
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.21'
cache-dependency-path: "**/*.sum"
- name: Unit test
run: make unit-test
- 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
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
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.21'
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.21'
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
defaults:
run:
working-directory: ./plugins
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.21'
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.21'
cache-dependency-path: "**/*.sum"
- name: binary cache
uses: actions/cache@v4
with:
path: ./controller/bin
key: ${{ runner.os }}-${{ hashFiles('./controller/Makefile') }}
- name: Set up services
run: |
make start-controller-service
- name: Ensure benchmark is runnable
run: |
ENABLE_PROFILE=true BENCHMARK_SCALE=10 make benchmark
- name: Test
run: 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()
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/cover.out,
./api-module-test-cover/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.21'
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.21'
cache-dependency-path: "**/*.sum"
- name: binary cache
uses: actions/cache@v4
with:
path: ./e2e/bin
key: ${{ runner.os }}-${{ hashFiles('./Makefile') }}
- name: binary cache (for controller)
uses: actions/cache@v4
with:
path: ./controller/bin
key: ${{ runner.os }}-${{ hashFiles('./controller/Makefile') }}
- name: Prepare cluster
run: |
make delete-cluster create-cluster
- name: Prepare code
run: |
pushd ..
make prebuild
popd
- 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