From f701c7ede14e1b6e082dea46977ad0b0d867010c Mon Sep 17 00:00:00 2001 From: Pier Carlo Chiodi Date: Sat, 21 Oct 2023 13:58:42 +0200 Subject: [PATCH] WIP --- .github/workflows/cicd.yml | 450 +-------------------------------- pierky/arouteserver/version.py | 2 +- 2 files changed, 2 insertions(+), 450 deletions(-) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 97c518ee..74c4d2ac 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -3,375 +3,10 @@ name: Tests and push to PyPi and DockerHub on: push jobs: - tests: - name: Run tests - - runs-on: ubuntu-latest - - strategy: - matrix: - python-version: - # This list must be kept in sync with setup.py. - - "3.7" - - "3.8" - - "3.9" - - "3.10" - - "3.11" # Reference version used to run integration tests; - # to keep in sync with 'if: ' statements in the rest - # of this file. - - "pypy3.9" # To keep in sync with other pypy releases referenced in the - # "Docker image tests" and "Push Docker image to Docker Hub" - # sections of this file. - - steps: - - uses: actions/checkout@v2 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - name: Install bgpq3 / bgpq4 - run: | - ./tests/external_resources/install_bgpq3.sh - ./tests/external_resources/install_bgpq4.sh - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install -r requirements-dev.txt - - - name: Flake8 - run: flake8 - - - name: Test CLI - if: ${{ matrix.python-version == '3.11' }} - run: ./tests/cli - env: - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Static tests - run: pytest -vs -x tests/static/ - env: - TRAVIS: 1 - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Config build tests - if: ${{ matrix.python-version != '3.11' }} - run: BUILD_ONLY=1 pytest -vs -x tests/live_tests/ - env: - TRAVIS: 1 - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Test external resources - if: ${{ matrix.python-version == '3.11' }} - run: pytest -vs tests/external_resources/ - env: - TRAVIS: 1 - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Fetch Docker images used by tests - if: ${{ matrix.python-version == '3.11' }} - run: | - echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin - docker pull pierky/bird:1.6.8 - docker pull pierky/bird:2.14 - docker pull pierky/bird:3.0-alpha2 - docker pull pierky/openbgpd:8.0 - docker pull pierky/openbgpd:8.3 - docker pull pierky/exabgp:4.2.7 - docker pull nlnetlabs/routinator:v0.8.3 - env: - DOCKER_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }} - - - name: Integration tests - if: ${{ matrix.python-version == '3.11' }} - run: pytest -vs -x tests/live_tests/ - env: - TRAVIS: 1 - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - docker-image-tests: - name: Docker image tests - - runs-on: ubuntu-latest - - strategy: - matrix: - docker-image: - - base_image: python:3.11 - target_image: latest - - base_image: pypy:3.9 - target_image: latest-pypy3 - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Build the image - run: > - docker build \ - --build-arg base_image=${{ matrix.docker-image.base_image }} \ - -t pierky/arouteserver:${{ matrix.docker-image.target_image }} \ - -f docker/Dockerfile \ - . - - - name: Run PyTest - run: > - docker run \ - -t \ - --rm \ - -e SECRET_PEERINGDB_API_KEY="${SECRET_PEERINGDB_API_KEY}" \ - pierky/arouteserver:${{ matrix.docker-image.target_image }} \ - bash -c 'pip install -r requirements-dev.txt && pytest -vsx tests/static' - env: - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Run CLI tests - run: > - docker run \ - -t \ - --rm \ - -e DO_NOT_PERFORM_VALIDATION=1 \ - -e SECRET_PEERINGDB_API_KEY="${SECRET_PEERINGDB_API_KEY}" \ - -v $(pwd)/utils/fake_rtt_getter.sh:/arouteserver/utils/fake_rtt_getter.sh:ro \ - pierky/arouteserver:${{ matrix.docker-image.target_image }} \ - ./tests/cli - env: - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Prep environment for configuration building tests - run: | - mkdir ~/arouteserver_configs - mkdir ~/arouteserver_html - - - name: Build configuration for BIRD 1.x - run: > - docker run \ - -t \ - --rm \ - -v $(pwd)/config.d/clients.yml:/root/clients.yml:ro \ - -v ~/arouteserver_configs:/root/arouteserver_configs \ - -e RS_ASN=65500 \ - -e ROUTER_ID=192.0.2.123 \ - -e LOCAL_PREFIXES=192.0.2.0/24,2001:db8::/32 \ - -e IP_VER=4 \ - -e DAEMON=bird \ - -e VERSION=1.6.8 \ - -e SECRET_PEERINGDB_API_KEY="${SECRET_PEERINGDB_API_KEY}" \ - pierky/arouteserver:${{ matrix.docker-image.target_image }} - env: - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Validate BIRD 1.x configuration - run: > - docker run \ - -t \ - --rm \ - -v ~/arouteserver_configs/bird4.cfg:/etc/bird/bird.cfg \ - pierky/bird:1.6.8 \ - bird \ - -c /etc/bird/bird.cfg \ - -d \ - -p - - - name: Build configuration for BIRD 2 (+ HTML representation) - run: > - docker run \ - -t \ - --rm \ - -v $(pwd)/config.d/clients.yml:/root/clients.yml:ro \ - -v ~/arouteserver_configs:/root/arouteserver_configs \ - -v ~/arouteserver_html:/root/arouteserver_html \ - -e RS_ASN=65500 \ - -e ROUTER_ID=192.0.2.123 \ - -e LOCAL_PREFIXES=192.0.2.0/24,2001:db8::/32 \ - -e DAEMON=bird \ - -e VERSION=2.0.7 \ - -e SECRET_PEERINGDB_API_KEY="${SECRET_PEERINGDB_API_KEY}" \ - pierky/arouteserver:${{ matrix.docker-image.target_image }} - env: - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Validate BIRD 2 configuration - run: > - docker run \ - -t \ - --rm \ - -v ~/arouteserver_configs/bird.cfg:/etc/bird/bird.cfg \ - pierky/bird:2.0.7 \ - bird \ - -c /etc/bird/bird.cfg \ - -d \ - -p - - - name: Validate HTML representation - run: > - grep \ - 'Configuration of route server 192.0.2.123 at AS65500' \ - ~/arouteserver_html/bird.html &>/dev/null - - - name: Build configuration for OpenBGPD (+ HTML representation) - run: > - docker run \ - -t \ - --rm \ - -v $(pwd)/config.d/clients.yml:/root/clients.yml:ro \ - -v ~/arouteserver_configs:/root/arouteserver_configs \ - -v ~/arouteserver_html:/root/arouteserver_html \ - -e RS_ASN=65500 \ - -e ROUTER_ID=192.0.2.124 \ - -e LOCAL_PREFIXES=192.0.2.0/24,2001:db8::/32 \ - -e DAEMON=openbgpd \ - -e VERSION=8.3 \ - -e SECRET_PEERINGDB_API_KEY="${SECRET_PEERINGDB_API_KEY}" \ - pierky/arouteserver:${{ matrix.docker-image.target_image }} - env: - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Validate OpenBGPD configuration - run: > - docker run \ - -t \ - --rm \ - -v ~/arouteserver_configs/openbgpd.cfg:/etc/bgpd/bgpd.conf \ - pierky/openbgpd:8.3 \ - bgpd \ - -f /etc/bgpd/bgpd.conf \ - -d \ - -n - - - name: Validate HTML representation - run: > - grep \ - 'Configuration of route server 192.0.2.124 at AS65500' \ - ~/arouteserver_html/openbgpd.html &>/dev/null - - - name: Build configuration using custom general.yml file - run: > - docker run \ - -t \ - --rm \ - -v $(pwd)/config.d/clients.yml:/root/clients.yml:ro \ - -v $(pwd)/examples/auto-config/bird-general.yml:/etc/arouteserver/general.yml:ro \ - -v ~/arouteserver_configs:/root/arouteserver_configs \ - -e DAEMON=bird \ - -e VERSION=2.14 \ - -e SECRET_PEERINGDB_API_KEY="${SECRET_PEERINGDB_API_KEY}" \ - pierky/arouteserver:${{ matrix.docker-image.target_image }} - env: - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Validate configuration built using custom general.yml file - run: > - docker run \ - -t \ - --rm \ - -v ~/arouteserver_configs/bird.cfg:/etc/bird/bird.cfg \ - pierky/bird:2.14 \ - bird \ - -c /etc/bird/bird.cfg \ - -d \ - -p - - - name: Build configuration using custom general.yml file with env vars and reject reasons communities - run: > - docker run \ - -t \ - --rm \ - -v $(pwd)/config.d/clients.yml:/root/clients.yml:ro \ - -v $(pwd)/tests/var/general-env-vars-and-reject-reasons.yml:/etc/arouteserver/general.yml:ro \ - -v ~/arouteserver_configs:/root/arouteserver_configs \ - -v ~/arouteserver_html:/root/arouteserver_html \ - -e IP_VER=4 \ - -e DAEMON=bird \ - -e VERSION=1.6.8 \ - -e RS_ASN=9999 \ - -e ROUTER_ID=192.0.2.200 \ - -e SECRET_PEERINGDB_API_KEY="${SECRET_PEERINGDB_API_KEY}" \ - pierky/arouteserver:${{ matrix.docker-image.target_image }} - env: - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Validate configuration built using custom general.yml file with env vars and reject reasons communities - run: | - docker run \ - -t \ - --rm \ - -v ~/arouteserver_configs/bird4.cfg:/etc/bird/bird.cfg \ - pierky/bird:1.6.8 \ - bird \ - -c /etc/bird/bird.cfg \ - -d \ - -p - cat ~/arouteserver_configs/bird4.cfg | grep 'router id 192.0.2.200' - - - name: Validate HTML representation - run: > - grep \ - 'Configuration of route server 192.0.2.200 at AS9999' \ - ~/arouteserver_html/bird.html &>/dev/null - - - name: Build configuration using local files - run: > - docker run \ - -t \ - --rm \ - -v $(pwd)/config.d/clients.yml:/root/clients.yml:ro \ - -v ~/arouteserver_configs:/root/arouteserver_configs \ - -e RS_ASN=65500 \ - -e ROUTER_ID=192.0.2.123 \ - -e LOCAL_PREFIXES=192.0.2.0/24,2001:db8::/32 \ - -e IP_VER=4 \ - -e DAEMON=bird \ - -e VERSION=1.6.8 \ - -e LOCAL_FILES="header footer" \ - -e LOCAL_FILES_DIR=/var/pierky/test \ - -e SECRET_PEERINGDB_API_KEY="${SECRET_PEERINGDB_API_KEY}" \ - pierky/arouteserver:${{ matrix.docker-image.target_image }} - env: - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Verify that include statements are there - run: | - cat ~/arouteserver_configs/bird4.cfg | \ - grep include | \ - grep /var/pierky/test | \ - egrep 'header.local|footer.local' | \ - wc -l | \ - grep 2 - - - name: Build configuration for 32bit ASN route-servers - run: > - docker run \ - -t \ - --rm \ - -v $(pwd)/config.d/clients.yml:/root/clients.yml:ro \ - -v ~/arouteserver_configs:/root/arouteserver_configs \ - -e RS_ASN=99999999 \ - -e PLACEHOLDER_16BIT_ASN=65333 \ - -e ROUTER_ID=192.0.2.123 \ - -e LOCAL_PREFIXES=192.0.2.0/24,2001:db8::/32 \ - -e IP_VER=4 \ - -e DAEMON=bird \ - -e VERSION=1.6.8 \ - -e SECRET_PEERINGDB_API_KEY="${SECRET_PEERINGDB_API_KEY}" \ - pierky/arouteserver:${{ matrix.docker-image.target_image }} - env: - SECRET_PEERINGDB_API_KEY: ${{ secrets.SECRET_PEERINGDB_API_KEY }} - - - name: Verify that the desired 16bit placeholder ASN is used - run: | - cat ~/arouteserver_configs/bird4.cfg | \ - grep "if (65333, peer_as) ~ bgp_community then" push_to_pypi: name: Push to PyPi - needs: [tests, docker-image-tests] - runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/v') @@ -400,92 +35,9 @@ jobs: - name: Publish distribution to Test PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: - repository_url: https://test.pypi.org/legacy/ + repository-url: https://test.pypi.org/legacy/ # Only non-alpha releases go to the official PyPi - name: Publish distribution to PyPI (official release) if: contains(github.ref, 'alpha') != true uses: pypa/gh-action-pypi-publish@master - - push_to_registry: - name: Push Docker image to Docker Hub - - needs: [tests, docker-image-tests] - - runs-on: ubuntu-latest - - if: startsWith(github.ref, 'refs/tags/v') - - steps: - - name: Check out the repo - uses: actions/checkout@v2 - - - name: Get the release - run: echo "::set-output name=CURRENT_RELEASE::$(python -c 'from pierky.arouteserver.version import __version__; print(__version__)')" - id: get_the_release - - - name: Is it a stable? - run: echo "::set-output name=IS_STABLE_RELEASE::$(python -c 'from pierky.arouteserver.version import __version__; import re; import sys; re.match(r"^\d+\.\d+\.\d+$", __version__); sys.stdout.write(str(bool(re.match(r"^\d+\.\d+\.\d+$", __version__))))')" - id: is_stable_release - - - name: Show the arguments - run: echo "Release ${{ steps.get_the_release.outputs.CURRENT_RELEASE }} - stable ${{ steps.is_stable_release.outputs.IS_STABLE_RELEASE }}" - - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Push to Docker Hub (current release, CPython) - uses: docker/build-push-action@v2 - with: - push: true - file: ./docker/Dockerfile - build-args: | - base_image=python:3.11 - tags: pierky/arouteserver:${{ steps.get_the_release.outputs.CURRENT_RELEASE }} - - - name: Push to Docker Hub (current release, PyPy) - uses: docker/build-push-action@v2 - with: - push: true - file: ./docker/Dockerfile - build-args: | - base_image=pypy:3.9 - tags: pierky/arouteserver:${{ steps.get_the_release.outputs.CURRENT_RELEASE }}-pypy3 - - - name: Push to Docker Hub (latest, CPython) - # Only stable releases - if: steps.is_stable_release.outputs.IS_STABLE_RELEASE == 'True' - uses: docker/build-push-action@v2 - with: - push: true - file: ./docker/Dockerfile - build-args: | - base_image=python:3.11 - tags: pierky/arouteserver:latest - - - name: Push to Docker Hub (latest, PyPy) - # Only stable releases - if: steps.is_stable_release.outputs.IS_STABLE_RELEASE == 'True' - uses: docker/build-push-action@v2 - with: - push: true - file: ./docker/Dockerfile - build-args: | - base_image=pypy:3.9 - tags: pierky/arouteserver:latest-pypy3 - - - name: Update Docker Hub description - uses: peter-evans/dockerhub-description@v2 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - # This must be the DockerHub password, since AToW - # Docker Hub doesn't allow to use tokens to update - # the README. - # https://github.com/peter-evans/dockerhub-description/issues/10 - password: ${{ secrets.DOCKERHUB_PASSWORD }} - repository: pierky/arouteserver - short-description: ARouteServer official Docker images - readme-filepath: ./docker/README.md diff --git a/pierky/arouteserver/version.py b/pierky/arouteserver/version.py index 1c55169b..c5c8ebbb 100644 --- a/pierky/arouteserver/version.py +++ b/pierky/arouteserver/version.py @@ -13,5 +13,5 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -__version__ = "1.21.2" # pragma: no cover +__version__ = "1.21.3-alpha3" # pragma: no cover COPYRIGHT_YEAR = 2023 # pragma: no cover