From 5e8ab2e5db29069525dc1fc2470a0bfd87d56bcb Mon Sep 17 00:00:00 2001 From: Alexander Gorelyshev Date: Mon, 8 Dec 2025 10:14:03 +0400 Subject: [PATCH] Try an approach with `github-script` calling Github API --- .github/workflows/molecule.yml | 90 +++++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 28 deletions(-) diff --git a/.github/workflows/molecule.yml b/.github/workflows/molecule.yml index f88ec75..e77d56d 100644 --- a/.github/workflows/molecule.yml +++ b/.github/workflows/molecule.yml @@ -8,37 +8,71 @@ on: branches: [ "master" ] jobs: - - molecule: - name: molecule + detect: + name: Detect changed roles runs-on: ubuntu-latest - timeout-minutes: 10 - - strategy: - matrix: - distro: - - ubuntu2404 - - ubuntu2204 + outputs: + matrix: ${{ steps.make-matrix.outputs.matrix }} steps: - - uses: actions/checkout@v6 - - - uses: mamba-org/setup-micromamba@4d84239119b14cba1690b971f05c0bab912bea04 + - name: Get PR files and build role matrix + id: make-matrix + uses: actions/github-script@v6 with: - micromamba-version: '2.4.0-0' - environment-file: ci/conda.yml - init-shell: bash - post-cleanup: 'all' - cache-environment: true + script: | + // List files changed in the PR and extract top-level role folders under `roles/` + const files = await github.paginate(github.rest.pulls.listFiles, { + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.payload.pull_request.number, + per_page: 100 + }); - - name: "Install role dependencies" - run: ansible-galaxy install -r requirements.yml - shell: micromamba-shell {0} + const roles = Array.from(new Set(files.map(f => { + const m = f.filename.match(/^roles\/([^/]+)/); + return m ? `roles/${m[1]}` : null; + }).filter(Boolean))); - - name: "Run Molecule tests" - run: molecule test - shell: micromamba-shell {0} - env: - PY_COLORS: '1' - ANSIBLE_FORCE_COLOR: '1' - MOLECULE_DISTRO: ${{ matrix.distro }} + // If nothing changed, use a sentinel so the matrix is never empty (empty matrices fail the runner) + if (roles.length === 0) { + roles.push('__no_role__'); + } + + const matrix = { include: roles.map(r => ({ role: r })) }; + core.setOutput('matrix', JSON.stringify(matrix)); + + console.log(matrix); + + # molecule: + # name: molecule + # runs-on: ubuntu-latest + # timeout-minutes: 10 + + # strategy: + # matrix: + # distro: + # - ubuntu2404 + # - ubuntu2204 + + # steps: + # - uses: actions/checkout@v6 + + # - uses: mamba-org/setup-micromamba@4d84239119b14cba1690b971f05c0bab912bea04 + # with: + # micromamba-version: '2.4.0-0' + # environment-file: ci/conda.yml + # init-shell: bash + # post-cleanup: 'all' + # cache-environment: true + + # - name: "Install role dependencies" + # run: ansible-galaxy install -r requirements.yml + # shell: micromamba-shell {0} + + # - name: "Run Molecule tests" + # run: molecule test + # shell: micromamba-shell {0} + # env: + # PY_COLORS: '1' + # ANSIBLE_FORCE_COLOR: '1' + # MOLECULE_DISTRO: ${{ matrix.distro }}