ci: integration tests against multiple juju versions #1082
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: Testing | |
on: [push, pull_request, workflow_dispatch] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
lint: | |
name: Linter | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python: | |
- "3.9" | |
- "3.10" | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: Install dependencies | |
run: pip install tox | |
- name: Run linter | |
run: | | |
tox -e lint | |
./scripts/copyright.sh | |
build-test: | |
name: Build test | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python: | |
- "3.10" | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: Run build test target | |
run: | | |
make build-test | |
validate: | |
name: Validate | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python: | |
- "3.10" | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: Install dependencies | |
run: pip install tox | |
- name: Run validation tests | |
run: tox -e validate | |
unit-tests: | |
needs: lint | |
name: Unit tests | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python: | |
- "3.8" | |
- "3.9" | |
- "3.10" | |
- "3.11" | |
- "3.12" | |
- "3.13" | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: Install dependencies | |
run: pip install tox | |
- name: Run unit tests | |
run: tox -e py3 | |
integration: | |
name: Integration | |
needs: [lint, unit-tests] | |
timeout-minutes: 150 | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python: | |
# We will reduce the workload to 3.10 to | |
# save some resources for now. | |
# - "3.9" | |
- "3.10" | |
juju: | |
- "3.1/stable" | |
- "3.3/stable" | |
- "3.4/stable" | |
- "3.5/stable" | |
# A bunch of tests fail with juju.errors.JujuError: base: [email protected]/stable | |
# * test_subordinate_units | |
# * test_destroy_unit | |
# * test_ssh | |
# * ... | |
# - "3.6/beta" | |
continue-on-error: false # don't ignore if tests against some juju version fail | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: Setup operator environment | |
uses: charmed-kubernetes/actions-operator@main | |
with: | |
provider: lxd | |
juju-channel: ${{ matrix.juju }} | |
# 2023-01-11 Commented until we discover a | |
# clear approach for this. | |
# - name: Set proxy in controller | |
# run: | | |
# set -euxo pipefail | |
# # build a squid config file | |
# CONTROLLER_IP=$(juju list-controllers --format yaml | yq '.controllers[.current-controller].recent-server' | awk -F '[:]' '{print $1}'); | |
# echo "Controller IP is: $CONTROLLER_IP" | |
# PROXY=$CONTROLLER_IP:3128 | |
# echo "Proxy address is: $PROXY" | |
# echo "acl all src all" > squid.conf | |
# echo "http_access allow all" >> squid.conf | |
# echo "http_port $PROXY" >> squid.conf | |
# cat squid.conf | |
# # copy to the controller and reconfigure it | |
# juju status -m controller | |
# juju switch controller | |
# juju ssh 0 "sudo apt-get install squid -y" | |
# juju scp squid.conf 0:/tmp/squid.conf | |
# juju ssh 0 "sudo mv /tmp/squid.conf /etc/squid/squid.conf" | |
# juju ssh 0 "sudo squid -k reconfigure" | |
# # Test curl after waiting | |
# sleep 10 | |
# echo "Test proxy access" | |
# curl -s -o /dev/null -w "%{http_code}" --proxy http://$PROXY https://charmhub.io | |
# # set model defaults | |
# juju model-defaults apt-http-proxy=$PROXY apt-https-proxy=$PROXY juju-http-proxy=$PROXY juju-https-proxy=$PROXY snap-http-proxy=$PROXY snap-https-proxy=$PROXY | |
# juju model-defaults | |
- name: Run integration | |
# Force one single concurrent test | |
run: tox -e integration | |
continue-on-error: true # so that other juju versions are tested | |
integration-quarantine: | |
name: Quarantined Integration Tests | |
needs: [lint, unit-tests] | |
timeout-minutes: 150 | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python: | |
- "3.10" | |
juju: | |
- "3.1/stable" | |
- "3.3/stable" | |
- "3.4/stable" | |
- "3.5/stable" | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v3 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: Setup operator environment | |
uses: charmed-kubernetes/actions-operator@main | |
with: | |
provider: lxd | |
juju-channel: ${{ matrix.juju }} | |
- name: Run integration | |
run: tox -e integration-quarantine | |
continue-on-error: true # so that other juju versions are tested |