From 0ca9991d2c19b516285aae008242f93d61933863 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 12 Dec 2025 11:35:41 +0000 Subject: [PATCH 1/6] build: try out a job for uploading cached app data --- .github/workflows/test-impl.yml | 49 +++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-impl.yml b/.github/workflows/test-impl.yml index f1482bc..1dd9f15 100644 --- a/.github/workflows/test-impl.yml +++ b/.github/workflows/test-impl.yml @@ -177,8 +177,53 @@ jobs: git push fi + cache-app-data: + permissions: + # No write permission + contents: read + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v5 + with: + ref: ${{ inputs.ref }} + + - name: Set up python + uses: actions/setup-python@v6 + with: + python-version: "3.13" + + - name: Set up poetry + uses: hpcflow/github-support/setup-poetry@main + timeout-minutes: ${{ inputs.install-poetry-timeout-minutes }} + with: + version: ${{ inputs.poetry-version }} + + - name: Cache dependencies + uses: hpcflow/github-support/init-cache@main + with: + name: test + version: ${{ matrix.python-version }} + + - name: Install dependencies + timeout-minutes: ${{ inputs.install-timeout-minutes }} + run: | + poetry install --without dev,pyinstaller + + - name: Cache all app data and programs + run: | + poetry run python -m ${{ inputs.CLI_module }} data cache --all + poetry run python -m ${{ inputs.CLI_module }} program cache --all + + - name: Upload all cached app data/programs + id: upload-cached-app-data + uses: actions/upload-artifact@v5 + with: + name: ${{ inputs.executable_name }}-app-data-cache + path: ~/.cache/${{ inputs.executable_name }} + test-units: - needs: pre-commit + needs: [pre-commit, cache-app-data] if: inputs.unit_tests == 'true' strategy: fail-fast: false @@ -226,7 +271,7 @@ jobs: poetry run python -m pytest ${{ inputs.pytest_args }} ${{ inputs.unit_test_args }} test-units-RockyLinux: - needs: pre-commit + needs: [pre-commit, cache-app-data] runs-on: ubuntu-latest if: inputs.unit_tests == 'true' permissions: From eed86c6bedf46bee6adea28d1c0630468d407bc9 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 12 Dec 2025 22:44:00 +0000 Subject: [PATCH 2/6] build: try out installing the caches in the test job --- .github/workflows/test-impl.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/test-impl.yml b/.github/workflows/test-impl.yml index 1dd9f15..d1a6965 100644 --- a/.github/workflows/test-impl.yml +++ b/.github/workflows/test-impl.yml @@ -246,6 +246,22 @@ jobs: uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} + + - name: Download prepared cached app data + uses: actions/download-artifact@v6 + with: + name: ${{ inputs.executable_name }}-app-data-cache + path: ${{ inputs.executable_name }}-app-data-cache + + - name: Install cached app data + run: | + poetry run python -m ${{ inputs.CLI_module }} data install-cache ${{ inputs.executable_name }}-app-data-cache/data + poetry run python -m ${{ inputs.CLI_module }} program install-cache ${{ inputs.executable_name }}-app-data-cache/programs + + - name: "[TEMP] Show cached data" + run: | + poetry run python -m ${{ inputs.CLI_module }} data --list + - name: Set up poetry uses: hpcflow/github-support/setup-poetry@main timeout-minutes: ${{ inputs.install-poetry-timeout-minutes }} From 87da436478fdfa111c6d93c2a72658f7d593b4bf Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 12 Dec 2025 22:46:03 +0000 Subject: [PATCH 3/6] fix: step order --- .github/workflows/test-impl.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test-impl.yml b/.github/workflows/test-impl.yml index d1a6965..654ec72 100644 --- a/.github/workflows/test-impl.yml +++ b/.github/workflows/test-impl.yml @@ -253,15 +253,6 @@ jobs: name: ${{ inputs.executable_name }}-app-data-cache path: ${{ inputs.executable_name }}-app-data-cache - - name: Install cached app data - run: | - poetry run python -m ${{ inputs.CLI_module }} data install-cache ${{ inputs.executable_name }}-app-data-cache/data - poetry run python -m ${{ inputs.CLI_module }} program install-cache ${{ inputs.executable_name }}-app-data-cache/programs - - - name: "[TEMP] Show cached data" - run: | - poetry run python -m ${{ inputs.CLI_module }} data --list - - name: Set up poetry uses: hpcflow/github-support/setup-poetry@main timeout-minutes: ${{ inputs.install-poetry-timeout-minutes }} @@ -278,6 +269,15 @@ jobs: run: | poetry install --without dev,pyinstaller + - name: Install cached app data + run: | + poetry run python -m ${{ inputs.CLI_module }} data install-cache ${{ inputs.executable_name }}-app-data-cache/data + poetry run python -m ${{ inputs.CLI_module }} program install-cache ${{ inputs.executable_name }}-app-data-cache/programs + + - name: "[TEMP] Show cached data" + run: | + poetry run python -m ${{ inputs.CLI_module }} data --list + - name: Run tests timeout-minutes: ${{ inputs.unit-test-timeout-minutes }} env: From c12d6dec2529ccd44c4e21ed9ce3b24e9c24c189 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 12 Dec 2025 22:57:06 +0000 Subject: [PATCH 4/6] fix: windows --- .github/workflows/test-impl.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-impl.yml b/.github/workflows/test-impl.yml index 654ec72..257d5cd 100644 --- a/.github/workflows/test-impl.yml +++ b/.github/workflows/test-impl.yml @@ -274,9 +274,12 @@ jobs: poetry run python -m ${{ inputs.CLI_module }} data install-cache ${{ inputs.executable_name }}-app-data-cache/data poetry run python -m ${{ inputs.CLI_module }} program install-cache ${{ inputs.executable_name }}-app-data-cache/programs - - name: "[TEMP] Show cached data" + - name: Show cached data + env: + PYTHONUTF8: 1 run: | poetry run python -m ${{ inputs.CLI_module }} data --list + poetry run python -m ${{ inputs.CLI_module }} program --list - name: Run tests timeout-minutes: ${{ inputs.unit-test-timeout-minutes }} From 84be9806b1d173f193ddad10825717ec088997a1 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 12 Dec 2025 23:13:18 +0000 Subject: [PATCH 5/6] build: use cached app data in integration tests --- .github/workflows/test-impl.yml | 50 +++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test-impl.yml b/.github/workflows/test-impl.yml index 257d5cd..54a4e90 100644 --- a/.github/workflows/test-impl.yml +++ b/.github/workflows/test-impl.yml @@ -270,16 +270,13 @@ jobs: poetry install --without dev,pyinstaller - name: Install cached app data - run: | - poetry run python -m ${{ inputs.CLI_module }} data install-cache ${{ inputs.executable_name }}-app-data-cache/data - poetry run python -m ${{ inputs.CLI_module }} program install-cache ${{ inputs.executable_name }}-app-data-cache/programs - - - name: Show cached data env: PYTHONUTF8: 1 run: | - poetry run python -m ${{ inputs.CLI_module }} data --list - poetry run python -m ${{ inputs.CLI_module }} program --list + poetry run ${{ inputs.executable_name }} data install-cache ${{ inputs.executable_name }}-app-data-cache/data + poetry run ${{ inputs.executable_name }} data --list + poetry run ${{ inputs.executable_name }} program install-cache ${{ inputs.executable_name }}-app-data-cache/programs + poetry run ${{ inputs.executable_name }} program --list - name: Run tests timeout-minutes: ${{ inputs.unit-test-timeout-minutes }} @@ -307,6 +304,12 @@ jobs: name: test version: RockyLinux + - name: Download prepared cached app data + uses: actions/download-artifact@v6 + with: + name: ${{ inputs.executable_name }}-app-data-cache + path: ${{ inputs.executable_name }}-app-data-cache + - name: Run unit tests within Docker uses: addnab/docker-run-action@v3 with: @@ -316,12 +319,16 @@ jobs: cd /home poetry config virtualenvs.in-project true poetry install --without dev,pyinstaller + poetry run ${{ inputs.executable_name }} data install-cache ${{ inputs.executable_name }}-app-data-cache/data + poetry run ${{ inputs.executable_name }} program install-cache ${{ inputs.executable_name }}-app-data-cache/programs + poetry run ${{ inputs.executable_name }} data --list + poetry run ${{ inputs.executable_name }} program --list export PYTHONUNBUFFERED=ok poetry run python -m pytest ${{ inputs.unit_test_args }} timeout-minutes: ${{ inputs.unit-test-timeout-minutes }} test-integration: - needs: pre-commit + needs: [pre-commit, cache-app-data] if: inputs.integration_tests == 'true' strategy: fail-fast: false @@ -355,11 +362,26 @@ jobs: name: test-integration version: ${{ matrix.python-version }} + - name: Download prepared cached app data + uses: actions/download-artifact@v6 + with: + name: ${{ inputs.executable_name }}-app-data-cache + path: ${{ inputs.executable_name }}-app-data-cache + - name: Install dependencies timeout-minutes: ${{ inputs.install-timeout-minutes }} run: | poetry install --without dev,pyinstaller + - name: Install cached app data + env: + PYTHONUTF8: 1 + run: | + poetry run ${{ inputs.executable_name }} data install-cache ${{ inputs.executable_name }}-app-data-cache/data + poetry run ${{ inputs.executable_name }} data --list + poetry run ${{ inputs.executable_name }} program install-cache ${{ inputs.executable_name }}-app-data-cache/programs + poetry run ${{ inputs.executable_name }} program --list + - name: Run integration tests timeout-minutes: ${{ inputs.integration-test-timeout-minutes }} env: @@ -369,7 +391,7 @@ jobs: poetry run ${{ inputs.executable_name }} test ${{ inputs.pytest_args }} --integration ${{ inputs.integration_test_args }} test-integration-RockyLinux: - needs: pre-commit + needs: [pre-commit, cache-app-data] runs-on: ubuntu-latest if: inputs.integration_tests == 'true' permissions: @@ -386,6 +408,12 @@ jobs: name: test-integration version: RockyLinux + - name: Download prepared cached app data + uses: actions/download-artifact@v6 + with: + name: ${{ inputs.executable_name }}-app-data-cache + path: ${{ inputs.executable_name }}-app-data-cache + - name: Run integration tests within Docker uses: addnab/docker-run-action@v3 with: @@ -395,6 +423,10 @@ jobs: cd /home poetry config virtualenvs.in-project true poetry install --without dev,pyinstaller + poetry run ${{ inputs.executable_name }} data install-cache ${{ inputs.executable_name }}-app-data-cache/data + poetry run ${{ inputs.executable_name }} program install-cache ${{ inputs.executable_name }}-app-data-cache/programs + poetry run ${{ inputs.executable_name }} data --list + poetry run ${{ inputs.executable_name }} program --list export PYTHONUNBUFFERED=ok poetry run ${{ inputs.executable_name }} test --integration ${{ inputs.integration_test_args }} timeout-minutes: ${{ inputs.integration-test-timeout-minutes }} From 54bdcc33ad226f303204a600270d8d37af8fd070 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 13 Dec 2025 21:36:35 +0000 Subject: [PATCH 6/6] fix: unit tests not loading conftest.py --- .github/workflows/test-impl.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-impl.yml b/.github/workflows/test-impl.yml index 54a4e90..d4b5d4c 100644 --- a/.github/workflows/test-impl.yml +++ b/.github/workflows/test-impl.yml @@ -284,7 +284,7 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} PYTHONUNBUFFERED: ok run: | - poetry run python -m pytest ${{ inputs.pytest_args }} ${{ inputs.unit_test_args }} + poetry run ${{ inputs.executable_name }} test ${{ inputs.pytest_args }} ${{ inputs.unit_test_args }} test-units-RockyLinux: needs: [pre-commit, cache-app-data] @@ -324,7 +324,7 @@ jobs: poetry run ${{ inputs.executable_name }} data --list poetry run ${{ inputs.executable_name }} program --list export PYTHONUNBUFFERED=ok - poetry run python -m pytest ${{ inputs.unit_test_args }} + poetry run ${{ inputs.executable_name }} test ${{ inputs.unit_test_args }} timeout-minutes: ${{ inputs.unit-test-timeout-minutes }} test-integration: