From 217fbace7bc8705a0558b3095e4a9a89c58111cd Mon Sep 17 00:00:00 2001 From: claude-im Date: Thu, 16 Jul 2026 16:05:47 +0100 Subject: [PATCH 1/3] ci(5): run the Job tester (jote) against every job submodule Add a GitHub Actions workflow that runs 'jote --dry-run' against every manifest in each job-based submodule (virtual-screening, squonk2-cdk, squonk2-chemaxon, squonk2-fragmenstein, squonk2-jaqpot, squonk2-smartcyp). A dry-run validates the Job Definition and Manifest files against the decoder schemas and lint rules without executing any tests or containers. Manifests are auto-discovered by globbing data-manager/manifest*.yaml, and each repository is a separate matrix leg (fail-fast disabled) so one non-compliant repository does not mask the others. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/test-jobs.yaml | 79 ++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 .github/workflows/test-jobs.yaml diff --git a/.github/workflows/test-jobs.yaml b/.github/workflows/test-jobs.yaml new file mode 100644 index 0000000..fbc953e --- /dev/null +++ b/.github/workflows/test-jobs.yaml @@ -0,0 +1,79 @@ +--- +name: test-jobs + +# Runs the Data Manager Job Tester ("jote") against every job-based submodule. +# +# For each job repository we run 'jote --dry-run' (which does not execute any +# tests) against every manifest found in its 'data-manager' directory. A +# dry-run validates the Job Definition and Manifest files against the decoder +# schemas and lint rules without needing Docker or any running containers. +# +# jote is installed from PyPI (https://pypi.org/project/im-jote/) so the check +# always reflects the current tester and schemas. + +on: + push: + branches: + - main + pull_request: + schedule: + # Weekly (Monday 06:24 UTC) so a new jote/schema release that changes + # validation is caught even without a repository change. + - cron: '24 6 * * 1' + workflow_dispatch: + +jobs: + jote: + runs-on: ubuntu-latest + strategy: + # Test every repository even if one fails, so a single non-compliant + # repository does not hide the status of the others. + fail-fast: false + matrix: + repo: + - virtual-screening + - squonk2-cdk + - squonk2-chemaxon + - squonk2-fragmenstein + - squonk2-jaqpot + - squonk2-smartcyp + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Checkout the ${{ matrix.repo }} submodule + run: | + # The submodules are declared with SSH URLs; rewrite to anonymous + # HTTPS so the (public) job repository can be fetched without a key. + git config --global url."https://github.com/".insteadOf "git@github.com:" + git submodule update --init -- "${{ matrix.repo }}" + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + + - name: Install jote + run: | + python -m pip install --upgrade pip + pip install im-jote + + - name: Dry-run jote against every manifest + working-directory: ${{ matrix.repo }} + run: | + shopt -s nullglob + manifests=(data-manager/manifest*.yaml data-manager/manifest*.yml) + if [ ${#manifests[@]} -eq 0 ]; then + echo "No manifests found in ${{ matrix.repo }}/data-manager" + exit 1 + fi + rc=0 + for manifest in "${manifests[@]}"; do + name="$(basename "${manifest}")" + echo "::group::jote --manifest ${name} --dry-run" + # --allow-no-tests keeps this a pure definition/schema check: a + # manifest whose jobs have no tests must not fail the dry-run. + jote --manifest "${name}" --dry-run --allow-no-tests || rc=1 + echo "::endgroup::" + done + exit ${rc} From dad66b16eb4b2952629deef2341f63b90bd806e5 Mon Sep 17 00:00:00 2001 From: claude-im Date: Thu, 16 Jul 2026 16:09:53 +0100 Subject: [PATCH 2/3] ci(5): pin jote via JOTE_VERSION variable and bump action versions Install im-jote at the version set by the workflow-level JOTE_VERSION variable (default 0.12.0) so the check is reproducible and can be moved in one place. Bump actions/checkout to v7 and actions/setup-python to v6. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/test-jobs.yaml | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-jobs.yaml b/.github/workflows/test-jobs.yaml index fbc953e..42e9590 100644 --- a/.github/workflows/test-jobs.yaml +++ b/.github/workflows/test-jobs.yaml @@ -8,8 +8,14 @@ name: test-jobs # dry-run validates the Job Definition and Manifest files against the decoder # schemas and lint rules without needing Docker or any running containers. # -# jote is installed from PyPI (https://pypi.org/project/im-jote/) so the check -# always reflects the current tester and schemas. +# jote is installed from PyPI (https://pypi.org/project/im-jote/) at the version +# pinned by the JOTE_VERSION variable below, so the check is reproducible; bump +# that single value to test against a newer tester and its schemas. + +env: + # The version of the im-jote package (https://pypi.org/project/im-jote/) to + # install and run. Change this in one place to move every matrix leg. + JOTE_VERSION: '0.12.0' on: push: @@ -39,7 +45,7 @@ jobs: - squonk2-smartcyp steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Checkout the ${{ matrix.repo }} submodule run: | @@ -49,14 +55,14 @@ jobs: git submodule update --init -- "${{ matrix.repo }}" - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.10' - name: Install jote run: | python -m pip install --upgrade pip - pip install im-jote + pip install "im-jote==${JOTE_VERSION}" - name: Dry-run jote against every manifest working-directory: ${{ matrix.repo }} From 7cbe05aa605edcb54d318d446690763cd01e34e4 Mon Sep 17 00:00:00 2001 From: claude-im Date: Thu, 16 Jul 2026 16:38:20 +0100 Subject: [PATCH 3/3] ci(5): bump JOTE_VERSION to 0.13.0 0.13.0 fixes the docker-compose probe on --dry-run (InformaticsMatters/squonk2-data-manager-job-tester#10), removing the transient flake on job repositories that have tests. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/test-jobs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-jobs.yaml b/.github/workflows/test-jobs.yaml index 42e9590..8ed3cac 100644 --- a/.github/workflows/test-jobs.yaml +++ b/.github/workflows/test-jobs.yaml @@ -15,7 +15,7 @@ name: test-jobs env: # The version of the im-jote package (https://pypi.org/project/im-jote/) to # install and run. Change this in one place to move every matrix leg. - JOTE_VERSION: '0.12.0' + JOTE_VERSION: '0.13.0' on: push: