Skip to content

Commit

Permalink
Merge pull request #292 from raybellwaves/add-just-upstream
Browse files Browse the repository at this point in the history
  • Loading branch information
raybellwaves committed Apr 22, 2021
2 parents c5e9412 + 801ceb8 commit 78079c0
Show file tree
Hide file tree
Showing 2 changed files with 208 additions and 0 deletions.
172 changes: 172 additions & 0 deletions .github/workflows/upstream-dev-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
name: CI Upstream
on:
push:
branches:
- main
pull_request:
branches:
- main
schedule:
- cron: "0 0 * * 4" # Thursdays At 00:00 UTC
workflow_dispatch: # allows you to trigger the workflow run manually

jobs:
detect-ci-trigger:
name: detect upstream-dev ci trigger
runs-on: ubuntu-latest
if: github.event_name == 'push' || github.event_name == 'pull_request'
outputs:
triggered: ${{ steps.detect-trigger.outputs.trigger-found }}
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 2
- uses: xarray-contrib/ci-trigger@v1.1
id: detect-trigger
with:
keyword: "[test-upstream]"

upstream-dev:
name: upstream-dev
runs-on: ubuntu-latest
needs: detect-ci-trigger
if: |
always()
&& github.repository == 'xarray-contrib/xskillscore'
&& (
(github.event_name == 'schedule' || github.event_name == 'workflow_dispatch')
|| needs.detect-ci-trigger.outputs.triggered == 'true'
)
defaults:
run:
shell: bash -l {0}
strategy:
fail-fast: false
matrix:
python-version: ["3.8"]
outputs:
artifacts_availability: ${{ steps.status.outputs.ARTIFACTS_AVAILABLE }}
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0 # Fetch all history for all branches and tags.
- uses: conda-incubator/setup-miniconda@v2
with:
channels: conda-forge
channel-priority: strict
mamba-version: "*"
activate-environment: xskillscore-dev
auto-update-conda: false
python-version: ${{ matrix.python-version }}
- name: Set up conda environment
run: |
mamba env update -f ci/requirements/dev.yml
bash ci/install-upstream-wheels.sh
- name: Install xskillscore
run: |
python -m pip install --no-deps -e .
- name: Version info
run: |
conda info -a
conda list
- name: import xskillscore
run: |
python -c 'import xskillscore; xskillscore.show_versions()'
- name: Run Tests
if: success()
id: status
run: |
set -euo pipefail
python -m pytest --timeout=60 -rf | tee output-${{ matrix.python-version }}-log || (
echo '::set-output name=ARTIFACTS_AVAILABLE::true' && false
)
- name: Upload artifacts
if: |
failure()
&& steps.status.outcome == 'failure'
&& github.event_name == 'schedule'
&& github.repository == 'xarray-contrib/xskillscore'
uses: actions/upload-artifact@v2
with:
name: output-${{ matrix.python-version }}-log
path: output-${{ matrix.python-version }}-log
retention-days: 5

report:
name: report
needs: upstream-dev
if: |
always()
&& github.event_name == 'schedule'
&& github.repository == 'xarray-contrib/xskillscore'
&& needs.upstream-dev.outputs.artifacts_availability == 'true'
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: "3.x"
- uses: actions/download-artifact@v2
with:
path: /tmp/workspace/logs
- name: Move all log files into a single directory
run: |
rsync -a /tmp/workspace/logs/output-*/ ./logs
ls -R ./logs
- name: Parse logs
run: |
shopt -s globstar
wget https://raw.githubusercontent.com/pydata/xarray/master/.github/workflows/parse_logs.py
python parse_logs.py logs/**/*-log
- name: Report failures
uses: actions/github-script@v3
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
const pytest_logs = fs.readFileSync('pytest-logs.txt', 'utf8');
const title = "⚠️ Nightly upstream-dev CI failed ⚠️"
const workflow_url = `https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`
const issue_body = `[Workflow Run URL](${workflow_url})\n${pytest_logs}`
// Run GraphQL query against GitHub API to find the most recent open issue used for reporting failures
const query = `query($owner:String!, $name:String!, $creator:String!, $label:String!){
repository(owner: $owner, name: $name) {
issues(first: 1, states: OPEN, filterBy: {createdBy: $creator, labels: [$label]}, orderBy: {field: CREATED_AT, direction: DESC}) {
edges {
node {
body
id
number
}
}
}
}
}`;
const variables = {
owner: context.repo.owner,
name: context.repo.repo,
label: 'CI',
creator: "github-actions[bot]"
}
const result = await github.graphql(query, variables)
// If no issue is open, create a new issue,
// else update the body of the existing issue.
if (result.repository.issues.edges.length === 0) {
github.issues.create({
owner: variables.owner,
repo: variables.name,
body: issue_body,
title: title,
labels: [variables.label]
})
} else {
github.issues.update({
owner: variables.owner,
repo: variables.name,
issue_number: result.repository.issues.edges[0].node.number,
body: issue_body
})
}
36 changes: 36 additions & 0 deletions ci/install-upstream-wheels.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/usr/bin/env bash

conda uninstall -y --force \
numpy \
pandas \
dask \
cftime \
bottleneck \
xarray \
xhistogram \
xskillscore


# to limit the runtime of Upstream CI
python -m pip install pytest-timeout
python -m pip install \
-i https://pypi.anaconda.org/scipy-wheels-nightly/simple \
--no-deps \
--pre \
--upgrade \
numpy \
pandas
python -m pip install \
-f https://7933911d6844c6c53a7d-47bd50c35cd79bd838daf386af554a83.ssl.cf2.rackcdn.com \
--no-deps \
--pre \
--upgrade \
matplotlib
python -m pip install \
--no-deps \
--upgrade \
git+https://github.com/dask/dask \
git+https://github.com/Unidata/cftime \
git+https://github.com/pydata/xarray \
git+https://github.com/pydata/bottleneck \
git+https://github.com/xgcm/xhistogram

0 comments on commit 78079c0

Please sign in to comment.