Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add configuration option for dependabot labels #238

Merged
merged 6 commits into from
Oct 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ This action can be configured to authenticate with GitHub App Installation or Pe
| `REPO_SPECIFIC_EXEMPTIONS` | False | "" | A list of repositories that should be exempt from specific package ecosystems similar to EXEMPT_ECOSYSTEMS but those apply to all repositories. ex: `org1/repo1:docker,github-actions;org1/repo2:pip` would set exempt_ecosystems for `org1/repo1` to be `['docker', 'github-actions']`, and for `org1/repo2` it would be `['pip']`, while for every other repository evaluated, it would be set by the env variable `EXEMPT_ECOSYSTEMS`. NOTE: If you want specific exemptions to be added on top of the already specified global exemptions, you need to add the global exemptions to each repo specific exemption. |
| `SCHEDULE` | False | 'weekly' | Schedule interval by which to check for dependency updates via Dependabot. Allowed values are 'daily', 'weekly', or 'monthly' |
| `SCHEDULE_DAY` | False | '' | Scheduled day by which to check for dependency updates via Dependabot. Allowed values are days of the week full names (i.e., 'monday') |
| `LABELS` | False | "" | A comma separated list of labels that should be added to pull requests opened by dependabot. |

### Example workflows

Expand Down
27 changes: 24 additions & 3 deletions dependabot_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@


def make_dependabot_config(
ecosystem, group_dependencies, indent, schedule, schedule_day
ecosystem, group_dependencies, indent, schedule, schedule_day, labels
) -> str:
"""
Make the dependabot configuration for a specific package ecosystem
Expand All @@ -16,6 +16,7 @@ def make_dependabot_config(
indent: the number of spaces to indent the dependabot configuration ex: " "
schedule: the schedule to run dependabot ex: "daily"
schedule_day: the day of the week to run dependabot ex: "monday" if schedule is "weekly"
labels: the list of labels to be added to dependabot configuration

Returns:
str: the dependabot configuration for the package ecosystem
Expand All @@ -31,6 +32,13 @@ def make_dependabot_config(
{indent}{indent}{indent}interval: '{schedule}'{schedule_day_line}
"""

if labels:
dependabot_config += f"""{indent}{indent}labels:
"""
for label in labels:
dependabot_config += f"""{indent}{indent}{indent}- \"{label}\"
"""

if group_dependencies:
dependabot_config += f"""{indent}{indent}groups:
{indent}{indent}{indent}production-dependencies:
Expand All @@ -49,6 +57,7 @@ def build_dependabot_file(
existing_config,
schedule,
schedule_day,
labels,
) -> str | None:
"""
Build the dependabot.yml file for a repo based on the repo contents
Expand All @@ -61,6 +70,7 @@ def build_dependabot_file(
existing_config: the existing dependabot configuration file or None if it doesn't exist
schedule: the schedule to run dependabot ex: "daily"
schedule_day: the day of the week to run dependabot ex: "monday" if schedule is "daily"
labels: the list of labels to be added to dependabot configuration

Returns:
str: the dependabot.yml file for the repo
Expand Down Expand Up @@ -144,7 +154,12 @@ def build_dependabot_file(
if dependabot_file and dependabot_file[-1] != "\n":
dependabot_file += "\n"
dependabot_file += make_dependabot_config(
manager, group_dependencies, indent, schedule, schedule_day
manager,
group_dependencies,
indent,
schedule,
schedule_day,
labels,
)
break
except github3.exceptions.NotFoundError:
Expand All @@ -157,7 +172,12 @@ def build_dependabot_file(
if file[0].endswith(".tf"):
package_managers_found["terraform"] = True
dependabot_file += make_dependabot_config(
"terraform", group_dependencies, indent, schedule, schedule_day
"terraform",
group_dependencies,
indent,
schedule,
schedule_day,
labels,
)
break
except github3.exceptions.NotFoundError:
Expand All @@ -173,6 +193,7 @@ def build_dependabot_file(
indent,
schedule,
schedule_day,
labels,
)
break
except github3.exceptions.NotFoundError:
Expand Down
8 changes: 8 additions & 0 deletions env.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ def get_env_vars(
dict,
str,
str,
list[str],
]:
"""
Get the environment variables for use in the action.
Expand Down Expand Up @@ -148,6 +149,7 @@ def get_env_vars(
repo_specific_exemptions (dict): A dictionary of per repository ecosystem exemptions
schedule (str): The schedule to run the action on
schedule_day (str): The day of the week to run the action on if schedule is daily
labels (list[str]): A list of labels to be added to dependabot configuration
"""

if not test:
Expand Down Expand Up @@ -324,6 +326,11 @@ def get_env_vars(
"SCHEDULE_DAY environment variable not 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', or 'sunday'"
)

labels_str = os.getenv("LABELS")
labels_list = []
if labels_str:
labels_list = [label.lower().strip() for label in labels_str.split(",")]

return (
organization,
repositories_list,
Expand All @@ -349,4 +356,5 @@ def get_env_vars(
repo_specific_exemptions,
schedule,
schedule_day,
labels_list,
)
2 changes: 2 additions & 0 deletions evergreen.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ def main(): # pragma: no cover
repo_specific_exemptions,
schedule,
schedule_day,
labels,
) = env.get_env_vars()

# Auth to GitHub.com or GHE
Expand Down Expand Up @@ -114,6 +115,7 @@ def main(): # pragma: no cover
existing_config,
schedule,
schedule_day,
labels,
)

if dependabot_file is None:
Expand Down
Loading
Loading