Merge pull request #735 from canonical/new-plugin-docs #261
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: Tests | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
jobs: | |
linters: | |
runs-on: ubuntu-22.04 | |
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 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] | |
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.7 | |
3.8 | |
3.9 | |
3.10 | |
3.12 | |
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: | | |
sudo apt install -y ninja-build cmake scons \ | |
autoconf automake autopoint gcc git gperf help2man libtool texinfo | |
python -m pip install tox | |
# Build Chisel: needs a newer version of go than is available in Ubuntu 20.04 | |
sudo snap install --classic --channel=latest/stable go | |
git clone https://github.com/canonical/chisel.git chisel-tmp | |
cd chisel-tmp && git checkout v0.9.0 | |
go mod download | |
sudo go build -o /usr/bin ./... | |
chisel --help | |
# Remove newer go and install regular version for 20.04 | |
sudo snap remove go | |
sudo apt install -y golang | |
# Install RPM dependencies for RPM tests | |
sudo apt install rpm | |
# 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 | |
- 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-20.04] | |
python-version: ["3.7", "3.8", "3.9", "3.10"] | |
include: | |
- adjective: focal | |
- os: ubuntu-22.04 | |
python-version: "3.10" | |
adjective: jammy | |
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: | | |
sudo apt install -y ninja-build cmake scons qt5-qmake \ | |
autoconf automake autopoint gcc git gperf help2man libtool texinfo | |
# Build Chisel: needs a newer version of go than is available in Ubuntu 20.04 | |
# note: we can't use the snap here because it has strict confinement and can't access | |
# the test files in /tmp/pytest-* | |
sudo snap install --classic --channel=latest/stable go | |
git clone https://github.com/canonical/chisel.git chisel-tmp | |
cd chisel-tmp && git checkout v0.9.0 | |
go mod download | |
sudo go build -o /usr/bin ./... | |
chisel --help | |
# Remove newer go and install regular version for 20.04 | |
sudo snap remove go | |
sudo apt install -y golang | |
# Install RPM dependencies for RPM tests | |
sudo apt install rpm | |
# 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 | |
- 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 |