Add Snap Strategy #439
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
# This file is centrally managed as a template file in https://github.com/canonical/solutions-engineering-automation | |
# To update the file: | |
# - Edit it in the canonical/solutions-engineering-automation repository. | |
# - Open a PR with the changes. | |
# - When the PR merges, the soleng-terraform bot will open a PR to the target repositories with the changes. | |
name: Tests | |
on: | |
workflow_call: | |
workflow_dispatch: | |
pull_request: | |
types: [opened, synchronize, reopened] | |
branches: [main] | |
paths-ignore: | |
- "**.md" | |
- "**.rst" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
lint: | |
name: Lint | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.8", "3.10"] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
# pin tox to the current major version to avoid | |
# workflows breaking all at once when a new major version is released. | |
python -m pip install 'tox<5' | |
- name: Run linters | |
run: tox -e lint | |
unit: | |
name: Unit | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.8", "3.10"] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install 'tox<5' | |
- name: Run unit tests | |
run: tox -e unit | |
func: | |
needs: | |
- lint | |
- unit | |
name: functional tests | |
runs-on: ${{ matrix.runs-on }} | |
timeout-minutes: 120 | |
strategy: | |
fail-fast: false | |
matrix: | |
runs-on: [[ubuntu-22.04]] | |
test-command: ['tox -e func -- --series focal', 'tox -e func -- --series jammy'] | |
juju-channel: ["3.4/stable"] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
# arm64 runners don't have make or gcc installed by default | |
- name: Install dependencies | |
run: | | |
sudo apt update | |
sudo apt install -y make gcc | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.10" | |
- name: Setup Juju environment | |
uses: charmed-kubernetes/actions-operator@main | |
with: | |
provider: "lxd" | |
juju-channel: ${{ matrix.juju-channel }} | |
charmcraft-channel: "2.x/stable" | |
# This is used by zaza in the functional tests for non-amd64 architectures (if applicable) | |
- name: Set zaza juju model constraints for architecture | |
run: | | |
if [ "$(uname -m)" = "aarch64" ]; then | |
echo "TEST_MODEL_CONSTRAINTS=arch=arm64" >> "$GITHUB_ENV" | |
fi | |
- name: Run tests | |
run: ${{ matrix.test-command }} | |
env: | |
TEST_JUJU3: "1" # https://github.com/openstack-charmers/zaza/pull/653 | |
TEST_JUJU_CHANNEL: ${{ matrix.juju-channel }} | |
# Save output for debugging | |
- name: Generate debugging information | |
if: always() | |
run: | | |
set -x | |
# install dependencies | |
sudo snap install --classic juju-crashdump | |
sudo apt install -y jq uuid | |
# Print juju controller information for debugging | |
# to check controller and client are compatible versions; | |
# we can have a mismatch if using an external controller. | |
juju version | |
juju controllers | |
models="$(juju models --format json | jq -r '.models[]."short-name"')" | |
dir="$(mktemp -d)" | |
# Use a different dir to avoid charmed-kubernetes/actions-operator from also trying to upload crashdumps. | |
# We don't want to rely on that action, because it doesn't use a descriptive enough name for the artefact, | |
# and we may stop using that action soon. | |
echo "CRASHDUMPS_DIR=$dir" | tee -a "$GITHUB_ENV" | |
echo "CRASHDUMPS_ARTEFACT_SUFFIX=$(uuid)-$(uname -m)" | tee -a "$GITHUB_ENV" | |
for model in $models; do | |
# show status here for quick debugging | |
juju status -m "$model" | |
juju-crashdump --as-root -m "$model" -u "$model-$(uname -m)" -o "$dir" | |
done | |
- name: Upload juju crashdumps | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: "juju-crashdumps-${{ env.CRASHDUMPS_ARTEFACT_SUFFIX }}" | |
path: "${{ env.CRASHDUMPS_DIR }}/juju-crashdump-*.tar.xz" |