diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1dae7cf..7b5f788 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,13 +1,98 @@ --- name: Tests + on: # yamllint disable-line rule:truthy - push - pull_request - workflow_dispatch + +env: + SC_VER: "0.10.0" + ESH_VER: "0.3.2" + jobs: Tests: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: + - ubuntu-20.04 + - ubuntu-24.04 + - macos-13 + - macos-15 steps: - - uses: actions/checkout@v2 - - name: Tests - run: make test + - uses: actions/checkout@v4 + + - name: Install dependencies on Linux + if: ${{ runner.os == 'Linux' }} + run: | + sudo apt-get update + sudo apt-get install -y expect + if [ "${{ matrix.os }}" != "ubuntu-20.04" ]; then + sudo apt-get install -y j2cli + fi + + - name: Install dependencies on macOS + if: ${{ runner.os == 'macOS' }} + run: | + command -v expect || 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 3.11 + if: ${{ runner.os == 'macOS' || matrix.os == 'ubuntu-20.04' }} + uses: actions/setup-python@v5 + with: + python-version: 3.11 + + - 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"