Skip to content
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
755ef9e
Bump version to 5.1.0dev
Aratz Jul 16, 2026
00df14a
Update CHANGELOG.md
Aratz Jul 16, 2026
e408fc3
Merge pull request #234 from Aratz/bump_5.1.0dev
Aratz Jul 16, 2026
1d0f4e8
Add release workflow
Aratz Jul 20, 2026
4753cd8
Update changelog
Aratz Jul 20, 2026
ca3965a
Document automation in contributing guidelines
Aratz Jul 20, 2026
53d856c
Merge pull request #235 from Aratz/feature/auto_release
Aratz Jul 21, 2026
e72e13e
Template update for nf-core/tools version 4.0.3
nf-core-bot Jul 24, 2026
277d4f0
Merge remote-tracking branch 'origin/dev' into nf-core-template-merge…
Aratz Aug 3, 2026
2935206
Merge pull request #236 from nf-core/nf-core-template-merge-4.0.3
Aratz Aug 3, 2026
6f5f693
Document DuckDB temporary storage environment variables.
johandahlberg Aug 3, 2026
217ac61
Update changelog with pr nbr
johandahlberg Aug 3, 2026
deaaa26
Update docs/usage.md
johandahlberg Aug 4, 2026
c3912d3
Automate back sync to dev after release
Aratz Aug 3, 2026
ecec143
Update documentation
Aratz Aug 4, 2026
3210936
Update changelog
Aratz Aug 4, 2026
ee62b07
Merge pull request #239 from Aratz/feature/auto_backsync
Aratz Aug 4, 2026
1619984
Merge branch 'dev' into add-info-on-tmp-dir-env-vars
johandahlberg Aug 4, 2026
1d7ba64
Fix formatting
johandahlberg Aug 4, 2026
fb54d3d
Merge pull request #238 from nf-core/add-info-on-tmp-dir-env-vars
johandahlberg Aug 4, 2026
4fc8f13
Update pixelator to 0.30.0
Aratz Aug 10, 2026
322caf3
Update pixelatorES to 0.12.0
Aratz Aug 10, 2026
a055c60
Migrate pixelator/sample_calling to version topic
Aratz Aug 10, 2026
1e4ca47
Update changelog
Aratz Aug 10, 2026
c42a315
Update snapshots
Aratz Aug 10, 2026
a429349
Remove meta files from snapshot
Aratz Aug 11, 2026
81e0d34
Merge pull request #240 from Aratz/update_pixelator
Aratz Aug 11, 2026
10a6903
Fix container override in sample calling
Aratz Aug 12, 2026
8f1f9b3
Update changelog
Aratz Aug 12, 2026
b6bcc6d
Merge pull request #241 from Aratz/fix/sample_calling_container
Aratz Aug 12, 2026
5554b47
Increase pna_graph_component_size_max_threshold to 1M
Aratz Aug 17, 2026
e2a8012
Update changelog
Aratz Aug 17, 2026
6419699
Merge pull request #243 from Aratz/fix/pna-3316_max_cells_threshold
Aratz Aug 17, 2026
57d7023
Finalize changelog
Aratz Aug 17, 2026
a8df0e8
Bump version to 5.0.1
Aratz Aug 17, 2026
46c0e22
Merge pull request #242 from Aratz/pre-release_5.0.1
Aratz Aug 19, 2026
f257d7f
Temporarily allow singularity tests to run on dev
Aratz May 19, 2026
216b484
Bump setup-apptainer to latest
Aratz Aug 20, 2026
04244ab
Revert "Temporarily allow singularity tests to run on dev"
Aratz Aug 20, 2026
ee3337d
Update changelog
Aratz Aug 20, 2026
071ad40
Update README.md
johandahlberg Aug 20, 2026
63e5acd
Merge pull request #246 from nf-core/fix-wrong-parameter-value-in-readme
Aratz Aug 20, 2026
81ed0ca
Merge pull request #245 from Aratz/dev
Aratz Aug 20, 2026
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
2 changes: 1 addition & 1 deletion .github/actions/nf-test/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ runs:

- name: Setup apptainer
if: contains(inputs.profile, 'singularity')
uses: eWaterCycle/setup-apptainer@3f706d898c9db585b1d741b4692e66755f3a1b40 # v2
uses: eWaterCycle/setup-apptainer@4bb22c52d4f63406c49e94c804632975787312b3 # v2.0.0

- name: Set up Singularity
if: contains(inputs.profile, 'singularity')
Expand Down
60 changes: 38 additions & 22 deletions .github/workflows/branch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,45 +2,61 @@ name: nf-core branch protection
# This workflow is triggered on PRs to `main`/`master` branch on the repository
# It fails when someone tries to make a PR against the nf-core `main`/`master` branch instead of `dev`
on:
pull_request_target:
pull_request:
branches:
- main
- master

permissions: {}

jobs:
test:
runs-on: ubuntu-latest
steps:
# PRs to the nf-core repo main/master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches
- name: Check PRs
if: github.repository == 'nf-core/pixelator'
env:
HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }}
run: |
{ [[ ${{github.event.pull_request.head.repo.full_name }} == nf-core/pixelator ]] && [[ $GITHUB_HEAD_REF == "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]]
{ [[ "$HEAD_REPO" == nf-core/pixelator ]] && [[ $GITHUB_HEAD_REF == "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]]

# If the above check failed, post a comment on the PR explaining the failure
# NOTE - this doesn't currently work if the PR is coming from a fork, due to limitations in GitHub actions secrets
- name: Post PR comment
# If the above check failed, build a comment to be posted by the shared poster workflow
- name: Build PR comment
if: failure()
uses: mshick/add-pr-comment@8e4927817251f1ff60c001f04568532b38e0b4a0 # v3
with:
message: |
## This PR is against the `${{github.event.pull_request.base.ref}}` branch :x:
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
BASE_REF: ${{ github.event.pull_request.base.ref }}
HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }}
PR_USER: ${{ github.event.pull_request.user.login }}
run: |
mkdir -p pr-comment
echo "$PR_NUMBER" > pr-comment/pr_number.txt
echo "branch" > pr-comment/header.txt
cat > pr-comment/comment.md <<EOF
## This PR is against the \`${BASE_REF}\` branch :x:

* Do not close this PR
* Click _Edit_ and change the `base` to `dev`
* This CI test will remain failed until you push a new commit
* Do not close this PR
* Click _Edit_ and change the \`base\` to \`dev\`
* This CI test will remain failed until you push a new commit

---
---

Hi @${{ github.event.pull_request.user.login }},
Hi @${PR_USER},

It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) ${{github.event.pull_request.base.ref}} branch.
The ${{github.event.pull_request.base.ref}} branch on nf-core repositories should always contain code from the latest release.
Because of this, PRs to ${{github.event.pull_request.base.ref}} are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch.
It looks like this pull-request is has been made against the [${HEAD_REPO}](https://github.com/${HEAD_REPO}) ${BASE_REF} branch.
The ${BASE_REF} branch on nf-core repositories should always contain code from the latest release.
Because of this, PRs to ${BASE_REF} are only allowed if they come from the [${HEAD_REPO}](https://github.com/${HEAD_REPO}) \`dev\` branch.

You do not need to close this PR, you can change the target branch to `dev` by clicking the _"Edit"_ button at the top of this page.
Note that even after this, the test will continue to show as failing until you push a new commit.
You do not need to close this PR, you can change the target branch to \`dev\` by clicking the _"Edit"_ button at the top of this page.
Note that even after this, the test will continue to show as failing until you push a new commit.

Thanks again for your contribution!
repo-token: ${{ secrets.GITHUB_TOKEN }}
allow-repeats: false
Thanks again for your contribution!
EOF

- name: Upload PR comment artifact
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: pr-comment
path: pr-comment/
18 changes: 18 additions & 0 deletions .github/workflows/linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,21 @@ jobs:
lint_log.txt
lint_results.md
PR_number.txt

# Build a comment for the shared pr-comment.yml poster to publish on the PR
- name: Prepare PR comment
if: ${{ always() }}
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
run: |
mkdir -p pr-comment
echo "$PR_NUMBER" > pr-comment/pr_number.txt
echo "lint" > pr-comment/header.txt
[ -f lint_results.md ] && cp lint_results.md pr-comment/comment.md || true

- name: Upload PR comment artifact
if: ${{ always() }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: pr-comment
path: pr-comment/
28 changes: 0 additions & 28 deletions .github/workflows/linting_comment.yml

This file was deleted.

57 changes: 57 additions & 0 deletions .github/workflows/nf-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,22 @@ jobs:
fi
fi

# continue-on-error keeps latest-everything from failing the job, so it never shows up in
# `needs.nf-test.result` downstream and CI stays green. Surface it via a PR comment instead;
# other NXF_VER failures already fail the job/CI directly, so no comment is needed for those.
- name: Prepare PR comment fragment
if: ${{ always() && steps.run_nf_test.outcome == 'failure' && matrix.NXF_VER == 'latest-everything' }}
run: |
mkdir -p pr-comment-fragment
echo "* ❌ \`${{ matrix.profile }}\` | \`${{ matrix.NXF_VER }}\` | Shard ${{ matrix.shard }}/${{ env.TOTAL_SHARDS }}" > pr-comment-fragment/fragment.md

- name: Upload PR comment fragment
if: ${{ always() && steps.run_nf_test.outcome == 'failure' && matrix.NXF_VER == 'latest-everything' }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: pr-comment-fragment-${{ strategy.job-index }}
path: pr-comment-fragment/

confirm-pass:
needs: [nf-test]
if: always()
Expand All @@ -144,3 +160,44 @@ jobs:
echo "DEBUG: toJSON(needs) = ${{ toJSON(needs) }}"
echo "DEBUG: toJSON(needs.*.result) = ${{ toJSON(needs.*.result) }}"
echo "::endgroup::"

- name: Download PR comment fragments
if: ${{ always() }}
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
continue-on-error: true
with:
pattern: pr-comment-fragment-*
path: pr-comment-fragments
merge-multiple: true

# Build a comment for the shared pr-comment.yml poster to publish on the PR.
# Based on the fragments above (not needs.*.result) so non-blocking failures are still reported.
- name: Prepare PR comment
if: ${{ always() }}
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
run: |
mkdir -p pr-comment
echo "$PR_NUMBER" > pr-comment/pr_number.txt
echo "nf-test" > pr-comment/header.txt
if [ -d pr-comment-fragments ] && [ -n "$(ls -A pr-comment-fragments)" ]; then
{
echo "## ❌ nf-test failed with latest Nextflow version"
echo ""
echo "> [!NOTE]"
echo "> Tests with Nextflow's latest version failed but it will not cause a CI workflow failure."
echo "> Please check if the failure is expected with newer (edge-)releases of Nextflow or if it needs fixing."
echo ""
cat pr-comment-fragments/*.md
echo ""
echo "See the [full run](${RUN_URL}) for details."
} > pr-comment/comment.md
fi

- name: Upload PR comment artifact
if: ${{ always() }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: pr-comment
path: pr-comment/
98 changes: 98 additions & 0 deletions .github/workflows/post-release-sync.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: post-release-sync
# After a release is published, open a PR that merges master back into dev and
# bumps the pipeline to the next minor dev version (x.y.z -> x.(y+1).0dev).
on:
release:
types: [published]
workflow_dispatch:
inputs:
released_version:
description: "Released version to sync back (e.g. 5.1.0). Defaults to the version on master."
required: false

concurrency:
group: post-release-sync
cancel-in-progress: false

jobs:
back-sync:
if: github.repository == 'nf-core/pixelator'
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Check out dev
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
ref: dev
fetch-depth: 0
token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }}

- name: Compute versions
id: v
env:
TAG: ${{ github.event.release.tag_name }}
INPUT: ${{ github.event.inputs.released_version }}
run: |
RELEASED="${TAG:-$INPUT}"
if [[ -z "$RELEASED" ]]; then
RELEASED="$(grep -oP "^\s*version\s*=\s*'\K[0-9][^']*" nextflow.config)"
fi
RELEASED="${RELEASED#v}"
IFS=. read -r MAJ MIN _ <<< "$RELEASED"
echo "released=$RELEASED" >> "$GITHUB_OUTPUT"
echo "next=${MAJ}.$((MIN + 1)).0dev" >> "$GITHUB_OUTPUT"

- name: Configure git and create branch
run: |
git config user.email "core@nf-co.re"
git config user.name "nf-core-bot"
git switch -c "post-release_${{ steps.v.outputs.released }}"
git fetch origin master
git merge --no-edit origin/master

- name: Install Nextflow
uses: nf-core/setup-nextflow@b4ec1bc7c16a94435159de94a05253542fddf6ef # v3

- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: "3.14"
architecture: "x64"

- name: Setup uv
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0

- name: Read .nf-core.yml
uses: pietrobolcato/action-read-yaml@9f13718d61111b69f30ab4ac683e67a56d254e1d # 1.1.0
id: read_yml
with:
config: ${{ github.workspace }}/.nf-core.yml

- name: Install nf-core tools
run: uv tool install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }}

- name: Bump version
run: nf-core pipelines bump-version "${{ steps.v.outputs.next }}"

- name: Update test snapshots
run: |
sed -i -E 's#("nf-core/pixelator": ")v[^"]*#\1v${{ steps.v.outputs.next }}#' tests/*.nf.test.snap

- name: Add CHANGELOG section
run: |
HEADER="## [[${{ steps.v.outputs.next }}](\$tag_url)] - \$date"
awk -v h="$HEADER" '!ins && /^## \[/ {print h; print ""; ins=1} {print}' CHANGELOG.md > CHANGELOG.tmp
mv CHANGELOG.tmp CHANGELOG.md

- name: Commit, push and open PR
env:
GH_TOKEN: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }}
run: |
BR="post-release_${{ steps.v.outputs.released }}"
git add -A
git commit -m "[automated] Post-release sync: bump to ${{ steps.v.outputs.next }}"
git push origin "$BR"
gh pr create --base dev --head "$BR" \
--title "Post-release sync: bump to ${{ steps.v.outputs.next }}" \
--body "Automated back-sync of master into dev after release ${{ steps.v.outputs.released }}, bumping the development version to ${{ steps.v.outputs.next }}."
82 changes: 82 additions & 0 deletions .github/workflows/pr-comment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Post PR comment
# Shared, privileged comment poster.
#
# This is the single workflow that runs with a write token. It is triggered
# after any of the listed "producer" workflows complete on a pull request.
# Each producer runs untrusted PR code (if any) with a read-only token and
# uploads a `pr-comment` artifact describing the comment to post; this workflow
# only ever reads that plain-text artifact, so no PR code is executed here.
#
# Artifact contract (uploaded by producers under the name `pr-comment`):
# pr_number.txt - the pull request number
# header.txt - sticky-comment identifier (keeps comment types separate)
# comment.md - the Markdown body (omit the file to post nothing)

on:
workflow_run:
workflows:
- "nf-core linting"
- "nf-core template version comment"
- "nf-core branch protection"
- "Run nf-test"

permissions:
actions: read
contents: read
pull-requests: write

jobs:
post-comment:
runs-on: ubuntu-latest
if: github.event.workflow_run.event == 'pull_request'
steps:
- name: Download PR comment artifact
uses: dawidd6/action-download-artifact@b6e2e70617bc3265edd6dab6c906732b2f1ae151 # v21
with:
run_id: ${{ github.event.workflow_run.id }}
name: pr-comment
path: pr-comment
if_no_artifact_found: ignore

- name: Read comment metadata
id: meta
run: |
echo "::group::Downloaded pr-comment contents"
ls -la pr-comment 2>/dev/null || echo "No pr-comment/ directory was downloaded."
echo "::endgroup::"

if [ ! -d pr-comment ]; then
echo "No pr-comment artifact found; nothing to post."
exit 0
fi

if [ ! -f pr-comment/comment.md ]; then
echo "Artifact present but no comment.md; nothing to post."
exit 0
fi

pr_number=$(cat pr-comment/pr_number.txt)
header=$(cat pr-comment/header.txt)
echo "Found comment.md (header='$header', pr_number='$pr_number')."

# Guard against anything unexpected ending up in the PR number.
case "$pr_number" in
''|*[!0-9]*)
echo "Invalid PR number: '$pr_number'"
exit 1
;;
esac

echo "pr_number=$pr_number" >> "$GITHUB_OUTPUT"
echo "header=$header" >> "$GITHUB_OUTPUT"
echo "post=true" >> "$GITHUB_OUTPUT"
echo "Will post comment to PR #${pr_number}."

- name: Post PR comment
if: steps.meta.outputs.post == 'true'
uses: marocchino/sticky-pull-request-comment@5770ad5eb8f42dd2c4f34da00c94c5381e49af88 # v3.0.5
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
number: ${{ steps.meta.outputs.pr_number }}
header: ${{ steps.meta.outputs.header }}
path: pr-comment/comment.md
Loading
Loading