CI for farmworld, a Python package - a failed attempt
FarmWorld is a reinforcement learning library for agriculture written in Python.
This package had instruction in the README file on how to install and how to release.
It came with a Makefile which is a bit strange as there are python-based tools that could do the same job, but that makefile did not have a "test" target either.
I tried to follow the instruction in the README file.
On Python 3.11 the installation failed with
Unable to find installation candidates for ale-py (0.7.4)
I reported it: Dependencies are missing on python 3.11
On Python 3.10 the installation worked, but the tests failed with
pytest: command not found
Fair enough. There is no pytest installed.
At this point however I got a bit fed up and thought I should try it locally in a Docker container:
Trying to run in Docker container
After cloning the repository:
Start the container:
docker run -it -v$(pwd):/opt --workdir /opt --name farm ubuntu:22.04 bash
Install make, python and virtualenv:
apt-get update apt-get install -y make apt-get install -y python3 apt-get install -y python3.10-venv
Just to make sure we have a good version of Python I also ran python3 --version and the response was Python 3.10.6. So it is fine.
I tried to run make venv but that relies on the command python being available. However in Linux the package is called python3. So instead I executed the command manually:
python3 -m venv .venv
I also reported it: python is called python3 on Linux - Makefile assumes python
Then I continued:
make install
Everything installed fine.
Apparently at first looking at the README file I missed the instructions on how to run the tests, but I saw two test scripts in the `test/` folder so I installed pytest and then tried to run the tests:
.venv/bin/pip install pytest PYTHONPATH=. .venv/bin/pytest test/
This gave me an error:
pygame.error: No available video device
At this point I feel I am stuck. I found some instruction on how to add video device to Docker, but I somehow doubt I'd be able to do this on GitHub Actions.
Including test-running in the Makefile
Although I don't particularly like the use of Makefile here, but if that's what the author prefers then let's go all the way and add the test running to it as well.
I sent a Pull-request adding tests target to the Makefile
No available video device
Finally I opened and issue with the pygame.error: No available video device asking if there could be tests that don't require a video device.
GitHub Actions configuration file
It does not work yet (?), but let me share the configuration file I created so far. It might be useful later on.
examples/farmworld/ci.yml
name: CI on: push: pull_request: workflow_dispatch: #schedule: # - cron: '42 5 * * *' jobs: build: runs-on: ubuntu-latest name: Build steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.10' - name: Install dependencies run: | make venv make install .venv/bin/pip install pytest - name: Check Python version run: .venv/bin/python -V - name: Test with pytest env: PYTHONPATH: . run: .venv/bin/pytest -vs
Conclusion
This time my attempt to add GitHub Actions failed, but I hope I managed to contribute a bit to this project.
Published on 2022-12-03