1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
name: CI Upstream
on:
push:
branches:
- main
pull_request:
branches:
- main
types: [opened, reopened, synchronize, labeled]
schedule:
- cron: "0 0 * * *" # Daily “At 00:00” UTC
workflow_dispatch: # allows you to trigger the workflow run manually
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
FORCE_COLOR: 3
PIXI_VERSION: "v0.63.2"
jobs:
detect-ci-trigger:
name: detect upstream-dev ci trigger
runs-on: ubuntu-latest
if: |
github.repository == 'pydata/xarray'
&& (github.event_name == 'push' || github.event_name == 'pull_request')
&& !contains(github.event.pull_request.labels.*.name, 'skip-ci')
outputs:
triggered: ${{ steps.detect-trigger.outputs.trigger-found }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 2
- uses: xarray-contrib/ci-trigger@v1
id: detect-trigger
with:
keyword: "[test-upstream]"
cache-pixi-lock:
uses: ./.github/workflows/cache-pixi-lock.yml
with:
pixi-version: "v0.63.2" # keep in sync with env var above
upstream-dev:
name: upstream-dev
runs-on: ubuntu-latest
needs: [detect-ci-trigger, cache-pixi-lock]
if: |
always()
&& (
(github.event_name == 'schedule' || github.event_name == 'workflow_dispatch')
|| needs.detect-ci-trigger.outputs.triggered == 'true'
|| contains( github.event.pull_request.labels.*.name, 'run-upstream')
)
defaults:
run:
shell: bash -l {0}
strategy:
fail-fast: false
matrix:
pixi-env: ["test-nightly"]
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0 # Fetch all history for all branches and tags.
- name: Restore cached pixi lockfile
uses: actions/cache/restore@v5
id: restore-pixi-lock
with:
enableCrossOsArchive: true
path: |
pixi.lock
key: ${{ needs.cache-pixi-lock.outputs.cache-id }}
- uses: prefix-dev/setup-pixi@v0.9.3
with:
pixi-version: ${{ env.PIXI_VERSION }}
cache: true
environments: ${{ matrix.pixi-env }}
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }}
- name: Version info
run: |
pixi run -e ${{matrix.pixi-env}} -- python xarray/util/print_versions.py
- name: Import xarray
run: |
pixi run -e ${{matrix.pixi-env}} -- python -c 'import xarray'
- name: Run Tests
if: success()
id: status
run: |
pixi run -e ${{matrix.pixi-env}} -- python -m pytest --timeout=60 -rf -nauto \
--report-log output-${{ matrix.pixi-env }}-log.jsonl
- name: Generate and publish the report
if: |
failure()
&& steps.status.outcome == 'failure'
&& github.event_name == 'schedule'
&& github.repository_owner == 'pydata'
uses: scientific-python/issue-from-pytest-log-action@v1
with:
log-path: output-${{ matrix.pixi-env }}-log.jsonl
mypy-upstream-dev:
name: mypy-upstream-dev
runs-on: ubuntu-latest
needs: [detect-ci-trigger, cache-pixi-lock]
if: |
always()
&& (
contains( github.event.pull_request.labels.*.name, 'run-upstream')
)
defaults:
run:
shell: bash -l {0}
strategy:
fail-fast: false
matrix:
pixi-env: ["test-nightly"]
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0 # Fetch all history for all branches and tags.
- name: Restore cached pixi lockfile
uses: actions/cache/restore@v5
id: restore-pixi-lock
with:
enableCrossOsArchive: true
path: |
pixi.lock
key: ${{ needs.cache-pixi-lock.outputs.cache-id }}
- uses: prefix-dev/setup-pixi@v0.9.3
with:
pixi-version: ${{ env.PIXI_VERSION }}
cache: true
environments: ${{ matrix.pixi-env }}
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }}
- name: set environment variables
run: |
echo "TODAY=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
echo "PYTHON_VERSION=$(pixi run -e ${{matrix.pixi-env}} -- python --version | cut -d' ' -f2 | cut -d. -f1,2)" >> $GITHUB_ENV
- name: Version info
run: |
pixi run -e ${{matrix.pixi-env}} -- python xarray/util/print_versions.py
- name: Run mypy
run: |
pixi run -e ${{matrix.pixi-env}} -- python -m mypy --install-types --non-interactive --cobertura-xml-report mypy_report
- name: Upload mypy coverage to Codecov
uses: codecov/codecov-action@v5.5.2
with:
file: mypy_report/cobertura.xml
flags: mypy
env_vars: PYTHON_VERSION
name: codecov-umbrella
fail_ci_if_error: false
|