1
0
Fork 0
mirror of synced 2024-12-04 14:45:36 -05:00

Test running tests directly on action runner

To be able to test on different systems.
This commit is contained in:
Erik Flodin 2024-11-07 22:00:14 +01:00
parent 30fa6f08a4
commit a99944e2d2
No known key found for this signature in database
GPG key ID: 420A7C865EE3F85F
4 changed files with 91 additions and 7 deletions

View file

@ -1,13 +1,92 @@
--- ---
name: Tests name: Tests
on: # yamllint disable-line rule:truthy on: # yamllint disable-line rule:truthy
- push - push
- pull_request - pull_request
- workflow_dispatch - workflow_dispatch
env:
SC_VER: "0.10.0"
ESH_VER: "0.3.2"
jobs: jobs:
Tests: Tests:
runs-on: ubuntu-latest runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-24.04
- macos-13
python-version:
- "3.11"
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- name: Tests
run: make test - name: Install dependencies on Linux
if: ${{ runner.os == 'Linux' }}
run: |
sudo apt-get update
sudo apt-get install -y expect
- name: Install dependencies on macOS
if: ${{ runner.os == 'macOS' }}
run: |
brew install expect
- name: Prepare tools directory
run: |
mkdir "$RUNNER_TEMP/tools"
echo "$RUNNER_TEMP/tools" >> "$GITHUB_PATH"
- name: Install shellcheck
run: |
if [ "$RUNNER_OS" = "macOS" ]; then
OS=darwin
else
OS=linux
fi
if [ "$RUNNER_ARCH" = "ARM64" ]; then
ARCH=aarch64
else
ARCH=x86_64
fi
cd "$RUNNER_TEMP"
BASE_URL="https://github.com/koalaman/shellcheck/releases/download"
SC="v$SC_VER/shellcheck-v$SC_VER.$OS.$ARCH.tar.xz"
curl -L "$BASE_URL/$SC" | tar Jx shellcheck-v$SC_VER/shellcheck
mv shellcheck-v$SC_VER/shellcheck tools
- name: Install esh
run: |
cd "$RUNNER_TEMP/tools"
BASE_URL="https://github.com/jirutka/esh/raw/refs/tags"
curl -L -o esh "$BASE_URL/v$ESH_VER/esh"
chmod +x esh
- name: Add old yadm versions # to test upgrades
run: |
for version in 1.12.0 2.5.0; do
git fetch origin $version:refs/tags/$version
git cat-file blob $version:yadm > "$RUNNER_TEMP/tools/yadm-$version"
chmod +x "$RUNNER_TEMP/tools/yadm-$version"
done
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r test/requirements.txt
- name: Run tests
run: |
git config --global user.email test@yadm.io
git config --global user.name "Yadm Test"
pytest -v --color=yes

1
.gitignore vendored
View file

@ -5,3 +5,4 @@
.testyadm .testyadm
_site _site
testenv testenv
__pycache__/

View file

@ -1,6 +1,7 @@
"""Syntax checks""" """Syntax checks"""
import os import os
import shutil
import pytest import pytest
@ -77,7 +78,8 @@ def test_yamllint(pytestconfig, runner, yamllint_version):
def test_man(runner): def test_man(runner):
"""Check for warnings from man""" """Check for warnings from man"""
run = runner(command=["man.REAL", "--warnings", "./yadm.1"]) man = "man" if shutil.which("man.REAL") is None else "man.REAL"
run = runner(command=[man, "--warnings", "./yadm.1"])
assert run.success assert run.success
assert run.err == "" assert run.err == ""
assert "yadm - Yet Another Dotfiles Manager" in run.out assert "yadm - Yet Another Dotfiles Manager" in run.out

View file

@ -19,13 +19,15 @@ import pytest
], ],
) )
@pytest.mark.parametrize("submodule", [False, True], ids=["no submodule", "with submodules"]) @pytest.mark.parametrize("submodule", [False, True], ids=["no submodule", "with submodules"])
def test_upgrade(tmpdir, runner, versions, submodule): def test_upgrade(tmpdir, runner, paths, versions, submodule):
"""Upgrade tests""" """Upgrade tests"""
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
home = tmpdir.mkdir("HOME") home = tmpdir.mkdir("HOME")
env = {"HOME": str(home)} env = {"HOME": str(home)}
runner(["git", "config", "--global", "init.defaultBranch", "master"], env=env) runner(["git", "config", "--global", "init.defaultBranch", "master"], env=env)
runner(["git", "config", "--global", "protocol.file.allow", "always"], env=env) runner(["git", "config", "--global", "protocol.file.allow", "always"], env=env)
runner(["git", "config", "--global", "user.email", "test@yadm.io"], env=env)
runner(["git", "config", "--global", "user.name", "Yadm Test"], env=env)
if submodule: if submodule:
ext_repo = tmpdir.mkdir("ext_repo") ext_repo = tmpdir.mkdir("ext_repo")
@ -39,7 +41,7 @@ def test_upgrade(tmpdir, runner, versions, submodule):
os.environ.pop("XDG_DATA_HOME", None) os.environ.pop("XDG_DATA_HOME", None)
def run_version(version, *args, check_stderr=True): def run_version(version, *args, check_stderr=True):
yadm = f"yadm-{version}" if version else "/yadm/yadm" yadm = f"yadm-{version}" if version else paths.pgm
run = runner([yadm, *args], shell=True, cwd=str(home), env=env) run = runner([yadm, *args], shell=True, cwd=str(home), env=env)
assert run.success assert run.success
if check_stderr: if check_stderr: