Make magnetization direction required in public reduction_to_pole #1983
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
| # Run tests and upload to Codecov with GitHub Actions | |
| # | |
| # NOTE: Pin actions to a specific commit to avoid having the authentication | |
| # token stolen if the Action is compromised. See the comments and links here: | |
| # https://github.com/pypa/gh-action-pypi-publish/issues/27 | |
| # | |
| name: test | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| permissions: {} | |
| # Use bash by default in all jobs | |
| defaults: | |
| run: | |
| # The -l {0} is necessary for conda environments to be activated | |
| # But this breaks on MacOS if using actions/setup-python: | |
| # https://github.com/actions/setup-python/issues/132 | |
| # -e makes sure builds fail if any command fails | |
| shell: bash -e -o pipefail -l {0} | |
| jobs: | |
| ############################################################################# | |
| # Run tests | |
| test: | |
| name: ${{ matrix.os }} python=${{ matrix.python }} dependencies=${{ matrix.dependencies }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| # Otherwise, the workflow would stop if a single job fails. We want to | |
| # run all of them to catch failures in different combinations. | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| - macos-latest | |
| - windows-latest | |
| dependencies: | |
| - oldest | |
| - latest | |
| - optional | |
| include: | |
| - dependencies: oldest | |
| python: "3.10" | |
| - dependencies: latest | |
| python: "3.13" | |
| - dependencies: optional | |
| python: "3.13" | |
| env: | |
| REQUIREMENTS: env/requirements-build.txt env/requirements-tests.txt | |
| steps: | |
| # Checks-out your repository under $GITHUB_WORKSPACE | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| # Need to fetch more than the last commit so that setuptools-scm can | |
| # create the correct version string. If the number of commits since | |
| # the last release is greater than this, the version still be wrong. | |
| # Increase if necessary. | |
| fetch-depth: 100 | |
| # The GitHub token is preserved by default but this job doesn't need | |
| # to be able to push to GitHub. | |
| persist-credentials: false | |
| # Need the tags so that setuptools-scm can form a valid version number | |
| - name: Fetch git tags | |
| run: git fetch origin 'refs/tags/*:refs/tags/*' | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python }} | |
| - name: Collect requirements | |
| run: | | |
| echo "Install Dependente to capture dependencies:" | |
| python -m pip install dependente==0.3.0 | |
| echo "" | |
| echo "Capturing run-time dependencies:" | |
| if [[ "${{ matrix.dependencies }}" == "oldest" ]]; then | |
| dependente --source install --oldest > requirements-full.txt | |
| elif [[ "${{ matrix.dependencies }}" == "optional" ]]; then | |
| dependente --source install,extras > requirements-full.txt | |
| else | |
| dependente --source install > requirements-full.txt | |
| fi | |
| echo "Capturing dependencies from:" | |
| for requirement in $REQUIREMENTS | |
| do | |
| echo " $requirement" | |
| cat $requirement >> requirements-full.txt | |
| done | |
| echo "" | |
| echo "Collected dependencies:" | |
| cat requirements-full.txt | |
| - name: Get the pip cache folder | |
| id: pip-cache | |
| run: | | |
| echo "dir="$(pip cache dir) >> $GITHUB_OUTPUT | |
| - name: Setup caching for pip packages | |
| uses: actions/cache@v5 | |
| with: | |
| path: ${{ steps.pip-cache.outputs.dir }} | |
| key: ${{ runner.os }}-pip-${{ hashFiles('requirements-full.txt') }} | |
| - name: Install requirements | |
| run: | | |
| python -m pip install --requirement requirements-full.txt | |
| - name: List installed packages | |
| run: python -m pip freeze | |
| - name: Build source and wheel distributions | |
| run: make build | |
| - name: Check the archives | |
| run: twine check dist/* | |
| # Do this instead of using the wheel so we can get proper coverage reports | |
| - name: Install the package in editable mode | |
| run: python -m pip install --no-deps --editable . | |
| - name: Run the tests | |
| run: | | |
| if [ $RUNNER_OS == "Linux" ]; then | |
| # Set NUMBA_THREADING_LAYER to workqueue on Ubuntu to prevent | |
| # endless loop on some test functions that make use of Numba | |
| echo "Running 'NUMBA_THREADING_LAYER=workqueue make test'" | |
| NUMBA_THREADING_LAYER=workqueue make test | |
| else | |
| echo "Running 'make test'" | |
| make test | |
| fi | |
| env: | |
| COVERAGE_DEBUG: config,sys,pathmap | |
| - name: Rename the coverage output | |
| run: | | |
| mv .coverage .coverage.${{ matrix.os }}_${{ matrix.python }}_${{ matrix.dependencies }} | |
| - name: Upload coverage as artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| path: .coverage.* | |
| name: coverage_${{ matrix.os }}_${{ matrix.python }}_${{ matrix.dependencies }} | |
| if-no-files-found: ignore | |
| include-hidden-files: true | |
| ############################################################################# | |
| # Check coverage and upload a report | |
| # | |
| # Inspired by: https://hynek.me/articles/ditch-codecov-python/ | |
| coverage: | |
| name: test coverage is 100% | |
| if: always() | |
| needs: test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| # Need to fetch more than the last commit so that setuptools_scm can | |
| # create the correct version string. If the number of commits since | |
| # the last release is greater than this, the version still be wrong. | |
| # Increase if necessary. | |
| fetch-depth: 100 | |
| # The GitHub token is preserved by default but this job doesn't need | |
| # to be able to push to GitHub. | |
| persist-credentials: false | |
| - uses: actions/setup-python@v6 | |
| with: | |
| # Use latest Python, so it understands all syntax. | |
| python-version: "3.14" | |
| - name: Get the pip cache folder | |
| id: pip-cache | |
| run: echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT | |
| - name: Setup caching for pip packages | |
| uses: actions/cache@v5 | |
| with: | |
| path: ${{ steps.pip-cache.outputs.dir }} | |
| key: ${{ runner.os }}-pip-coverage | |
| - name: Download coverage artifacts | |
| uses: actions/download-artifact@v8 | |
| with: | |
| pattern: coverage_* | |
| # If true, the downloaded artifacts will be in the same directory | |
| # specified by path. | |
| merge-multiple: true | |
| - name: Install coverage.py | |
| run: python -m pip install --upgrade coverage[toml] | |
| - name: Combine coverage | |
| run: python -m coverage combine --debug=pathmap | |
| - name: Make an HTML report | |
| run: | | |
| python -m coverage html --skip-empty | |
| - name: Report coverage on the job summary | |
| run: python -m coverage report --format=markdown >> $GITHUB_STEP_SUMMARY | |
| - name: Fail if coverage is not 100% | |
| run: python -m coverage report --fail-under=100 | |
| - name: Upload HTML report if check failed | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: html-report | |
| path: htmlcov | |
| if: ${{ failure() }} |