CI: Check py folders for init files #44
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Test PR | |
| on: | |
| pull_request: | |
| env: | |
| # Please make sure this version is included in the `matrix`, as the | |
| # `matrix` section can't use `env`, so it must be entered manually | |
| DEFAULT_PYTHON_VERSION: '3.11' | |
| # It would be nice to be able to also define a DEFAULT_UBUNTU_VERSION | |
| # but sadly `env` can't be used either in `runs-on`. | |
| jobs: | |
| validate-structure: | |
| name: Validate Python Package Structure | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Check for __init__.py files using counts | |
| run: | | |
| echo "Comparing directory count in proto with __init__.py count in py..." | |
| PROTO_BASE="proto/frequenz/api/common" | |
| PYTHON_BASE="py/frequenz/api/common" # Match the base for comparison | |
| # Count directories in the specific proto path | |
| proto_dirs=$(find "$PROTO_BASE" -type d | wc -l) | |
| echo "Found $proto_dirs directories under $PROTO_BASE" | |
| # Count __init__.py files in the corresponding python path | |
| py_inits=$(find "$PYTHON_BASE" -type f -name "__init__.py" | wc -l) | |
| echo "Found $py_inits '__init__.py' files under $PYTHON_BASE" | |
| if [ "$proto_dirs" -ne "$py_inits" ]; then | |
| echo "Validation failed: Mismatch between proto directory count ($proto_dirs) and python __init__.py count ($py_inits)." | |
| echo "Ensure (manually!) every directory under $PROTO_BASE has a corresponding directory with __init__.py under $PYTHON_BASE." | |
| exit 1 | |
| else | |
| echo "Validation successful: Proto directory count matches python __init__.py count ($proto_dirs)." | |
| fi | |
| protolint: | |
| name: Check proto files with protolint | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Setup Git | |
| uses: frequenz-floss/[email protected] | |
| - name: Fetch sources | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - name: Run protolint | |
| # Only use hashes here, as we are passing the github token, we want to | |
| # make sure updates are done consciously to avoid security issues if the | |
| # action repo gets hacked | |
| uses: yoheimuta/action-protolint@e62319541dc5107df5e3a5010acb8987004d3d25 # v1.3.0 | |
| with: | |
| fail_on_error: true | |
| filter_mode: nofilter | |
| github_token: ${{ secrets.github_token }} | |
| protolint_flags: proto/ | |
| protolint_version: "0.52.0" | |
| reporter: github-check | |
| nox: | |
| name: Test with nox | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Run nox | |
| uses: frequenz-floss/[email protected] | |
| with: | |
| python-version: "3.11" | |
| nox-session: ci_checks_max | |
| test-docs: | |
| name: Test documentation website generation | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Setup Git | |
| uses: frequenz-floss/[email protected] | |
| - name: Fetch sources | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - name: Setup Python | |
| uses: frequenz-floss/[email protected] | |
| with: | |
| python-version: ${{ env.DEFAULT_PYTHON_VERSION }} | |
| dependencies: .[dev-mkdocs] | |
| - name: Generate the documentation | |
| env: | |
| MIKE_VERSION: gh-${{ github.job }} | |
| run: | | |
| mike deploy $MIKE_VERSION | |
| mike set-default $MIKE_VERSION | |
| - name: Upload site | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: docs-site | |
| path: site/ | |
| if-no-files-found: error |