Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sync latest changes into my fork #1

Merged
merged 111 commits into from
Dec 10, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
51f705a
New job "exit-script" for EXIT, ERR, TERM.
hjoliver Nov 18, 2018
c580c3e
Add tests for exit-script.
hjoliver Nov 18, 2018
d1f6ec4
Remove cylc.flags.iflag
matthewrmshin Nov 19, 2018
6a88e25
Add new item to config test.
hjoliver Nov 20, 2018
1c47b11
Merge pull request #2871 from matthewrmshin/remove-flags-iflag
hjoliver Nov 21, 2018
a5ab761
Run exist-script on success only.
hjoliver Nov 21, 2018
e8281df
Document exit-script.
hjoliver Nov 21, 2018
5841d2e
Address review feedback.
hjoliver Nov 20, 2018
0e48db7
Merge pull request #2868 from hjoliver/exit-script
kinow Nov 21, 2018
1553f34
auto stop-restart
oliver-sanders Oct 9, 2018
6d62943
move HostAppointer into its own module
oliver-sanders Oct 31, 2018
90ea230
auto stop-restart: don't stop suite unless there is a restart host
oliver-sanders Oct 31, 2018
9f68c71
auto stop-restart: add force stop mode
oliver-sanders Nov 6, 2018
471cf39
auto stop-restart: handle jobs running on localhost
oliver-sanders Nov 7, 2018
78c0d1c
workaround: https://github.com/cylc/cylc/issues/2799#issuecomment-436…
oliver-sanders Nov 8, 2018
3e1f17f
auto stop-restart: allow force mode to override scheduled restart
oliver-sanders Nov 8, 2018
5514516
update to #2781, #2849
oliver-sanders Nov 9, 2018
7e472e2
auto stop-restart: feedback
oliver-sanders Nov 16, 2018
c2535bf
modified images for documentation to match text
wxtim Nov 21, 2018
acc1a76
Merge pull request #2874 from wxtim/C2747_documentation_fix
hjoliver Nov 21, 2018
5870bd8
prevent more than 100 job submissions at once
wxtim Nov 20, 2018
0ef194e
host-appointer: prohibit invalid host names
oliver-sanders Nov 22, 2018
92120ba
PBS multi-cluster support.
hjoliver Nov 15, 2018
85632de
Merge pull request #2809 from oliver-sanders/jump-ship
hjoliver Nov 22, 2018
5ef5264
Add unit tests for the parsec.__init__
Oct 31, 2018
00fc8c3
Add unit tests for parsec.empysupport
Oct 31, 2018
32bdc6d
Add unit tests for parsec.util
Nov 1, 2018
7511e05
Add unit tests for parsec.config
Nov 2, 2018
5e88c96
Add unit tests for parsec.jinja2support
Nov 2, 2018
c05c2c3
Add unit tests for parsec.OrderedDict
Nov 2, 2018
3df6a95
Add coverage to the project reports.
kinow Aug 30, 2018
d8e3f4f
Move unit tests to under a tests folder/package
kinow Sep 7, 2018
87522aa
Replace failUnless by assertTrue (remove deprecation warning from logs)
Oct 18, 2018
b7762fc
Combine coverage reports
Oct 24, 2018
b53a309
Execute unit tests (cheaper) before functional tests (expensive)
Oct 24, 2018
8e6002a
restore python 2 compatability
oliver-sanders Oct 25, 2018
580ae32
move doctests into cylc.tests
oliver-sanders Oct 25, 2018
0dc1c95
Move unit tests under one single env
Oct 25, 2018
3b5dd62
Ignore parsec tests in sources
kinow Nov 6, 2018
513f87e
Append when combining coverage
kinow Nov 6, 2018
8e92ed3
Fix pycodestyle issues
Nov 8, 2018
ebd8504
Ignore files related to profiling, gui, and deprecated in py3
Nov 13, 2018
9c46ccc
Include pytest.ini, and execute all doctest tests with pytest
Nov 13, 2018
65e2d49
Remove doctest initialization code (now in pytest)
Nov 13, 2018
3b8fcb4
Move coverage arguments to Travis-CI only, and s/py.test/pytest
Nov 22, 2018
1b96134
Add docstrings.
hjoliver Nov 22, 2018
ae2b2f4
Rename test_scheduler.py to test_host_appointer_py, and move tests ou…
Nov 23, 2018
87efcf9
Fix host name split.
hjoliver Nov 23, 2018
7bbcd37
PBS multi-cluster unit tests.
hjoliver Nov 23, 2018
088cebd
pep8 tweak
hjoliver Nov 23, 2018
e59a2ef
Remove unit tests executed withing the test-battery command
kinow Nov 23, 2018
9316cdd
Remove parsec doctest (now in pytest)
kinow Nov 23, 2018
bb11c90
Replace deprecated failUnless by assertTrue in host_appointer tests
kinow Nov 23, 2018
c270454
Add unit tests for parsec.validate
Nov 4, 2018
0cbca99
Merge old tests for coerce functions of parsec.validate
Nov 4, 2018
61a1588
Add cases to cover remaining code in parsec.validate
Nov 4, 2018
7b1f0a4
Remove test that was moved to a unittest class
Nov 6, 2018
fef06a8
Add unit tests for parsec.upgrade
Nov 5, 2018
fd30191
Add unit tests for parsec.include
Nov 5, 2018
df8f78c
Add unit tests for parsec.fileparse
Nov 6, 2018
f5a707b
Merge pull request #2839 from kinow/increase-coverage-parsec
matthewrmshin Nov 23, 2018
100d867
Merge pull request #2766 from kinow/report-test-coverage
matthewrmshin Nov 23, 2018
271f5c5
pytest.ini: add ignores
matthewrmshin Nov 23, 2018
f22ed41
Tweak assertAlmostEqual() parsec coerce_<type> method tests
sadielbartholomew Nov 23, 2018
593e529
Merge pull request #2878 from matthewrmshin/add-pytest-ini-ignores
kinow Nov 24, 2018
1ae0028
Merge pull request #2879 from sadielbartholomew/parsec-tests-python2.6
matthewrmshin Nov 24, 2018
56d880a
Tidy qstat processing.
hjoliver Nov 24, 2018
89d09c7
Merge pull request #2870 from wxtim/T002B_600_tasks_cause_problems
hjoliver Nov 24, 2018
6792661
GUI: use GTK theme colors.
hjoliver Nov 7, 2018
d2b7dfd
Theme bg threshold.
hjoliver Nov 21, 2018
b59f19e
With desktop theme bg and fg.
hjoliver Nov 21, 2018
c955c81
Tweaks and tidies.
hjoliver Nov 21, 2018
948323c
Fix graph tests.
hjoliver Nov 22, 2018
021039c
Address a minor TODO.
hjoliver Nov 24, 2018
5c203f1
Address feedback: default theme.
hjoliver Nov 24, 2018
356dd39
Use raw strings.
hjoliver Nov 24, 2018
80e1c78
subprocpool: handle long STDOUT/ERR from commands
matthewrmshin Nov 22, 2018
0c28766
Add logic to skip select.poll proc pool test
matthewrmshin Nov 24, 2018
2b36b6c
Add unit tests for graphing module.
hjoliver Nov 25, 2018
a07c406
Add missing test file.
hjoliver Nov 25, 2018
50c74b4
pep8
hjoliver Nov 25, 2018
c995c71
style, again
hjoliver Nov 25, 2018
46dc393
style again_2
hjoliver Nov 25, 2018
be31aa8
Remove sourcemap from CSS
Nov 26, 2018
5b0adc8
Add space so that browser renders attributes correctly
Nov 26, 2018
7b30268
Remove extra body HTML tag
Nov 26, 2018
576b824
Fix parsec example code
Nov 26, 2018
818bde9
Merge pull request #2876 from matthewrmshin/handle-long-subprocpool-o…
hjoliver Nov 26, 2018
ca34aaf
Merge pull request #2882 from kinow/fix-parsec-examples
hjoliver Nov 26, 2018
c06445c
Merge pull request #2881 from kinow/trivial-fixes-cylc-review
matthewrmshin Nov 26, 2018
d5e8d13
Merge pull request #2842 from hjoliver/gui-gtk-theme
matthewrmshin Nov 26, 2018
daf7dee
Merge pull request #2877 from hjoliver/pbs-tweak
sadielbartholomew Nov 26, 2018
5d6cfaa
remote-init: fix bad unlink taking down the suite
matthewrmshin Nov 26, 2018
3cc523a
Remove unused imports
Nov 26, 2018
a113190
Merge pull request #2887 from matthewrmshin/fix-remote-init-tempfile-…
hjoliver Nov 26, 2018
cf31515
Merge pull request #2888 from kinow/remove-unused-imports
hjoliver Nov 27, 2018
addcc79
Fix WSGI docs (s/rose/cylc)
Nov 26, 2018
956fdfc
Merge pull request #2889 from kinow/fix-wsgi-doc
hjoliver Nov 27, 2018
d6ce461
Update change log for 7.8 release. [skip ci]
hjoliver Nov 27, 2018
92e34c2
Fix typos.
hjoliver Nov 27, 2018
69c07c4
Address feedback.
hjoliver Nov 27, 2018
cc07375
Address feedback_2.
hjoliver Nov 27, 2018
7ef4824
Fix Rose link.
hjoliver Nov 27, 2018
14901cc
socket.gethostbyname_ex: add bad host to err
matthewrmshin Nov 27, 2018
71021e3
Merge pull request #2890 from hjoliver/cylc-7.8-changes
hjoliver Nov 27, 2018
b28877b
min-expressions-with-spaces
oliver-sanders Nov 27, 2018
af4bde8
Merge pull request #2892 from matthewrmshin/more-info-on-bad-host
hjoliver Nov 27, 2018
5171f61
Merge pull request #2893 from oliver-sanders/min-expressions-with-spaces
hjoliver Nov 27, 2018
0b941fd
Final change log update for 7.8.0.
hjoliver Nov 27, 2018
568159d
Corrected a comment in the new variant PBS handler.
hjoliver Dec 1, 2018
8f44e02
Merge pull request #2899 from hjoliver/fix-job-sys-comment
matthewrmshin Dec 3, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Codecov settings
# After modifying this file, it might be worth to validate it with:
# `curl --data-binary @.codecov.yml https://codecov.io/validate`

# which branch to monitor and whether wait for ci success
codecov:
branch: master
notify:
require_ci_to_pass: yes

# define the colour bar limits here
coverage:
precision: 2
round: down
range: "75...100"

# diff type
status:
project:
default:
# commits below this threshold will be marked as failed
target: '58%'
# how much we allow the coverage to drop
threshold: '5%'
patch:
default:
# basic
target: '58%'
threshold: '5%'
base: auto
# advanced
branches: null
if_no_uploads: error
if_not_found: success
if_ci_failed: error
only_pulls: false
flags: null
paths: null
changes: no

# files to ignore
ignore:
- "tests/**/*.py"

# turn off comments to pull requests
comment: off
99 changes: 99 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# This is the Coverage.py configuration file. This is used by Travis-CI when running
# the tests and collecting coverage

[run]

branch=True
cover_pylib=False
concurrency=thread
data_file=.coverage
disable_warnings=
trace-changed
module-not-python
module-not-imported
no-data-collected
module-not-measured
# include-ignored
debug=
# callers
# dataio
# multiprocess
# dataio
# dataop
# pid
# plugin
# process
# sys
# trace
# Include can be used only if source is not used!
#include
note=
omit=
*/lib/cherrypy/*
*/lib/cylc/gui/*
*/lib/cylc/tests/*
*/lib/cylc/cylc_xdot.py
*/lib/cylc/profiler.py
*/lib/cylc/cfgspec/gcylc.py
*/lib/cylc/cfgspec/gscan.py
*/lib/cylc/profiling/*
*/lib/cylc/mkdir_p.py
*/lib/parsec/OrderedDictCompat.py
*/lib/isodatetime/*
*/lib/jinja2/*
*/lib/markupsafe/*
*/lib/parsec/tests/*
*/lib/xdot.py
parallel = True
plugins=
source=
./bin
./lib
timid = False


[report]

exclude_lines =
pragma: no cover
def __repr__
raise NotImplementedError
if __name__ == .__main__.:
def parse_args
fail_under=0
ignore_errors = False
include=
omit=
*/lib/cherrypy/*
*/lib/cylc/gui/*
*/lib/cylc/tests/*
*/lib/cylc/cylc_xdot.py
*/lib/cylc/profiler.py
*/lib/cylc/cfgspec/gcylc.py
*/lib/cylc/cfgspec/gscan.py
*/lib/cylc/profiling/*
*/lib/cylc/mkdir_p.py
*/lib/parsec/OrderedDictCompat.py
*/lib/isodatetime/*
*/lib/jinja2/*
*/lib/markupsafe/*
*/lib/parsec/tests/*
*/lib/xdot.py
partial_branches=
precision=2
show_missing=False
skip_covered=False
sort=Name


[html]

directory=htmlcov
extra_css=
title=


[xml]

output=coverage.xml
package_depth=99
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,9 @@ passphrase

# profiling
.profiling

# coverage
.coverage
.coverage.*
coverage.xml
htmlcov/
19 changes: 16 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ matrix:
include:
- name: "1/4"
env: CHUNK='1/4'
before_script:
# we must run unit tests only once
- PYTHONPATH=$(pwd -P)/lib/ pytest --cov-append --cov=lib/cylc --cov=lib/parsec
- name: "2/4"
env: CHUNK='2/4'
- name: "3/4"
Expand Down Expand Up @@ -70,15 +73,25 @@ install:
# Pygraphviz needs special treatment to avoid an error from "from . import release"
- pip install pygraphviz --install-option="--include-path=/usr/include/graphviz" --install-option="--library-path=/usr/lib/graphviz/"
- pip install EmPy pycodestyle pyopenssl
# Coverage dependencies
- pip install coverage pytest-cov mock
- export COVERAGE_PROCESS_START="${TRAVIS_BUILD_DIR}/.coveragerc"

# Run tests
script:
script:
# Custom diff command to ignore Xlib errors (xvfb has not RANDR extension).
- export CYLC_TEST_DIFF_CMD='diff -I Xlib -u'
# Only run the generic tests on Travis CI.
- export CYLC_TEST_RUN_PLATFORM=false
# Run tests with virtual frame buffer for X support.
- xvfb-run -a cylc test-battery --chunk $CHUNK --state=save -j 5 || (echo -e "\n\nRerunning Failed Tests...\n\n"; cylc test-battery --state=failed -j 5)
- export PYTHONPATH="${TRAVIS_BUILD_DIR}/.travis"
- coverage run .travis/cover.py
- unset PYTHONPATH

after_success:
# Report metrics, such as coverage
- coverage combine --append
- coverage xml --ignore-errors
- bash <(curl -s https://codecov.io/bash)

# Check output (more useful if you narrow down what tests get run)
after_script:
Expand Down
26 changes: 13 additions & 13 deletions lib/cylc/gui/color_rotator.py → .travis/cover.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,20 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

import sys

class ColorRotator(object):
from subprocess import call

COLORS = ('#fcc', '#cfc', '#bbf', '#ffb')

def __init__(self, colors=COLORS):
self.colors = colors
self.current_color = 0
def main():
# Run tests with virtual frame buffer for X support.
if call('xvfb-run -a cylc test-battery --chunk $CHUNK --state=save -j 5',
shell=True) != 0:
# Non-zero return code
sys.stderr.write('\n\nRerunning Failed Tests...\n\n')
# Exit with final return code
sys.exit(call('cylc test-battery --state=failed -j 5', shell=True))

def get_color(self):
index = self.current_color
if index == len(self.colors) - 1:
index = 0
else:
index += 1
self.current_color = index
return self.colors[index]

if __name__ == '__main__':
main()
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#!/bin/bash
#!/usr/bin/env python2

# THIS FILE IS PART OF THE CYLC SUITE ENGINE.
# Copyright (C) 2008-2018 NIWA & British Crown (Met Office) & Contributors.
#
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
Expand All @@ -14,9 +15,9 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#-------------------------------------------------------------------------------
# cylc.conditional_simplifier doctest
. "$(dirname "$0")/test_header"
set_test_number 1

run_ok "${TEST_NAME_BASE}" python -m 'cylc.conditional_simplifier'
# This file is used by Travis-CI to start the coverage process. In order to make
# Cylc and Python aware of it, we export PYTHONPATH when running the tests

import coverage
coverage.process_startup()
126 changes: 125 additions & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,134 @@ all changes see the [closed
milestones](https://github.com/cylc/cylc/milestones?state=closed) for each
release.

-------------------------------------------------------------------------------
## __cylc-7.8.0 (2018-11-27)__

Minor release with over 120 issues closed. Significant issues include:

### Enhancements

[#2693](https://github.com/cylc/cylc/pull/2693) - __auto host selection__; and
[#2809](https://github.com/cylc/cylc/pull/2809) - __auto migration__.
`cylc run` and `cylc restart` can now select the best host (based on several
metrics) on which to launch suite server programs. And running suites
can be told (via global config) to self-migrate to another available host, e.g.
for server maintenance. (The pool of suite hosts should see a shared
filesystem).

[#2614](https://github.com/cylc/cylc/pull/2614) and
[#2821](https://github.com/cylc/cylc/pull/2821) - __web-based job log viewer__ -
`cylc review` (migration of "Rose Bush" from the Rose project).


[#2339](https://github.com/cylc/cylc/pull/2339) - __general external
triggering__: tasks can trigger off of arbitrary user-defined Python functions
called periodically by the suite server program, with built-in functions
for suite-state (inter-suite) triggering and clock triggering (these
deprecate the existing suite-state polling tasks and clock-triggered tasks).

[#2734](https://github.com/cylc/cylc/pull/2734) - __EmPy templating__
support, as an alternative to Jinja2. _"EmPy allows embedding plain Python code
within templates and doesn't enforce any particular templating philosophy."_

[#2733](https://github.com/cylc/cylc/pull/2733) - enhanced Jinja2 support:
- __import pure Python modules__ in the same way as template modules
- Jinja2Tests and Jinja2Globals, for custom "is" tests and global variables
(c.f. our existing Jinja2Filters for custom filters).

[#2682](https://github.com/cylc/cylc/pull/2682) - new built-in
Jinja2 filter to convert ISO8601 date-time durations to
decimal seconds or hours.

[#2842](https://github.com/cylc/cylc/pull/2842) - `cylc gui` and
`cylc graph` - better integration with system desktop themes, including dark
themes; and other minor graph visualization improvements.

[#2807](https://github.com/cylc/cylc/pull/2807) - task output events (event
handlers can now be triggered when a task reports a registered output message).

[#2868](https://github.com/cylc/cylc/pull/2868) - a new task
runtime config item `exit-script`, for scripting to be executed at the
last moment after successful job completion. (Companion of `err-script`).

[#2781](https://github.com/cylc/cylc/pull/2781) and
[#2854](https://github.com/cylc/cylc/pull/2854) - improved suite
server program logging (including: `log/suite/err` is no longer used).

[#2849](https://github.com/cylc/cylc/pull/2849) - record local
background jobs by host name rather than "localhost".

[#2877](https://github.com/cylc/cylc/pull/2877) - new batch system
handler `pbs_multi_cluster`, supports PBS 13 clients fronting
heterogeneous clusters with different home directories from the
cylc remote. (Not needed for PBS 14+.) (For Rose suites this requires a
corresponding change to `rose suite-run`:
[metomi/rose#2252](https://github.com/metomi/rose/pull/2252).)

[#2812](https://github.com/cylc/cylc/pull/2812) - `cylc gscan`:
show application menu bar by default.

[#2768](https://github.com/cylc/cylc/pull/2768) - `cylc gscan`: display Cylc
version of running suites.

[#2786](https://github.com/cylc/cylc/pull/2786) - make task try number
available to event handlers (as for task job submit number).

[#2771](https://github.com/cylc/cylc/pull/2771) - bash command completion:
complete suite names for commands that take a suite name argument (see
`etc/cylc-bash-completion`).

[#2769](https://github.com/cylc/cylc/pull/2769) - `cylc check-software` now
takes arguments to check for availability of specific modules.

[#2763](https://github.com/cylc/cylc/pull/2763) - `cylc monitor` - clean exit
on Ctrl-C.

[#2704](https://github.com/cylc/cylc/pull/2704) - paginated `cylc help` output.

[#2660](https://github.com/cylc/cylc/pull/2660) - new `gcylc.rc` config item to
show grouped cyclepoint subgraphs by default.

[#2766](https://github.com/cylc/cylc/pull/2766) - (development) formal test
coverage reporting and integration with GitHub.

[#2751](https://github.com/cylc/cylc/pull/2751) - (development) new contributor
guidelines - see `CONTRIBUTING.md`.

### Fixes

[#2876](https://github.com/cylc/cylc/pull/2876) - avoid subprocess hang when
executing commands that generate a lot of stdout (such as when submitting
hundreds of jobs at once).

[#2828](https://github.com/cylc/cylc/pull/2828) - `suite.rc` - fail validation
on detecting trailing whitespace after a line continuation character.

[#2807](https://github.com/cylc/cylc/pull/2807) - handle multiple events of
the same type with the same message (e.g. warnings) from the same task job.

[#2803](https://github.com/cylc/cylc/pull/2803) - reset job submit number
correctly after aborting (backing out of) a trigger edit-run.

[#2727](https://github.com/cylc/cylc/pull/2727) - `cylc gui`: fix dropdown list
of log numbers for re-inserted tasks or after suite
restart.

[#2759](https://github.com/cylc/cylc/pull/2759) and
[#2816](https://github.com/cylc/cylc/pull/2816) -
suite registration tweaks and fixes.

[#2861](https://github.com/cylc/cylc/pull/2861) - improved emacs
syntax highlighting.

[#2892](https://github.com/cylc/cylc/pull/2892) - print the bad host name along
with "Name or service not known" exceptions.


-------------------------------------------------------------------------------
## __cylc-7.7.2 (2018-07-26)__

Minor maintenance release.
Maintenance release.

(Some minor changes not relevant to normal users may be omitted.)

Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

[![Build Status](https://travis-ci.org/cylc/cylc.svg?branch=master)](https://travis-ci.org/cylc/cylc)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/1d6a97bf05114066ae30b63dcb0cdcf9)](https://www.codacy.com/app/Cylc/cylc?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=cylc/cylc&amp;utm_campaign=Badge_Grade)
[![codecov](https://codecov.io/gh/cylc/cylc/branch/master/graph/badge.svg)](https://codecov.io/gh/cylc/cylc)
[![DOI](https://zenodo.org/badge/1836229.svg)](https://zenodo.org/badge/latestdoi/1836229)
[![DOI](http://joss.theoj.org/papers/10.21105/joss.00737/status.svg)](https://doi.org/10.21105/joss.00737)

Expand Down
Loading