feat: Use fsnotify to detect model/policy files change in casbin plugin #1507
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" ] | |
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: ./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/codecov-action@v4.5.0 | |
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: ./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 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 |