@@ -27765,6 +27765,8 @@ async function composePrBody(group) {
2776527765}
2776627766
2776727767// src/main.ts
27768+ var VALID_UPDATE_TYPES = ['patch', 'minor', 'major'];
27769+ var VALID_AUTO_MERGE = ['none', 'patch', 'minor'];
2776827770var UPDATE_TYPE_RANK2 = {
2776927771 patch: 0,
2777027772 minor: 1,
@@ -27775,6 +27777,16 @@ var AUTO_MERGE_THRESHOLD = {
2777527777 patch: 0,
2777627778 minor: 1,
2777727779};
27780+ function parseJsonInput(inputName, raw) {
27781+ try {
27782+ return JSON.parse(raw);
27783+ } catch {
27784+ throw new Error(
27785+ `Invalid JSON in '${inputName}' input: ${raw}
27786+ Please check that it is valid JSON.`,
27787+ );
27788+ }
27789+ }
2777827790function shouldAutoMerge(updateType, autoMerge) {
2777927791 return (
2778027792 UPDATE_TYPE_RANK2[updateType] <= (AUTO_MERGE_THRESHOLD[autoMerge] ?? -1)
@@ -27801,6 +27813,7 @@ async function processGroup({
2780127813 teamReviewers,
2780227814 canCreateNewPr,
2780327815 cwd,
27816+ dryRun,
2780427817}) {
2780527818 const { owner, repo, defaultBranch } = repoContext;
2780627819 core.info(`
@@ -27839,6 +27852,11 @@ Processing: ${group.name} (${group.highestUpdateType})`);
2783927852 core.info(` Skipping \u2014 open PR limit reached`);
2784027853 return false;
2784127854 }
27855+ if (dryRun) {
27856+ const action = hasExistingOpenPr ? 'update PR' : 'open PR';
27857+ core.info(` [DRY RUN] Would ${action} for branch \`${group.branchName}\``);
27858+ return !hasExistingOpenPr;
27859+ }
2784227860 await setupBranch({ branchName: group.branchName, defaultBranch, cwd });
2784327861 const touchedFiles = await bumpVersions(group.packages);
2784427862 if (touchedFiles.length === 0) {
@@ -27940,21 +27958,47 @@ async function run() {
2794027958 const teamReviewersRaw = core.getInput('team-reviewers') || '[]';
2794127959 const commitPrefix =
2794227960 core.getInput('commit-message-prefix') || 'chore(deps):';
27961+ const dryRun = core.getInput('dry-run') === 'true';
2794327962 const updateTypes = updateTypesRaw.split(',').map((s) => s.trim());
27944- const groups = JSON.parse(groupsRaw);
27963+ const invalidTypes = updateTypes.filter(
27964+ (t) => !VALID_UPDATE_TYPES.includes(t),
27965+ );
27966+ if (invalidTypes.length > 0) {
27967+ throw new Error(
27968+ `Invalid value(s) in 'update-types': ${invalidTypes.join(', ')}. Allowed values: patch, minor, major`,
27969+ );
27970+ }
27971+ if (!VALID_AUTO_MERGE.includes(autoMerge)) {
27972+ throw new Error(
27973+ `Invalid value for 'auto-merge': ${autoMerge}. Allowed values: none, patch, minor`,
27974+ );
27975+ }
2794527976 const maxOpenPrs = parseInt(maxOpenPrsInput, 10);
27946- const ignoreList = JSON.parse(ignoreRaw);
27947- const assignees = JSON.parse(assigneesRaw);
27948- const reviewers = JSON.parse(reviewersRaw);
27949- const teamReviewers = JSON.parse(teamReviewersRaw);
27977+ if (isNaN(maxOpenPrs) || maxOpenPrs < 0) {
27978+ throw new Error(
27979+ `Invalid value for 'max-open-prs': ${maxOpenPrsInput}. Must be a non-negative integer (0 = unlimited).`,
27980+ );
27981+ }
27982+ const groups = parseJsonInput('groups', groupsRaw);
27983+ const ignoreList = parseJsonInput('ignore', ignoreRaw);
27984+ const assignees = parseJsonInput('assignees', assigneesRaw);
27985+ const reviewers = parseJsonInput('reviewers', reviewersRaw);
27986+ const teamReviewers = parseJsonInput('team-reviewers', teamReviewersRaw);
2795027987 const cwd =
2795127988 workingDirectoryInput === '.' ? process.cwd() : workingDirectoryInput;
27989+ if (dryRun) {
27990+ core.info(
27991+ 'DRY RUN mode enabled \u2014 no branches, commits, or PRs will be created',
27992+ );
27993+ }
2795227994 const octokit = github.getOctokit(githubToken);
2795327995 const { owner, repo } = github.context.repo;
2795427996 const { data: repoData } = await octokit.rest.repos.get({ owner, repo });
2795527997 const defaultBranch = repoData.default_branch;
2795627998 const repoContext = { owner, repo, defaultBranch };
27957- await configureGit(cwd, owner, repo, githubToken);
27999+ if (!dryRun) {
28000+ await configureGit(cwd, owner, repo, githubToken);
28001+ }
2795828002 const { data: allOpenPrs } = await octokit.rest.pulls.list({
2795928003 owner,
2796028004 repo,
@@ -27996,6 +28040,7 @@ async function run() {
2799628040 teamReviewers,
2799728041 canCreateNewPr,
2799828042 cwd,
28043+ dryRun,
2799928044 });
2800028045 if (created) newPrsCreated++;
2800128046 }
0 commit comments