diff --git a/.github/workflows/molecule.yml b/.github/workflows/molecule.yml new file mode 100644 index 0000000..b46317d --- /dev/null +++ b/.github/workflows/molecule.yml @@ -0,0 +1,87 @@ +--- +name: molecule + +on: + pull_request: + +jobs: + detect: + name: Detect changed roles + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.make-matrix.outputs.matrix }} + + steps: + - name: Get PR files and build role matrix + id: make-matrix + uses: actions/github-script@v8 + with: + script: | + if (!context.payload.pull_request?.number) { + core.setFailed('This workflow must be triggered by a pull_request event. No pull_request found in context.'); + return; + } + + // 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 + }); + + const roles = Array.from(new Set(files.map(f => { + const m = f.filename.match(/^roles\/([^/]+)/); + return m ? `roles/${m[1]}` : null; + }).filter(Boolean))); + + // 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: Run Molecule + needs: detect + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.detect.outputs.matrix) }} + + steps: + - name: Checkout the repo + if: ${{ matrix.role != '__no_role__' }} + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: "Set up micromamba" + uses: mamba-org/setup-micromamba@4d84239119b14cba1690b971f05c0bab912bea04 + if: ${{ matrix.role != '__no_role__' }} + with: + micromamba-version: '2.4.0-0' + environment-file: ci/conda.yml + init-shell: bash + post-cleanup: 'all' + cache-environment: true + + - name: "Install collection dependencies" + if: ${{ matrix.role != '__no_role__' }} + run: ansible-galaxy install -r requirements.yml + shell: micromamba-shell {0} + + - name: "Run Molecule tests" + if: ${{ matrix.role != '__no_role__' }} + working-directory: ${{ matrix.role }} + run: molecule test + shell: micromamba-shell {0} + env: + PY_COLORS: '1' + ANSIBLE_FORCE_COLOR: '1' + # MOLECULE_DISTRO: ${{ matrix.distro }} diff --git a/roles/mount_device/README.md b/roles/mount_device/README.md index ff4c994..0f6194d 100644 --- a/roles/mount_device/README.md +++ b/roles/mount_device/README.md @@ -23,16 +23,7 @@ None Example Playbook ---------------- -```yaml -- role: mount_device - devices: - - what: /dev/vdb - where: "/somewhere" - fstype: ext4 - opts: - - noatime - state: mounted -``` +See: [converge.yml](molecule/default/converge.yml) License -------