Several CI workflows additions and improvements. #19
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: pre-commit | |
| on: | |
| pull_request: | |
| push: | |
| branches: [main] | |
| paths-ignore: | |
| - 'constraints-*.txt' | |
| jobs: | |
| pre-commit: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12", "3.13" ] | |
| name: Pre-commit python ${{ matrix.python-version }} | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 100 | |
| - uses: actions/setup-python@v6 | |
| id: cachepy | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: 'pip' | |
| cache-dependency-path: | | |
| requirements.txt | |
| mypy-requirements.txt | |
| dev-requirements.txt | |
| architecture: x64 | |
| - name: 'Install requirements (standard or constraints ${{ matrix.python-version }})' | |
| run: | | |
| pip install --upgrade pip wheel | |
| constraints_file="constraints-${{ matrix.python-version }}.txt" | |
| regen_constraints= | |
| if [ -f "$constraints_file" ] ; then | |
| at="$(git --no-pager log -p -1 "--format=tformat:%at" --no-patch -- "$constraints_file")" | |
| dat="$(git --no-pager log -p -1 "--format=tformat:%at" --no-patch -- "requirements.txt")" | |
| if [ "$at" -lt "$dat" ] ; then | |
| regen_constraints=true | |
| fi | |
| else | |
| regen_constraints=true | |
| fi | |
| if [ -n "$regen_constraints" ] ; then | |
| pip install -r requirements.txt | |
| pip freeze > "$constraints_file" | |
| grep -vF git+ "$constraints_file" > "$constraints_file"-relaxed | |
| else | |
| grep -vF git+ "$constraints_file" > "$constraints_file"-relaxed | |
| pip install -r requirements.txt -c "$constraints_file"-relaxed | |
| fi | |
| - name: 'Install development requirements' | |
| run: | | |
| pip install -r dev-requirements.txt -r mypy-requirements.txt -c constraints-${{ matrix.python-version }}.txt-relaxed | |
| - name: MyPy cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: '.mypy_cache/[0-9]*' | |
| key: mypy-${{ matrix.python-version }} | |
| - name: 'pre-commit' | |
| uses: pre-commit/action@v3.0.1 | |
| # if: ${{ matrix.python-version != '3.6' }} | |
| with: | |
| extra_args: --all -c .pre-commit-config.yaml | |
| # - name: 'pre-commit (custom Python ${{ matrix.python-version }})' | |
| # uses: pre-commit/action@v3.0.1 | |
| # if: ${{ matrix.python-version == '3.6' }} | |
| # with: | |
| # extra_args: --all -c .pre-commit-config-gh-${{ matrix.python-version }}.yaml | |
| - name: Get transitive dependencies licences | |
| id: license_check_print_report | |
| # uses: pilosus/action-pip-license-checker@v1.0.0 | |
| # continue-on-error: true | |
| uses: pilosus/action-pip-license-checker@v3.1.0 | |
| with: | |
| requirements: constraints-${{ matrix.python-version }}.txt | |
| - name: Check transitive dependencies licences | |
| id: license_check_report | |
| # uses: pilosus/action-pip-license-checker@v1.0.0 | |
| # continue-on-error: true | |
| uses: pilosus/action-pip-license-checker@v3.1.0 | |
| with: | |
| requirements: constraints-${{ matrix.python-version }}.txt | |
| fail: 'StrongCopyleft' | |
| exclude: 'pylint.*' | |
| - name: Print licences report | |
| if: ${{ always() }} | |
| run: echo "${{ steps.license_check_print_report.outputs.report }}" | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: constraints-artifacts-${{ matrix.python-version }} | |
| retention-days: 2 | |
| path: constraints-${{ matrix.python-version }}.txt | |
| pre-commit-22_04: | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| matrix: | |
| python-version: [ "3.7" ] | |
| name: Pre-commit python ${{ matrix.python-version }} | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 100 | |
| - uses: actions/setup-python@v6 | |
| id: cachepy | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: 'pip' | |
| cache-dependency-path: | | |
| requirements.txt | |
| mypy-requirements.txt | |
| dev-requirements.txt | |
| architecture: x64 | |
| - name: 'Install requirements (standard or constraints ${{ matrix.python-version }})' | |
| run: | | |
| pip install --upgrade pip wheel | |
| constraints_file="constraints-${{ matrix.python-version }}.txt" | |
| regen_constraints= | |
| if [ -f "$constraints_file" ] ; then | |
| at="$(git --no-pager log -p -1 "--format=tformat:%at" --no-patch -- "$constraints_file")" | |
| dat="$(git --no-pager log -p -1 "--format=tformat:%at" --no-patch -- "requirements.txt")" | |
| if [ "$at" -lt "$dat" ] ; then | |
| regen_constraints=true | |
| fi | |
| else | |
| regen_constraints=true | |
| fi | |
| if [ -n "$regen_constraints" ] ; then | |
| pip install -r requirements.txt | |
| pip freeze > "$constraints_file" | |
| grep -vF git+ "$constraints_file" > "$constraints_file"-relaxed | |
| else | |
| grep -vF git+ "$constraints_file" > "$constraints_file"-relaxed | |
| pip install -r requirements.txt -c "$constraints_file"-relaxed | |
| fi | |
| - run: | | |
| pip install -r dev-requirements.txt -r mypy-requirements.txt -c constraints-${{ matrix.python-version }}.txt-relaxed | |
| - name: MyPy cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: '.mypy_cache/[0-9]*' | |
| key: mypy-${{ matrix.python-version }} | |
| - name: 'pre-commit' | |
| uses: pre-commit/action@v3.0.1 | |
| # if: ${{ matrix.python-version != '3.6' }} | |
| with: | |
| extra_args: --all -c .pre-commit-config.yaml | |
| # - name: 'pre-commit (custom Python ${{ matrix.python-version }})' | |
| # uses: pre-commit/action@v3.0.1 | |
| # if: ${{ matrix.python-version == '3.6' }} | |
| # with: | |
| # extra_args: --all -c .pre-commit-config-gh-${{ matrix.python-version }}.yaml | |
| - name: Get transitive dependencies licences | |
| id: license_check_print_report | |
| # uses: pilosus/action-pip-license-checker@v1.0.0 | |
| # continue-on-error: true | |
| uses: pilosus/action-pip-license-checker@v3.1.0 | |
| with: | |
| requirements: constraints-${{ matrix.python-version }}.txt | |
| - name: Check transitive dependencies licences | |
| id: license_check_report | |
| # uses: pilosus/action-pip-license-checker@v1.0.0 | |
| # continue-on-error: true | |
| uses: pilosus/action-pip-license-checker@v3.1.0 | |
| with: | |
| requirements: constraints-${{ matrix.python-version }}.txt | |
| fail: 'StrongCopyleft' | |
| exclude: '(?i)^(pylint|dulwich).*' | |
| - name: Print licences report | |
| if: ${{ always() }} | |
| run: echo "${{ steps.license_check_print_report.outputs.report }}" | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: constraints-artifacts-${{ matrix.python-version }} | |
| retention-days: 2 | |
| path: constraints-${{ matrix.python-version }}.txt | |
| pull_request_changes: | |
| runs-on: ubuntu-latest | |
| name: Pull request with the newly generated contents | |
| needs: | |
| - pre-commit | |
| - pre-commit-22_04 | |
| steps: | |
| - name: Get analysis timestamp | |
| id: timestamp | |
| run: echo "timestamp=$(date -Is)" >> "$GITHUB_OUTPUT" | |
| - uses: actions/checkout@v5 | |
| - uses: actions/download-artifact@v5 | |
| id: download | |
| with: | |
| pattern: constraints-artifacts-* | |
| merge-multiple: true | |
| path: changes-dir | |
| - name: Move artifacts to their right place | |
| id: move | |
| run: | | |
| skip=true | |
| if [ -d "${{steps.download.outputs.download-path}}" ] ; then | |
| for con in "${{steps.download.outputs.download-path}}"/constraints-*.txt ; do | |
| case "$con" in | |
| */constraints-\*.txt) | |
| break | |
| ;; | |
| *) | |
| cp -p "$con" . | |
| skip=false | |
| ;; | |
| esac | |
| done | |
| fi | |
| echo "skip=$skip" >> "$GITHUB_OUTPUT" | |
| - name: Create Pull Request | |
| id: cpr | |
| uses: peter-evans/create-pull-request@v7 | |
| if: steps.move.outputs.skip == 'false' | |
| with: | |
| title: Updated constraints (triggered on ${{ steps.timestamp.outputs.timestamp }} by ${{ github.sha }}) | |
| add-paths: constraints-*.txt | |
| delete-branch: true | |
| commit-message: "[create-pull-request] Automatically commit updated contents (constraints)" | |
| - name: Check outputs | |
| if: ${{ steps.cpr.outputs.pull-request-number }} | |
| run: | | |
| echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" >> "$GITHUB_STEP_SUMMARY" | |
| echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" >> "$GITHUB_STEP_SUMMARY" |