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

Add new command nf-core rocrate to create a Research Object crate for a pipeline #2679

Closed
wants to merge 174 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
174 commits
Select commit Hold shift + click to select a range
a1e6412
add conda channel order to nextflow.config template
mashehu Dec 5, 2022
a023d6e
Update nf_core/pipeline-template/nextflow.config
mashehu Dec 5, 2022
4d01080
Merge branch 'dev' into add-conda-defaults
maxulysse Mar 1, 2023
099443f
Update SamKirkland/FTP-Deploy-Action action to v4.3.4
renovate[bot] Dec 19, 2023
85f311a
Update actions/checkout action to v4
renovate[bot] Dec 19, 2023
3de1dcf
Update actions/stale action to v9
renovate[bot] Dec 19, 2023
0833e89
Update actions/upload-artifact action to v4
renovate[bot] Dec 20, 2023
2576060
Update zentered/bluesky-post-action action to v0.1.0
renovate[bot] Dec 20, 2023
7831f7a
bump to 2.12dev
mashehu Dec 20, 2023
9bdf7c9
Merge pull request #2617 from mashehu/bump-to-dev
mashehu Dec 20, 2023
6ea4d62
Add a Github Action Workflow to the pipeline template that tests a su…
MatthiasZepper Dec 20, 2023
998a22c
add ruff formatter and linter
mirpedrol Dec 22, 2023
9fdcf03
remove isort
mirpedrol Dec 22, 2023
418f0be
remove python black
mirpedrol Dec 22, 2023
2ca9b19
remove pyupgrade
mirpedrol Dec 22, 2023
c25c5be
update CONTRIBUTING.md
mirpedrol Dec 22, 2023
e40f7b9
select import sorting and run first linter and then formatter
mirpedrol Dec 22, 2023
df3d3a1
ignore import checks in __init__.py files
mirpedrol Dec 22, 2023
14ca618
run ruff check --fix
mirpedrol Dec 22, 2023
8cc98a2
manually fix other ruff errors
mirpedrol Dec 22, 2023
f2f3645
remove unused fullname from SyncedRepo and fix circular import
mirpedrol Dec 22, 2023
3579de6
locate ruff cache dir at ~/.cache/ruff
mirpedrol Dec 22, 2023
691e654
Apply suggestions from code review
mirpedrol Dec 22, 2023
aaa5166
use required to create params file
mirpedrol Dec 22, 2023
5419aad
fix positional input in template
sateeshperi Dec 26, 2023
b430bbf
don't run prettier on things handled by ruff
mashehu Jan 2, 2024
4d187fd
don't migrate empty config files to nf-test
mashehu Jan 2, 2024
9587aab
handle stageAs in input parsing correctly
mashehu Jan 2, 2024
855b254
fix variable name
mashehu Jan 2, 2024
44683c5
Automatically create changelog entries from PRs
mashehu Jan 3, 2024
4971496
Apply suggestions from code review
mirpedrol Jan 4, 2024
0c3c779
select E1, UP and N, don't ignore E501
mirpedrol Jan 4, 2024
4fc75f9
run ruff check --fix
mirpedrol Jan 4, 2024
d00c1b6
manually fix other ruff errors
mirpedrol Jan 4, 2024
5df6586
Update .github/CONTRIBUTING.md
mirpedrol Jan 4, 2024
74a262b
fix typo
mirpedrol Jan 4, 2024
9184c1d
Apply suggestions from code review
mirpedrol Jan 4, 2024
eb4b775
fix formatting
mirpedrol Jan 4, 2024
d91a3bf
Merge pull request #2620 from mirpedrol/add-ruff
mirpedrol Jan 4, 2024
d0f9bdf
Update pre-commit hook astral-sh/ruff-pre-commit to v0.1.11
renovate[bot] Jan 4, 2024
e7bcaee
Update actions/setup-python action to v5
renovate[bot] Jan 4, 2024
1cd6bb6
Merge pull request #2625 from mashehu/handle-stageAs
mashehu Jan 4, 2024
7d38db3
Update .github/workflows/changelog.py
mashehu Jan 4, 2024
f1e6126
Merge pull request #2628 from mashehu/automated-changelog
mashehu Jan 4, 2024
2874361
Merge pull request #2629 from nf-core/renovate/astral-sh-ruff-pre-com…
mashehu Jan 4, 2024
76cc105
Update pre-commit hook pre-commit/mirrors-mypy to v1.8.0
renovate[bot] Jan 4, 2024
a660072
[automated] Update CHANGELOG.md
Jan 4, 2024
4a77593
Merge pull request #2630 from nf-core/renovate/pre-commit-mirrors-myp…
mashehu Jan 4, 2024
d74a2e2
Update dawidd6/action-download-artifact action to v3
renovate[bot] Jan 4, 2024
ad6368a
Update nf_core/pipeline-template/.github/workflows/linting_comment.yml
mashehu Jan 4, 2024
99737e9
Update .github/workflows/pytest.yml
mirpedrol Jan 4, 2024
cc86a5a
Update mshick/add-pr-comment action to v2
renovate[bot] Jan 4, 2024
f5b52fd
[automated] Update CHANGELOG.md
Jan 4, 2024
a742444
Update nf_core/pipeline-template/.github/workflows/release-announceme…
mirpedrol Jan 4, 2024
d4f3dc2
Only run on self-hosted runners due to space constraints in GitHub ho…
MatthiasZepper Jan 4, 2024
b315333
Merge pull request #2601 from nf-core/renovate/actions-checkout-4.x
mirpedrol Jan 4, 2024
f93b924
Since we now limit it to PRs to master, updating a PR branch should b…
MatthiasZepper Jan 4, 2024
dea6e76
use same credentials as we use in fix-linting
mashehu Jan 4, 2024
c31a20c
Merge pull request #2634 from mashehu/fix-changelog-bot
mashehu Jan 4, 2024
a3ca981
Merge branch 'dev' into fix/nf-test-template-input
sateeshperi Jan 4, 2024
9e8f26f
Merge pull request #2600 from nf-core/renovate/zentered-bluesky-post-…
mashehu Jan 4, 2024
9b9e097
use real version
mashehu Jan 4, 2024
b557d7c
Merge pull request #2621 from nf-core/fix/nf-test-template-input
sateeshperi Jan 4, 2024
c65a07e
Merge pull request #2632 from nf-core/renovate/mshick-add-pr-comment-2.x
mashehu Jan 4, 2024
4090df2
use pre-commit for all linting jobs
mashehu Jan 5, 2024
f58fd5c
fix editorconfig
mashehu Jan 5, 2024
8d9c381
fix .editorconfig and makefile
mashehu Jan 5, 2024
3fad232
use pre-commit for tools job as well
mashehu Jan 5, 2024
a753d0f
fix version number
mashehu Jan 5, 2024
a0c7b71
Merge pull request #2602 from nf-core/renovate/actions-setup-python-5.x
mashehu Jan 5, 2024
53a81f0
Merge branch 'dev' of github.com:nf-core/tools into use-pre-commit-fo…
mashehu Jan 5, 2024
f05b864
set python version in changelog job
mashehu Jan 5, 2024
acfb4f7
update changelog
mashehu Jan 5, 2024
05e0827
Merge pull request #2635 from mashehu/use-pre-commit-for-linting-jobs
mashehu Jan 5, 2024
793ef5c
Merge branch 'dev' into fix-empty-nxf-configs
mashehu Jan 5, 2024
3250e2e
Apply suggestions from code review
mashehu Jan 5, 2024
58e8647
Run individual pytest files on seperate runners on AWS(#2550)
mashehu Jan 5, 2024
9ef564f
Apply suggestions from code review
mashehu Jan 5, 2024
67d78b2
Merge pull request #2603 from nf-core/renovate/actions-stale-9.x
mashehu Jan 5, 2024
f115a6c
Merge pull request #2593 from nf-core/renovate/samkirkland-ftp-deploy…
mashehu Jan 5, 2024
6a0bcd6
Merge branch 'dev' into renovate/actions-upload-artifact-4.x
mashehu Jan 5, 2024
5de80ac
Merge pull request #2624 from mashehu/fix-empty-nxf-configs
mashehu Jan 5, 2024
602765d
fix version number
mashehu Jan 5, 2024
fb08460
Merge pull request #2631 from nf-core/renovate/dawidd6-action-downloa…
mashehu Jan 5, 2024
1838c87
Merge pull request #2604 from nf-core/renovate/actions-upload-artifac…
mashehu Jan 5, 2024
fe2e295
update python image version in docker file
mashehu Jan 5, 2024
3ec2431
[automated] Update CHANGELOG.md
nf-core-bot Jan 5, 2024
2f4ad6d
don't pin subversion
mashehu Jan 5, 2024
2aab15d
Merge branch 'update-python-in-docker' of github.com:mashehu/tools in…
mashehu Jan 5, 2024
f0d1543
add more verbose fix-linting bot
mashehu Jan 5, 2024
ce26f64
introduce linting error
mashehu Jan 5, 2024
444aa84
Revert "introduce linting error"
mashehu Jan 5, 2024
0a4ff2f
Merge branch 'dev' into update-python-in-docker
mashehu Jan 5, 2024
e54d268
use pdiff also on gitpod for nf-test
mashehu Jan 8, 2024
0121539
[automated] Update CHANGELOG.md
nf-core-bot Jan 8, 2024
da9b55a
avoid artifact upload name collisions
mashehu Jan 8, 2024
4574b10
don't run CI on automated changelog changes
mashehu Jan 8, 2024
d23e491
[automated] Update CHANGELOG.md
nf-core-bot Jan 8, 2024
00a5fd1
fix one more collision
mashehu Jan 8, 2024
b1d7f3d
Merge branch 'smaller-ci-fixes' of github.com:mashehu/tools into smal…
mashehu Jan 8, 2024
b41038e
fix-copy-paste mistake
mashehu Jan 8, 2024
e6af209
fix nf-test caching
mashehu Jan 8, 2024
a0c5061
Remove PR from changelog, because it is just some cleanup for #2550
mashehu Jan 8, 2024
fddd38f
don't clean up but do a manual check for nf-test
mashehu Jan 8, 2024
b3df098
debug manual caching step
mashehu Jan 8, 2024
7eac66f
more debugging
mashehu Jan 8, 2024
3c41404
skip caching step correctly
mashehu Jan 8, 2024
65178ee
remove section indicator in Changelog entry
mashehu Jan 8, 2024
f448a77
only add codecov comment when coverage changes
mashehu Jan 8, 2024
e0dabc9
Merge pull request #2641 from mashehu/smaller-ci-fixes
mashehu Jan 8, 2024
06c6e5f
Merge branch 'dev' into use-pdiff-in-gitpot
mashehu Jan 8, 2024
9b45d58
put changelog comment in correct section
mashehu Jan 8, 2024
41d3575
Merge branch 'dev' into update-python-in-docker
mashehu Jan 8, 2024
19d2c4a
Merge pull request #2640 from mashehu/use-pdiff-in-gitpot
mashehu Jan 8, 2024
97e9bd4
Merge pull request #2636 from mashehu/update-python-in-docker
mashehu Jan 8, 2024
e338b73
Merge branch 'dev' into make-fix-linting-more-verbose
mashehu Jan 8, 2024
2f3e38f
set pdiff is nf-test differ in docker image for gitpod
mashehu Jan 8, 2024
f54f1f0
[automated] Update CHANGELOG.md [no ci]
nf-core-bot Jan 8, 2024
22613c5
update changelog [no ci]
mashehu Jan 8, 2024
501b6f0
Merge pull request #2642 from mashehu/add-pdiff-to-docker-image
mashehu Jan 8, 2024
9fb5498
Apply suggestions from code review
MatthiasZepper Jan 8, 2024
40eb38d
Merge branch 'dev' into GithubAction-DownloadTest
MatthiasZepper Jan 8, 2024
e8e6372
Merge pull request #2618 from MatthiasZepper/GithubAction-DownloadTest
MatthiasZepper Jan 8, 2024
2fef530
Merge branch 'dev' into make-fix-linting-more-verbose
mashehu Jan 9, 2024
3fa0d0d
Merge branch 'dev' into add-conda-defaults
mashehu Jan 9, 2024
225ef23
Merge pull request #2637 from mashehu/make-fix-linting-more-verbose
mashehu Jan 9, 2024
38779e9
Merge branch 'dev' into add-conda-defaults
mirpedrol Jan 9, 2024
df48d77
update changelog
mashehu Jan 9, 2024
ccf1104
Merge pull request #2094 from mashehu/add-conda-defaults
mashehu Jan 9, 2024
eb895dc
Template: switch to new image syntax in readme
mashehu Jan 9, 2024
ce4cf36
add a bit more logging to changelog script
mashehu Jan 9, 2024
6693377
more debugging
mashehu Jan 9, 2024
ffe1dd6
fix section selection
mashehu Jan 9, 2024
792f2a2
more debugging
mashehu Jan 9, 2024
ef18ea4
debugging
mashehu Jan 9, 2024
a82d9cc
debugging
mashehu Jan 9, 2024
197617f
fix section headers
mashehu Jan 9, 2024
403a6aa
[automated] Update CHANGELOG.md [no ci]
nf-core-bot Jan 9, 2024
243084b
Merge branch 'dev' into update-image-syntax-in-template
mashehu Jan 9, 2024
da485a8
Merge pull request #2645 from mashehu/update-image-syntax-in-template
mashehu Jan 9, 2024
f2f91e7
wrap picture element in h1 tag [no changelog]
mashehu Jan 9, 2024
06dc2f5
fix alt text
mashehu Jan 9, 2024
c9559e4
fix indentation
mashehu Jan 9, 2024
ba2bbf5
Merge pull request #2647 from mashehu/wrap-logo
mashehu Jan 9, 2024
863f74b
ci(renovate): Set renovate docker registry to docker.io
edmundmiller Jan 9, 2024
ba6b7ac
ci(renovate): Add python pep440 versioning
edmundmiller Jan 9, 2024
14f594c
ci(renovate): Ignore modules in pipeline template
edmundmiller Jan 9, 2024
9cfea63
chore: Update Changelog
edmundmiller Jan 9, 2024
a54686b
Merge pull request #2648 from nf-core/renovate-docker
edmundmiller Jan 9, 2024
dcbced8
fix ignorepath
mashehu Jan 10, 2024
28de3d6
[automated] Update CHANGELOG.md [no ci]
nf-core-bot Jan 10, 2024
891746d
avoid stopping all CI tests with changelog action
mashehu Jan 10, 2024
0c79f65
Merge branch 'fix-renovate' of github.com:mashehu/tools into fix-reno…
mashehu Jan 10, 2024
7538d7e
update changelog
mashehu Jan 10, 2024
6f85c0a
Merge pull request #2651 from mashehu/fix-renovate
mashehu Jan 10, 2024
cf73506
more renovate fixes [no changelog]
mashehu Jan 10, 2024
a7e1533
[automated] Update CHANGELOG.md
nf-core-bot Jan 10, 2024
02fe413
Update CHANGELOG.md
mashehu Jan 10, 2024
ed15dd3
Merge pull request #2652 from mashehu/fix-renovate
mashehu Jan 10, 2024
8320f80
Add Trogon
ewels Jan 11, 2024
41a6164
Fix ruff linting
ewels Jan 11, 2024
81a8c08
Update pre-commit hook astral-sh/ruff-pre-commit to v0.1.12
renovate[bot] Jan 12, 2024
900ce78
[automated] Update CHANGELOG.md
nf-core-bot Jan 12, 2024
8b760dd
Update CHANGELOG.md
mashehu Jan 12, 2024
39a52d5
Merge pull request #2657 from nf-core/renovate/astral-sh-ruff-pre-com…
mashehu Jan 12, 2024
a31fa1f
add to changelog
ewels Jan 12, 2024
a616de2
Add to the readme
ewels Jan 12, 2024
669be1e
Merge pull request #2655 from ewels/trogon
ewels Jan 12, 2024
56e7734
Update pre-commit hook astral-sh/ruff-pre-commit to v0.1.13
renovate[bot] Jan 12, 2024
91ae4fc
[automated] Update CHANGELOG.md
nf-core-bot Jan 12, 2024
110d99f
Merge pull request #2660 from nf-core/renovate/astral-sh-ruff-pre-com…
mashehu Jan 12, 2024
e7249b7
second attempt to add ro crates
mashehu Jan 16, 2024
a597c8c
fix import
mashehu Jan 16, 2024
7a66e06
first running version
mashehu Jan 23, 2024
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
10 changes: 10 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,13 @@ indent_style = space

[*.{md,yml,yaml,html,css,scss,js,cff}]
indent_size = 2

# ignore python and markdown files
[*.py]
indent_style = unset

[**/{CONTRIBUTING,README}.md]
indent_style = unset

[**/Makefile]
indent_style = unset
5 changes: 4 additions & 1 deletion .github/.coveragerc
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
[run]
omit = nf_core/pipeline-template/*
omit = nf_core/*-template/*
source = nf_core
relative_files = True

33 changes: 8 additions & 25 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,45 +35,28 @@ pip install -e .

## Code formatting

### Black
### Ruff

All Python code in nf-core/tools must be passed through the [Black Python code formatter](https://black.readthedocs.io/en/stable/).
All Python code in nf-core/tools must be passed through the [Ruff code linter and formatter](https://github.com/astral-sh/ruff).
This ensures a harmonised code formatting style throughout the package, from all contributors.

You can run Black on the command line (it's included in `requirements-dev.txt`) - eg. to run recursively on the whole repository:
You can run Ruff on the command line (it's included in `requirements-dev.txt`) - eg. to run recursively on the whole repository:

```bash
black .
ruff format .
```

Alternatively, Black has [integrations for most common editors](https://black.readthedocs.io/en/stable/editor_integration.html)
Alternatively, Ruff has [integrations for most common editors](https://github.com/astral-sh/ruff-lsp) and VSCode(https://github.com/astral-sh/ruff-vscode)
to automatically format code when you hit save.
You can also set it up to run when you [make a commit](https://black.readthedocs.io/en/stable/version_control_integration.html).

There is an automated CI check that runs when you open a pull-request to nf-core/tools that will fail if
any code does not adhere to Black formatting.
any code does not adhere to Ruff formatting.

### isort

All Python code must also be passed through [isort](https://pycqa.github.io/isort/index.html).
This ensures a harmonised imports throughout the package, from all contributors.

To run isort on the command line recursively on the whole repository you can use:

```bash
isort .
```

isort also has [plugins for most common editors](https://github.com/pycqa/isort/wiki/isort-Plugins)
to automatically format code when you hit save.
Or [version control integration](https://pycqa.github.io/isort/docs/configuration/pre-commit.html) to set it up to run when you make a commit.

There is an automated CI check that runs when you open a pull-request to nf-core/tools that will fail if
any code does not adhere to isort formatting.
Ruff has been adopted for linting and formatting in replacement of Black, isort (for imports) and pyupgrade. It also includes Flake8.

### pre-commit hooks

This repository comes with [pre-commit](https://pre-commit.com/) hooks for black, isort and Prettier. pre-commit automatically runs checks before a commit is committed into the git history. If all checks pass, the commit is made, if files are changed by the pre-commit hooks, the user is informed and has to stage the changes and attempt the commit again.
This repository comes with [pre-commit](https://pre-commit.com/) hooks for ruff and Prettier. pre-commit automatically runs checks before a commit is committed into the git history. If all checks pass, the commit is made, if files are changed by the pre-commit hooks, the user is informed and has to stage the changes and attempt the commit again.

You can use the pre-commit hooks if you like, but you don't have to. The CI on Github will run the same checks as the tools installed with pre-commit. If the pre-commit checks pass, then the same checks in the CI will pass, too.

Expand Down
12 changes: 12 additions & 0 deletions .github/renovate.json5
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
{
$schema: "https://docs.renovatebot.com/renovate-schema.json",
extends: ["github>nf-core/ops//.github/renovate/default.json5"],
ignorePaths: ["**/nf_core/pipeline-template/modules/nf-core/**"],
baseBranches: ["dev"],
packageRules: [
{
matchDatasources: ["docker"],
matchPackageNames: ["python"],
versioning: "pep440",
},
{
matchDatasources: ["docker"],
registryUrls: ["docker.io"],
},
],
}
2 changes: 1 addition & 1 deletion .github/workflows/branch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
# If the above check failed, post a comment on the PR explaining the failure
- name: Post PR comment
if: failure()
uses: mshick/add-pr-comment@v1
uses: mshick/add-pr-comment@v2
with:
message: |
## This PR is against the `master` branch :x:
Expand Down
228 changes: 228 additions & 0 deletions .github/workflows/changelog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
"""
Taken from https://github.com/MultiQC/MultiQC/blob/main/.github/workflows/changelog.py and updated for nf-core

To be called by a CI action. Assumes the following environment variables are set:
PR_TITLE, PR_NUMBER, GITHUB_WORKSPACE.

Adds a line into the CHANGELOG.md:
* Looks for the section to add the line to, based on the PR title, e.g. `Template:`, `Modules:`.
* All other change will go under the "### General" section.
* If an entry for the PR is already added, it will not run.

Other assumptions:
- CHANGELOG.md has a running section for an ongoing "dev" version
(i.e. titled "## nf-core vX.Ydev").
"""

import os
import re
import sys
from pathlib import Path
from typing import List

REPO_URL = "https://github.com/nf-core/tools"

# Assumes the environment is set by the GitHub action.
pr_title = os.environ["PR_TITLE"]
pr_number = os.environ["PR_NUMBER"]
comment = os.environ.get("COMMENT", "")
workspace_path = Path(os.environ.get("GITHUB_WORKSPACE", ""))

assert pr_title, pr_title
assert pr_number, pr_number

# Trim the PR number added when GitHub squashes commits, e.g. "Template: Updated (#2026)"
pr_title = pr_title.removesuffix(f" (#{pr_number})")

changelog_path = workspace_path / "CHANGELOG.md"

if any(
line in pr_title.lower()
for line in [
"skip changelog",
"skip change log",
"no changelog",
"no change log",
"bump version",
]
):
print("Skipping changelog update")
sys.exit(0)


def _determine_change_type(pr_title) -> tuple[str, str]:
"""
Determine the type of the PR: Template, Download, Linting, Modules, Subworkflows, or General
Returns a tuple of the section name and the module info.
"""
sections = {
"Template": "### Template",
"Download": "### Download",
"Linting": "### Linting",
"Modules": "### Modules",
"Subworkflows": "### Subworkflows",
}
current_section_header = "### General"
current_section = "General"

# Check if the PR in any of the sections.
for section, section_header in sections.items():
# check if the PR title contains any of the section headers, with some loose matching, e.g. removing plural and suffixes
if re.sub(r"s$", "", section.lower().replace("ing", "")) in pr_title.lower():
current_section_header = section_header
current_section = section
print(f"Detected section: {current_section}")
return current_section, current_section_header


# Determine the type of the PR
section, section_header = _determine_change_type(pr_title)

# Remove section indicator from the PR title.
pr_title = re.sub(rf"{section}[:\s]*", "", pr_title, flags=re.IGNORECASE)

# Prepare the change log entry.
pr_link = f"([#{pr_number}]({REPO_URL}/pull/{pr_number}))"

# Handle manual changelog entries through comments.
if comment := comment.removeprefix("@nf-core-bot changelog").strip():
print(f"Adding manual changelog entry: {comment}")
pr_title = comment
new_lines = [
f"- {pr_title} {pr_link}\n",
]

print(f"Adding new lines into section '{section}':\n" + "".join(new_lines))

# Finally, updating the changelog.
# Read the current changelog lines. We will print them back as is, except for one new
# entry, corresponding to this new PR.
with changelog_path.open("r") as f:
orig_lines = f.readlines()
updated_lines: List[str] = []


def _skip_existing_entry_for_this_pr(line: str, same_section: bool = True) -> str:
if line.strip().endswith(pr_link):
print(f"Found existing entry for this pull request #{pr_number}:")
existing_lines = [line]
if new_lines and new_lines == existing_lines and same_section:
print(f"Found existing identical entry for this pull request #{pr_number} in the same section:")
print("".join(existing_lines))
sys.exit(0) # Just leaving the CHANGELOG intact
else:
print(
f"Found existing entry for this pull request #{pr_number}. It will be replaced and/or moved to proper section"
)
print("".join(existing_lines))
for _ in range(len(existing_lines)):
try:
line = orig_lines.pop(0)
except IndexError:
break
return line


# Find the next line in the change log that matches the pattern "# nf-core/tools v.*dev"
# If it doesn't exist, exist with code 1 (let's assume that a new section is added
# manually or by CI when a release is pushed).
# Else, find the next line that matches the `section` variable, and insert a new line
# under it (we also assume that section headers are added already).
inside_version_dev = False
already_added_entry = False
while orig_lines:
line = orig_lines.pop(0)

# If the line already contains a link to the PR, don't add it again.
line = _skip_existing_entry_for_this_pr(line, same_section=False)

if line.startswith("# ") and not line.strip() == "# nf-core/tools: Changelog": # Version header, e.g. "# v2.12dev"
print(f"Found version header: {line.strip()}")
updated_lines.append(line)

# Parse version from the line `# v2.12dev` or
# `# [v2.11.1 - Magnesium Dragon Patch](https://github.com/nf-core/tools/releases/tag/2.11) - [2023-12-20]` ...
if not (m := re.match(r".*(v\d+\.\d+(dev)?).*", line)):
print(f"Cannot parse version from line {line.strip()}.", file=sys.stderr)
sys.exit(1)
version = m.group(1)

if not inside_version_dev:
if not version.endswith("dev"):
print(
"Can't find a 'dev' version section in the changelog. Make sure "
"it's created, and all the required sections, e.g. `### Template` are created under it .",
file=sys.stderr,
)
sys.exit(1)
inside_version_dev = True
else:
if version.endswith("dev"):
print(
f"Found another 'dev' version section in the changelog, make"
f"sure to change it to a 'release' stable version tag. "
f"Line: {line.strip()}",
file=sys.stderr,
)
sys.exit(1)
# We are past the dev version, so just add back the rest of the lines and break.
while orig_lines:
line = orig_lines.pop(0)
line = _skip_existing_entry_for_this_pr(line, same_section=False)
if line:
updated_lines.append(line)
break
continue
print(f"Found line: {line.strip()}")
print(f"inside_version_dev: {inside_version_dev}")
print(f"section_header: {section_header}")
if inside_version_dev and line.lower().startswith(section_header.lower()): # Section of interest header
print(f"Found section header: {line.strip()}")
if already_added_entry:
print(
f"Already added new lines into section {section}, is the section duplicated?",
file=sys.stderr,
)
sys.exit(1)
updated_lines.append(line)
# Collecting lines until the next section.
section_lines: List[str] = []
while True:
line = orig_lines.pop(0)
if line.startswith("#"):
print(f"Found the next section header: {line.strip()}")
# Found the next section header, so need to put all the lines we collected.
updated_lines.append("\n")
_updated_lines = [_l for _l in section_lines + new_lines if _l.strip()]
updated_lines.extend(_updated_lines)
updated_lines.append("\n")
if new_lines:
print(f"Updated {changelog_path} section '{section}' with lines:\n" + "".join(new_lines))
else:
print(f"Removed existing entry from {changelog_path} section '{section}'")
already_added_entry = True
# Pushing back the next section header line
orig_lines.insert(0, line)
break
# If the line already contains a link to the PR, don't add it again.
line = _skip_existing_entry_for_this_pr(line, same_section=True)
section_lines.append(line)
else:
updated_lines.append(line)


def collapse_newlines(lines: List[str]) -> List[str]:
updated = []
for idx in range(len(lines)):
if idx != 0 and not lines[idx].strip() and not lines[idx - 1].strip():
continue
updated.append(lines[idx])
return updated


updated_lines = collapse_newlines(updated_lines)


# Finally, writing the updated lines back.
with changelog_path.open("w") as f:
f.writelines(updated_lines)
Loading
Loading