diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml index 9ecda31d35..150124e6b7 100644 --- a/.github/workflows/claude.yml +++ b/.github/workflows/claude.yml @@ -14,14 +14,11 @@ concurrency: jobs: claude-code-action: - # Three guards. The actor check breaks the feedback loop: this workflow - # fires on pull_request_review, and Claude's own review body usually echoes - # the @claude mention that triggered it. The author_association check keeps - # the run from starting at all for a drive-by mention — this is a public - # repository, the action rejects anyone without write access anyway, and - # failing there costs a runner and leaves a red X on the pull request. And - # the issue_comment arm requires a pull_request payload, so a mention on a - # plain issue does not start a review with no diff to read. + # Three guards. The actor check breaks the feedback loop: Claude's own + # review echoes the @claude mention that triggered it. author_association + # is just a cheap pre-filter — real authorization is the Authorize step + # below. The issue_comment arm requires a pull_request payload, so a + # mention on a plain issue doesn't start a review. if: | (github.actor != 'claude[bot]') && contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association || github.event.review.author_association) @@ -41,8 +38,39 @@ jobs: # warns and skips, and Claude cannot see whether the build passed. actions: read id-token: write + # Every step after Authorize must carry the authorized==true guard (or + # the complementary ==false path for the reject reply). A step added + # later without it would run for an unauthorized actor. steps: + - name: Authorize + id: authorize + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO: ${{ github.repository }} + ACTOR: ${{ github.event.comment.user.login || github.event.review.user.login }} + run: | + # author_association is a comment property, not access — ask GitHub. + # `.permission` is admin/write/read/none only (maintain maps to write). + permission=$(gh api "repos/$REPO/collaborators/$ACTOR/permission" --jq '.permission') + echo "$ACTOR has '$permission' permission on $REPO" + if [ "$permission" = "admin" ] || [ "$permission" = "write" ]; then + echo "authorized=true" >> "$GITHUB_OUTPUT" + else + echo "authorized=false" >> "$GITHUB_OUTPUT" + fi + + - name: Report unauthorized + if: ${{ steps.authorize.outputs.authorized == 'false' }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO: ${{ github.repository }} + PR_NUMBER: ${{ github.event.issue.number || github.event.pull_request.number }} + run: | + gh pr comment "$PR_NUMBER" --repo "$REPO" --body \ + "Only maintainers with write access can trigger a Claude review." + - name: Checkout PR head + if: ${{ steps.authorize.outputs.authorized == 'true' }} uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: # Agent mode performs no branch setup of its own (unlike tag mode), and @@ -56,6 +84,7 @@ jobs: persist-credentials: false - name: Run Claude PR Review + if: ${{ steps.authorize.outputs.authorized == 'true' }} uses: anthropics/claude-code-action@239e3a730883eeb5c53db12b0fc9573b3024b126 # v1.0.191 timeout-minutes: 60 with: diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d195af746..637c77034b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,95 @@ # Nextflow change-log +## [Version 26.08.0-edge](https://github.com/nextflow-io/nextflow/releases/tag/v26.08.0-edge) - 20 Aug 2026 + +- Accept http requesting-protocol for https proxy CONNECT tunnel auth (#7369) [cac2e0db6] +- Add --console=plain to gradle commands in Makefile (#7400) [ci fast] [40fc962a4] +- Add componentName to 'module view' command output (#7385) [ci fast] [0e1bf396d] +- Add note about AI co-authorship to CLAUDE.md [ci fast] (#7357) [d11c550d2] +- Add seqera.executor.maxCpusPerUser option (#7367) [ci fast] [a2ef3963e] +- Add smolvm container engine support (#7386) [ci fast] [5b23a4e97] +- Add `singularity.resourceLimits` config option (#7352) [98e8573ed] +- Agent primitive: AI agents as first-class Nextflow tasks (#7477) [b148cfbaf] +- Align Seqera executor maxSpotAttempts and Fusion handling (#7412) [ci fast] [22214c5ab] +- Bound Seqera executor scheduler requests with a request timeout (#7466) [ci fast] [ed08167fa] +- build(java): align to Java 25 toolchain, target Java 17 via --release (#7370) [9fc31ed00] +- Bump Groovy 4.0.33 [ci fast] (#7429) [c8800d84a] +- Bump netty and Apache HttpComponents to patched releases (#7484) [3aef1da9a] +- Cache the task context for `exec` tasks (#7499) [9eb270c5f] +- chore: Quick fix docs sidebar (#7431) [50561fb39] +- chore: update anthropics/claude-code-action action to v1.0.175 (#7359) [ci fast] [050da2432] +- chore: update anthropics/claude-code-action action to v1.0.180 (#7388) [ci fast] [4c57e54c2] +- chore: update anthropics/claude-code-action action to v1.0.183 (#7424) [ci fast] [55d340e82] +- chore: update anthropics/claude-code-action action to v1.0.185 (#7459) [ci fast] [0081db6e0] +- chore: update anthropics/claude-code-action action to v1.0.191 (#7490) [ci fast] [dd355446c] +- chore: update dependency @docusaurus/faster to v3.10.2 (#7360) [ci fast] [99e1943e2] +- chore: update dependency ch.qos.logback:logback-classic to v1.5.38 (#7361) [ci fast] [0e4e7065f] +- chore: update dependency ch.qos.logback:logback-core to v1.5.38 (#7362) [d9ce9e303] +- chore: update dependency com.azure:azure-identity to v1.18.4 (#7389) [ci fast] [353567cd6] +- chore: update dependency com.networknt:json-schema-validator to v1.5.9 (#7390) [ci fast] [5dc78a216] +- chore: update dependency fs-extra to v11.3.6 (#7391) [ci fast] [e84fae2fb] +- chore: update dependency io.seqera:npr-api to v0.25.1 (#7460) [ci fast] [5358bfb40] +- chore: update dependency io.seqera:npr-client to v0.25.1 (#7461) [ci fast] [613a1f282] +- chore: update dependency me.sunlan:antlr4 to v4.13.2.11 (#7425) [ci fast] [6f518eb7a] +- chore: update dependency me.sunlan:antlr4 to v4.13.2.13 (#7462) [ci fast] [ba553c1bb] +- chore: update dependency me.sunlan:antlr4 to v4.13.2.14 (#7491) [ci fast] [4877d1321] +- chore: update dependency node to v22.23.2 (#7492) [ci fast] [c86b0cc29] +- chore: update dependency org.jsoup:jsoup to v1.23.1 [security] (#7468) [ci fast] [76f40b463] +- chore: update module google.golang.org/grpc to v1.82.1 [security] (#7513) [ci fast] [02ef7bb39] +- ci(claude): turn the assistant into a reviewer that can approve (#7469) [ci skip] [1dbdef74e] +- Detect Azure virtual directories without a trailing slash (#6428) [b4ab2e165] +- docs: Clarify behavior of withName selectors (#7348) [eb0af8033] +- docs: cleanup and fix inconsistencies (#7415) [2f403c8f8] +- docs: document ConfigScope discovery rules (#7098) [89ef0c46c] +- docs: Move channel factories and operators to stdlib reference (#7414) [5fbcc8ddd] +- docs: Move CLI commands into separate pages (#7416) [71fce7839] +- docs: Move config scopes into separate pages (#7417) [a00130e25] +- docs: Move containuer runtimes into separate pages (#7439) [9332479d9] +- docs: Move executors into separate pages (#7441) [48d236748] +- docs: Move process directives into separate pages (#7454) [854a3247b] +- docs: Move Static Typing pages to dedicated section (#7270) [22d83bc14] +- docs: split stdlib docs into separate pages [13c56f411] +- docs: type annotation syntax for functions and variable declarations (#7407) [cac380217] +- docs: Update lineage record examples to the version/kind/spec envelope [ci skip] (#7496) [8773c3d6a] +- Document exit logic in task wrapper script (#7290) [b61eda21e] +- Drop transient object tags when publishing files to S3 (#7344) [f1f1e6012] +- Fix cache invalidation for module binaries (#6914) [029e52eef] +- Fix config rendering of nested closures (#7375) [f6684a30a] +- Fix function call in process directive value with v2 parser (#7374) [91004f7e7] +- Fix independently-verified findings from a security audit (#7503) [5400da660] +- Fix lint reporting of excluded paths (#7354) [b36bb3150] +- Fix negative duration error on short run (#7351) [6471c299f] +- Fix parameterized type cast in process body (#7382) [aaffabc6b] +- Fix PBS Pro server status query (#7366) [c7e02c061] +- Fix plugin blocks incorrectly merged in v2 config parser (#7350) [795d4872b] +- Fix publish mode override when re-publishing an existing file (#7364) [61243b0e2] +- Fix race condition calling workflow onComplete twice (#7349) [14d5f26c4] +- Fix spurious 'Unrecognized config option' warning for wave.build.compression and wave.build.conda (#7355) [37da32c7f] +- Fix tests failing on macOS and on hosts with NXF_REGISTRY_TOKEN [ci fast] (#7457) [ci fast] [a7a7d5350] +- Fix variable incorrectly resolved to included function name (#7358) [e98351e01] +- Fix workflow metadata when failOnIgnore is true (#7356) [686002287] +- fix: prevent world-readable race window when storing local secrets (#7307) [f520534d8] +- Guard trace log against string formatting errors (#7347) [8a0c9210c] +- Honor COLUMNS when determining ANSI output width (#7144) [3f69dcaaf] +- Pre-pull the integration tests container (#7432) [ci fast] [82f59c7b9] +- Preserve comments in formatter (#7346) [0fe6ef25d] +- Refactor HubOptions from a trait into a record (#7372) [cb222312c] +- Remove dead SpuriousDeps.cmdCloud reflection (#7371) [aa9e8752e] +- Report syntax error for unexpected character in gstring (#7353) [7fae3ff00] +- Report the task directives read while the command is rendered (#7506) [1b4e75729] +- Revert the stream swap after the redirect to .command.out and .command.err (#7300) [d97131928] +- Separate CLI from runtime (#5971) [1dc8cf68f] +- Split CLI config handling out of ConfigBuilder (#7373) [34ac1d14c] +- Stop fabricating a memory request for the Seqera executor (#7488) [ci fast] [cdf425437] +- Support authenticated forward HTTP/HTTPS proxies across the client stack (#7331) [064a03873] +- Treat a missing `k8s` config scope as an empty one (#7452) [ci fast] [568680fd9] +- Update CI bucket to s3://nextflow-oss-ci (#7440) [55a6932e1] +- Update the docs site dependencies to patched releases (#7486) [e5dfe3dc1] +- Use Platform user identity for the Seqera executor userName label [ci fast] (#7413) [1bb78e244] +- Use registry config for plugin repos (#7180) [2856de85f] +- Use the wiremock self-contained distribution in nf-tower (#7485) [3db6edfa2] +- Use `command -v` instead of `which` in the launcher Java lookup (#7433) [cd03dc35b] + ## [Version 26.07.0-edge](https://github.com/nextflow-io/nextflow/releases/tag/v26.07.0-edge) - 15 Jul 2026 - Add docker.cpuLimits config option (#7289) [60c7ae9a6] diff --git a/VERSION b/VERSION index 47d6296578..2b84f4c648 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -26.07.0-edge +26.08.0-edge diff --git a/modules/nextflow/src/main/resources/META-INF/build-info.properties b/modules/nextflow/src/main/resources/META-INF/build-info.properties index 1e405a1f3c..31d94aa0b3 100644 --- a/modules/nextflow/src/main/resources/META-INF/build-info.properties +++ b/modules/nextflow/src/main/resources/META-INF/build-info.properties @@ -1,4 +1,4 @@ build=0 -version=26.07.0-edge -timestamp=1784130477988 -commitId=6ffa1a7e3 +version=26.08.0-edge +timestamp=1787221769641 +commitId=85be50d16 diff --git a/modules/nextflow/src/main/resources/META-INF/plugins-info.txt b/modules/nextflow/src/main/resources/META-INF/plugins-info.txt index e84dc3b2ad..b749da30f3 100644 --- a/modules/nextflow/src/main/resources/META-INF/plugins-info.txt +++ b/modules/nextflow/src/main/resources/META-INF/plugins-info.txt @@ -1,12 +1,12 @@ -nf-agent-pi@0.5.0 +nf-agent-pi@0.5.1 nf-agent@0.1.0 -nf-amazon@3.10.1 -nf-azure@1.23.1 -nf-cloudcache@0.6.0 -nf-codecommit@0.6.0 -nf-console@1.3.0 -nf-google@1.27.4 -nf-k8s@1.5.5 -nf-seqera@0.23.0 -nf-tower@1.29.1 -nf-wave@1.21.1 \ No newline at end of file +nf-amazon@3.10.2 +nf-azure@1.23.2 +nf-cloudcache@0.6.1 +nf-codecommit@0.6.1 +nf-console@1.3.1 +nf-google@1.27.5 +nf-k8s@1.5.6 +nf-seqera@0.24.0 +nf-tower@1.29.2 +nf-wave@1.22.0 \ No newline at end of file diff --git a/nextflow b/nextflow index de9541b2b6..ed88e5f175 100755 --- a/nextflow +++ b/nextflow @@ -16,7 +16,7 @@ # [[ "$NXF_DEBUG" == 'x' ]] && set -x -NXF_VER=${NXF_VER:-'26.07.0-edge'} +NXF_VER=${NXF_VER:-'26.08.0-edge'} NXF_ORG=${NXF_ORG:-'nextflow-io'} NXF_HOME=${NXF_HOME:-$HOME/.nextflow} NXF_PROT=${NXF_PROT:-'https'} diff --git a/nextflow.md5 b/nextflow.md5 index c9440ad2a0..483255a3d8 100644 --- a/nextflow.md5 +++ b/nextflow.md5 @@ -1 +1 @@ -ee37af1c075613cf6df5c7700913652a +cdf0d93327a65255f70dc71f3e192ee5 diff --git a/nextflow.sha1 b/nextflow.sha1 index 872d7af14c..696b45847d 100644 --- a/nextflow.sha1 +++ b/nextflow.sha1 @@ -1 +1 @@ -a6e227c499be6a8ca9bf6c271b3dd684c7699505 +a88888d5978e6351a78531991f906120c68ac29 diff --git a/nextflow.sha256 b/nextflow.sha256 index 9bc99239cf..767fbcd382 100644 --- a/nextflow.sha256 +++ b/nextflow.sha256 @@ -1 +1 @@ -d4ab3bebc55d684a1b4b0eb8456f4cdb4fd2e51817f71461ef4bb1268394a6c2 +b421c5df2d3c6500598a6718f02aa5d40ed3bb5698a05973206bd6a8c48dc027 diff --git a/plugins/nf-agent-pi/Dockerfile b/plugins/nf-agent-pi/Dockerfile index 1b4d47ad7a..97b71fee08 100644 --- a/plugins/nf-agent-pi/Dockerfile +++ b/plugins/nf-agent-pi/Dockerfile @@ -18,10 +18,10 @@ # leg of a multi-arch build off QEMU. TARGETOS/TARGETARCH are supplied by BuildKit. # # Digest-pinned like the runtime base below, so the proxy the release publishes is built by a -# toolchain this repo names rather than by whatever `1.23-bookworm` points at that day. This is -# the OCI *index* digest (`docker buildx imagetools inspect golang:1.23-bookworm`), not a +# toolchain this repo names rather than by whatever `1.25-bookworm` points at that day. This is +# the OCI *index* digest (`docker buildx imagetools inspect golang:1.25-bookworm`), not a # per-architecture manifest digest: a manifest digest would pin the stage to one build host. -FROM --platform=$BUILDPLATFORM golang:1.23-bookworm@sha256:167053a2bb901972bf2c1611f8f52c44d5fe7e762e5cab213708d82c421614db AS agent-rpc +FROM --platform=$BUILDPLATFORM golang:1.25-bookworm@sha256:3b4a11519ad929d1e1d261a12cff056f0c85b735253d7d861346b9c6f8b36437 AS agent-rpc ARG TARGETOS ARG TARGETARCH diff --git a/plugins/nf-agent-pi/VERSION b/plugins/nf-agent-pi/VERSION index 8f0916f768..4b9fcbec10 100644 --- a/plugins/nf-agent-pi/VERSION +++ b/plugins/nf-agent-pi/VERSION @@ -1 +1 @@ -0.5.0 +0.5.1 diff --git a/plugins/nf-agent-pi/build.gradle b/plugins/nf-agent-pi/build.gradle index 9fe0ea845d..1fda56ee36 100644 --- a/plugins/nf-agent-pi/build.gradle +++ b/plugins/nf-agent-pi/build.gradle @@ -22,7 +22,7 @@ nextflowPlugin { // by BasePlugin.start(), so it must never exceed the root VERSION or the plugin cannot load // from this checkout. Bumping it to the release this plugin ships in is a release-phase step, // as CLAUDE.md's release process requires. - nextflowVersion = '25.08.0-edge' + nextflowVersion = '26.08.0-edge' provider = "${nextflowPluginProvider}" description = 'Provides a Pi-backed external agent runner for Nextflow agents' diff --git a/plugins/nf-agent-pi/changelog.txt b/plugins/nf-agent-pi/changelog.txt index a91a639e32..6d9ba6ac48 100644 --- a/plugins/nf-agent-pi/changelog.txt +++ b/plugins/nf-agent-pi/changelog.txt @@ -1,5 +1,9 @@ nf-agent-pi changelog ===================== +0.5.1 - 20 Aug 2026 +- Update google.golang.org/grpc to v1.82.1 to address a security advisory (#7513) [02ef7bb39] +- Move the Go builder stage to golang:1.25-bookworm, which the grpc bump requires [02ef7bb39] + 0.5.0 - 9 Aug 2026 - Bound the wait for the driver connection with a new `--connect-timeout` proxy flag, 30s by default, and fail the task naming the endpoint that was tried. The driver now INFERS its RPC diff --git a/plugins/nf-agent/build.gradle b/plugins/nf-agent/build.gradle index 05712f4b1d..f888e9fd36 100644 --- a/plugins/nf-agent/build.gradle +++ b/plugins/nf-agent/build.gradle @@ -19,7 +19,7 @@ plugins { } nextflowPlugin { - nextflowVersion = '25.08.0-edge' + nextflowVersion = '26.08.0-edge' provider = "${nextflowPluginProvider}" description = 'Provides a langchain4j-backed agent runner to execute Nextflow agents against an LLM'