# The image the add-on's tests run in (CI-01). This repo had NO CI at all before # that ticket - eight runnable test files, none of them ever run by a machine. # # ⚠️ THE DEPENDENCIES ARE THE SHIPPED ONES, FROM APK, AND THAT IS THE POINT. # goodwe_controller/Dockerfile installs `py3-aiohttp py3-paho-mqtt` from Alpine # packages rather than pip, because Alpine ships musl and there are no musl # wheels for aiohttp - pip would compile it from source on a client's Raspberry # Pi. Testing against pip-installed glibc wheels would be testing a different # add-on from the one that ships. Same base, same package manager, same names. # # ⚠️ NOT `FROM ghcr.io/home-assistant/...-base`. The real Dockerfile takes its # base from the Supervisor's `BUILD_FROM` build-arg, which is per-architecture # and not resolvable outside a Supervisor build. `alpine:3` is what those images # are, minus the s6 supervision the tests do not use - and it is already cached # on this runner's host, so the gate does not depend on a registry pull. # # ⚠️ The runner container itself CANNOT run these tests: it is Alpine with a bare # python3, no aiohttp, no pip (`No module named pip`; checked on the box, not # assumed). An image is not gold-plating here, it is the only option that does # not mutate a shared long-lived runner. # ⚠️ `git` IS A TEST DEPENDENCY, NOT A CONVENIENCE (CI-02). test_ci_gate.py # grades the gate's own checkout by EXTRACTING the shell out of # .gitea/workflows/checks.yml and RUNNING it - against two throwaway local # repositories it builds itself, one whose pull request merges and one whose # does not. Reading those commands as a string would be the thing this # repository keeps finding: a check that never observed its subject. Running # them needs git in the image the checks run in. # # It costs one apk package and no network at test time: the fixtures are local # paths, and the token substitution in the workflow's `git remote add` is a # no-op on a path with no `://` in it, which is exactly why the test can use # the shipped line verbatim instead of a paraphrase of it. FROM alpine:3 RUN apk add --no-cache python3 py3-aiohttp py3-paho-mqtt git