Skip to content

regenerate CI workflows for the single-use approval label - #435

Closed
mcocdawc wants to merge 18 commits into
job-name-from-resolvedfrom
ci-approval-single-use
Closed

mcocdawc wants to merge 18 commits into
job-name-from-resolvedfrom
ci-approval-single-use

Conversation

@mcocdawc

@mcocdawc mcocdawc commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Description

Purely trigger the downstream CI from the CI itself.
This means it's automatically gated behind the CI approval of the CI.

Get rid of the contributor declaration test.

Contributor Declaration

By opening this pull request, I affirm the following:

  • All authors agree to the Contributor License Agreement.
  • The code follows the project's coding standards.
  • I have performed self-review and added comments where needed.
  • I have added or updated tests to verify that my changes are effective and functional.
  • I have run all existing tests and confirmed they pass.

🌦️ >> Documentation << 🌦️
https://sites.ecmwf.int/docs/dev-section/ecflow/pull-requests/PR-435

Select the nightly tests by label alone, without further exclusions,
so that s_test, s_zombies, s_http and the python tests also run on the
CI and HPC targets that were skipping them.
Select the nightly tests by label alone on the CI and HPC targets, so
that s_test, s_zombies, s_http and py3_s_TestClientApi also run there.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015mHyqKGJ3Bu8RAnKdQhguB
@mcocdawc
mcocdawc force-pushed the ci-approval-single-use branch from 3b3150e to 5f47988 Compare September 8, 2026 13:14
@codecov-commenter

codecov-commenter commented Sep 8, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 536 lines in your changes missing coverage. Please review.
✅ Project coverage is 55.71%. Comparing base (3419f27) to head (ae8787a).

Files with missing lines Patch % Lines
Viewer/ecflowUI/src/PropertyEditor.cpp 0.00% 262 Missing ⚠️
Viewer/ecflowUI/src/ComboMulti.cpp 0.00% 98 Missing ⚠️
Viewer/ecflowUI/src/HistoryItemWidget.cpp 0.00% 89 Missing ⚠️
Viewer/ecflowUI/src/NodeSearchWindow.cpp 0.00% 42 Missing ⚠️
Viewer/ecflowUI/src/Animation.cpp 0.00% 38 Missing ⚠️
Viewer/ecflowUI/src/Animation.hpp 0.00% 2 Missing ⚠️
Viewer/ecflowUI/src/HistoryItemWidget.hpp 0.00% 2 Missing ⚠️
Viewer/ecflowUI/src/PropertyEditor.hpp 0.00% 2 Missing ⚠️
Viewer/ecflowUI/src/ComboMulti.hpp 0.00% 1 Missing ⚠️
Additional details and impacted files
@@                    Coverage Diff                     @@
##           job-name-from-resolved     #435      +/-   ##
==========================================================
+ Coverage                   52.98%   55.71%   +2.73%     
==========================================================
  Files                        1260     1260              
  Lines                      104076   104106      +30     
  Branches                    15281    15280       -1     
==========================================================
+ Hits                        55145    58007    +2862     
+ Misses                      48931    46099    -2832     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

marcosbento and others added 15 commits September 8, 2026 16:02
Resolve the ECF_INCLUDE of py_s_TestClientApi from the source directory
rather than from the current working directory, as
py_s_TestPythonChildApi already does. The tests run from the build tree,
where those include files are absent, so ecFlow generated a head.h of
its own, and the checked-in one was only ever picked up when pytest
happened to be invoked from libs/pyext.

Drop the host and ping sanity checks from both that head include and the
head.h that TaskScriptGenerator generates. Both ran under `set -e`, and
thus killed every job before ecflow_client --init on an image that
provides neither command, or that denies ICMP.

Bound the wait loops of test_client_free_dep and test_client_get_file
the way the surrounding tests are bounded, with an assertion that the
suite has not aborted, and report the job output of the suite alongside
the definition dump. A suite that never completes is then reported as a
test failure naming the shell error, rather than as a ctest timeout that
hides the remaining tests.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015mHyqKGJ3Bu8RAnKdQhguB
Select the nightly tests by label alone on every runner configuration,
so that s_test, s_zombies, s_http and the Python client API test are no
longer skipped per target.

Running the latter outside a source directory required its ECF_INCLUDE
to resolve from the source directory, and both the head.h it uses and
the one TaskScriptGenerator generates to stop running a host or ping
sanity check under `set -e`. Its waits for a suite to complete are now
bounded and report the job output.
Carry the canonical Apache-2.0, MIT, BSD-3-Clause and CC0-1.0 texts
under LICENSES/, assert ECMWF's copyright and intergovernmental
notice in LICENSE and NOTICE, and drop the unreferenced COPYING
duplicate.

As per ADR-010: Adopt SPDX Licence Identifiers and REUSE-Compliant File Headers.
Every ECMWF-authored source file states its copyright holder and
licence through SPDX-FileCopyrightText and SPDX-License-Identifier
tags, in the comment syntax of the file. The year is the open range
2009-. The C++ header generated by cmake/GenerateClientHelp.cmake
carries the same tags.

Vendored third-party code keeps its own headers.

As per ADR-010: Adopt SPDX Licence Identifiers and REUSE-Compliant File Headers
Seventeen files under Viewer/ecflowUI/src/ move to LF, matching the
rest of the repository: fourteen C++ sources and the Qt .ui files
beside them. Only the line terminator changes, which git diff
--ignore-cr-at-eol confirms by reporting no difference.

A .gitattributes keeps it that way. Files that Git detects as text
are stored with LF, vendored code under 3rdparty/ is never
renormalised, and tools/ecflow_logsvr.pl is marked explicitly because
the literal NUL bytes in its Perl substitutions make Git detect it as
binary.
The remaining ECMWF-authored files that accept a comment now state
their copyright holder and licence: the CI workflows and their
configuration, the conda and Docker packaging, the release
engineering scripts, version.sh, the clang tooling configuration and
CITATION. README.md and the INSTRUCTIONS files carry the tags in an
HTML comment.

In .cd/conda/build.sh the interpreter line moves to the first line of
the file, where it takes effect.

Files unable to carry a comment, vendored code, test data and
documentation assets are covered separately.

As per ADR-010: Adopt SPDX Licence Identifiers and REUSE-Compliant File Headers
A REUSE.toml declares copyright and licence for the content that cannot
carry a header: documentation assets, the test fixtures and definition
files that are compared byte for byte, Qt forms and icons, installed
configuration, and formats without a comment syntax.

Vendored code keeps its own licensing: cereal under BSD-3-Clause,
cpp-httplib and nlohmann-json under MIT, LazyTextEdit under Apache-2.0
with Anders Bakken's copyright, the cereal helper header in libs/core
under MIT, and spinning_wheel.gif under CC0-1.0. An in-file header takes
precedence, so the ECMWF sources inside those directories are
unaffected.

reuse lint passes, with 3618 of 3618 files carrying both copyright and
licence information.

As per ADR-010: Adopt SPDX Licence Identifiers and REUSE-Compliant File Headers
The licence page gives the copyright year as the open range 2009-,
quotes ECMWF's intergovernmental notice in its standing wording, and
points at LICENSE, LICENSES/Apache-2.0.txt and NOTICE. A section
describes the SPDX tags each file carries, and the REUSE.toml that
covers files unable to carry a comment.

The contributing page states the convention for new files: the tag
template, the placement of an interpreter line and encoding
declaration, the form for a second copyright holder, and that
third-party files keep the header of their origin. It also gains a
reference label, so the licence page can link to it.

README.md gives the same year, links to the licensing files, and
carries a REUSE badge.

As per ADR-010: Adopt SPDX Licence Identifiers and REUSE-Compliant File Headers
Each of the 404 reStructuredText pages states its copyright holder and
licence in a comment above the document title. The tags are comments,
so the rendered pages are unchanged: all 406 HTML outputs are identical
to those built before this change.

The pages under docs/client_api/api and docs/python_api/reference are
generated into the source tree on every documentation build, so the
generators emit the tags themselves: build.py, extract_api.py and
python_api.py prepend the header at each of their seven write sites.
Regeneration therefore reproduces it. The constant holding the emitted
text is fenced with REUSE-Ignore comments, so that licence tooling
reads it as data rather than as the licensing of the generator, and
those three scripts carry headers of their own.

As per ADR-010: Adopt SPDX Licence Identifiers and REUSE-Compliant File Headers
A pre-commit hook runs `reuse lint` over the whole project, so a file
added without SPDX tags, or a licence text missing from LICENSES/, is
reported before the commit is made. The same hook runs in CI, where
the existing pre-commit job invokes `pre-commit run --all-files`.

The hook receives no file list, so the top-level exclude does not
narrow what it checks, and vendored code is covered as well.
always_run keeps it honest for a commit that touches only excluded
paths.

As per ADR-010: Adopt SPDX Licence Identifiers and REUSE-Compliant File Headers
Every file states its copyright holder and licence in machine-readable
form: ECMWF-authored sources carry two SPDX tags in place of the Apache
prose notice, and the files that cannot carry a comment are declared in
REUSE.toml. The intergovernmental notice moves to LICENSE and NOTICE,
alongside the canonical licence texts under LICENSES/.

Four generators emit the tags into the files they write, so a build
cannot reintroduce the old header. The seventeen files that used CRLF
move to LF, with a .gitattributes to keep them there. The licence and
contributing pages describe the convention, and a pre-commit hook runs
`reuse lint` on every commit.

As per ADR-010: Adopt SPDX Licence Identifiers and REUSE-Compliant File Headers
A REUSE Compliance workflow runs fsfe/reuse-action on every push and
pull request, following the template published alongside ADR-010, so
that the check stands on its own rather than through the pre-commit
job.

Both actions are pinned to a commit SHA rather than a tag, as the
Codex audit guidance requires; the tag beside each is a comment
recording which release the SHA belongs to.

As per ADR-010: Adopt SPDX Licence Identifiers and REUSE-Compliant File Headers
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015RsLA9yt5sthqAuLFjBHdm
@mcocdawc

Copy link
Copy Markdown
Contributor Author

Reopening as a single pull request against develop. GitHub refuses to retarget a PR that is part of a stack, so a fresh PR from the same branch is the only way to present this as one reviewable change.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants