Test running tests directly on action runner
To be able to test on different systems.
This commit is contained in:
parent
30fa6f08a4
commit
2f83d945c5
6 changed files with 104 additions and 8 deletions
94
.github/workflows/test.yml
vendored
94
.github/workflows/test.yml
vendored
|
@ -1,13 +1,99 @@
|
||||||
---
|
---
|
||||||
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
|
||||||
|
which nroff || true
|
||||||
|
which troff || true
|
||||||
|
which groff || true
|
||||||
|
which man
|
||||||
|
|
||||||
|
- 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 --basetemp="$RUNNER_TEMP/pytest"
|
||||||
|
|
||||||
|
- run: cat /tmp/pinentry.log
|
||||||
|
if: failure()
|
||||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -5,3 +5,4 @@
|
||||||
.testyadm
|
.testyadm
|
||||||
_site
|
_site
|
||||||
testenv
|
testenv
|
||||||
|
__pycache__/
|
||||||
|
|
|
@ -587,6 +587,9 @@ max-cache-ttl 0
|
||||||
browser-socket none
|
browser-socket none
|
||||||
extra-socket none
|
extra-socket none
|
||||||
disable-scdaemon
|
disable-scdaemon
|
||||||
|
debug-all
|
||||||
|
log-file /tmp/pinentry.log
|
||||||
|
debug-pinentry
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
agentconf.chmod(0o600)
|
agentconf.chmod(0o600)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -89,7 +89,9 @@ def run_test(runner, paths, args, expected_matches, cwd=None):
|
||||||
XDG_DATA_HOME=
|
XDG_DATA_HOME=
|
||||||
HOME="{HOME}" set_yadm_dirs
|
HOME="{HOME}" set_yadm_dirs
|
||||||
configure_paths
|
configure_paths
|
||||||
declare -p | grep -E '(YADM|GIT)_'
|
for var in "${{!YADM_@}}" "${{!GIT_@}}"; do
|
||||||
|
echo "$var=\\"${{!var}}\\""
|
||||||
|
done
|
||||||
"""
|
"""
|
||||||
run = runner(command=["bash"], inp=script, cwd=cwd)
|
run = runner(command=["bash"], inp=script, cwd=cwd)
|
||||||
assert run.success
|
assert run.success
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue