Skip to content

Conversation

viveksinghggits
Copy link
Contributor

@viveksinghggits viveksinghggits commented Oct 9, 2025

Summary

Per current process when we try to release a version of the helm chart we create a PR to the mongodb/helm-charts repo. Since this is manual task, it's time consuming and error prone.
This PR tries to automate that manual task.

Proof of Work

The successful run here created the PR on helm chart repo successfully.

[2025/10/10 11:56:53.577] INFO     2025-10-10 09:56:53,577 [create_chart_release_pr]  Command succeeded
[2025/10/10 11:56:53.577] INFO     2025-10-10 09:56:53,577 [create_chart_release_pr]  Running command: git push -u origin mck-release-x.y.z in directory /data/mci/7faac8b315a48c50db2b095e7185d1ea/tmp/tmp0nfkyg_w/helm-charts
[2025/10/10 11:56:54.444] INFO     2025-10-10 09:56:54,443 [create_chart_release_pr]  Command succeeded
[2025/10/10 11:56:54.444] INFO     2025-10-10 09:56:54,444 [create_chart_release_pr]  Creating the pull request in the helm-charts repo.
[2025/10/10 11:56:55.762] INFO     2025-10-10 09:56:55,762 [create_chart_release_pr]  Successfully created Pull Request https://github.com/mongodb/helm-charts/pull/516
[2025/10/10 11:56:55.801] Finished command 'subprocess.exec' in function 'create_chart_release_pr' (step 3.2 of 3) in 2.73136881s.

Checklist

  • Have you linked a jira ticket and/or is the ticket in the title?
  • Have you checked whether your jira ticket required DOCSP changes?
  • Have you added changelog file?

@viveksinghggits viveksinghggits requested a review from a team as a code owner October 9, 2025 17:28
Copy link

github-actions bot commented Oct 9, 2025

⚠️ (this preview might not be accurate if the PR is not rebased on current master branch)

MCK 1.5.0 Release Notes

New Features

  • Improve automation agent certificate rotation: the agent now restarts automatically when its certificate is renewed, ensuring smooth operation without manual intervention and allowing seamless certificate updates without requiring manual Pod restarts.

Bug Fixes

  • MongoDBMultiCluster: fix resource stuck in Pending state if any clusterSpecList item has 0 members. After the fix, a value of 0 members is handled correctly, similarly to how it's done in the MongoDB resource.
  • MultiClusterSharded: Blocked removing non-zero member cluster from MongoDB resource. This prevents from scaling down member cluster without current configuration available, which could lead to unexpected issues.

@viveksinghggits viveksinghggits added the skip-changelog Use this label in Pull Request to not require new changelog entry file label Oct 10, 2025
@viveksinghggits viveksinghggits changed the title Automate PR creation to release helm chart using gh helm repo [CLOUDP-350567] Automate PR creation to release helm chart using gh helm repo Oct 10, 2025
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we move script to release/helm_charts subdir?

if not github_token:
logger.info("Warning: GH_TOKEN environment variable not set.")
pr_url = f"https://github.com/{REPO_NAME}/pull/new/{branch_name}"
logger.info(f"Please create the Pull Request manually by following the link:\n{pr_url}")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

after github_token is not found it should return

env:
GH_TOKEN: ${GH_TOKEN}
MCK_DIR: ${workdir}/src/github.com/mongodb/mongodb-kubernetes
binary: scripts/dev/run_python.sh scripts/create_chart_release_pr.py --chart_version ${RELEASE_OPERATOR_VERSION|*triggered_by_git_tag}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RELEASE_OPERATOR_VERSION is not there anymore, please use OPERATOR_VERSION instead

args = parser.parse_args()

chart_version = args.chart_version
branch_name = f"mck-release-{chart_version}"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

q: what happens if the previous mck-release-{chart_version} branch was merged and we want to make a fix to the same helm chart version? Will this work?

chart_version = args.chart_version
branch_name = f"mck-release-{chart_version}"

workdir = os.environ.get("MCK_DIR")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we actually need this specified? Cannot we just call pathlib.Path().resolve()?

If we run the script locally, it working dir should be proper one. If we run the script on evg host we just need to set working_dir: src/github.com/mongodb/mongodb-kubernetes and it will also work.

run_command(["git", "add", "."], cwd=helm_repo_path)
run_command(["git", "commit", "-m", commit_message], cwd=helm_repo_path)

if github_token:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would check for github_token in the beginning and later just assume it is set


run_command(["git", "push", "-u", "origin", branch_name], cwd=helm_repo_path)

create_pull_request(branch_name, chart_version)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If create_pull_request returns 0 or 1 in case of errors we should propagate the result to main. Currently the result is swallowed.

Copy link
Collaborator

@MaciejKaras MaciejKaras left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code generally looks good, but I have two general comments:

  • instead of logging error and returning the error code, it's easier to just repackage the error and raise it again:
except GithubException as e:
    raise Exception(f"ERROR: Could not create Pull Request. GitHub API returned an error: {e.status}, details: {e.data}, original error: {e}")
  • the main method does a little too much. It should only handle flags parsing and validation. After that call nested method with validated args that does the hard work.

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

Labels

skip-changelog Use this label in Pull Request to not require new changelog entry file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants