Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

ci: a publish_snapshot.yml dry run still passes the Nexus secrets to the build

Open Beginner friendly
#7,319 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 2 days

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
74/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
github-actions, scala, yaml
Domain
ci-cd, security

Research direction

Read publish_snapshot.yml and inspect the Build and install step’s environment and the dry_run conditions described in the issue. Confirm how the workflow handles credentials for both dry runs and publishing runs, then make sure a dry run does not expose the Nexus secrets while normal publishing still can deploy; review the workflow diff for both paths.

Written by the indexing model from the issue text.

Description

area:ci enhancement priority:low requires-triage

What is the problem?

publish_snapshot.yml has a dry_run input that builds and verifies the jars without deploying them. A dry run skips the "Configure Maven server credentials" step and uses the install goal, but the Build and install step still sets both Nexus secrets in its environment:

      - name: Build and ${{ inputs.dry_run && 'install' || 'deploy' }}
        env:
          NEXUS_USER: ${{ secrets.NEXUS_USER }}
          NEXUS_PW: ${{ secrets.NEXUS_PW }}
          GOAL: ${{ inputs.dry_run && 'install' || 'deploy' }}

So a dry run is not credential-free. Maven, its plugins and the build scripts they run can all read NEXUS_USER and NEXUS_PW, though a dry run never needs them.

This is hardening, not a known leak. The secrets are repository Actions secrets, and anyone with write access can already run a modified workflow that uses them. The point is that a run advertised as safe to try, and one that changes allows in a fork (if: github.repository == 'apache/datafusion-comet' || inputs.dry_run), should not carry the publishing credentials at all.

Proposal

Make a dry run credential-free. The smallest change is to leave the variables empty when dry_run is set:

          NEXUS_USER: ${{ inputs.dry_run && '' || secrets.NEXUS_USER }}
          NEXUS_PW: ${{ inputs.dry_run && '' || secrets.NEXUS_PW }}

A stronger form builds and verifies the jars in one job with no secrets, uploads them, and deploys from a second job that has the secrets and runs only deploy on the verified output. That also keeps the credentials away from the five-variant clean and compile loop in a real run.

Raised in review of #7311, which does not touch this file.

Dominant language
Scala
Stars
1.3k
Forks
398
Avg merge
3d 4h
Merged PRs (30d)
363

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from apache/datafusion-comet

All issues in apache/datafusion-comet

Similar issues

More Scala issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.