Skip to content

[Backport release/3.2.x] chore(changelog): new way to maintain the changelog #27270

[Backport release/3.2.x] chore(changelog): new way to maintain the changelog

[Backport release/3.2.x] chore(changelog): new way to maintain the changelog #27270

name: Build & Test
on:
pull_request:
paths-ignore:
# ignore markdown files (CHANGELOG.md, README.md, etc.)
- '**/*.md'
- '.github/workflows/release.yml'
- 'CHANGELOG/**'
push:
paths-ignore:
# ignore markdown files (CHANGELOG.md, README.md, etc.)
- '**/*.md'
# ignore PRs for the generated COPYRIGHT file
- 'COPYRIGHT'
branches:
- master
- release/*
- test-please/*
# cancel previous runs if new commits are pushed to the PR, but run for each commit on master
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build:
name: Build dependencies
runs-on: ubuntu-22.04
steps:
- name: Set environment variables
run: |
echo "INSTALL_ROOT=$(pwd)/bazel-bin/build/kong-dev" >> $GITHUB_ENV
- name: Checkout Kong source code
uses: actions/checkout@v3
- name: Lookup build cache
id: cache-deps
uses: actions/cache@v3
with:
path: ${{ env.INSTALL_ROOT }}
key: ${{ hashFiles('.requirements', 'kong-*.rockspec', '.bazelversion', '**/*.bzl', '**/*.bazel', '.github/workflows/build_and_test.yml') }}
- name: Install packages
if: steps.cache-deps.outputs.cache-hit != 'true'
run: sudo apt update && sudo apt install libyaml-dev valgrind libprotobuf-dev
- name: Build Kong
if: steps.cache-deps.outputs.cache-hit != 'true'
run: |
bazel build //build:kong --verbose_failures
export PATH="$INSTALL_ROOT/bin:$INSTALL_ROOT/openresty/nginx/sbin:$INSTALL_ROOT/openresty/bin:$PATH"
chmod +rw -R $INSTALL_ROOT
nginx -V
ldd $(which nginx)
luarocks
- name: Bazel Outputs
uses: actions/upload-artifact@v3
if: failure()
with:
name: bazel-outputs
path: |
bazel-out/_tmp/actions
- name: Checkout go-pluginserver
if: steps.cache-deps.outputs.cache-hit != 'true'
uses: actions/checkout@v3
with:
repository: Kong/go-pluginserver
path: go-pluginserver
- name: Add to Path
if: steps.cache-deps.outputs.cache-hit != 'true'
run: echo "$INSTALL_ROOT/bin:$INSTALL_ROOT/openresty/nginx/sbin:$INSTALL_ROOT/openresty/bin" >> $GITHUB_PATH
- name: Build Dev Kong dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
run: |
eval `luarocks path`
make dev
lint-doc-and-unit-tests:
name: Lint, Doc and Unit tests
runs-on: ubuntu-22.04
needs: build
env:
KONG_TEST_PG_DATABASE: kong
KONG_TEST_PG_USER: kong
services:
postgres:
image: postgres:13
env:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_HOST_AUTH_METHOD: trust
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 5s --health-timeout 5s --health-retries 8
steps:
- name: Set environment variables
run: |
echo "INSTALL_ROOT=$(pwd)/bazel-bin/build/kong-dev" >> $GITHUB_ENV
- name: Checkout Kong source code
uses: actions/checkout@v3
- name: Lookup build cache
id: cache-deps
uses: actions/cache@v3
with:
path: ${{ env.INSTALL_ROOT }}
key: ${{ hashFiles('.requirements', 'kong-*.rockspec', '.bazelversion', '**/*.bzl', '**/*.bazel', '.github/workflows/build_and_test.yml') }}
- name: Add to Path
run: echo "$INSTALL_ROOT/bin:$INSTALL_ROOT/openresty/nginx/sbin:$INSTALL_ROOT/openresty/bin" >> $GITHUB_PATH
- name: Check autodoc generation
run: |
eval `luarocks path`
scripts/autodoc
- name: Check Admin API definition generation
run: |
eval `luarocks path`
scripts/gen-admin-api-def.sh
- name: Lint Lua code
run: |
eval `luarocks path`
make lint
- name: Validate rockspec file
run: |
eval `luarocks path`
scripts/validate-rockspec
- name: Check spec file misspelling
run: |
scripts/check_spec_files_spelling.sh
- name: Unit tests
run: |
eval `luarocks path`
make dev
bin/busted -v -o htest spec/01-unit
integration-tests-postgres:
name: Postgres ${{ matrix.suite }} - ${{ matrix.split }} tests
runs-on: ubuntu-22.04
needs: build
strategy:
fail-fast: false
matrix:
suite: [integration, plugins]
split: [first (01-04), second (>= 05)]
env:
KONG_TEST_PG_DATABASE: kong
KONG_TEST_PG_USER: kong
KONG_TEST_DATABASE: postgres
KONG_SPEC_TEST_GRPCBIN_PORT: "15002"
KONG_SPEC_TEST_GRPCBIN_SSL_PORT: "15003"
KONG_SPEC_TEST_OTELCOL_FILE_EXPORTER_PATH: ${{ github.workspace }}/tmp/otel/file_exporter.json
TEST_SUITE: ${{ matrix.suite }}
TEST_SPLIT: ${{ matrix.split }}
services:
postgres:
image: postgres:13
env:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_HOST_AUTH_METHOD: trust
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 5s --health-timeout 5s --health-retries 8
grpcbin:
image: kong/grpcbin
ports:
- 15002:9000
- 15003:9001
redis:
image: redis
ports:
- 6379:6379
- 6380:6380
options: >-
--name kong_redis
zipkin:
image: openzipkin/zipkin:2.19
ports:
- 9411:9411
steps:
- name: Set environment variables
run: |
echo "INSTALL_ROOT=$(pwd)/bazel-bin/build/kong-dev" >> $GITHUB_ENV
- name: Checkout Kong source code
uses: actions/checkout@v3
- name: Lookup build cache
id: cache-deps
uses: actions/cache@v3
with:
path: ${{ env.INSTALL_ROOT }}
key: ${{ hashFiles('.requirements', 'kong-*.rockspec', '.bazelversion', '**/*.bzl', '**/*.bazel', '.github/workflows/build_and_test.yml') }}
- name: Add to Path
run: echo "$INSTALL_ROOT/bin:$INSTALL_ROOT/openresty/nginx/sbin:$INSTALL_ROOT/openresty/bin" >> $GITHUB_PATH
- name: Add gRPC test host names
run: |
echo "127.0.0.1 grpcs_1.test" | sudo tee -a /etc/hosts
echo "127.0.0.1 grpcs_2.test" | sudo tee -a /etc/hosts
- name: Enable SSL for Redis
if: ${{ matrix.suite == 'plugins' }}
run: |
docker cp ${{ github.workspace }} kong_redis:/workspace
docker cp ${{ github.workspace }}/spec/fixtures/redis/docker-entrypoint.sh kong_redis:/usr/local/bin/docker-entrypoint.sh
docker restart kong_redis
docker logs kong_redis
- name: Run OpenTelemetry Collector
if: ${{ matrix.suite == 'plugins' }}
run: |
mkdir -p ${{ github.workspace }}/tmp/otel
touch ${{ github.workspace }}/tmp/otel/file_exporter.json
sudo chmod 777 -R ${{ github.workspace }}/tmp/otel
docker run -p 4317:4317 -p 4318:4318 -p 55679:55679 \
-v ${{ github.workspace }}/spec/fixtures/opentelemetry/otelcol.yaml:/etc/otel-collector-config.yaml \
-v ${{ github.workspace }}/tmp/otel:/etc/otel \
--name opentelemetry-collector -d \
otel/opentelemetry-collector-contrib:0.52.0 \
--config=/etc/otel-collector-config.yaml
sleep 2
docker logs opentelemetry-collector
- name: Tests
run: |
eval `luarocks path`
make dev
.ci/run_tests.sh
integration-tests-dbless:
name: DB-less integration tests
runs-on: ubuntu-22.04
needs: build
env:
KONG_TEST_PG_DATABASE: kong
KONG_TEST_PG_USER: kong
KONG_TEST_DATABASE: 'off'
KONG_SPEC_TEST_GRPCBIN_PORT: "15002"
KONG_SPEC_TEST_GRPCBIN_SSL_PORT: "15003"
KONG_SPEC_TEST_OTELCOL_FILE_EXPORTER_PATH: ${{ github.workspace }}/tmp/otel/file_exporter.json
TEST_SUITE: dbless
services:
grpcbin:
image: moul/grpcbin
ports:
- 15002:9000
- 15003:9001
steps:
- name: Set environment variables
run: |
echo "INSTALL_ROOT=$(pwd)/bazel-bin/build/kong-dev" >> $GITHUB_ENV
- name: Checkout Kong source code
uses: actions/checkout@v3
- name: Lookup build cache
id: cache-deps
uses: actions/cache@v3
with:
path: ${{ env.INSTALL_ROOT }}
key: ${{ hashFiles('.requirements', 'kong-*.rockspec', '.bazelversion', '**/*.bzl', '**/*.bazel', '.github/workflows/build_and_test.yml') }}
- name: Add to Path
run: echo "$INSTALL_ROOT/bin:$INSTALL_ROOT/openresty/nginx/sbin:$INSTALL_ROOT/openresty/bin" >> $GITHUB_PATH
- name: Add gRPC test host names
run: |
echo "127.0.0.1 grpcs_1.test" | sudo tee -a /etc/hosts
echo "127.0.0.1 grpcs_2.test" | sudo tee -a /etc/hosts
- name: Run OpenTelemetry Collector
run: |
mkdir -p ${{ github.workspace }}/tmp/otel
touch ${{ github.workspace }}/tmp/otel/file_exporter.json
sudo chmod 777 -R ${{ github.workspace }}/tmp/otel
docker run -p 4317:4317 -p 4318:4318 -p 55679:55679 \
-v ${{ github.workspace }}/spec/fixtures/opentelemetry/otelcol.yaml:/etc/otel-collector-config.yaml \
-v ${{ github.workspace }}/tmp/otel:/etc/otel \
--name opentelemetry-collector -d \
otel/opentelemetry-collector-contrib:0.52.0 \
--config=/etc/otel-collector-config.yaml
sleep 2
docker logs opentelemetry-collector
- name: Tests
run: |
eval `luarocks path`
make dev
.ci/run_tests.sh
integration-tests-cassandra:
name: C* ${{ matrix.cassandra_version }} ${{ matrix.suite }} - ${{ matrix.split }} tests
runs-on: ubuntu-22.04
needs: build
strategy:
fail-fast: false
matrix:
suite: [integration, plugins]
cassandra_version: [3]
split: [first (01-04), second (>= 05)]
env:
KONG_TEST_DATABASE: cassandra
KONG_SPEC_TEST_GRPCBIN_PORT: "15002"
KONG_SPEC_TEST_GRPCBIN_SSL_PORT: "15003"
KONG_SPEC_TEST_OTELCOL_FILE_EXPORTER_PATH: ${{ github.workspace }}/tmp/otel/file_exporter.json
TEST_SUITE: ${{ matrix.suite }}
TEST_SPLIT: ${{ matrix.split }}
services:
cassandra:
image: cassandra:${{ matrix.cassandra_version }}
ports:
- 7199:7199
- 7000:7000
- 9160:9160
- 9042:9042
options: --health-cmd "cqlsh -e 'describe cluster'" --health-interval 5s --health-timeout 5s --health-retries 8
grpcbin:
image: moul/grpcbin
ports:
- 15002:9000
- 15003:9001
redis:
image: redis
ports:
- 6379:6379
- 6380:6380
options: >-
--name kong_redis
zipkin:
image: openzipkin/zipkin:2.19
ports:
- 9411:9411
steps:
- name: Set environment variables
run: |
echo "INSTALL_ROOT=$(pwd)/bazel-bin/build/kong-dev" >> $GITHUB_ENV
- name: Checkout Kong source code
uses: actions/checkout@v3
- name: Lookup build cache
id: cache-deps
uses: actions/cache@v3
with:
path: ${{ env.INSTALL_ROOT }}
key: ${{ hashFiles('.requirements', 'kong-*.rockspec', '.bazelversion', '**/*.bzl', '**/*.bazel', '.github/workflows/build_and_test.yml') }}
- name: Add to Path
run: echo "$INSTALL_ROOT/bin:$INSTALL_ROOT/openresty/nginx/sbin:$INSTALL_ROOT/openresty/bin" >> $GITHUB_PATH
- name: Add gRPC test host names
run: |
echo "127.0.0.1 grpcs_1.test" | sudo tee -a /etc/hosts
echo "127.0.0.1 grpcs_2.test" | sudo tee -a /etc/hosts
- name: Enable SSL for Redis
if: ${{ matrix.suite == 'plugins' }}
run: |
docker cp ${{ github.workspace }} kong_redis:/workspace
docker cp ${{ github.workspace }}/spec/fixtures/redis/docker-entrypoint.sh kong_redis:/usr/local/bin/docker-entrypoint.sh
docker restart kong_redis
docker logs kong_redis
- name: Run OpenTelemetry Collector
if: ${{ matrix.suite == 'plugins' }}
run: |
mkdir -p ${{ github.workspace }}/tmp/otel
touch ${{ github.workspace }}/tmp/otel/file_exporter.json
sudo chmod 777 -R ${{ github.workspace }}/tmp/otel
docker run -p 4317:4317 -p 4318:4318 -p 55679:55679 \
-v ${{ github.workspace }}/spec/fixtures/opentelemetry/otelcol.yaml:/etc/otel-collector-config.yaml \
-v ${{ github.workspace }}/tmp/otel:/etc/otel \
--name opentelemetry-collector -d \
otel/opentelemetry-collector-contrib:0.52.0 \
--config=/etc/otel-collector-config.yaml
sleep 2
docker logs opentelemetry-collector
- name: Tests
run: |
eval `luarocks path`
make dev
.ci/run_tests.sh
pdk-tests:
name: PDK tests
runs-on: ubuntu-22.04
needs: build
env:
TEST_SUITE: pdk
steps:
- name: Set environment variables
run: |
echo "INSTALL_ROOT=$(pwd)/bazel-bin/build/kong-dev" >> $GITHUB_ENV
- name: Checkout Kong source code
uses: actions/checkout@v3
- name: Lookup build cache
id: cache-deps
uses: actions/cache@v3
with:
path: ${{ env.INSTALL_ROOT }}
key: ${{ hashFiles('.requirements', 'kong-*.rockspec', '.bazelversion', '**/*.bzl', '**/*.bazel', '.github/workflows/build_and_test.yml') }}
- name: Add to Path
run: echo "$INSTALL_ROOT/bin:$INSTALL_ROOT/openresty/nginx/sbin:$INSTALL_ROOT/openresty/bin" >> $GITHUB_PATH
- name: Install Test::Nginx
run: |
CPAN_DOWNLOAD=./cpanm
mkdir -p $CPAN_DOWNLOAD
curl -o $CPAN_DOWNLOAD/cpanm https://cpanmin.us
chmod +x $CPAN_DOWNLOAD/cpanm
echo "Installing CPAN dependencies..."
$CPAN_DOWNLOAD/cpanm --notest --local-lib=$HOME/perl5 local::lib && eval $(perl -I $HOME/perl5/lib/perl5/ -Mlocal::lib)
$CPAN_DOWNLOAD/cpanm --notest Test::Nginx
- name: Tests
run: |
eval `luarocks path`
make dev
eval $(perl -I $HOME/perl5/lib/perl5/ -Mlocal::lib)
.ci/run_tests.sh