Skip to content

chore(merge): 2.1.4 into main #3127

chore(merge): 2.1.4 into main

chore(merge): 2.1.4 into main #3127

Workflow file for this run

name: Tests
on:
pull_request:
push:
branches:
- main
jobs:
linters:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Install python packages and dependencies
run: |
sudo snap install --no-wait ruff
sudo apt update
sudo apt install -y libapt-pkg-dev aspell
pip install python-apt@https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/python-apt/2.4.0ubuntu1/python-apt_2.4.0ubuntu1.tar.xz
pip install -U -e .[dev]
sudo snap watch --last=install
- name: Run black
run: |
make test-black
- name: Run codespell
run: |
make test-codespell
- name: Run ruff
run: |
make test-ruff
- name: Run mypy
run: |
make test-mypy
- name: Run pydocstyle
run: |
make test-pydocstyle
- name: Run lint-docs
run: |
tox run -e lint-docs
- name: Run pyright
run: |
sudo snap install --classic node
sudo snap install --classic pyright
make test-pyright
- name: Run linkcheck, woke, spelling
run: |
sudo snap install woke
make test-docs
unit-tests:
strategy:
matrix:
os: [ubuntu-20.04, ubuntu-22.04, ubuntu-24.04]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: |
3.10
3.12
3.13-dev
cache: pip
- name: Install apt build dependencies
run: |
sudo apt update
sudo apt install -y libapt-pkg-dev intltool fuse-overlayfs python3-apt
- name: Install additional test dependencies
run: |
echo "::group::snap install"
sudo snap install chisel --channel latest/candidate --no-wait
echo "::endgroup::"
echo "::group::apt install"
sudo apt install -y ninja-build cmake scons \
autoconf automake autopoint gcc git gperf help2man libtool texinfo
# Install go from the Snap Store
go_job=$(sudo snap install --no-wait --classic go)
# Install RPM dependencies for RPM tests
sudo apt install rpm
# Install poetry. From pipx on focal, from apt on newer systems.
if [[ $(grep VERSION_CODENAME /etc/os-release ) == "VERSION_CODENAME=focal" ]]; then
sudo apt-get install -y pipx
pipx install poetry
else
sudo apt-get install -y python3-poetry
fi
snap watch $go_job
# Ensure we don't have dotnet installed, to properly test dotnet-deps
# Based on https://github.com/actions/runner-images/blob/main/images/linux/scripts/installers/dotnetcore-sdk.sh
sudo apt remove -y dotnet-* || true
echo "::endgroup::"
echo "::group::pip install"
python -m pip install tox
echo "::endgroup::"
echo "::group::dotnet removal"
# Remove manually-installed dotnet from tarballs
sudo rm -rf /usr/share/dotnet
# Remove dotnet tools
rm -rf $HOME/.dotnet
echo "::endgroup::"
echo "::group::Wait for snap to complete"
snap watch --last=install
echo "::endgroup::"
- name: specify node version
uses: actions/setup-node@v4
with:
node-version: 16
- name: Setup Tox environments
run: tox run -m unit-tests --notest
- name: Unit tests
run: .tox/.tox/bin/tox run --skip-pkg-install --no-list-dependencies --result-json results/tox-${{ matrix.platform }}.json -m unit-tests
env:
PYTEST_ADDOPTS: "--no-header -vv -rN"
tests:
strategy:
matrix:
os: [ubuntu-22.04]
python-version: ["3.10", "3.12"]
include:
- adjective: jammy
- os: ubuntu-20.04
python-version: "3.10"
adjective: focal
- os: ubuntu-24.04
python-version: "3.12"
adjective: noble
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install apt build dependencies
run: |
sudo apt update
sudo apt install -y libapt-pkg-dev intltool fuse-overlayfs python3-apt
- name: Install general python dependencies
run: |
pip install python-apt@https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/python-apt/2.0.1ubuntu0.20.04.1/python-apt_2.0.1ubuntu0.20.04.1.tar.xz
pip install -e .[dev]
- name: Install additional test dependencies
run: |
echo "::group::snap install"
sudo snap install --no-wait core20
sudo snap install chisel --channel latest/candidate --no-wait
sudo snap install go --classic --no-wait
echo "::endgroup::"
echo "::group::apt install"
sudo apt install -y ninja-build cmake scons qt5-qmake p7zip \
autoconf automake autopoint gcc git gperf help2man libtool texinfo \
curl findutils pkg-config rpm \
findutils python3-dev python3-venv
echo "::endgroup::"
echo "::group::dotnet removal"
# Ensure we don't have dotnet installed, to properly test dotnet-deps
# Based on https://github.com/actions/runner-images/blob/main/images/linux/scripts/installers/dotnetcore-sdk.sh
sudo apt remove -y dotnet-* || true
# Remove manually-installed dotnet from tarballs
sudo rm -rf /usr/share/dotnet
# Remove dotnet tools
rm -rf $HOME/.dotnet
echo "::endgroup::"
echo "::group::Wait for snap to complete"
snap watch --last=install
echo "::endgroup::"
echo "::group::Poetry"
# Install poetry. From pipx on focal, from apt on newer systems.
if [[ $(grep VERSION_CODENAME /etc/os-release ) == "VERSION_CODENAME=focal" ]]; then
sudo apt-get install -y pipx
pipx install poetry
else
sudo apt-get install -y python3-poetry
fi
echo "::endgroup::"
echo "::group::JDK"
sudo apt-get install -y openjdk-17-jdk-headless openjdk-21-jdk-headless openjdk-8-jdk-headless
echo "::endgroup::"
- name: specify node version
uses: actions/setup-node@v4
with:
node-version: 16
- name: Run integration tests
run: |
make test-integrations
- name: Run overlay smoke test
if: ${{ matrix.adjective == 'focal' }} # TODO: fix this smoke test for jammy
run: |
wget -q https://cloud-images.ubuntu.com/${{ matrix.adjective }}/current/${{ matrix.adjective }}-server-cloudimg-amd64.squashfs
mkdir base
sudo mount -t squashfs ${{ matrix.adjective }}-server-cloudimg-amd64.squashfs base/
cat <<-EOF > parts.yaml
parts:
foo:
plugin: nil
overlay-packages: [hello]
overlay-script: |
chroot "\$CRAFT_OVERLAY" /bin/bash -c "hello > hello.txt"
echo 1234 > "\$CRAFT_OVERLAY/etc/issue"
overlay:
- "*.txt"
- etc
- usr/bin
bar:
plugin: nil
after: [foo]
overlay-packages: [bison]
overlay-script: |
chroot "\$CRAFT_OVERLAY" /bin/bash -c "rm -Rf /etc/shells /etc/ssh && mkdir /etc/ssh"
echo 5678 > "\$CRAFT_OVERLAY/etc/issue"
overlay:
- -usr/share
- -var/cache
override-build: |
rev "\$CRAFT_OVERLAY/hello.txt" > "\$CRAFT_PART_INSTALL/olleh.txt"
EOF
python_exe=$(command -v python)
cat <<-EOF > run.sh
echo "--- overlay foo"
"${python_exe}" -mcraft_parts --work-dir=work --trace --overlay-base=base --refresh overlay foo
echo "--- next actions plan"
"${python_exe}" -mcraft_parts --work-dir=work --overlay-base=base --dry-run --show-skipped
echo "--- next actions execution"
"${python_exe}" -mcraft_parts --work-dir=work --trace --overlay-base=base
EOF
echo "--- parts.yaml:"
cat parts.yaml
sudo bash -xe run.sh
echo "* Check if hello executables installed"
test -x work/prime/usr/bin/hello && echo "hello"
test -x work/prime/usr/bin/bison && echo "bison"
test -x work/prime/usr/bin/m4 && echo "m4"
echo "* Check if /usr/bin/yacc is a symbolic link"
test -L work/prime/usr/bin/yacc && ls -l work/prime/usr/bin/yacc
echo "* Check if docs excluded"
test ! -d work/usr/share/doc/hello && echo "hello"
test ! -d work/usr/share/doc/bison && echo "bison"
echo "* Check created files"
grep "!dlrow ,olleH" work/prime/olleh.txt
grep "Hello, world!" work/prime/hello.txt
grep 5678 work/prime/etc/issue
echo "* Check whiteout files"
test -f work/prime/etc/.wh.shells && echo "/etc/shells"
test -f work/prime/etc/ssh/.wh..wh.opq && echo "/etc/ssh"
echo "--- prime files:"
find work/prime